From 86dc7cc804d47d33aca7daf8ddf4107d6eaa5f3c Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 29 Nov 2023 13:34:25 -0500 Subject: [PATCH 001/507] Kafka init Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- .../assigned_hostgroups.local.map.yaml | 1 + pillar/kafka/nodes.sls | 30 +++++ pillar/logstash/nodes.sls | 2 +- pillar/top.sls | 10 ++ salt/allowed_states.map.jinja | 11 +- salt/docker/defaults.yaml | 8 ++ salt/docker/soc_docker.yaml | 1 + salt/firewall/containers.map.jinja | 5 + salt/firewall/defaults.yaml | 94 +++++++++++++ salt/firewall/soc_firewall.yaml | 64 +++++++++ salt/kafka/config.sls | 101 ++++++++++++++ salt/kafka/enabled.sls | 46 +++++++ salt/kafka/etc/server.properties.jinja | 123 ++++++++++++++++++ salt/kafka/init.sls | 9 ++ salt/kafka/sostatus.sls | 21 +++ salt/kafka/storage.sls | 31 +++++ .../sbin_jinja/so-kafka-generate-keystore | 16 +++ salt/logstash/defaults.yaml | 4 + salt/logstash/enabled.sls | 5 +- .../config/so/0800_input_kafka.conf.jinja | 26 ++++ .../config/so/0899_output_kafka.conf.jinja | 22 ++++ salt/logstash/soc_logstash.yaml | 2 + salt/manager/tools/sbin/so-firewall-minion | 3 + salt/manager/tools/sbin/so-kafka-clusterid | 22 ++++ salt/manager/tools/sbin/so-minion | 4 + salt/ssl/init.sls | 122 +++++++++++++++++ salt/ssl/remove.sls | 17 +++ salt/top.sls | 10 ++ salt/vars/kafkanode.map.jinja | 1 + setup/so-functions | 8 +- setup/so-setup | 10 ++ setup/so-whiptail | 5 +- 32 files changed, 828 insertions(+), 6 deletions(-) create mode 100644 pillar/kafka/nodes.sls create mode 100644 salt/kafka/config.sls create mode 100644 salt/kafka/enabled.sls create mode 100644 salt/kafka/etc/server.properties.jinja create mode 100644 salt/kafka/init.sls create mode 100644 salt/kafka/sostatus.sls create mode 100644 salt/kafka/storage.sls create mode 100644 salt/kafka/tools/sbin_jinja/so-kafka-generate-keystore create mode 100644 salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja create mode 100644 salt/logstash/pipelines/config/so/0899_output_kafka.conf.jinja create mode 100644 salt/manager/tools/sbin/so-kafka-clusterid create mode 100644 salt/vars/kafkanode.map.jinja diff --git a/files/firewall/assigned_hostgroups.local.map.yaml b/files/firewall/assigned_hostgroups.local.map.yaml index 07f389af0..c6eb199c3 100644 --- a/files/firewall/assigned_hostgroups.local.map.yaml +++ b/files/firewall/assigned_hostgroups.local.map.yaml @@ -21,3 +21,4 @@ role: standalone: searchnode: sensor: + kafkanode: \ No newline at end of file diff --git a/pillar/kafka/nodes.sls b/pillar/kafka/nodes.sls new file mode 100644 index 000000000..a7d97ac9c --- /dev/null +++ b/pillar/kafka/nodes.sls @@ -0,0 +1,30 @@ +{% set current_kafkanodes = salt.saltutil.runner('mine.get', tgt='G@role:so-kafkanode', fun='network.ip_addrs', tgt_type='compound') %} +{% set pillar_kafkanodes = salt['pillar.get']('kafka:nodes', default={}, merge=True) %} + +{% set existing_ids = [] %} +{% for node in pillar_kafkanodes.values() %} + {% if node.get('id') %} + {% do existing_ids.append(node['nodeid']) %} + {% endif %} +{% endfor %} +{% set all_possible_ids = range(1, 256)|list %} + +{% set available_ids = [] %} +{% for id in all_possible_ids %} + {% if id not in existing_ids %} + {% do available_ids.append(id) %} + {% endif %} +{% endfor %} + +{% set final_nodes = pillar_kafkanodes.copy() %} + +{% for minionid, ip in current_kafkanodes.items() %} + {% set hostname = minionid.split('_')[0] %} + {% if hostname not in final_nodes %} + {% set new_id = available_ids.pop(0) %} + {% do final_nodes.update({hostname: {'nodeid': new_id, 'ip': ip[0]}}) %} + {% endif %} +{% endfor %} + +kafka: + nodes: {{ final_nodes|tojson }} \ No newline at end of file diff --git a/pillar/logstash/nodes.sls b/pillar/logstash/nodes.sls index 8d3bdab65..3b75a5cae 100644 --- a/pillar/logstash/nodes.sls +++ b/pillar/logstash/nodes.sls @@ -2,7 +2,7 @@ {% set cached_grains = salt.saltutil.runner('cache.grains', tgt='*') %} {% for minionid, ip in salt.saltutil.runner( 'mine.get', - tgt='G@role:so-manager or G@role:so-managersearch or G@role:so-standalone or G@role:so-searchnode or G@role:so-heavynode or G@role:so-receiver or G@role:so-fleet ', + tgt='G@role:so-manager or G@role:so-managersearch or G@role:so-standalone or G@role:so-searchnode or G@role:so-heavynode or G@role:so-receiver or G@role:so-fleet or G@role:so-kafkanode ', fun='network.ip_addrs', tgt_type='compound') | dictsort() %} diff --git a/pillar/top.sls b/pillar/top.sls index 4893c44f9..49e493ec8 100644 --- a/pillar/top.sls +++ b/pillar/top.sls @@ -65,6 +65,7 @@ base: - soctopus.adv_soctopus - minions.{{ grains.id }} - minions.adv_{{ grains.id }} + - kafka.nodes '*_sensor': - healthcheck.sensor @@ -241,6 +242,15 @@ base: - minions.{{ grains.id }} - minions.adv_{{ grains.id }} + '*_kafkanode': + - logstash.nodes + - logstash.soc_logstash + - logstash.adv_logstash + - minions.{{ grains.id }} + - minions.adv_{{ grains.id }} + - secrets + - kafka.nodes + '*_import': - secrets - elasticsearch.index_templates diff --git a/salt/allowed_states.map.jinja b/salt/allowed_states.map.jinja index a3c5c75ab..11dfde824 100644 --- a/salt/allowed_states.map.jinja +++ b/salt/allowed_states.map.jinja @@ -187,6 +187,15 @@ 'schedule', 'docker_clean' ], + 'so-kafkanode': [ + 'kafka', + 'logstash', + 'ssl', + 'telegraf', + 'firewall', + 'schedule', + 'docker_clean' + ], 'so-desktop': [ ], }, grain='role') %} @@ -203,7 +212,7 @@ {% do allowed_states.append('strelka') %} {% endif %} - {% if grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-searchnode', 'so-managersearch', 'so-heavynode', 'so-import'] %} + {% if grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-searchnode', 'so-managersearch', 'so-heavynode', 'so-import', 'so-kafkanode'] %} {% do allowed_states.append('elasticsearch') %} {% endif %} diff --git a/salt/docker/defaults.yaml b/salt/docker/defaults.yaml index e39feaf06..3155841c9 100644 --- a/salt/docker/defaults.yaml +++ b/salt/docker/defaults.yaml @@ -201,3 +201,11 @@ docker: custom_bind_mounts: [] extra_hosts: [] extra_env: [] + 'so-kafka': + final_octet: 88 + port_bindings: + - 0.0.0.0:9092:9092 + - 0.0.0.0:2181:2181 + custom_bind_mounts: [] + extra_hosts: [] + extra_env: [] \ No newline at end of file diff --git a/salt/docker/soc_docker.yaml b/salt/docker/soc_docker.yaml index d227a3e85..87751010e 100644 --- a/salt/docker/soc_docker.yaml +++ b/salt/docker/soc_docker.yaml @@ -68,3 +68,4 @@ docker: so-steno: *dockerOptions so-suricata: *dockerOptions so-zeek: *dockerOptions + so-kafka: *dockerOptions \ No newline at end of file diff --git a/salt/firewall/containers.map.jinja b/salt/firewall/containers.map.jinja index 617b4a216..b19f66355 100644 --- a/salt/firewall/containers.map.jinja +++ b/salt/firewall/containers.map.jinja @@ -87,6 +87,11 @@ 'so-logstash', 'so-redis', ] %} +{% elif GLOBALS.role == 'so-kafkanode' %} +{% set NODE_CONTAINERS = [ + 'so-logstash', + 'so-kafka', +] %} {% elif GLOBALS.role == 'so-idh' %} {% set NODE_CONTAINERS = [ diff --git a/salt/firewall/defaults.yaml b/salt/firewall/defaults.yaml index ff127c419..112e0eaaa 100644 --- a/salt/firewall/defaults.yaml +++ b/salt/firewall/defaults.yaml @@ -19,6 +19,7 @@ firewall: manager: [] managersearch: [] receiver: [] + kafkanode: [] searchnode: [] self: [] sensor: [] @@ -90,6 +91,11 @@ firewall: tcp: - 8086 udp: [] + kafka: + tcp: + - 9092 + - 9093 + udp: [] kibana: tcp: - 5601 @@ -441,6 +447,15 @@ firewall: - elastic_agent_data - elastic_agent_update - sensoroni + kafkanode: + portgroups: + - yum + - docker_registry + - influxdb + - elastic_agent_control + - elastic_agent_data + - elastic_agent_update + - sensoroni analyst: portgroups: - nginx @@ -513,6 +528,9 @@ firewall: receiver: portgroups: - salt_manager + kafkanode: + portgroups: + - salt_manager desktop: portgroups: - salt_manager @@ -629,6 +647,15 @@ firewall: - elastic_agent_data - elastic_agent_update - sensoroni + kafkanode: + portgroups: + - yum + - docker_registry + - influxdb + - elastic_agent_control + - elastic_agent_data + - elastic_agent_update + - sensoroni analyst: portgroups: - nginx @@ -1339,6 +1366,73 @@ firewall: portgroups: [] customhostgroup9: portgroups: [] + kafkanode: + chain: + DOCKER-USER: + hostgroups: + searchnode: + portgroups: + - kafka + kafkanode: + portgroups: + - kafka + customhostgroup0: + portgroups: [] + customhostgroup1: + portgroups: [] + customhostgroup2: + portgroups: [] + customhostgroup3: + portgroups: [] + customhostgroup4: + portgroups: [] + customhostgroup5: + portgroups: [] + customhostgroup6: + portgroups: [] + customhostgroup7: + portgroups: [] + customhostgroup8: + portgroups: [] + customhostgroup9: + portgroups: [] + INPUT: + hostgroups: + anywhere: + portgroups: + - ssh + dockernet: + portgroups: + - all + localhost: + portgroups: + - all + self: + portgroups: + - syslog + syslog: + portgroups: + - syslog + customhostgroup0: + portgroups: [] + customhostgroup1: + portgroups: [] + customhostgroup2: + portgroups: [] + customhostgroup3: + portgroups: [] + customhostgroup4: + portgroups: [] + customhostgroup5: + portgroups: [] + customhostgroup6: + portgroups: [] + customhostgroup7: + portgroups: [] + customhostgroup8: + portgroups: [] + customhostgroup9: + portgroups: [] idh: chain: DOCKER-USER: diff --git a/salt/firewall/soc_firewall.yaml b/salt/firewall/soc_firewall.yaml index 209484b6e..7d250737a 100644 --- a/salt/firewall/soc_firewall.yaml +++ b/salt/firewall/soc_firewall.yaml @@ -34,6 +34,7 @@ firewall: heavynode: *hostgroupsettings idh: *hostgroupsettings import: *hostgroupsettings + kafkanode: *hostgroupsettings localhost: *ROhostgroupsettingsadv manager: *hostgroupsettings managersearch: *hostgroupsettings @@ -115,6 +116,9 @@ firewall: influxdb: tcp: *tcpsettings udp: *udpsettings + kafka: + tcp: *tcpsettings + udp: *udpsettings kibana: tcp: *tcpsettings udp: *udpsettings @@ -363,6 +367,8 @@ firewall: portgroups: *portgroupsdocker endgame: portgroups: *portgroupsdocker + kafkanode: + portgroups: *portgroupsdocker analyst: portgroups: *portgroupsdocker desktop: @@ -454,6 +460,8 @@ firewall: portgroups: *portgroupsdocker syslog: portgroups: *portgroupsdocker + kafkanode: + portgroups: *portgroupsdocker analyst: portgroups: *portgroupsdocker desktop: @@ -938,6 +946,62 @@ firewall: portgroups: *portgroupshost customhostgroup9: portgroups: *portgroupshost + kafkanode: + chain: + DOCKER-USER: + hostgroups: + searchnode: + portgroups: *portgroupsdocker + kafkanode: + portgroups: *portgroupsdocker + customhostgroup0: + portgroups: *portgroupsdocker + customhostgroup1: + portgroups: *portgroupsdocker + customhostgroup2: + portgroups: *portgroupsdocker + customhostgroup3: + portgroups: *portgroupsdocker + customhostgroup4: + portgroups: *portgroupsdocker + customhostgroup5: + portgroups: *portgroupsdocker + customhostgroup6: + portgroups: *portgroupsdocker + customhostgroup7: + portgroups: *portgroupsdocker + customhostgroup8: + portgroups: *portgroupsdocker + customhostgroup9: + portgroups: *portgroupsdocker + INPUT: + hostgroups: + anywhere: + portgroups: *portgroupshost + dockernet: + portgroups: *portgroupshost + localhost: + portgroups: *portgroupshost + customhostgroup0: + portgroups: *portgroupshost + customhostgroup1: + portgroups: *portgroupshost + customhostgroup2: + portgroups: *portgroupshost + customhostgroup3: + portgroups: *portgroupshost + customhostgroup4: + portgroups: *portgroupshost + customhostgroup5: + portgroups: *portgroupshost + customhostgroup6: + portgroups: *portgroupshost + customhostgroup7: + portgroups: *portgroupshost + customhostgroup8: + portgroups: *portgroupshost + customhostgroup9: + portgroups: *portgroupshost idh: chain: diff --git a/salt/kafka/config.sls b/salt/kafka/config.sls new file mode 100644 index 000000000..8caaa01cd --- /dev/null +++ b/salt/kafka/config.sls @@ -0,0 +1,101 @@ +# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one +# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +# https://securityonion.net/license; you may not use this file except in compliance with the +# Elastic License 2.0. + +{% from 'allowed_states.map.jinja' import allowed_states %} +{% if sls.split('.')[0] in allowed_states %} +{% from 'vars/globals.map.jinja' import GLOBALS %} + +{% set kafka_ips_logstash = [] %} +{% set kafka_ips_kraft = [] %} +{% set kafkanodes = salt['pillar.get']('kafka:nodes', {}) %} +{% set kafka_nodeid = salt['pillar.get']('kafka:nodes:' ~ GLOBALS.hostname ~ ':nodeid') %} +{% set kafka_ip = GLOBALS.node_ip %} + +{% set nodes = salt['pillar.get']('kafka:nodes', {}) %} +{% set combined = [] %} +{% for hostname, data in nodes.items() %} + {% do combined.append(data.nodeid ~ "@" ~ hostname) %} +{% endfor %} +{% set kraft_controller_quorum_voters = ','.join(combined) %} + +{# Create list for kafka <-> logstash/searchnode communcations #} +{% for node, node_data in kafkanodes.items() %} +{% do kafka_ips_logstash.append(node_data['ip'] + ":9092") %} +{% endfor %} +{% set kafka_server_list = "','".join(kafka_ips_logstash) %} + +{# Create a list for kraft controller <-> kraft controller communications. Used for Kafka metadata management #} +{% for node, node_data in kafkanodes.items() %} +{% do kafka_ips_kraft.append(node_data['nodeid'] ~ "@" ~ node_data['ip'] ~ ":9093") %} +{% endfor %} +{% set kraft_server_list = "','".join(kafka_ips_kraft) %} + + +include: + - ssl + +kafka_group: + group.present: + - name: kafka + - gid: 960 + +kafka: + user.present: + - uid: 960 + - gid: 960 + +{# Future tools to query kafka directly / show consumer groups +kafka_sbin_tools: + file.recurse: + - name: /usr/sbin + - source: salt://kafka/tools/sbin + - user: 960 + - group: 960 + - file_mode: 755 #} + +kakfa_log_dir: + file.directory: + - name: /opt/so/log/kafka + - user: 960 + - group: 960 + - makedirs: True + +kafka_data_dir: + file.directory: + - name: /nsm/kafka/data + - user: 960 + - group: 960 + - makedirs: True + +{# When docker container is created an added to registry. Update so-kafka-generate-keystore script #} +kafka_keystore_script: + cmd.script: + - source: salt://kafka/tools/sbin_jinja/so-kafka-generate-keystore + - tempalte: jinja + - cwd: /opt/so + - defaults: + GLOBALS: {{ GLOBALS }} + +kafka_kraft_server_properties: + file.managed: + - source: salt://kafka/etc/server.properties.jinja + - name: /opt/so/conf/kafka/server.properties + - template: jinja + - defaults: + kafka_nodeid: {{ kafka_nodeid }} + kraft_controller_quorum_voters: {{ kraft_controller_quorum_voters }} + kafka_ip: {{ kafka_ip }} + - user: 960 + - group: 960 + - makedirs: True + - show_changes: False + +{% else %} + +{{sls}}_state_not_allowed: + test.fail_without_changes: + - name: {{sls}}_state_not_allowed + +{% endif %} \ No newline at end of file diff --git a/salt/kafka/enabled.sls b/salt/kafka/enabled.sls new file mode 100644 index 000000000..1bf7dcf8b --- /dev/null +++ b/salt/kafka/enabled.sls @@ -0,0 +1,46 @@ +# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one +# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +# https://securityonion.net/license; you may not use this file except in compliance with the +# Elastic License 2.0. + +{% from 'allowed_states.map.jinja' import allowed_states %} +{% if sls.split('.')[0] in allowed_states %} +{% from 'vars/globals.map.jinja' import GLOBALS %} +{% from 'docker/docker.map.jinja' import DOCKER %} + +include: + - kafka.sostatus + - kafka.config + - kafka.storage + +so-kafka: + docker_container.running: + - image: so-kafka + - hostname: so-kafka + - name: so-kafka + - networks: + - sobridge: + - ipv4_address: {{ DOCKER.containers['so-kafka'].ip }} + - user: kafka + - port_bindings: + {% for BINDING in DOCKER.containers['so-kafka'].port_bindings %} + - {{ BINDING }} + {% endfor %} + - binds: + - /etc/pki/kafka.jks:/etc/pki/kafka.jks + - /opt/so/conf/ca/cacerts:/etc/pki/java/sos/cacerts + - /nsm/kafka/data/:/nsm/kafka/data/:rw + - /opt/so/conf/kafka/server.properties:/kafka/config/kraft/server.properties + +delete_so-kafka_so-status.disabled: + file.uncomment: + - name: /opt/so/conf/so-status/so-status.conf + - regex: ^so-kafka$ + +{% else %} + +{{sls}}_state_not_allowed: + test.fail_without_changes: + - name: {{sls}}_state_not_allowed + +{% endif %} \ No newline at end of file diff --git a/salt/kafka/etc/server.properties.jinja b/salt/kafka/etc/server.properties.jinja new file mode 100644 index 000000000..ad5ac67a9 --- /dev/null +++ b/salt/kafka/etc/server.properties.jinja @@ -0,0 +1,123 @@ +# This configuration file is intended for use in KRaft mode, where +# Apache ZooKeeper is not present. See config/kraft/README.md for details. +# + +############################# Server Basics ############################# + +# The role of this server. Setting this puts us in KRaft mode +process.roles=broker,controller + +# The node id associated with this instance's roles +node.id={{ kafka_nodeid }} + +# The connect string for the controller quorum +controller.quorum.voters={{ kraft_controller_quorum_voters }} + +############################# Socket Server Settings ############################# + +# The address the socket server listens on. +# Combined nodes (i.e. those with `process.roles=broker,controller`) must list the controller listener here at a minimum. +# If the broker listener is not defined, the default listener will use a host name that is equal to the value of java.net.InetAddress.getCanonicalHostName(), +# with PLAINTEXT listener name, and port 9092. +# FORMAT: +# listeners = listener_name://host_name:port +# EXAMPLE: +# listeners = PLAINTEXT://your.host.name:9092 +listeners=BROKER://{{ kafka_ip }}:9092,CONTROLLER://{{ kafka_ip }}:9093 + +# Name of listener used for communication between brokers. +inter.broker.listener.name=BROKER + +# Listener name, hostname and port the broker will advertise to clients. +# If not set, it uses the value for "listeners". +advertised.listeners=BROKER://{{ kafka_ip }}:9092 + +# A comma-separated list of the names of the listeners used by the controller. +# If no explicit mapping set in `listener.security.protocol.map`, default will be using PLAINTEXT protocol +# This is required if running in KRaft mode. +controller.listener.names=CONTROLLER + +# Maps listener names to security protocols, the default is for them to be the same. See the config documentation for more details +listener.security.protocol.map=CONTROLLER:SSL,BROKER:SSL + +#SSL configuration +ssl.keystore.location=/etc/pki/kafka.jks +ssl.keystore.pasword=changeit +ssl.keystore.type=JKS +ssl.truststore.location=/etc/pki/java/sos/cacerts +ssl.truststore.password=changeit + +# The number of threads that the server uses for receiving requests from the network and sending responses to the network +num.network.threads=3 + +# The number of threads that the server uses for processing requests, which may include disk I/O +num.io.threads=8 + +# The send buffer (SO_SNDBUF) used by the socket server +socket.send.buffer.bytes=102400 + +# The receive buffer (SO_RCVBUF) used by the socket server +socket.receive.buffer.bytes=102400 + +# The maximum size of a request that the socket server will accept (protection against OOM) +socket.request.max.bytes=104857600 + + +############################# Log Basics ############################# + +# A comma separated list of directories under which to store log files +log.dirs=/nsm/kafka/data + +# The default number of log partitions per topic. More partitions allow greater +# parallelism for consumption, but this will also result in more files across +# the brokers. +num.partitions=1 + +# The number of threads per data directory to be used for log recovery at startup and flushing at shutdown. +# This value is recommended to be increased for installations with data dirs located in RAID array. +num.recovery.threads.per.data.dir=1 + +############################# Internal Topic Settings ############################# +# The replication factor for the group metadata internal topics "__consumer_offsets" and "__transaction_state" +# For anything other than development testing, a value greater than 1 is recommended to ensure availability such as 3. +offsets.topic.replication.factor=1 +transaction.state.log.replication.factor=1 +transaction.state.log.min.isr=1 + +############################# Log Flush Policy ############################# + +# Messages are immediately written to the filesystem but by default we only fsync() to sync +# the OS cache lazily. The following configurations control the flush of data to disk. +# There are a few important trade-offs here: +# 1. Durability: Unflushed data may be lost if you are not using replication. +# 2. Latency: Very large flush intervals may lead to latency spikes when the flush does occur as there will be a lot of data to flush. +# 3. Throughput: The flush is generally the most expensive operation, and a small flush interval may lead to excessive seeks. +# The settings below allow one to configure the flush policy to flush data after a period of time or +# every N messages (or both). This can be done globally and overridden on a per-topic basis. + +# The number of messages to accept before forcing a flush of data to disk +#log.flush.interval.messages=10000 + +# The maximum amount of time a message can sit in a log before we force a flush +#log.flush.interval.ms=1000 + +############################# Log Retention Policy ############################# + +# The following configurations control the disposal of log segments. The policy can +# be set to delete segments after a period of time, or after a given size has accumulated. +# A segment will be deleted whenever *either* of these criteria are met. Deletion always happens +# from the end of the log. + +# The minimum age of a log file to be eligible for deletion due to age +log.retention.hours=168 + +# A size-based retention policy for logs. Segments are pruned from the log unless the remaining +# segments drop below log.retention.bytes. Functions independently of log.retention.hours. +#log.retention.bytes=1073741824 + +# The maximum size of a log segment file. When this size is reached a new log segment will be created. +log.segment.bytes=1073741824 + +# The interval at which log segments are checked to see if they can be deleted according +# to the retention policies +log.retention.check.interval.ms=300000 \ No newline at end of file diff --git a/salt/kafka/init.sls b/salt/kafka/init.sls new file mode 100644 index 000000000..653cd4b88 --- /dev/null +++ b/salt/kafka/init.sls @@ -0,0 +1,9 @@ +# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one +# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +# https://securityonion.net/license; you may not use this file except in compliance with the +# Elastic License 2.0. + +{# Create map.jinja to enable / disable kafka from UI #} +{# Temporarily just enable kafka #} +include: + - kafka.enabled diff --git a/salt/kafka/sostatus.sls b/salt/kafka/sostatus.sls new file mode 100644 index 000000000..4c7519964 --- /dev/null +++ b/salt/kafka/sostatus.sls @@ -0,0 +1,21 @@ +# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one +# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +# https://securityonion.net/license; you may not use this file except in compliance with the +# Elastic License 2.0. + +{% from 'allowed_states.map.jinja' import allowed_states %} +{% if sls.split('.')[0] in allowed_states %} + +append_so-kafka_so-status.conf: + file.append: + - name: /opt/so/conf/so-status/so-status.conf + - text: so-kafka + - unless: grep -q so-kafka /opt/so/conf/so-status/so-status.conf + +{% else %} + +{{sls}}_state_not_allowed: + test.fail_without_changes: + - name: {{sls}}_state_not_allowed + +{% endif %} \ No newline at end of file diff --git a/salt/kafka/storage.sls b/salt/kafka/storage.sls new file mode 100644 index 000000000..dc114ef4f --- /dev/null +++ b/salt/kafka/storage.sls @@ -0,0 +1,31 @@ +# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one +# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +# https://securityonion.net/license; you may not use this file except in compliance with the +# Elastic License 2.0. + +{% from 'allowed_states.map.jinja' import allowed_states %} +{% if sls.split('.')[0] in allowed_states %} +{% from 'vars/globals.map.jinja' import GLOBALS %} +{% set kafka_cluster_id = salt['pillar.get']('secrets:kafka_cluster_id')%} + +{# Initialize kafka storage if it doesn't already exist. Just looking for meta.properties in /nsm/kafka/data #} +{% if salt['file.file_exists']('/nsm/kafka/data/meta.properties') %} +{% else %} +kafka_storage_init: + cmd.run: + - name: | + docker run -v /nsm/kafka/data:/nsm/kafka/data -v /opt/so/conf/kafka/server.properties:/kafka/config/kraft/newserver.properties --name so-kafkainit --user root --entrypoint /kafka/bin/kafka-storage.sh so-kafka format -t {{ kafka_cluster_id }} -c /kafka/config/kraft/server.properties +kafka_rm_kafkainit: + cmd.run: + - name: | + docker rm so-kafkainit +{% endif %} + + +{% else %} + +{{sls}}_state_not_allowed: + test.fail_without_changes: + - name: {{sls}}_state_not_allowed + +{% endif %} \ No newline at end of file diff --git a/salt/kafka/tools/sbin_jinja/so-kafka-generate-keystore b/salt/kafka/tools/sbin_jinja/so-kafka-generate-keystore new file mode 100644 index 000000000..69bb6ad87 --- /dev/null +++ b/salt/kafka/tools/sbin_jinja/so-kafka-generate-keystore @@ -0,0 +1,16 @@ +#!/bin/bash +# +# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one +# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +# https://securityonion.net/license; you may not use this file except in compliance with the +# Elastic License 2.0. + +. /usr/sbin/so-common + +if [ ! -f /etc/pki/kafka.jks ]; then + docker run -v /etc/pki/kafka.p12:/etc/pki/kafka.p12 --name so-kafka-keystore --user root --entrypoint keytool so-kafka -importkeystore -srckeystore /etc/pki/kafka.p12 -srcstoretype PKCS12 -srsstorepass changeit -destkeystore /etc/pki/kafka.jks -deststoretype JKS -deststorepass changeit -alias kafkastore -noprompt + docker cp so-kafka-keystore:/etc/pki/kafka.jks /etc/pki/kafka.jks + docker rm so-kafka-keystore +else + exit 0 +fi \ No newline at end of file diff --git a/salt/logstash/defaults.yaml b/salt/logstash/defaults.yaml index e4c18cc64..b7382090e 100644 --- a/salt/logstash/defaults.yaml +++ b/salt/logstash/defaults.yaml @@ -19,6 +19,8 @@ logstash: - search fleet: - fleet + kafkanode: + - kafkanode defined_pipelines: fleet: - so/0012_input_elastic_agent.conf.jinja @@ -37,6 +39,8 @@ logstash: - so/0900_input_redis.conf.jinja - so/9805_output_elastic_agent.conf.jinja - so/9900_output_endgame.conf.jinja + kafkanode: + - so/0899_output_kafka.conf.jinja custom0: [] custom1: [] custom2: [] diff --git a/salt/logstash/enabled.sls b/salt/logstash/enabled.sls index c76f81d21..96e29b25a 100644 --- a/salt/logstash/enabled.sls +++ b/salt/logstash/enabled.sls @@ -75,10 +75,13 @@ so-logstash: {% else %} - /etc/pki/tls/certs/intca.crt:/usr/share/filebeat/ca.crt:ro {% endif %} - {% if GLOBALS.role in ['so-manager', 'so-managersearch', 'so-standalone', 'so-import', 'so-heavynode', 'so-searchnode'] %} + {% if GLOBALS.role in ['so-manager', 'so-managersearch', 'so-standalone', 'so-import', 'so-heavynode', 'so-searchnode', 'so-kafkanode' ] %} - /opt/so/conf/ca/cacerts:/etc/pki/ca-trust/extracted/java/cacerts:ro - /opt/so/conf/ca/tls-ca-bundle.pem:/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem:ro {% endif %} + {% if GLOBALS.role in ['so-kafkanode'] %} + - /etc/pki/kafka-logstash.p12:/usr/share/logstash/kafka-logstash.p12:ro + {% endif %} {% if GLOBALS.role == 'so-eval' %} - /nsm/zeek:/nsm/zeek:ro - /nsm/suricata:/suricata:ro diff --git a/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja b/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja new file mode 100644 index 000000000..c1429319a --- /dev/null +++ b/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja @@ -0,0 +1,26 @@ +{% set kafka_brokers = salt['pillar.get']('logstash:nodes:kafkanode', {}) %} +{% set broker_ips = [] %} +{% for node, node_data in kafka_brokers.items() %} + {% do broker_ips.append(node_data['ip'] + ":9092") %} +{% endfor %} + +{% set bootstrap_servers = "','".join(broker_ips) %} + + +#Run on searchnodes ingest kafka topic(s) group_id allows load balancing of event ingest to all searchnodes +input { + kafka { + codec => json + #Can ingest multiple topics. Set to a value from SOC UI? + topics => ['logstash-topic',] + group_id => 'searchnodes' + security_protocol => 'SSL' + bootstrap_servers => {{ bootstrap_servers }} + ssl_keystore_location => '/usr/share/logstash/kafka-logstash.p12' + ssl_keystore_password => '' + ssl_keystore_type => 'PKCS12' + ssl_truststore_location => '/etc/pki/ca-trust/extracted/java/cacerts' + # Set password as a pillar to avoid bad optics? This is default truststore for grid + ssl_truststore_password => 'changeit' + } +} \ No newline at end of file diff --git a/salt/logstash/pipelines/config/so/0899_output_kafka.conf.jinja b/salt/logstash/pipelines/config/so/0899_output_kafka.conf.jinja new file mode 100644 index 000000000..ff9a6f6ee --- /dev/null +++ b/salt/logstash/pipelines/config/so/0899_output_kafka.conf.jinja @@ -0,0 +1,22 @@ +{% set kafka_brokers = salt['pillar.get']('logstash:nodes:kafkanode', {}) %} +{% set broker_ips = [] %} +{% for node, node_data in kafka_brokers.items() %} + {% do broker_ips.append(node_data['ip'] + ":9092") %} +{% endfor %} + +{% set bootstrap_servers = "','".join(broker_ips) %} + +#Run on kafka broker logstash writes to topic 'logstash-topic' +output { + kafka { + codec => json + topic_id => 'logstash-topic' + bootstrap_servers => '{{ bootstrap_servers }}' + security_protocol => 'SSL' + ssl_keystore_location => '/usr/share/logstash/kafka-logstash.p12' + ssl_keystore_password => '' + ssl_keystore_type => 'PKCS12' + ssl_truststore_location => '/etc/pki/ca-trust/extracted/java/cacerts' + ssl_truststore_password => 'changeit' + } +} \ No newline at end of file diff --git a/salt/logstash/soc_logstash.yaml b/salt/logstash/soc_logstash.yaml index bcb99bad5..144094eb1 100644 --- a/salt/logstash/soc_logstash.yaml +++ b/salt/logstash/soc_logstash.yaml @@ -16,6 +16,7 @@ logstash: manager: *assigned_pipelines managersearch: *assigned_pipelines fleet: *assigned_pipelines + kafkanode: *assigned_pipelines defined_pipelines: receiver: &defined_pipelines description: List of pipeline configurations assign to this group. @@ -26,6 +27,7 @@ logstash: fleet: *defined_pipelines manager: *defined_pipelines search: *defined_pipelines + kafkanode: *defined_pipelines custom0: *defined_pipelines custom1: *defined_pipelines custom2: *defined_pipelines diff --git a/salt/manager/tools/sbin/so-firewall-minion b/salt/manager/tools/sbin/so-firewall-minion index 66a0afcea..3357e5185 100755 --- a/salt/manager/tools/sbin/so-firewall-minion +++ b/salt/manager/tools/sbin/so-firewall-minion @@ -79,6 +79,9 @@ fi 'RECEIVER') so-firewall includehost receiver "$IP" --apply ;; + 'KAFKANODE') + so-firewall includehost kafkanode "$IP" --apply + ;; 'DESKTOP') so-firewall includehost desktop "$IP" --apply ;; diff --git a/salt/manager/tools/sbin/so-kafka-clusterid b/salt/manager/tools/sbin/so-kafka-clusterid new file mode 100644 index 000000000..64833a0d2 --- /dev/null +++ b/salt/manager/tools/sbin/so-kafka-clusterid @@ -0,0 +1,22 @@ +#!/bin/bash + +# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one +# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +# https://securityonion.net/license; you may not use this file except in compliance with the +# Elastic License 2.0. + +local_salt_dir=/opt/so/saltstack/local + +if [[ -f /usr/sbin/so-common ]]; then + source /usr/sbin/so-common +else + source $(dirname $0)/../../../common/tools/sbin/so-common +fi + +if ! grep -q "^ kafka_cluster_id:" $local_salt_dir/pillar/secrets.sls; then + kafka_cluster_id=$(get_random_value 22) + echo ' kafka_cluster_id: '$kafka_cluster_id >> $local_salt_dir/pillar/secrets.sls +else + echo 'kafka_cluster_id exists' + salt-call pillar.get secrets +fi \ No newline at end of file diff --git a/salt/manager/tools/sbin/so-minion b/salt/manager/tools/sbin/so-minion index edc0b1404..c61098589 100755 --- a/salt/manager/tools/sbin/so-minion +++ b/salt/manager/tools/sbin/so-minion @@ -556,6 +556,10 @@ function createRECEIVER() { add_telegraf_to_minion } +function createKAFKANODE() { + add_logstash_to_minion + # add_telegraf_to_minion +} function testConnection() { retry 15 3 "salt '$MINION_ID' test.ping" True diff --git a/salt/ssl/init.sls b/salt/ssl/init.sls index ef93a9072..2a71cd853 100644 --- a/salt/ssl/init.sls +++ b/salt/ssl/init.sls @@ -664,6 +664,128 @@ elastickeyperms: {%- endif %} +# Roles will need to be modified. Below is just for testing encrypted kafka pipelines +# Remove so-manager. Just inplace for testing +{% if grains['role'] in ['so-manager', 'so-kafkanode', 'so-searchnode'] %} +# Create a cert for Redis encryption +kafka_key: + x509.private_key_managed: + - name: /etc/pki/kafka.key + - keysize: 4096 + - backup: True + - new: True + {% if salt['file.file_exists']('/etc/pki/kafka.key') -%} + - prereq: + - x509: /etc/pki/kafka.crt + {%- endif %} + - retry: + attempts: 5 + interval: 30 + +kafka_crt: + x509.certificate_managed: + - name: /etc/pki/kafka.crt + - ca_server: {{ ca_server }} + - subjectAltName: DNS:{{ GLOBALS.hostname }}, IP:{{ GLOBALS.node_ip }} + - signing_policy: elasticfleet + - private_key: /etc/pki/kafka.key + - CN: {{ GLOBALS.hostname }} + - days_remaining: 0 + - days_valid: 820 + - backup: True + - timeout: 30 + - retry: + attempts: 5 + interval: 30 + cmd.run: + - name: "/usr/bin/openssl pkcs12 -inkey /etc/pki/kafka.key -in /etc/pki/kafka.crt -export -out /etc/pki/kafka.p12 -nodes -passout pass:changeit" + - onchanges: + - x509: /etc/pki/kafka.key + +# Kafka needs a keystore so just creating a new key / cert for that purpose +etc_kafka_logstash_key: + x509.private_key_managed: + - name: /etc/pki/kafka-logstash.key + - keysize: 4096 + - backup: True + - new: True + {% if salt['file.file_exists']('/etc/pki/kakfa-logstash.key') -%} + - prereq: + - x509: etc_kafka_logstash_crt + {%- endif %} + - retry: + attempts: 5 + interval: 30 + +etc_kafka_logstash_crt: + x509.certificate_managed: + - name: /etc/pki/kafka-logstash.crt + - ca_server: {{ ca_server }} + - signing_policy: elasticfleet + - private_key: /etc/pki/kafka-logstash.key + - CN: {{ GLOBALS.hostname }} + - subjectAltName: DNS:{{ GLOBALS.hostname }}, IP:{{ GLOBALS.node_ip }} + - days_remaining: 0 + - days_valid: 820 + - backup: True + - timeout: 30 + - retry: + attempts: 5 + interval: 30 + cmd.run: + - name: "/usr/bin/openssl pkcs12 -inkey /etc/pki/kafka-logstash.key -in /etc/pki/kafka-logstash.crt -export -out /etc/pki/kafka-logstash.p12 -nodes -passout pass:" + - onchanges: + - x509: etc_kafka_logstash_key + +kafka_key_perms: + file.managed: + - replace: False + - name: /etc/pki/kafka.key + - mode: 640 + - user: 960 + - group: 939 + +kafka_crt_perms: + file.managed: + - replace: False + - name: /etc/pki/kafka.crt + - mode: 640 + - user: 960 + - group: 939 + +kafka_logstash_cert_perms: + file.managed: + - replace: False + - name: /etc/pki/kafka-logstash.crt + - mode: 640 + - user: 960 + - group: 939 + +kafka_logstash_key_perms: + file.managed: + - replace: False + - name: /etc/pki/kafka-logstash.key + - mode: 640 + - user: 960 + - group: 939 + +kafka_logstash_keystore_perms: + file.managed: + - replace: False + - name: /etc/pki/kafka-logstash.p12 + - mode: 640 + - user: 960 + - group: 939 + +kafka_keystore_perms: + file.managed: + - replace: False + - name: /etc/pki/kafka.p12 + - mode: 640 + - user: 960 + - group: 939 + +{% endif %} {% else %} {{sls}}_state_not_allowed: diff --git a/salt/ssl/remove.sls b/salt/ssl/remove.sls index 43a245288..bb4562300 100644 --- a/salt/ssl/remove.sls +++ b/salt/ssl/remove.sls @@ -67,3 +67,20 @@ fleet_crt: fbcertdir: file.absent: - name: /opt/so/conf/filebeat/etc/pki + +kafka_crt: + file.absent: + - name: /etc/pki/kafka.crt +kafka_key: + file.absent: + - name: /etc/pki/kafka.key + +kafka_logstash_crt: + file.absent: + - name: /etc/pki/kafka-logstash.crt +kafka_logstash_key: + file.absent: + - name: /etc/pki/kafka-logstash.key +kafka_logstash_keystore: + file.absent: + - name: /etc/pki/kafka-logstash.p12 diff --git a/salt/top.sls b/salt/top.sls index 2323731a1..cd1b92e5c 100644 --- a/salt/top.sls +++ b/salt/top.sls @@ -255,6 +255,16 @@ base: - elasticfleet.install_agent_grid - docker_clean + '*_kafkanode and G@saltversion:{{saltversion}}': + - match: compound + - kafka + - logstash + - ssl + - telegraf + - firewall + - docker_clean + - elasticfleet.install_agent_grid + '*_idh and G@saltversion:{{saltversion}}': - match: compound - ssl diff --git a/salt/vars/kafkanode.map.jinja b/salt/vars/kafkanode.map.jinja new file mode 100644 index 000000000..396cefcc9 --- /dev/null +++ b/salt/vars/kafkanode.map.jinja @@ -0,0 +1 @@ +{% set ROLE_GLOBALS = {} %} \ No newline at end of file diff --git a/setup/so-functions b/setup/so-functions index fc0876248..76887c81c 100755 --- a/setup/so-functions +++ b/setup/so-functions @@ -1242,6 +1242,7 @@ generate_passwords(){ REDISPASS=$(get_random_value) SOCSRVKEY=$(get_random_value 64) IMPORTPASS=$(get_random_value) + KAFKACLUSTERID=$(get_random_value 22) } generate_interface_vars() { @@ -1269,7 +1270,7 @@ get_redirect() { get_minion_type() { local minion_type case "$install_type" in - 'EVAL' | 'MANAGERSEARCH' | 'MANAGER' | 'SENSOR' | 'HEAVYNODE' | 'SEARCHNODE' | 'FLEET' | 'IDH' | 'STANDALONE' | 'IMPORT' | 'RECEIVER') + 'EVAL' | 'MANAGERSEARCH' | 'MANAGER' | 'SENSOR' | 'HEAVYNODE' | 'SEARCHNODE' | 'FLEET' | 'IDH' | 'STANDALONE' | 'IMPORT' | 'RECEIVER' | 'KAFKANODE') minion_type=$(echo "$install_type" | tr '[:upper:]' '[:lower:]') ;; esac @@ -1663,6 +1664,8 @@ process_installtype() { is_import=true elif [ "$install_type" = 'RECEIVER' ]; then is_receiver=true + elif [ "$install_type" = 'KAFKANODE' ]; then + is_kafka=true elif [ "$install_type" = 'DESKTOP' ]; then if [ "$setup_type" != 'desktop' ]; then exec bash so-setup desktop @@ -2105,7 +2108,8 @@ secrets_pillar(){ " playbook_automation: $PLAYBOOKAUTOMATIONPASS"\ " playbook_automation_api_key: "\ " import_pass: $IMPORTPASS"\ - " influx_pass: $INFLUXPASS" > $local_salt_dir/pillar/secrets.sls + " influx_pass: $INFLUXPASS"\ + " kafka_cluster_id: $KAFKACLUSTERID" > $local_salt_dir/pillar/secrets.sls fi } diff --git a/setup/so-setup b/setup/so-setup index 14d6b2304..bc64cd9d1 100755 --- a/setup/so-setup +++ b/setup/so-setup @@ -574,6 +574,16 @@ if ! [[ -f $install_opt_file ]]; then check_manager_connection set_minion_info whiptail_end_settings + + elif [[ $is_kafka ]]; then + info "Setting up as node type Kafka broker" + #check_requirements "kafka" + networking_needful + collect_mngr_hostname + add_mngr_ip_to_hosts + check_manager_connection + set_minion_info + whiptail_end_settings fi if [[ $waitforstate ]]; then diff --git a/setup/so-whiptail b/setup/so-whiptail index c55e2db8f..4553ebd33 100755 --- a/setup/so-whiptail +++ b/setup/so-whiptail @@ -640,13 +640,14 @@ whiptail_install_type_dist_existing() { Note: Heavy nodes (HEAVYNODE) are NOT recommended for most users. EOM - install_type=$(whiptail --title "$whiptail_title" --menu "$node_msg" 19 75 6 \ + install_type=$(whiptail --title "$whiptail_title" --menu "$node_msg" 19 75 7 \ "SENSOR" "Create a forward only sensor " \ "SEARCHNODE" "Add a search node with parsing " \ "FLEET" "Dedicated Elastic Fleet Node " \ "HEAVYNODE" "Sensor + Search Node " \ "IDH" "Intrusion Detection Honeypot Node " \ "RECEIVER" "Receiver Node " \ + "KAFKANODE" "Kafka Broker + Kraft controller" \ 3>&1 1>&2 2>&3 # "HOTNODE" "Add Hot Node (Uses Elastic Clustering)" \ # TODO # "WARMNODE" "Add Warm Node to existing Hot or Search node" \ # TODO @@ -677,6 +678,8 @@ whiptail_install_type_dist_existing() { is_import=true elif [ "$install_type" = 'RECEIVER' ]; then is_receiver=true + elif [ "$install_type" = 'KAFKANODE' ]; then + is_kafka=true elif [ "$install_type" = 'DESKTOP' ]; then if [ "$setup_type" != 'desktop' ]; then exec bash so-setup desktop From 216869859563f3025a8313f2f7f0e416ec7b79e0 Mon Sep 17 00:00:00 2001 From: weslambert Date: Mon, 22 Jan 2024 20:27:19 -0500 Subject: [PATCH 002/507] Update VERSION --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 9cf89c6c7..7d52aac7f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.4.50 +2.4.0-foxtrot From 26abe9067154676df31060bec3b3981ca5af0e05 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 2 Apr 2024 12:19:46 -0400 Subject: [PATCH 003/507] Removed duplicate kafka setup Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- setup/so-setup | 9 --------- 1 file changed, 9 deletions(-) diff --git a/setup/so-setup b/setup/so-setup index a50fea19d..191b25ef2 100755 --- a/setup/so-setup +++ b/setup/so-setup @@ -629,15 +629,6 @@ if ! [[ -f $install_opt_file ]]; then set_minion_info whiptail_end_settings - elif [[ $is_kafka ]]; then - info "Setting up as node type Kafka broker" - #check_requirements "kafka" - networking_needful - collect_mngr_hostname - add_mngr_ip_to_hosts - check_manager_connection - set_minion_info - whiptail_end_settings fi if [[ $waitforstate ]]; then From 780ad9eb10ebdd20258f0b3daa875167eb6b78b0 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Tue, 2 Apr 2024 15:50:25 -0400 Subject: [PATCH 004/507] add kafka to manager nodes --- salt/allowed_states.map.jinja | 3 ++- salt/top.sls | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/salt/allowed_states.map.jinja b/salt/allowed_states.map.jinja index 460e3e9eb..6fa60c2ea 100644 --- a/salt/allowed_states.map.jinja +++ b/salt/allowed_states.map.jinja @@ -101,7 +101,8 @@ 'utility', 'schedule', 'docker_clean', - 'stig' + 'stig', + 'kafka' ], 'so-managersearch': [ 'salt.master', diff --git a/salt/top.sls b/salt/top.sls index b418768ad..289dd462b 100644 --- a/salt/top.sls +++ b/salt/top.sls @@ -106,6 +106,7 @@ base: - utility - elasticfleet - stig + - kafka '*_standalone and G@saltversion:{{saltversion}}': - match: compound From f7534a0ae3dbc8ec34556571afb0bdbc314d6172 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Tue, 2 Apr 2024 16:01:12 -0400 Subject: [PATCH 005/507] make manager download so-kafka container --- salt/common/tools/sbin/so-image-common | 1 + 1 file changed, 1 insertion(+) diff --git a/salt/common/tools/sbin/so-image-common b/salt/common/tools/sbin/so-image-common index 752ec20e0..faf8d50a9 100755 --- a/salt/common/tools/sbin/so-image-common +++ b/salt/common/tools/sbin/so-image-common @@ -50,6 +50,7 @@ container_list() { "so-idh" "so-idstools" "so-influxdb" + "so-kafka" "so-kibana" "so-kratos" "so-logstash" From 1b49c8540e466f9b9c602b77245dac58cc5609e4 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 2 Apr 2024 16:32:15 -0400 Subject: [PATCH 006/507] Fix kafka keystore script Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/config.sls | 208 +++++++++--------- .../sbin_jinja/so-kafka-generate-keystore | 2 +- 2 files changed, 109 insertions(+), 101 deletions(-) diff --git a/salt/kafka/config.sls b/salt/kafka/config.sls index 8caaa01cd..ddf2777a1 100644 --- a/salt/kafka/config.sls +++ b/salt/kafka/config.sls @@ -1,101 +1,109 @@ -# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one -# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at -# https://securityonion.net/license; you may not use this file except in compliance with the -# Elastic License 2.0. - -{% from 'allowed_states.map.jinja' import allowed_states %} -{% if sls.split('.')[0] in allowed_states %} -{% from 'vars/globals.map.jinja' import GLOBALS %} - -{% set kafka_ips_logstash = [] %} -{% set kafka_ips_kraft = [] %} -{% set kafkanodes = salt['pillar.get']('kafka:nodes', {}) %} -{% set kafka_nodeid = salt['pillar.get']('kafka:nodes:' ~ GLOBALS.hostname ~ ':nodeid') %} -{% set kafka_ip = GLOBALS.node_ip %} - -{% set nodes = salt['pillar.get']('kafka:nodes', {}) %} -{% set combined = [] %} -{% for hostname, data in nodes.items() %} - {% do combined.append(data.nodeid ~ "@" ~ hostname) %} -{% endfor %} -{% set kraft_controller_quorum_voters = ','.join(combined) %} - -{# Create list for kafka <-> logstash/searchnode communcations #} -{% for node, node_data in kafkanodes.items() %} -{% do kafka_ips_logstash.append(node_data['ip'] + ":9092") %} -{% endfor %} -{% set kafka_server_list = "','".join(kafka_ips_logstash) %} - -{# Create a list for kraft controller <-> kraft controller communications. Used for Kafka metadata management #} -{% for node, node_data in kafkanodes.items() %} -{% do kafka_ips_kraft.append(node_data['nodeid'] ~ "@" ~ node_data['ip'] ~ ":9093") %} -{% endfor %} -{% set kraft_server_list = "','".join(kafka_ips_kraft) %} - - -include: - - ssl - -kafka_group: - group.present: - - name: kafka - - gid: 960 - -kafka: - user.present: - - uid: 960 - - gid: 960 - -{# Future tools to query kafka directly / show consumer groups -kafka_sbin_tools: - file.recurse: - - name: /usr/sbin - - source: salt://kafka/tools/sbin - - user: 960 - - group: 960 - - file_mode: 755 #} - -kakfa_log_dir: - file.directory: - - name: /opt/so/log/kafka - - user: 960 - - group: 960 - - makedirs: True - -kafka_data_dir: - file.directory: - - name: /nsm/kafka/data - - user: 960 - - group: 960 - - makedirs: True - -{# When docker container is created an added to registry. Update so-kafka-generate-keystore script #} -kafka_keystore_script: - cmd.script: - - source: salt://kafka/tools/sbin_jinja/so-kafka-generate-keystore - - tempalte: jinja - - cwd: /opt/so - - defaults: - GLOBALS: {{ GLOBALS }} - -kafka_kraft_server_properties: - file.managed: - - source: salt://kafka/etc/server.properties.jinja - - name: /opt/so/conf/kafka/server.properties - - template: jinja - - defaults: - kafka_nodeid: {{ kafka_nodeid }} - kraft_controller_quorum_voters: {{ kraft_controller_quorum_voters }} - kafka_ip: {{ kafka_ip }} - - user: 960 - - group: 960 - - makedirs: True - - show_changes: False - -{% else %} - -{{sls}}_state_not_allowed: - test.fail_without_changes: - - name: {{sls}}_state_not_allowed - +# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one +# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +# https://securityonion.net/license; you may not use this file except in compliance with the +# Elastic License 2.0. + +{% from 'allowed_states.map.jinja' import allowed_states %} +{% if sls.split('.')[0] in allowed_states %} +{% from 'vars/globals.map.jinja' import GLOBALS %} + +{% set kafka_ips_logstash = [] %} +{% set kafka_ips_kraft = [] %} +{% set kafkanodes = salt['pillar.get']('kafka:nodes', {}) %} +{% set kafka_nodeid = salt['pillar.get']('kafka:nodes:' ~ GLOBALS.hostname ~ ':nodeid') %} +{% set kafka_ip = GLOBALS.node_ip %} + +{% set nodes = salt['pillar.get']('kafka:nodes', {}) %} +{% set combined = [] %} +{% for hostname, data in nodes.items() %} + {% do combined.append(data.nodeid ~ "@" ~ hostname ~ ":9093") %} +{% endfor %} +{% set kraft_controller_quorum_voters = ','.join(combined) %} + +{# Create list for kafka <-> logstash/searchnode communcations #} +{% for node, node_data in kafkanodes.items() %} +{% do kafka_ips_logstash.append(node_data['ip'] + ":9092") %} +{% endfor %} +{% set kafka_server_list = "','".join(kafka_ips_logstash) %} + +{# Create a list for kraft controller <-> kraft controller communications. Used for Kafka metadata management #} +{% for node, node_data in kafkanodes.items() %} +{% do kafka_ips_kraft.append(node_data['nodeid'] ~ "@" ~ node_data['ip'] ~ ":9093") %} +{% endfor %} +{% set kraft_server_list = "','".join(kafka_ips_kraft) %} + + +include: + - ssl + +kafka_group: + group.present: + - name: kafka + - gid: 960 + +kafka: + user.present: + - uid: 960 + - gid: 960 + +{# Future tools to query kafka directly / show consumer groups +kafka_sbin_tools: + file.recurse: + - name: /usr/sbin + - source: salt://kafka/tools/sbin + - user: 960 + - group: 960 + - file_mode: 755 #} + +kafka_sbin_jinja_tools: + file.recurse: + - name: /usr/sbin + - source: salt://kafka/tools/sbin_jinja + - user: 960 + - group: 960 + - file_mode: 755 + - template: jinja + +kakfa_log_dir: + file.directory: + - name: /opt/so/log/kafka + - user: 960 + - group: 960 + - makedirs: True + +kafka_data_dir: + file.directory: + - name: /nsm/kafka/data + - user: 960 + - group: 960 + - makedirs: True + +kafka_keystore_script: + cmd.script: + - source: salt://kafka/tools/sbin_jinja/so-kafka-generate-keystore + - template: jinja + - cwd: /opt/so + - defaults: + GLOBALS: {{ GLOBALS }} + +kafka_kraft_server_properties: + file.managed: + - source: salt://kafka/etc/server.properties.jinja + - name: /opt/so/conf/kafka/server.properties + - template: jinja + - defaults: + kafka_nodeid: {{ kafka_nodeid }} + kraft_controller_quorum_voters: {{ kraft_controller_quorum_voters }} + kafka_ip: {{ kafka_ip }} + - user: 960 + - group: 960 + - makedirs: True + - show_changes: False + +{% else %} + +{{sls}}_state_not_allowed: + test.fail_without_changes: + - name: {{sls}}_state_not_allowed + {% endif %} \ No newline at end of file diff --git a/salt/kafka/tools/sbin_jinja/so-kafka-generate-keystore b/salt/kafka/tools/sbin_jinja/so-kafka-generate-keystore index 69bb6ad87..1809c7a93 100644 --- a/salt/kafka/tools/sbin_jinja/so-kafka-generate-keystore +++ b/salt/kafka/tools/sbin_jinja/so-kafka-generate-keystore @@ -8,7 +8,7 @@ . /usr/sbin/so-common if [ ! -f /etc/pki/kafka.jks ]; then - docker run -v /etc/pki/kafka.p12:/etc/pki/kafka.p12 --name so-kafka-keystore --user root --entrypoint keytool so-kafka -importkeystore -srckeystore /etc/pki/kafka.p12 -srcstoretype PKCS12 -srsstorepass changeit -destkeystore /etc/pki/kafka.jks -deststoretype JKS -deststorepass changeit -alias kafkastore -noprompt + docker run -v /etc/pki/kafka.p12:/etc/pki/kafka.p12 --name so-kafka-keystore --user root --entrypoint keytool {{ GLOBALS.registry_host }}:5000/{{ GLOBALS.image_repo }}/so-kafka:{{ GLOBALS.so_version }} -importkeystore -srckeystore /etc/pki/kafka.p12 -srcstoretype PKCS12 -srcstorepass changeit -destkeystore /etc/pki/kafka.jks -deststoretype JKS -deststorepass changeit -noprompt docker cp so-kafka-keystore:/etc/pki/kafka.jks /etc/pki/kafka.jks docker rm so-kafka-keystore else From b032eed22a94a80a62e83f4dfe79914523a7024c Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 2 Apr 2024 16:34:06 -0400 Subject: [PATCH 007/507] Update kafka to use manager docker registry Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/common/tools/sbin/so-image-common | 3 +- salt/kafka/enabled.sls | 91 +++++++++++++------------- 2 files changed, 48 insertions(+), 46 deletions(-) diff --git a/salt/common/tools/sbin/so-image-common b/salt/common/tools/sbin/so-image-common index 7900b3c52..d322c8e9b 100755 --- a/salt/common/tools/sbin/so-image-common +++ b/salt/common/tools/sbin/so-image-common @@ -67,7 +67,8 @@ container_list() { "so-strelka-manager" "so-suricata" "so-telegraf" - "so-zeek" + "so-zeek" + "so-kafka" ) else TRUSTED_CONTAINERS=( diff --git a/salt/kafka/enabled.sls b/salt/kafka/enabled.sls index 1bf7dcf8b..31d375e23 100644 --- a/salt/kafka/enabled.sls +++ b/salt/kafka/enabled.sls @@ -1,46 +1,47 @@ -# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one -# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at -# https://securityonion.net/license; you may not use this file except in compliance with the -# Elastic License 2.0. - -{% from 'allowed_states.map.jinja' import allowed_states %} -{% if sls.split('.')[0] in allowed_states %} -{% from 'vars/globals.map.jinja' import GLOBALS %} -{% from 'docker/docker.map.jinja' import DOCKER %} - -include: - - kafka.sostatus - - kafka.config - - kafka.storage - -so-kafka: - docker_container.running: - - image: so-kafka - - hostname: so-kafka - - name: so-kafka - - networks: - - sobridge: - - ipv4_address: {{ DOCKER.containers['so-kafka'].ip }} - - user: kafka - - port_bindings: - {% for BINDING in DOCKER.containers['so-kafka'].port_bindings %} - - {{ BINDING }} - {% endfor %} - - binds: - - /etc/pki/kafka.jks:/etc/pki/kafka.jks - - /opt/so/conf/ca/cacerts:/etc/pki/java/sos/cacerts - - /nsm/kafka/data/:/nsm/kafka/data/:rw - - /opt/so/conf/kafka/server.properties:/kafka/config/kraft/server.properties - -delete_so-kafka_so-status.disabled: - file.uncomment: - - name: /opt/so/conf/so-status/so-status.conf - - regex: ^so-kafka$ - -{% else %} - -{{sls}}_state_not_allowed: - test.fail_without_changes: - - name: {{sls}}_state_not_allowed - +# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one +# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +# https://securityonion.net/license; you may not use this file except in compliance with the +# Elastic License 2.0. + +{% from 'allowed_states.map.jinja' import allowed_states %} +{% if sls.split('.')[0] in allowed_states %} +{% from 'vars/globals.map.jinja' import GLOBALS %} +{% from 'docker/docker.map.jinja' import DOCKER %} +{% set KAFKANODES = salt['pillar.get']('kafka:nodes', {}) %} + +include: + - kafka.sostatus + - kafka.config + - kafka.storage + +so-kafka: + docker_container.running: + - image: {{ GLOBALS.registry_host }}:5000/{{ GLOBALS.image_repo }}/so-kafka:{{ GLOBALS.so_version }} + - hostname: so-kafka + - name: so-kafka + - networks: + - sobridge: + - ipv4_address: {{ DOCKER.containers['so-kafka'].ip }} + - user: kafka + - port_bindings: + {% for BINDING in DOCKER.containers['so-kafka'].port_bindings %} + - {{ BINDING }} + {% endfor %} + - binds: + - /etc/pki/kafka.jks:/etc/pki/kafka.jks + - /opt/so/conf/ca/cacerts:/etc/pki/java/sos/cacerts + - /nsm/kafka/data/:/nsm/kafka/data/:rw + - /opt/so/conf/kafka/server.properties:/kafka/config/kraft/server.properties + +delete_so-kafka_so-status.disabled: + file.uncomment: + - name: /opt/so/conf/so-status/so-status.conf + - regex: ^so-kafka$ + +{% else %} + +{{sls}}_state_not_allowed: + test.fail_without_changes: + - name: {{sls}}_state_not_allowed + {% endif %} \ No newline at end of file From 643d4831c10b09714021ae97e19e0ea679433b94 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 2 Apr 2024 16:35:14 -0400 Subject: [PATCH 008/507] CRLF -> LF Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/init.sls | 18 +++++----- salt/kafka/sostatus.sls | 40 ++++++++++----------- salt/manager/tools/sbin/so-kafka-clusterid | 42 +++++++++++----------- 3 files changed, 50 insertions(+), 50 deletions(-) diff --git a/salt/kafka/init.sls b/salt/kafka/init.sls index 653cd4b88..903c66867 100644 --- a/salt/kafka/init.sls +++ b/salt/kafka/init.sls @@ -1,9 +1,9 @@ -# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one -# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at -# https://securityonion.net/license; you may not use this file except in compliance with the -# Elastic License 2.0. - -{# Create map.jinja to enable / disable kafka from UI #} -{# Temporarily just enable kafka #} -include: - - kafka.enabled +# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one +# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +# https://securityonion.net/license; you may not use this file except in compliance with the +# Elastic License 2.0. + +{# Create map.jinja to enable / disable kafka from UI #} +{# Temporarily just enable kafka #} +include: + - kafka.enabled diff --git a/salt/kafka/sostatus.sls b/salt/kafka/sostatus.sls index 4c7519964..37c868a46 100644 --- a/salt/kafka/sostatus.sls +++ b/salt/kafka/sostatus.sls @@ -1,21 +1,21 @@ -# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one -# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at -# https://securityonion.net/license; you may not use this file except in compliance with the -# Elastic License 2.0. - -{% from 'allowed_states.map.jinja' import allowed_states %} -{% if sls.split('.')[0] in allowed_states %} - -append_so-kafka_so-status.conf: - file.append: - - name: /opt/so/conf/so-status/so-status.conf - - text: so-kafka - - unless: grep -q so-kafka /opt/so/conf/so-status/so-status.conf - -{% else %} - -{{sls}}_state_not_allowed: - test.fail_without_changes: - - name: {{sls}}_state_not_allowed - +# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one +# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +# https://securityonion.net/license; you may not use this file except in compliance with the +# Elastic License 2.0. + +{% from 'allowed_states.map.jinja' import allowed_states %} +{% if sls.split('.')[0] in allowed_states %} + +append_so-kafka_so-status.conf: + file.append: + - name: /opt/so/conf/so-status/so-status.conf + - text: so-kafka + - unless: grep -q so-kafka /opt/so/conf/so-status/so-status.conf + +{% else %} + +{{sls}}_state_not_allowed: + test.fail_without_changes: + - name: {{sls}}_state_not_allowed + {% endif %} \ No newline at end of file diff --git a/salt/manager/tools/sbin/so-kafka-clusterid b/salt/manager/tools/sbin/so-kafka-clusterid index 64833a0d2..719973247 100644 --- a/salt/manager/tools/sbin/so-kafka-clusterid +++ b/salt/manager/tools/sbin/so-kafka-clusterid @@ -1,22 +1,22 @@ -#!/bin/bash - -# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one -# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at -# https://securityonion.net/license; you may not use this file except in compliance with the -# Elastic License 2.0. - -local_salt_dir=/opt/so/saltstack/local - -if [[ -f /usr/sbin/so-common ]]; then - source /usr/sbin/so-common -else - source $(dirname $0)/../../../common/tools/sbin/so-common -fi - -if ! grep -q "^ kafka_cluster_id:" $local_salt_dir/pillar/secrets.sls; then - kafka_cluster_id=$(get_random_value 22) - echo ' kafka_cluster_id: '$kafka_cluster_id >> $local_salt_dir/pillar/secrets.sls -else - echo 'kafka_cluster_id exists' - salt-call pillar.get secrets +#!/bin/bash + +# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one +# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +# https://securityonion.net/license; you may not use this file except in compliance with the +# Elastic License 2.0. + +local_salt_dir=/opt/so/saltstack/local + +if [[ -f /usr/sbin/so-common ]]; then + source /usr/sbin/so-common +else + source $(dirname $0)/../../../common/tools/sbin/so-common +fi + +if ! grep -q "^ kafka_cluster_id:" $local_salt_dir/pillar/secrets.sls; then + kafka_cluster_id=$(get_random_value 22) + echo ' kafka_cluster_id: '$kafka_cluster_id >> $local_salt_dir/pillar/secrets.sls +else + echo 'kafka_cluster_id exists' + salt-call pillar.get secrets fi \ No newline at end of file From 7f5741c43b9eac3f0409a1eaa7dbe44fc70140d2 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 2 Apr 2024 16:36:22 -0400 Subject: [PATCH 009/507] Fix kafka storage setup Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/storage.sls | 60 +++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/salt/kafka/storage.sls b/salt/kafka/storage.sls index dc114ef4f..778c054e2 100644 --- a/salt/kafka/storage.sls +++ b/salt/kafka/storage.sls @@ -1,31 +1,31 @@ -# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one -# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at -# https://securityonion.net/license; you may not use this file except in compliance with the -# Elastic License 2.0. - -{% from 'allowed_states.map.jinja' import allowed_states %} -{% if sls.split('.')[0] in allowed_states %} -{% from 'vars/globals.map.jinja' import GLOBALS %} -{% set kafka_cluster_id = salt['pillar.get']('secrets:kafka_cluster_id')%} - -{# Initialize kafka storage if it doesn't already exist. Just looking for meta.properties in /nsm/kafka/data #} -{% if salt['file.file_exists']('/nsm/kafka/data/meta.properties') %} -{% else %} -kafka_storage_init: - cmd.run: - - name: | - docker run -v /nsm/kafka/data:/nsm/kafka/data -v /opt/so/conf/kafka/server.properties:/kafka/config/kraft/newserver.properties --name so-kafkainit --user root --entrypoint /kafka/bin/kafka-storage.sh so-kafka format -t {{ kafka_cluster_id }} -c /kafka/config/kraft/server.properties -kafka_rm_kafkainit: - cmd.run: - - name: | - docker rm so-kafkainit -{% endif %} - - -{% else %} - -{{sls}}_state_not_allowed: - test.fail_without_changes: - - name: {{sls}}_state_not_allowed - +# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one +# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +# https://securityonion.net/license; you may not use this file except in compliance with the +# Elastic License 2.0. + +{% from 'allowed_states.map.jinja' import allowed_states %} +{% if sls.split('.')[0] in allowed_states %} +{% from 'vars/globals.map.jinja' import GLOBALS %} +{% set kafka_cluster_id = salt['pillar.get']('secrets:kafka_cluster_id')%} + +{# Initialize kafka storage if it doesn't already exist. Just looking for meta.properties in /nsm/kafka/data #} +{% if salt['file.file_exists']('/nsm/kafka/data/meta.properties') %} +{% else %} +kafka_storage_init: + cmd.run: + - name: | + docker run -v /nsm/kafka/data:/nsm/kafka/data -v /opt/so/conf/kafka/server.properties:/kafka/config/kraft/newserver.properties --name so-kafkainit --user root --entrypoint /kafka/bin/kafka-storage.sh {{ GLOBALS.registry_host }}:5000/{{ GLOBALS.image_repo }}/so-kafka:{{ GLOBALS.so_version }} format -t {{ kafka_cluster_id }} -c /kafka/config/kraft/newserver.properties +kafka_rm_kafkainit: + cmd.run: + - name: | + docker rm so-kafkainit +{% endif %} + + +{% else %} + +{{sls}}_state_not_allowed: + test.fail_without_changes: + - name: {{sls}}_state_not_allowed + {% endif %} \ No newline at end of file From 82830c81733a925bf9c6c4748946d53ba1039358 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 2 Apr 2024 16:37:39 -0400 Subject: [PATCH 010/507] Fix typos and fix error related to elasticsearch saltstate being called from logstash state. Logstash will be removed from kafkanodes in future Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/etc/server.properties.jinja | 244 ++++++++++++------------- salt/logstash/config.sls | 2 +- 2 files changed, 123 insertions(+), 123 deletions(-) diff --git a/salt/kafka/etc/server.properties.jinja b/salt/kafka/etc/server.properties.jinja index ad5ac67a9..eb60eda60 100644 --- a/salt/kafka/etc/server.properties.jinja +++ b/salt/kafka/etc/server.properties.jinja @@ -1,123 +1,123 @@ -# This configuration file is intended for use in KRaft mode, where -# Apache ZooKeeper is not present. See config/kraft/README.md for details. -# - -############################# Server Basics ############################# - -# The role of this server. Setting this puts us in KRaft mode -process.roles=broker,controller - -# The node id associated with this instance's roles -node.id={{ kafka_nodeid }} - -# The connect string for the controller quorum -controller.quorum.voters={{ kraft_controller_quorum_voters }} - -############################# Socket Server Settings ############################# - -# The address the socket server listens on. -# Combined nodes (i.e. those with `process.roles=broker,controller`) must list the controller listener here at a minimum. -# If the broker listener is not defined, the default listener will use a host name that is equal to the value of java.net.InetAddress.getCanonicalHostName(), -# with PLAINTEXT listener name, and port 9092. -# FORMAT: -# listeners = listener_name://host_name:port -# EXAMPLE: -# listeners = PLAINTEXT://your.host.name:9092 -listeners=BROKER://{{ kafka_ip }}:9092,CONTROLLER://{{ kafka_ip }}:9093 - -# Name of listener used for communication between brokers. -inter.broker.listener.name=BROKER - -# Listener name, hostname and port the broker will advertise to clients. -# If not set, it uses the value for "listeners". -advertised.listeners=BROKER://{{ kafka_ip }}:9092 - -# A comma-separated list of the names of the listeners used by the controller. -# If no explicit mapping set in `listener.security.protocol.map`, default will be using PLAINTEXT protocol -# This is required if running in KRaft mode. -controller.listener.names=CONTROLLER - -# Maps listener names to security protocols, the default is for them to be the same. See the config documentation for more details -listener.security.protocol.map=CONTROLLER:SSL,BROKER:SSL - -#SSL configuration -ssl.keystore.location=/etc/pki/kafka.jks -ssl.keystore.pasword=changeit -ssl.keystore.type=JKS -ssl.truststore.location=/etc/pki/java/sos/cacerts -ssl.truststore.password=changeit - -# The number of threads that the server uses for receiving requests from the network and sending responses to the network -num.network.threads=3 - -# The number of threads that the server uses for processing requests, which may include disk I/O -num.io.threads=8 - -# The send buffer (SO_SNDBUF) used by the socket server -socket.send.buffer.bytes=102400 - -# The receive buffer (SO_RCVBUF) used by the socket server -socket.receive.buffer.bytes=102400 - -# The maximum size of a request that the socket server will accept (protection against OOM) -socket.request.max.bytes=104857600 - - -############################# Log Basics ############################# - -# A comma separated list of directories under which to store log files -log.dirs=/nsm/kafka/data - -# The default number of log partitions per topic. More partitions allow greater -# parallelism for consumption, but this will also result in more files across -# the brokers. -num.partitions=1 - -# The number of threads per data directory to be used for log recovery at startup and flushing at shutdown. -# This value is recommended to be increased for installations with data dirs located in RAID array. -num.recovery.threads.per.data.dir=1 - -############################# Internal Topic Settings ############################# -# The replication factor for the group metadata internal topics "__consumer_offsets" and "__transaction_state" -# For anything other than development testing, a value greater than 1 is recommended to ensure availability such as 3. -offsets.topic.replication.factor=1 -transaction.state.log.replication.factor=1 -transaction.state.log.min.isr=1 - -############################# Log Flush Policy ############################# - -# Messages are immediately written to the filesystem but by default we only fsync() to sync -# the OS cache lazily. The following configurations control the flush of data to disk. -# There are a few important trade-offs here: -# 1. Durability: Unflushed data may be lost if you are not using replication. -# 2. Latency: Very large flush intervals may lead to latency spikes when the flush does occur as there will be a lot of data to flush. -# 3. Throughput: The flush is generally the most expensive operation, and a small flush interval may lead to excessive seeks. -# The settings below allow one to configure the flush policy to flush data after a period of time or -# every N messages (or both). This can be done globally and overridden on a per-topic basis. - -# The number of messages to accept before forcing a flush of data to disk -#log.flush.interval.messages=10000 - -# The maximum amount of time a message can sit in a log before we force a flush -#log.flush.interval.ms=1000 - -############################# Log Retention Policy ############################# - -# The following configurations control the disposal of log segments. The policy can -# be set to delete segments after a period of time, or after a given size has accumulated. -# A segment will be deleted whenever *either* of these criteria are met. Deletion always happens -# from the end of the log. - -# The minimum age of a log file to be eligible for deletion due to age -log.retention.hours=168 - -# A size-based retention policy for logs. Segments are pruned from the log unless the remaining -# segments drop below log.retention.bytes. Functions independently of log.retention.hours. -#log.retention.bytes=1073741824 - -# The maximum size of a log segment file. When this size is reached a new log segment will be created. -log.segment.bytes=1073741824 - -# The interval at which log segments are checked to see if they can be deleted according -# to the retention policies +# This configuration file is intended for use in KRaft mode, where +# Apache ZooKeeper is not present. See config/kraft/README.md for details. +# + +############################# Server Basics ############################# + +# The role of this server. Setting this puts us in KRaft mode +process.roles=broker,controller + +# The node id associated with this instance's roles +node.id={{ kafka_nodeid }} + +# The connect string for the controller quorum +controller.quorum.voters={{ kraft_controller_quorum_voters }} + +############################# Socket Server Settings ############################# + +# The address the socket server listens on. +# Combined nodes (i.e. those with `process.roles=broker,controller`) must list the controller listener here at a minimum. +# If the broker listener is not defined, the default listener will use a host name that is equal to the value of java.net.InetAddress.getCanonicalHostName(), +# with PLAINTEXT listener name, and port 9092. +# FORMAT: +# listeners = listener_name://host_name:port +# EXAMPLE: +# listeners = PLAINTEXT://your.host.name:9092 +listeners=BROKER://{{ kafka_ip }}:9092,CONTROLLER://{{ kafka_ip }}:9093 + +# Name of listener used for communication between brokers. +inter.broker.listener.name=BROKER + +# Listener name, hostname and port the broker will advertise to clients. +# If not set, it uses the value for "listeners". +advertised.listeners=BROKER://{{ kafka_ip }}:9092 + +# A comma-separated list of the names of the listeners used by the controller. +# If no explicit mapping set in `listener.security.protocol.map`, default will be using PLAINTEXT protocol +# This is required if running in KRaft mode. +controller.listener.names=CONTROLLER + +# Maps listener names to security protocols, the default is for them to be the same. See the config documentation for more details +listener.security.protocol.map=CONTROLLER:SSL,BROKER:SSL + +#SSL configuration +ssl.keystore.location=/etc/pki/kafka.jks +ssl.keystore.password=changeit +ssl.keystore.type=JKS +ssl.truststore.location=/etc/pki/java/sos/cacerts +ssl.truststore.password=changeit + +# The number of threads that the server uses for receiving requests from the network and sending responses to the network +num.network.threads=3 + +# The number of threads that the server uses for processing requests, which may include disk I/O +num.io.threads=8 + +# The send buffer (SO_SNDBUF) used by the socket server +socket.send.buffer.bytes=102400 + +# The receive buffer (SO_RCVBUF) used by the socket server +socket.receive.buffer.bytes=102400 + +# The maximum size of a request that the socket server will accept (protection against OOM) +socket.request.max.bytes=104857600 + + +############################# Log Basics ############################# + +# A comma separated list of directories under which to store log files +log.dirs=/nsm/kafka/data + +# The default number of log partitions per topic. More partitions allow greater +# parallelism for consumption, but this will also result in more files across +# the brokers. +num.partitions=1 + +# The number of threads per data directory to be used for log recovery at startup and flushing at shutdown. +# This value is recommended to be increased for installations with data dirs located in RAID array. +num.recovery.threads.per.data.dir=1 + +############################# Internal Topic Settings ############################# +# The replication factor for the group metadata internal topics "__consumer_offsets" and "__transaction_state" +# For anything other than development testing, a value greater than 1 is recommended to ensure availability such as 3. +offsets.topic.replication.factor=1 +transaction.state.log.replication.factor=1 +transaction.state.log.min.isr=1 + +############################# Log Flush Policy ############################# + +# Messages are immediately written to the filesystem but by default we only fsync() to sync +# the OS cache lazily. The following configurations control the flush of data to disk. +# There are a few important trade-offs here: +# 1. Durability: Unflushed data may be lost if you are not using replication. +# 2. Latency: Very large flush intervals may lead to latency spikes when the flush does occur as there will be a lot of data to flush. +# 3. Throughput: The flush is generally the most expensive operation, and a small flush interval may lead to excessive seeks. +# The settings below allow one to configure the flush policy to flush data after a period of time or +# every N messages (or both). This can be done globally and overridden on a per-topic basis. + +# The number of messages to accept before forcing a flush of data to disk +#log.flush.interval.messages=10000 + +# The maximum amount of time a message can sit in a log before we force a flush +#log.flush.interval.ms=1000 + +############################# Log Retention Policy ############################# + +# The following configurations control the disposal of log segments. The policy can +# be set to delete segments after a period of time, or after a given size has accumulated. +# A segment will be deleted whenever *either* of these criteria are met. Deletion always happens +# from the end of the log. + +# The minimum age of a log file to be eligible for deletion due to age +log.retention.hours=168 + +# A size-based retention policy for logs. Segments are pruned from the log unless the remaining +# segments drop below log.retention.bytes. Functions independently of log.retention.hours. +#log.retention.bytes=1073741824 + +# The maximum size of a log segment file. When this size is reached a new log segment will be created. +log.segment.bytes=1073741824 + +# The interval at which log segments are checked to see if they can be deleted according +# to the retention policies log.retention.check.interval.ms=300000 \ No newline at end of file diff --git a/salt/logstash/config.sls b/salt/logstash/config.sls index 8a59c83b7..402d1ef20 100644 --- a/salt/logstash/config.sls +++ b/salt/logstash/config.sls @@ -12,7 +12,7 @@ include: - ssl - {% if GLOBALS.role not in ['so-receiver','so-fleet'] %} + {% if GLOBALS.role not in ['so-receiver','so-fleet', 'so-kafkanode'] %} - elasticsearch {% endif %} From 4e142e0212ec15994c429cbd1b90c8936e5daca1 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Tue, 2 Apr 2024 16:47:35 -0400 Subject: [PATCH 011/507] put alphabetical --- salt/common/tools/sbin/so-image-common | 1 - 1 file changed, 1 deletion(-) diff --git a/salt/common/tools/sbin/so-image-common b/salt/common/tools/sbin/so-image-common index f1b8b86da..03051cb5f 100755 --- a/salt/common/tools/sbin/so-image-common +++ b/salt/common/tools/sbin/so-image-common @@ -66,7 +66,6 @@ container_list() { "so-suricata" "so-telegraf" "so-zeek" - "so-kafka" ) else TRUSTED_CONTAINERS=( From 639bf050812e98ce6155465314a6fa9614d615b8 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Wed, 3 Apr 2024 08:52:26 -0400 Subject: [PATCH 012/507] add so-manager to kafka.nodes pillar --- pillar/kafka/nodes.sls | 4 ++-- salt/kafka/config.sls | 11 +++++------ .../kafka/tools/sbin_jinja/so-kafka-generate-keystore | 2 +- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/pillar/kafka/nodes.sls b/pillar/kafka/nodes.sls index a7d97ac9c..8fdd3ee07 100644 --- a/pillar/kafka/nodes.sls +++ b/pillar/kafka/nodes.sls @@ -1,4 +1,4 @@ -{% set current_kafkanodes = salt.saltutil.runner('mine.get', tgt='G@role:so-kafkanode', fun='network.ip_addrs', tgt_type='compound') %} +{% set current_kafkanodes = salt.saltutil.runner('mine.get', tgt='G@role:so-kafkanode or G@role:so-manager', fun='network.ip_addrs', tgt_type='compound') %} {% set pillar_kafkanodes = salt['pillar.get']('kafka:nodes', default={}, merge=True) %} {% set existing_ids = [] %} @@ -27,4 +27,4 @@ {% endfor %} kafka: - nodes: {{ final_nodes|tojson }} \ No newline at end of file + nodes: {{ final_nodes|tojson }} diff --git a/salt/kafka/config.sls b/salt/kafka/config.sls index ddf2777a1..c8d6f66e0 100644 --- a/salt/kafka/config.sls +++ b/salt/kafka/config.sls @@ -63,6 +63,8 @@ kafka_sbin_jinja_tools: - group: 960 - file_mode: 755 - template: jinja + - defaults: + GLOBALS: {{ GLOBALS }} kakfa_log_dir: file.directory: @@ -79,12 +81,9 @@ kafka_data_dir: - makedirs: True kafka_keystore_script: - cmd.script: - - source: salt://kafka/tools/sbin_jinja/so-kafka-generate-keystore - - template: jinja + cmd.run: + - name: /usr/sbin/so-kafka-generate-keystore - cwd: /opt/so - - defaults: - GLOBALS: {{ GLOBALS }} kafka_kraft_server_properties: file.managed: @@ -106,4 +105,4 @@ kafka_kraft_server_properties: test.fail_without_changes: - name: {{sls}}_state_not_allowed -{% endif %} \ No newline at end of file +{% endif %} diff --git a/salt/kafka/tools/sbin_jinja/so-kafka-generate-keystore b/salt/kafka/tools/sbin_jinja/so-kafka-generate-keystore index 1809c7a93..26f188377 100644 --- a/salt/kafka/tools/sbin_jinja/so-kafka-generate-keystore +++ b/salt/kafka/tools/sbin_jinja/so-kafka-generate-keystore @@ -13,4 +13,4 @@ if [ ! -f /etc/pki/kafka.jks ]; then docker rm so-kafka-keystore else exit 0 -fi \ No newline at end of file +fi From 8e47cc73a5429b5f6c4d106867c81276b19b13c0 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Wed, 3 Apr 2024 08:54:17 -0400 Subject: [PATCH 013/507] kafka.nodes pillar to lf --- pillar/kafka/nodes.sls | 60 +++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/pillar/kafka/nodes.sls b/pillar/kafka/nodes.sls index 8fdd3ee07..b1842834c 100644 --- a/pillar/kafka/nodes.sls +++ b/pillar/kafka/nodes.sls @@ -1,30 +1,30 @@ -{% set current_kafkanodes = salt.saltutil.runner('mine.get', tgt='G@role:so-kafkanode or G@role:so-manager', fun='network.ip_addrs', tgt_type='compound') %} -{% set pillar_kafkanodes = salt['pillar.get']('kafka:nodes', default={}, merge=True) %} - -{% set existing_ids = [] %} -{% for node in pillar_kafkanodes.values() %} - {% if node.get('id') %} - {% do existing_ids.append(node['nodeid']) %} - {% endif %} -{% endfor %} -{% set all_possible_ids = range(1, 256)|list %} - -{% set available_ids = [] %} -{% for id in all_possible_ids %} - {% if id not in existing_ids %} - {% do available_ids.append(id) %} - {% endif %} -{% endfor %} - -{% set final_nodes = pillar_kafkanodes.copy() %} - -{% for minionid, ip in current_kafkanodes.items() %} - {% set hostname = minionid.split('_')[0] %} - {% if hostname not in final_nodes %} - {% set new_id = available_ids.pop(0) %} - {% do final_nodes.update({hostname: {'nodeid': new_id, 'ip': ip[0]}}) %} - {% endif %} -{% endfor %} - -kafka: - nodes: {{ final_nodes|tojson }} +{% set current_kafkanodes = salt.saltutil.runner('mine.get', tgt='G@role:so-kafkanode or G@role:so-manager', fun='network.ip_addrs', tgt_type='compound') %} +{% set pillar_kafkanodes = salt['pillar.get']('kafka:nodes', default={}, merge=True) %} + +{% set existing_ids = [] %} +{% for node in pillar_kafkanodes.values() %} + {% if node.get('id') %} + {% do existing_ids.append(node['nodeid']) %} + {% endif %} +{% endfor %} +{% set all_possible_ids = range(1, 256)|list %} + +{% set available_ids = [] %} +{% for id in all_possible_ids %} + {% if id not in existing_ids %} + {% do available_ids.append(id) %} + {% endif %} +{% endfor %} + +{% set final_nodes = pillar_kafkanodes.copy() %} + +{% for minionid, ip in current_kafkanodes.items() %} + {% set hostname = minionid.split('_')[0] %} + {% if hostname not in final_nodes %} + {% set new_id = available_ids.pop(0) %} + {% do final_nodes.update({hostname: {'nodeid': new_id, 'ip': ip[0]}}) %} + {% endif %} +{% endfor %} + +kafka: + nodes: {{ final_nodes|tojson }} From db106f8ca1ef7126b15e5945555fe3961796059c Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Wed, 3 Apr 2024 10:22:47 -0400 Subject: [PATCH 014/507] listen on 0.0.0.0 for CONTROLLER --- salt/kafka/etc/server.properties.jinja | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/salt/kafka/etc/server.properties.jinja b/salt/kafka/etc/server.properties.jinja index eb60eda60..3ed878766 100644 --- a/salt/kafka/etc/server.properties.jinja +++ b/salt/kafka/etc/server.properties.jinja @@ -23,7 +23,11 @@ controller.quorum.voters={{ kraft_controller_quorum_voters }} # listeners = listener_name://host_name:port # EXAMPLE: # listeners = PLAINTEXT://your.host.name:9092 -listeners=BROKER://{{ kafka_ip }}:9092,CONTROLLER://{{ kafka_ip }}:9093 + +# using 0.0.0.0 eliminates issues with binding to 9093 +listeners=BROKER://{{ kafka_ip }}:9092,CONTROLLER://0.0.0.0:9093 +#listeners=BROKER://{{ kafka_ip }}:9092,CONTROLLER://{{ kafka_ip }}:9093 + # Name of listener used for communication between brokers. inter.broker.listener.name=BROKER @@ -120,4 +124,4 @@ log.segment.bytes=1073741824 # The interval at which log segments are checked to see if they can be deleted according # to the retention policies -log.retention.check.interval.ms=300000 \ No newline at end of file +log.retention.check.interval.ms=300000 From c3f02a698ebd7d7afb5af09e1caa4a7442a773dc Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Wed, 3 Apr 2024 10:23:36 -0400 Subject: [PATCH 015/507] add kafka nodes as extra hosts for the container --- salt/kafka/enabled.sls | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/salt/kafka/enabled.sls b/salt/kafka/enabled.sls index 31d375e23..507071950 100644 --- a/salt/kafka/enabled.sls +++ b/salt/kafka/enabled.sls @@ -23,6 +23,15 @@ so-kafka: - sobridge: - ipv4_address: {{ DOCKER.containers['so-kafka'].ip }} - user: kafka + - extra_hosts: + {% for node in KAFKANODES %} + - {{ node }}:{{ KAFKANODES[node].ip }} + {% endfor %} + {% if DOCKER.containers['so-kafka'].extra_hosts %} + {% for XTRAHOST in DOCKER.containers['so-kafka'].extra_hosts %} + - {{ XTRAHOST }} + {% endfor %} + {% endif %} - port_bindings: {% for BINDING in DOCKER.containers['so-kafka'].port_bindings %} - {{ BINDING }} @@ -44,4 +53,4 @@ delete_so-kafka_so-status.disabled: test.fail_without_changes: - name: {{sls}}_state_not_allowed -{% endif %} \ No newline at end of file +{% endif %} From ed6137a76a7fb3de136a9fc9b75c558637b25d34 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Wed, 3 Apr 2024 10:24:10 -0400 Subject: [PATCH 016/507] allow sensor and searchnode to connect to manager kafka ports --- salt/firewall/defaults.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/salt/firewall/defaults.yaml b/salt/firewall/defaults.yaml index bc380a17d..bf3a003f3 100644 --- a/salt/firewall/defaults.yaml +++ b/salt/firewall/defaults.yaml @@ -405,6 +405,7 @@ firewall: - docker_registry - influxdb - sensoroni + - kafka searchnode: portgroups: - redis @@ -418,6 +419,7 @@ firewall: - elastic_agent_data - elastic_agent_update - sensoroni + - kafka heavynode: portgroups: - redis From 18f95e867f798b57d70c8d8cfe329d7b53af6cf7 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Wed, 3 Apr 2024 10:24:53 -0400 Subject: [PATCH 017/507] port 9093 for kafka docker --- salt/docker/defaults.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/salt/docker/defaults.yaml b/salt/docker/defaults.yaml index fea6c718f..ff130853a 100644 --- a/salt/docker/defaults.yaml +++ b/salt/docker/defaults.yaml @@ -189,7 +189,7 @@ docker: final_octet: 88 port_bindings: - 0.0.0.0:9092:9092 - - 0.0.0.0:2181:2181 + - 0.0.0.0:9093:9093 custom_bind_mounts: [] extra_hosts: [] - extra_env: [] \ No newline at end of file + extra_env: [] From b863060df12ac99d51a5a37ca4a544dc216c2393 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Wed, 3 Apr 2024 11:05:24 -0400 Subject: [PATCH 018/507] kafka broker and listener on 0.0.0.0 --- salt/kafka/etc/server.properties.jinja | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/salt/kafka/etc/server.properties.jinja b/salt/kafka/etc/server.properties.jinja index 3ed878766..0032e1b32 100644 --- a/salt/kafka/etc/server.properties.jinja +++ b/salt/kafka/etc/server.properties.jinja @@ -24,8 +24,8 @@ controller.quorum.voters={{ kraft_controller_quorum_voters }} # EXAMPLE: # listeners = PLAINTEXT://your.host.name:9092 -# using 0.0.0.0 eliminates issues with binding to 9093 -listeners=BROKER://{{ kafka_ip }}:9092,CONTROLLER://0.0.0.0:9093 +# using 0.0.0.0 eliminates issues with binding to 9092 and 9093 in initial testing +listeners=BROKER://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093 #listeners=BROKER://{{ kafka_ip }}:9092,CONTROLLER://{{ kafka_ip }}:9093 From dc27bbb01dd7b3e97980160572b7f217aa0bfa7a Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 3 Apr 2024 14:30:52 -0400 Subject: [PATCH 019/507] Set kafka heap size. To be later configured from SOC Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/enabled.sls | 2 ++ 1 file changed, 2 insertions(+) diff --git a/salt/kafka/enabled.sls b/salt/kafka/enabled.sls index 507071950..723f2be9a 100644 --- a/salt/kafka/enabled.sls +++ b/salt/kafka/enabled.sls @@ -23,6 +23,8 @@ so-kafka: - sobridge: - ipv4_address: {{ DOCKER.containers['so-kafka'].ip }} - user: kafka + - environment: + - KAFKA_HEAP_OPTS=-Xmx2G -Xms1G - extra_hosts: {% for node in KAFKANODES %} - {{ node }}:{{ KAFKANODES[node].ip }} From 13105c4ab31f045acbef2986c59bc4bf431aa2ec Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 3 Apr 2024 14:34:07 -0400 Subject: [PATCH 020/507] Generate certs for use with elasticfleet kafka output policy Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/ssl/init.sls | 40 +++++++++------------------------------- 1 file changed, 9 insertions(+), 31 deletions(-) diff --git a/salt/ssl/init.sls b/salt/ssl/init.sls index 2a71cd853..e7b01bcd2 100644 --- a/salt/ssl/init.sls +++ b/salt/ssl/init.sls @@ -702,27 +702,26 @@ kafka_crt: - onchanges: - x509: /etc/pki/kafka.key -# Kafka needs a keystore so just creating a new key / cert for that purpose -etc_kafka_logstash_key: +elasticfleet_kafka_key: x509.private_key_managed: - - name: /etc/pki/kafka-logstash.key + - name: /etc/pki/elasticfleet-kafka.keyn - keysize: 4096 - backup: True - new: True - {% if salt['file.file_exists']('/etc/pki/kakfa-logstash.key') -%} + {% if salt['file.file_exists']('/etc/pki/elasticfleet-kafka.key') -%} - prereq: - - x509: etc_kafka_logstash_crt + - x509: elasticfleet_kafka_crt {%- endif %} - retry: attempts: 5 interval: 30 -etc_kafka_logstash_crt: +elasticfleet_kafka_crt: x509.certificate_managed: - - name: /etc/pki/kafka-logstash.crt + - name: /etc/pki/elasticfleet-kafka.crt - ca_server: {{ ca_server }} - signing_policy: elasticfleet - - private_key: /etc/pki/kafka-logstash.key + - private_key: /etc/pki/elasticfleet-kafka.key - CN: {{ GLOBALS.hostname }} - subjectAltName: DNS:{{ GLOBALS.hostname }}, IP:{{ GLOBALS.node_ip }} - days_remaining: 0 @@ -732,10 +731,6 @@ etc_kafka_logstash_crt: - retry: attempts: 5 interval: 30 - cmd.run: - - name: "/usr/bin/openssl pkcs12 -inkey /etc/pki/kafka-logstash.key -in /etc/pki/kafka-logstash.crt -export -out /etc/pki/kafka-logstash.p12 -nodes -passout pass:" - - onchanges: - - x509: etc_kafka_logstash_key kafka_key_perms: file.managed: @@ -756,7 +751,7 @@ kafka_crt_perms: kafka_logstash_cert_perms: file.managed: - replace: False - - name: /etc/pki/kafka-logstash.crt + - name: /etc/pki/elasticfleet-kafka.crt - mode: 640 - user: 960 - group: 939 @@ -764,27 +759,10 @@ kafka_logstash_cert_perms: kafka_logstash_key_perms: file.managed: - replace: False - - name: /etc/pki/kafka-logstash.key + - name: /etc/pki/elasticfleet-kafka.key - mode: 640 - user: 960 - group: 939 - -kafka_logstash_keystore_perms: - file.managed: - - replace: False - - name: /etc/pki/kafka-logstash.p12 - - mode: 640 - - user: 960 - - group: 939 - -kafka_keystore_perms: - file.managed: - - replace: False - - name: /etc/pki/kafka.p12 - - mode: 640 - - user: 960 - - group: 939 - {% endif %} {% else %} From 1b8584d4bbbce5432a3114c8096cd757b3c871d4 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Wed, 3 Apr 2024 15:36:35 -0400 Subject: [PATCH 021/507] allow manager to manager on kafka ports --- salt/firewall/defaults.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/salt/firewall/defaults.yaml b/salt/firewall/defaults.yaml index bf3a003f3..e51bf5825 100644 --- a/salt/firewall/defaults.yaml +++ b/salt/firewall/defaults.yaml @@ -370,6 +370,7 @@ firewall: - elastic_agent_update - localrules - sensoroni + - kafka fleet: portgroups: - elasticsearch_rest From 7a6b72ebac68f899af097eb5b575dc88e291977b Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Thu, 4 Apr 2024 15:46:11 -0400 Subject: [PATCH 022/507] add so-kafka to manager for firewall --- salt/firewall/containers.map.jinja | 1 + 1 file changed, 1 insertion(+) diff --git a/salt/firewall/containers.map.jinja b/salt/firewall/containers.map.jinja index 566f55a40..7efb9abab 100644 --- a/salt/firewall/containers.map.jinja +++ b/salt/firewall/containers.map.jinja @@ -27,6 +27,7 @@ 'so-elastic-fleet', 'so-elastic-fleet-package-registry', 'so-influxdb', + 'so-kafka', 'so-kibana', 'so-kratos', 'so-logstash', From 4c5b42b898c062ff76dbbdd5eb24d81d3fb315e9 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Thu, 4 Apr 2024 15:47:01 -0400 Subject: [PATCH 023/507] restart container on server config changes --- salt/kafka/enabled.sls | 2 ++ salt/ssl/init.sls | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/salt/kafka/enabled.sls b/salt/kafka/enabled.sls index 723f2be9a..49a0a9bbd 100644 --- a/salt/kafka/enabled.sls +++ b/salt/kafka/enabled.sls @@ -43,6 +43,8 @@ so-kafka: - /opt/so/conf/ca/cacerts:/etc/pki/java/sos/cacerts - /nsm/kafka/data/:/nsm/kafka/data/:rw - /opt/so/conf/kafka/server.properties:/kafka/config/kraft/server.properties + - watch: + - file: kafka_kraft_server_properties delete_so-kafka_so-status.disabled: file.uncomment: diff --git a/salt/ssl/init.sls b/salt/ssl/init.sls index e7b01bcd2..3b5ebb2b0 100644 --- a/salt/ssl/init.sls +++ b/salt/ssl/init.sls @@ -704,7 +704,7 @@ kafka_crt: elasticfleet_kafka_key: x509.private_key_managed: - - name: /etc/pki/elasticfleet-kafka.keyn + - name: /etc/pki/elasticfleet-kafka.key - keysize: 4096 - backup: True - new: True From 40b08d737c9025c8c73ba580d1078b474342ee42 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Thu, 4 Apr 2024 16:16:53 -0400 Subject: [PATCH 024/507] Generate kafka keystore on changes to kafka.key Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/config.sls | 15 ++++++++++++--- .../tools/sbin_jinja/so-kafka-generate-keystore | 11 ++++------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/salt/kafka/config.sls b/salt/kafka/config.sls index c8d6f66e0..dedc68fe8 100644 --- a/salt/kafka/config.sls +++ b/salt/kafka/config.sls @@ -80,10 +80,19 @@ kafka_data_dir: - group: 960 - makedirs: True -kafka_keystore_script: +kafka_generate_keystore: cmd.run: - - name: /usr/sbin/so-kafka-generate-keystore - - cwd: /opt/so + - name: "/usr/sbin/so-kafka-generate-keystore" + - onchanges: + - x509: /etc/pki/kafka.key + +kafka_keystore_perms: + file.managed: + - replace: False + - name: /etc/pki/kafka.jks + - mode: 640 + - user: 960 + - group: 939 kafka_kraft_server_properties: file.managed: diff --git a/salt/kafka/tools/sbin_jinja/so-kafka-generate-keystore b/salt/kafka/tools/sbin_jinja/so-kafka-generate-keystore index 26f188377..8ae9d6db2 100644 --- a/salt/kafka/tools/sbin_jinja/so-kafka-generate-keystore +++ b/salt/kafka/tools/sbin_jinja/so-kafka-generate-keystore @@ -7,10 +7,7 @@ . /usr/sbin/so-common -if [ ! -f /etc/pki/kafka.jks ]; then - docker run -v /etc/pki/kafka.p12:/etc/pki/kafka.p12 --name so-kafka-keystore --user root --entrypoint keytool {{ GLOBALS.registry_host }}:5000/{{ GLOBALS.image_repo }}/so-kafka:{{ GLOBALS.so_version }} -importkeystore -srckeystore /etc/pki/kafka.p12 -srcstoretype PKCS12 -srcstorepass changeit -destkeystore /etc/pki/kafka.jks -deststoretype JKS -deststorepass changeit -noprompt - docker cp so-kafka-keystore:/etc/pki/kafka.jks /etc/pki/kafka.jks - docker rm so-kafka-keystore -else - exit 0 -fi +# Generate a new keystore +docker run -v /etc/pki/kafka.p12:/etc/pki/kafka.p12 --name so-kafka-keystore --user root --entrypoint keytool {{ GLOBALS.registry_host }}:5000/{{ GLOBALS.image_repo }}/so-kafka:{{ GLOBALS.so_version }} -importkeystore -srckeystore /etc/pki/kafka.p12 -srcstoretype PKCS12 -srcstorepass changeit -destkeystore /etc/pki/kafka.jks -deststoretype JKS -deststorepass changeit -noprompt +docker cp so-kafka-keystore:/etc/pki/kafka.jks /etc/pki/kafka.jks +docker rm so-kafka-keystore \ No newline at end of file From 436cbc1f0615228ee75bf674ca3e97e0106dcfe5 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Thu, 4 Apr 2024 16:21:29 -0400 Subject: [PATCH 025/507] Add kafka signing_policy for client/server auth. Add kafka-client cert on manager so manager can interact with kafka using its own cert Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/ca/files/signing_policies.conf | 14 ++++++ salt/ssl/init.sls | 77 +++++++++++++++++++++++++++-- 2 files changed, 86 insertions(+), 5 deletions(-) diff --git a/salt/ca/files/signing_policies.conf b/salt/ca/files/signing_policies.conf index 6f1b1f172..7f9c68750 100644 --- a/salt/ca/files/signing_policies.conf +++ b/salt/ca/files/signing_policies.conf @@ -70,3 +70,17 @@ x509_signing_policies: - authorityKeyIdentifier: keyid,issuer:always - days_valid: 820 - copypath: /etc/pki/issued_certs/ + kafka: + - minions: '*' + - signing_private_key: /etc/pki/ca.key + - signing_cert: /etc/pki/ca.crt + - C: US + - ST: Utah + - L: Salt Lake City + - basicConstraints: "critical CA:false" + - keyUsage: "digitalSignature, keyEncipherment" + - subjectKeyIdentifier: hash + - authorityKeyIdentifier: keyid,issuer:always + - extendedKeyUsage: "serverAuth, clientAuth" + - days_valid: 820 + - copypath: /etc/pki/issued_certs/ diff --git a/salt/ssl/init.sls b/salt/ssl/init.sls index e7b01bcd2..a99b030ff 100644 --- a/salt/ssl/init.sls +++ b/salt/ssl/init.sls @@ -687,7 +687,7 @@ kafka_crt: - name: /etc/pki/kafka.crt - ca_server: {{ ca_server }} - subjectAltName: DNS:{{ GLOBALS.hostname }}, IP:{{ GLOBALS.node_ip }} - - signing_policy: elasticfleet + - signing_policy: kafka - private_key: /etc/pki/kafka.key - CN: {{ GLOBALS.hostname }} - days_remaining: 0 @@ -704,7 +704,7 @@ kafka_crt: elasticfleet_kafka_key: x509.private_key_managed: - - name: /etc/pki/elasticfleet-kafka.keyn + - name: /etc/pki/elasticfleet-kafka.key - keysize: 4096 - backup: True - new: True @@ -720,7 +720,7 @@ elasticfleet_kafka_crt: x509.certificate_managed: - name: /etc/pki/elasticfleet-kafka.crt - ca_server: {{ ca_server }} - - signing_policy: elasticfleet + - signing_policy: kafka - private_key: /etc/pki/elasticfleet-kafka.key - CN: {{ GLOBALS.hostname }} - subjectAltName: DNS:{{ GLOBALS.hostname }}, IP:{{ GLOBALS.node_ip }} @@ -731,7 +731,58 @@ elasticfleet_kafka_crt: - retry: attempts: 5 interval: 30 + cmd.run: + - name: "/usr/bin/openssl pkcs8 -in /etc/pki/elasticfleet-kafka.key -topk8 -out /etc/pki/elasticfleet-kafka.p8 -nocrypt" + - onchanges: + - x509: elasticfleet_kafka_key +{% if grains['role'] in ['so-manager'] %} +kafka_client_key: + x509.private_key_managed: + - name: /etc/pki/kafka-client.key + - keysize: 4096 + - backup: True + - new: True + {% if salt['file.file_exists']('/etc/pki/kafka-client.key') -%} + - prereq: + - x509: /etc/pki/kafka-client.crt + {%- endif %} + - retry: + attempts: 5 + interval: 30 + +kafka_client_crt: + x509.certificate_managed: + - name: /etc/pki/kafka-client.crt + - ca_server: {{ ca_server }} + - subjectAltName: DNS:{{ GLOBALS.hostname }}, IP:{{ GLOBALS.node_ip }} + - signing_policy: kafka + - private_key: /etc/pki/kafka-client.key + - CN: {{ GLOBALS.hostname }} + - days_remaining: 0 + - days_valid: 820 + - backup: True + - timeout: 30 + - retry: + attempts: 5 + interval: 30 + +kafka_client_key_perms: + file.managed: + - replace: False + - name: /etc/pki/kafka-client.key + - mode: 640 + - user: 960 + - group: 939 + +kafka_client_crt_perms: + file.managed: + - replace: False + - name: /etc/pki/kafka-client.crt + - mode: 640 + - user: 960 + - group: 939 +{% endif %} kafka_key_perms: file.managed: - replace: False @@ -748,7 +799,23 @@ kafka_crt_perms: - user: 960 - group: 939 -kafka_logstash_cert_perms: +kafka_pkcs8_perms: + file.managed: + - replace: False + - name: /etc/pki/kafka.p8 + - mode: 640 + - user: 960 + - group: 939 + +kafka_pkcs12_perms: + file.managed: + - replace: False + - name: /etc/pki/kafka.p12 + - mode: 640 + - user: 960 + - group: 939 + +elasticfleet_kafka_cert_perms: file.managed: - replace: False - name: /etc/pki/elasticfleet-kafka.crt @@ -756,7 +823,7 @@ kafka_logstash_cert_perms: - user: 960 - group: 939 -kafka_logstash_key_perms: +elasticfleet_kafka_key_perms: file.managed: - replace: False - name: /etc/pki/elasticfleet-kafka.key From 735cfb4c29d5ec3e96ab2a81edb024af00465b0b Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Thu, 4 Apr 2024 16:45:58 -0400 Subject: [PATCH 026/507] Autogenerate kafka topics when a message it sent to non-existing topic Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/etc/server.properties.jinja | 1 + 1 file changed, 1 insertion(+) diff --git a/salt/kafka/etc/server.properties.jinja b/salt/kafka/etc/server.properties.jinja index 0032e1b32..486feb214 100644 --- a/salt/kafka/etc/server.properties.jinja +++ b/salt/kafka/etc/server.properties.jinja @@ -28,6 +28,7 @@ controller.quorum.voters={{ kraft_controller_quorum_voters }} listeners=BROKER://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093 #listeners=BROKER://{{ kafka_ip }}:9092,CONTROLLER://{{ kafka_ip }}:9093 +auto.create.topics.enable=true # Name of listener used for communication between brokers. inter.broker.listener.name=BROKER From 433309ef1a901591b4b6b1f60009cd25db5d6272 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Fri, 5 Apr 2024 09:35:12 -0400 Subject: [PATCH 027/507] Generate kafka cluster id if it doesn't exist Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/storage.sls | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/salt/kafka/storage.sls b/salt/kafka/storage.sls index 778c054e2..e99455e3d 100644 --- a/salt/kafka/storage.sls +++ b/salt/kafka/storage.sls @@ -6,7 +6,13 @@ {% from 'allowed_states.map.jinja' import allowed_states %} {% if sls.split('.')[0] in allowed_states %} {% from 'vars/globals.map.jinja' import GLOBALS %} -{% set kafka_cluster_id = salt['pillar.get']('secrets:kafka_cluster_id')%} +{% set kafka_cluster_id = salt['pillar.get']('secrets:kafka_cluster_id', default=None) %} + +{% if kafka_cluster_id is none %} +generate_kafka_cluster_id: + cmd.run: + - name: /usr/sbin/so-kafka-clusterid +{% endif %} {# Initialize kafka storage if it doesn't already exist. Just looking for meta.properties in /nsm/kafka/data #} {% if salt['file.file_exists']('/nsm/kafka/data/meta.properties') %} From 721e04f793701e635c957b5f0f23f189a2083cd8 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Fri, 5 Apr 2024 13:37:14 -0400 Subject: [PATCH 028/507] initial logstash input from kafka over ssl Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/logstash/enabled.sls | 2 - .../config/so/0800_input_kafka.conf.jinja | 55 +++++++++-------- salt/ssl/init.sls | 59 +++++++++++++++++++ 3 files changed, 89 insertions(+), 27 deletions(-) diff --git a/salt/logstash/enabled.sls b/salt/logstash/enabled.sls index 798b1984a..fcc2ec190 100644 --- a/salt/logstash/enabled.sls +++ b/salt/logstash/enabled.sls @@ -78,8 +78,6 @@ so-logstash: {% if GLOBALS.role in ['so-manager', 'so-managersearch', 'so-standalone', 'so-import', 'so-heavynode', 'so-searchnode', 'so-kafkanode' ] %} - /opt/so/conf/ca/cacerts:/etc/pki/ca-trust/extracted/java/cacerts:ro - /opt/so/conf/ca/tls-ca-bundle.pem:/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem:ro - {% endif %} - {% if GLOBALS.role in ['so-kafkanode'] %} - /etc/pki/kafka-logstash.p12:/usr/share/logstash/kafka-logstash.p12:ro {% endif %} {% if GLOBALS.role == 'so-eval' %} diff --git a/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja b/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja index c1429319a..957f7da19 100644 --- a/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja +++ b/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja @@ -1,26 +1,31 @@ -{% set kafka_brokers = salt['pillar.get']('logstash:nodes:kafkanode', {}) %} -{% set broker_ips = [] %} -{% for node, node_data in kafka_brokers.items() %} - {% do broker_ips.append(node_data['ip'] + ":9092") %} -{% endfor %} - -{% set bootstrap_servers = "','".join(broker_ips) %} - - -#Run on searchnodes ingest kafka topic(s) group_id allows load balancing of event ingest to all searchnodes -input { - kafka { - codec => json - #Can ingest multiple topics. Set to a value from SOC UI? - topics => ['logstash-topic',] - group_id => 'searchnodes' - security_protocol => 'SSL' - bootstrap_servers => {{ bootstrap_servers }} - ssl_keystore_location => '/usr/share/logstash/kafka-logstash.p12' - ssl_keystore_password => '' - ssl_keystore_type => 'PKCS12' - ssl_truststore_location => '/etc/pki/ca-trust/extracted/java/cacerts' - # Set password as a pillar to avoid bad optics? This is default truststore for grid - ssl_truststore_password => 'changeit' - } +{% set kafka_brokers = salt['pillar.get']('logstash:nodes:kafkanode', {}) %} +{% set kafka_on_mngr = salt ['pillar.get']('logstash:nodes:manager', {}) %} +{% set broker_ips = [] %} +{% for node, node_data in kafka_brokers.items() %} + {% do broker_ips.append(node_data['ip'] + ":9092") %} +{% endfor %} + +{# For testing kafka stuff from manager not dedicated kafkanodes #} +{% for node, node_data in kafka_on_mngr.items() %} + {% do broker_ips.append(node_data['ip'] + ":9092") %} +{% endfor %} +{% set bootstrap_servers = "','".join(broker_ips) %} + + +#Run on searchnodes ingest kafka topic(s) group_id allows load balancing of event ingest to all searchnodes +input { + kafka { + codec => json + #Can ingest multiple topics. Set to a value from SOC UI? + topics => ['ea-logs'] + group_id => 'searchnodes' + security_protocol => 'SSL' + bootstrap_servers => '{{ bootstrap_servers }}' + ssl_keystore_location => '/usr/share/logstash/kafka-logstash.p12' + ssl_keystore_password => 'changeit' + ssl_keystore_type => 'PKCS12' + ssl_truststore_location => '/etc/pki/ca-trust/extracted/java/cacerts' + # Set password as a pillar to avoid bad optics? This is default truststore for grid + ssl_truststore_password => 'changeit' + } } \ No newline at end of file diff --git a/salt/ssl/init.sls b/salt/ssl/init.sls index a99b030ff..90f9cc64f 100644 --- a/salt/ssl/init.sls +++ b/salt/ssl/init.sls @@ -736,6 +736,40 @@ elasticfleet_kafka_crt: - onchanges: - x509: elasticfleet_kafka_key +kafka_logstash_key: + x509.private_key_managed: + - name: /etc/pki/kafka-logstash.key + - keysize: 4096 + - backup: True + - new: True + {% if salt['file.file_exists']('/etc/pki/kafka-logstash.key') -%} + - prereq: + - x509: /etc/pki/kafka-logstash.crt + {%- endif %} + - retry: + attempts: 5 + interval: 30 + +kafka_logstash_crt: + x509.certificate_managed: + - name: /etc/pki/kafka-logstash.crt + - ca_server: {{ ca_server }} + - subjectAltName: DNS:{{ GLOBALS.hostname }}, IP:{{ GLOBALS.node_ip }} + - signing_policy: kafka + - private_key: /etc/pki/kafka-logstash.key + - CN: {{ GLOBALS.hostname }} + - days_remaining: 0 + - days_valid: 820 + - backup: True + - timeout: 30 + - retry: + attempts: 5 + interval: 30 + cmd.run: + - name: "/usr/bin/openssl pkcs12 -inkey /etc/pki/kafka-logstash.key -in /etc/pki/kafka-logstash.crt -export -out /etc/pki/kafka-logstash.p12 -nodes -passout pass:changeit" + - onchanges: + - x509: /etc/pki/kafka-logstash.key + {% if grains['role'] in ['so-manager'] %} kafka_client_key: x509.private_key_managed: @@ -783,6 +817,7 @@ kafka_client_crt_perms: - user: 960 - group: 939 {% endif %} + kafka_key_perms: file.managed: - replace: False @@ -799,6 +834,30 @@ kafka_crt_perms: - user: 960 - group: 939 +kafka_logstash_key_perms: + file.managed: + - replace: False + - name: /etc/pki/kafka-logstash.key + - mode: 640 + - user: 960 + - group: 939 + +kafka_logstash_crt_perms: + file.managed: + - replace: False + - name: /etc/pki/kafka-logstash.crt + - mode: 640 + - user: 960 + - group: 939 + +kafka_logstash_pkcs12_perms: + file.managed: + - replace: False + - name: /etc/pki/kafka-logstash.p12 + - mode: 640 + - user: 960 + - group: 931 + kafka_pkcs8_perms: file.managed: - replace: False From 65274e89d7c8741fe63536e030483c2e2af21665 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Fri, 5 Apr 2024 15:38:00 -0400 Subject: [PATCH 029/507] Add client_id to logstash pipeline. To identify which searchnode is pulling messages Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja | 1 + 1 file changed, 1 insertion(+) diff --git a/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja b/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja index 957f7da19..0260b774e 100644 --- a/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja +++ b/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja @@ -19,6 +19,7 @@ input { #Can ingest multiple topics. Set to a value from SOC UI? topics => ['ea-logs'] group_id => 'searchnodes' + client_id => '{{ GLOBALS.hostname }}' security_protocol => 'SSL' bootstrap_servers => '{{ bootstrap_servers }}' ssl_keystore_location => '/usr/share/logstash/kafka-logstash.p12' From d67ebabc951cfaf226b176f6eb458ec2b4c35127 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Mon, 8 Apr 2024 16:38:03 -0400 Subject: [PATCH 030/507] Remove logstash output to kafka pipeline. Add additional topics for searchnodes to ingest and add partition/offset info to event Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- .../config/so/0800_input_kafka.conf.jinja | 15 ++++++++----- .../config/so/0899_output_kafka.conf.jinja | 22 ------------------- 2 files changed, 10 insertions(+), 27 deletions(-) delete mode 100644 salt/logstash/pipelines/config/so/0899_output_kafka.conf.jinja diff --git a/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja b/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja index 0260b774e..1391ce983 100644 --- a/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja +++ b/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja @@ -11,13 +11,10 @@ {% endfor %} {% set bootstrap_servers = "','".join(broker_ips) %} - -#Run on searchnodes ingest kafka topic(s) group_id allows load balancing of event ingest to all searchnodes input { kafka { codec => json - #Can ingest multiple topics. Set to a value from SOC UI? - topics => ['ea-logs'] + topics => ['default-logs', 'kratos-logs', 'soc-logs', 'strelka-logs', 'suricata-logs', 'zeek-logs'] group_id => 'searchnodes' client_id => '{{ GLOBALS.hostname }}' security_protocol => 'SSL' @@ -26,7 +23,15 @@ input { ssl_keystore_password => 'changeit' ssl_keystore_type => 'PKCS12' ssl_truststore_location => '/etc/pki/ca-trust/extracted/java/cacerts' - # Set password as a pillar to avoid bad optics? This is default truststore for grid ssl_truststore_password => 'changeit' + decorate_events => true + tags => [ "elastic-agent", "input-{{ GLOBALS.hostname}}", "kafka" ] } +} +filter { + if ![metadata] { + mutate { + rename => { "@metadata" => "metadata" } + } + } } \ No newline at end of file diff --git a/salt/logstash/pipelines/config/so/0899_output_kafka.conf.jinja b/salt/logstash/pipelines/config/so/0899_output_kafka.conf.jinja deleted file mode 100644 index ff9a6f6ee..000000000 --- a/salt/logstash/pipelines/config/so/0899_output_kafka.conf.jinja +++ /dev/null @@ -1,22 +0,0 @@ -{% set kafka_brokers = salt['pillar.get']('logstash:nodes:kafkanode', {}) %} -{% set broker_ips = [] %} -{% for node, node_data in kafka_brokers.items() %} - {% do broker_ips.append(node_data['ip'] + ":9092") %} -{% endfor %} - -{% set bootstrap_servers = "','".join(broker_ips) %} - -#Run on kafka broker logstash writes to topic 'logstash-topic' -output { - kafka { - codec => json - topic_id => 'logstash-topic' - bootstrap_servers => '{{ bootstrap_servers }}' - security_protocol => 'SSL' - ssl_keystore_location => '/usr/share/logstash/kafka-logstash.p12' - ssl_keystore_password => '' - ssl_keystore_type => 'PKCS12' - ssl_truststore_location => '/etc/pki/ca-trust/extracted/java/cacerts' - ssl_truststore_password => 'changeit' - } -} \ No newline at end of file From 6217a7b9a94a972ecab3e76a436cadf76ce3f4ab Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Tue, 9 Apr 2024 09:27:21 -0400 Subject: [PATCH 031/507] add defaults and jijafy kafka config --- salt/kafka/config.map.jinja | 8 ++ salt/kafka/config.sls | 12 +-- salt/kafka/defaults.yaml | 39 ++++++++ salt/kafka/enabled.sls | 17 ++-- salt/kafka/etc/client.properties.jinja | 2 + salt/kafka/etc/server.properties.jinja | 130 +------------------------ salt/kafka/map.jinja | 15 +++ 7 files changed, 81 insertions(+), 142 deletions(-) create mode 100644 salt/kafka/config.map.jinja create mode 100644 salt/kafka/defaults.yaml create mode 100644 salt/kafka/etc/client.properties.jinja create mode 100644 salt/kafka/map.jinja diff --git a/salt/kafka/config.map.jinja b/salt/kafka/config.map.jinja new file mode 100644 index 000000000..ab43d84a9 --- /dev/null +++ b/salt/kafka/config.map.jinja @@ -0,0 +1,8 @@ +{% from 'vars/globals.map.jinja' import GLOBALS %} +{% from 'kafka/map.jinja' import KAFKAMERGED %} + +{% set KAFKACONFIG = {} %} +{% for k, v in KAFKAMERGED.config.keys() %} +{% do KAFKACONFIG.update({k | replace("_x_", "."): v}) %} +{% endfor %} + diff --git a/salt/kafka/config.sls b/salt/kafka/config.sls index dedc68fe8..523681ba0 100644 --- a/salt/kafka/config.sls +++ b/salt/kafka/config.sls @@ -94,19 +94,17 @@ kafka_keystore_perms: - user: 960 - group: 939 -kafka_kraft_server_properties: +{% for sc in ['server', 'client'] %} +kafka_kraft_{{type}}_properties: file.managed: - - source: salt://kafka/etc/server.properties.jinja - - name: /opt/so/conf/kafka/server.properties + - source: salt://kafka/etc/{{sc}}.properties.jinja + - name: /opt/so/conf/kafka/{{sc}}.properties - template: jinja - - defaults: - kafka_nodeid: {{ kafka_nodeid }} - kraft_controller_quorum_voters: {{ kraft_controller_quorum_voters }} - kafka_ip: {{ kafka_ip }} - user: 960 - group: 960 - makedirs: True - show_changes: False +{% endfor %} {% else %} diff --git a/salt/kafka/defaults.yaml b/salt/kafka/defaults.yaml new file mode 100644 index 000000000..7828f0536 --- /dev/null +++ b/salt/kafka/defaults.yaml @@ -0,0 +1,39 @@ +kafka: + enabled: False + config: + server: + advertised_x_listeners: BROKER://10.66.166.231:9092 + auto_x_create_x_topics_x_enable: true + controller_x_listener_x_names: CONTROLLER + controller_x_quorum_x_voters: + inter_x_broker_x_listener_x_name: BROKER + listeners: BROKER://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093 + listener_x_security_x_protocol_x_map: CONTROLLER:SSL,BROKER:SSL + log_x_dirs: /nsm/kafka/data + log_x_retention_x_check_x_interval_x_ms: 300000 + log_x_retention_x_hours: 168 + log_x_segment_x_bytes: 1073741824 + node_x_id: + num_x_io_x_threads: 8 + num_x_network_x_threads: 3 + num_x_partitions: 1 + num_x_recovery_x_threads_x_per_x_data_x_dir: 1 + offsets_x_topic_x_replication_x_factor: 1 + process_x_roles: broker,controller + socket_x_receive_x_buffer_x_bytes: 102400 + socket_x_request_x_max_x_bytes: 104857600 + socket_x_send_x_buffer_x_bytes: 102400 + ssl_x_keystore_x_location: /etc/pki/kafka.jks + ssl_x_keystore_x_password: changeit + ssl_x_keystore_x_type: JKS + ssl_x_truststore_x_location: /etc/pki/java/sos/cacerts + ssl_x_truststore_x_password: changeit + transaction_x_state_x_log_x_min_x_isr: 1 + transaction_x_state_x_log_x_replication_x_factor: 1 + client: + security_x_protocol: SSL + ssl_x_truststore_x_location: /etc/pki/java/sos/cacerts + ssl_x_truststore_x_password: changeit + ssl_x_keystore_x_location: /etc/pki/kafka.jks + ssl_x_keystore_x_type: JKS + ssl_x_keystore_x_password: changeit diff --git a/salt/kafka/enabled.sls b/salt/kafka/enabled.sls index 49a0a9bbd..c2fca70db 100644 --- a/salt/kafka/enabled.sls +++ b/salt/kafka/enabled.sls @@ -26,14 +26,14 @@ so-kafka: - environment: - KAFKA_HEAP_OPTS=-Xmx2G -Xms1G - extra_hosts: - {% for node in KAFKANODES %} + {% for node in KAFKANODES %} - {{ node }}:{{ KAFKANODES[node].ip }} - {% endfor %} - {% if DOCKER.containers['so-kafka'].extra_hosts %} - {% for XTRAHOST in DOCKER.containers['so-kafka'].extra_hosts %} + {% endfor %} + {% if DOCKER.containers['so-kafka'].extra_hosts %} + {% for XTRAHOST in DOCKER.containers['so-kafka'].extra_hosts %} - {{ XTRAHOST }} - {% endfor %} - {% endif %} + {% endfor %} + {% endif %} - port_bindings: {% for BINDING in DOCKER.containers['so-kafka'].port_bindings %} - {{ BINDING }} @@ -43,8 +43,11 @@ so-kafka: - /opt/so/conf/ca/cacerts:/etc/pki/java/sos/cacerts - /nsm/kafka/data/:/nsm/kafka/data/:rw - /opt/so/conf/kafka/server.properties:/kafka/config/kraft/server.properties + - /opt/so/conf/kafka/client.properties:/kafka/config/kraft/client.properties - watch: - - file: kafka_kraft_server_properties + {% for sc in ['server', 'client'] %} + - file: kafka_kraft_{{sc}}_properties + {% endfor %} delete_so-kafka_so-status.disabled: file.uncomment: diff --git a/salt/kafka/etc/client.properties.jinja b/salt/kafka/etc/client.properties.jinja new file mode 100644 index 000000000..9f01904e4 --- /dev/null +++ b/salt/kafka/etc/client.properties.jinja @@ -0,0 +1,2 @@ +{%- from 'kafka/config.map.jinja' import KAFKACONFIG %} +{{ KAFKACONFIG.client }} diff --git a/salt/kafka/etc/server.properties.jinja b/salt/kafka/etc/server.properties.jinja index 486feb214..a18262ac2 100644 --- a/salt/kafka/etc/server.properties.jinja +++ b/salt/kafka/etc/server.properties.jinja @@ -1,128 +1,2 @@ -# This configuration file is intended for use in KRaft mode, where -# Apache ZooKeeper is not present. See config/kraft/README.md for details. -# - -############################# Server Basics ############################# - -# The role of this server. Setting this puts us in KRaft mode -process.roles=broker,controller - -# The node id associated with this instance's roles -node.id={{ kafka_nodeid }} - -# The connect string for the controller quorum -controller.quorum.voters={{ kraft_controller_quorum_voters }} - -############################# Socket Server Settings ############################# - -# The address the socket server listens on. -# Combined nodes (i.e. those with `process.roles=broker,controller`) must list the controller listener here at a minimum. -# If the broker listener is not defined, the default listener will use a host name that is equal to the value of java.net.InetAddress.getCanonicalHostName(), -# with PLAINTEXT listener name, and port 9092. -# FORMAT: -# listeners = listener_name://host_name:port -# EXAMPLE: -# listeners = PLAINTEXT://your.host.name:9092 - -# using 0.0.0.0 eliminates issues with binding to 9092 and 9093 in initial testing -listeners=BROKER://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093 -#listeners=BROKER://{{ kafka_ip }}:9092,CONTROLLER://{{ kafka_ip }}:9093 - -auto.create.topics.enable=true - -# Name of listener used for communication between brokers. -inter.broker.listener.name=BROKER - -# Listener name, hostname and port the broker will advertise to clients. -# If not set, it uses the value for "listeners". -advertised.listeners=BROKER://{{ kafka_ip }}:9092 - -# A comma-separated list of the names of the listeners used by the controller. -# If no explicit mapping set in `listener.security.protocol.map`, default will be using PLAINTEXT protocol -# This is required if running in KRaft mode. -controller.listener.names=CONTROLLER - -# Maps listener names to security protocols, the default is for them to be the same. See the config documentation for more details -listener.security.protocol.map=CONTROLLER:SSL,BROKER:SSL - -#SSL configuration -ssl.keystore.location=/etc/pki/kafka.jks -ssl.keystore.password=changeit -ssl.keystore.type=JKS -ssl.truststore.location=/etc/pki/java/sos/cacerts -ssl.truststore.password=changeit - -# The number of threads that the server uses for receiving requests from the network and sending responses to the network -num.network.threads=3 - -# The number of threads that the server uses for processing requests, which may include disk I/O -num.io.threads=8 - -# The send buffer (SO_SNDBUF) used by the socket server -socket.send.buffer.bytes=102400 - -# The receive buffer (SO_RCVBUF) used by the socket server -socket.receive.buffer.bytes=102400 - -# The maximum size of a request that the socket server will accept (protection against OOM) -socket.request.max.bytes=104857600 - - -############################# Log Basics ############################# - -# A comma separated list of directories under which to store log files -log.dirs=/nsm/kafka/data - -# The default number of log partitions per topic. More partitions allow greater -# parallelism for consumption, but this will also result in more files across -# the brokers. -num.partitions=1 - -# The number of threads per data directory to be used for log recovery at startup and flushing at shutdown. -# This value is recommended to be increased for installations with data dirs located in RAID array. -num.recovery.threads.per.data.dir=1 - -############################# Internal Topic Settings ############################# -# The replication factor for the group metadata internal topics "__consumer_offsets" and "__transaction_state" -# For anything other than development testing, a value greater than 1 is recommended to ensure availability such as 3. -offsets.topic.replication.factor=1 -transaction.state.log.replication.factor=1 -transaction.state.log.min.isr=1 - -############################# Log Flush Policy ############################# - -# Messages are immediately written to the filesystem but by default we only fsync() to sync -# the OS cache lazily. The following configurations control the flush of data to disk. -# There are a few important trade-offs here: -# 1. Durability: Unflushed data may be lost if you are not using replication. -# 2. Latency: Very large flush intervals may lead to latency spikes when the flush does occur as there will be a lot of data to flush. -# 3. Throughput: The flush is generally the most expensive operation, and a small flush interval may lead to excessive seeks. -# The settings below allow one to configure the flush policy to flush data after a period of time or -# every N messages (or both). This can be done globally and overridden on a per-topic basis. - -# The number of messages to accept before forcing a flush of data to disk -#log.flush.interval.messages=10000 - -# The maximum amount of time a message can sit in a log before we force a flush -#log.flush.interval.ms=1000 - -############################# Log Retention Policy ############################# - -# The following configurations control the disposal of log segments. The policy can -# be set to delete segments after a period of time, or after a given size has accumulated. -# A segment will be deleted whenever *either* of these criteria are met. Deletion always happens -# from the end of the log. - -# The minimum age of a log file to be eligible for deletion due to age -log.retention.hours=168 - -# A size-based retention policy for logs. Segments are pruned from the log unless the remaining -# segments drop below log.retention.bytes. Functions independently of log.retention.hours. -#log.retention.bytes=1073741824 - -# The maximum size of a log segment file. When this size is reached a new log segment will be created. -log.segment.bytes=1073741824 - -# The interval at which log segments are checked to see if they can be deleted according -# to the retention policies -log.retention.check.interval.ms=300000 +{%- from 'kafka/config.map.jinja' import KAFKACONFIG %} +{{ KAFKACONFIG.server }} diff --git a/salt/kafka/map.jinja b/salt/kafka/map.jinja new file mode 100644 index 000000000..f0e389e4a --- /dev/null +++ b/salt/kafka/map.jinja @@ -0,0 +1,15 @@ +{% import_yaml 'kafka/defaults.yaml' as KAFKADEFAULTS %} +{% set KAFKAMERGED = salt['pillar.get']('kafka', KAFKADEFAULTS.kafka, merge=True) %} +{% from 'vars/globals.map.jinja' import GLOBALS %} + +{% set KAFKAMERGED.config.server.node_x_id = salt['pillar.get']('kafka:nodes:' ~ GLOBALS.hostname ~ ':nodeid') %} +{% set KAFKAMERGED.config.server.advertised_x_listeners = 'BROKER://' ~ GLOBALS.node_ip ~ ':9092' %} + +{% set nodes = salt['pillar.get']('kafka:nodes', {}) %} +{% set combined = [] %} +{% for hostname, data in nodes.items() %} + {% do combined.append(data.nodeid ~ "@" ~ hostname ~ ":9093") %} +{% endfor %} +{% set kraft_controller_quorum_voters = ','.join(combined) %} + +{% set KAFKAMERGED.config.server.controller_x_quorum_x_voters = kraft_controller_quorum_voters %} From 7aa00faa6c37bbe87ab4c4ed36647a9c1c25f6be Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Tue, 9 Apr 2024 09:31:54 -0400 Subject: [PATCH 032/507] fix var --- salt/kafka/config.sls | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/kafka/config.sls b/salt/kafka/config.sls index 523681ba0..1666e65ae 100644 --- a/salt/kafka/config.sls +++ b/salt/kafka/config.sls @@ -95,7 +95,7 @@ kafka_keystore_perms: - group: 939 {% for sc in ['server', 'client'] %} -kafka_kraft_{{type}}_properties: +kafka_kraft_{{sc}}_properties: file.managed: - source: salt://kafka/etc/{{sc}}.properties.jinja - name: /opt/so/conf/kafka/{{sc}}.properties From c48436ccbf2f542954b2e46585c005a3203d27be Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Tue, 9 Apr 2024 10:19:17 -0400 Subject: [PATCH 033/507] fix dict update --- salt/kafka/map.jinja | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/salt/kafka/map.jinja b/salt/kafka/map.jinja index f0e389e4a..f1da7ec95 100644 --- a/salt/kafka/map.jinja +++ b/salt/kafka/map.jinja @@ -2,8 +2,8 @@ {% set KAFKAMERGED = salt['pillar.get']('kafka', KAFKADEFAULTS.kafka, merge=True) %} {% from 'vars/globals.map.jinja' import GLOBALS %} -{% set KAFKAMERGED.config.server.node_x_id = salt['pillar.get']('kafka:nodes:' ~ GLOBALS.hostname ~ ':nodeid') %} -{% set KAFKAMERGED.config.server.advertised_x_listeners = 'BROKER://' ~ GLOBALS.node_ip ~ ':9092' %} +{% do KAFKAMERGED.config.server.update({ 'node_x_id': salt['pillar.get']('kafka:nodes:' ~ GLOBALS.hostname ~ ':nodeid')}) %} +{% do KAFKAMERGED.config.server.update({'advertised_x_listeners': 'BROKER://' ~ GLOBALS.node_ip ~ ':9092'}) %} {% set nodes = salt['pillar.get']('kafka:nodes', {}) %} {% set combined = [] %} @@ -12,4 +12,4 @@ {% endfor %} {% set kraft_controller_quorum_voters = ','.join(combined) %} -{% set KAFKAMERGED.config.server.controller_x_quorum_x_voters = kraft_controller_quorum_voters %} +{% do KAFKAMERGED.config.server.update({'controller_x_quorum_x_voters': kraft_controller_quorum_voters}) %} From daa5342986b2bf5cf7b3106888d4a0cf89048008 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Tue, 9 Apr 2024 10:22:05 -0400 Subject: [PATCH 034/507] items not keys in for loop --- salt/kafka/config.map.jinja | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/kafka/config.map.jinja b/salt/kafka/config.map.jinja index ab43d84a9..33f9f8387 100644 --- a/salt/kafka/config.map.jinja +++ b/salt/kafka/config.map.jinja @@ -2,7 +2,7 @@ {% from 'kafka/map.jinja' import KAFKAMERGED %} {% set KAFKACONFIG = {} %} -{% for k, v in KAFKAMERGED.config.keys() %} +{% for k, v in KAFKAMERGED.config.items() %} {% do KAFKACONFIG.update({k | replace("_x_", "."): v}) %} {% endfor %} From d38051e806c505bc1023291f90197b7c5dab7500 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Tue, 9 Apr 2024 10:36:37 -0400 Subject: [PATCH 035/507] fix client and server properties formatting --- salt/kafka/etc/client.properties.jinja | 4 ++-- salt/kafka/etc/server.properties.jinja | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/salt/kafka/etc/client.properties.jinja b/salt/kafka/etc/client.properties.jinja index 9f01904e4..1353ac491 100644 --- a/salt/kafka/etc/client.properties.jinja +++ b/salt/kafka/etc/client.properties.jinja @@ -1,2 +1,2 @@ -{%- from 'kafka/config.map.jinja' import KAFKACONFIG %} -{{ KAFKACONFIG.client }} +{% from 'kafka/config.map.jinja' import KAFKACONFIG -%} +{{ KAFKACONFIG.client | yaml(False) }} diff --git a/salt/kafka/etc/server.properties.jinja b/salt/kafka/etc/server.properties.jinja index a18262ac2..b02730faa 100644 --- a/salt/kafka/etc/server.properties.jinja +++ b/salt/kafka/etc/server.properties.jinja @@ -1,2 +1,2 @@ -{%- from 'kafka/config.map.jinja' import KAFKACONFIG %} -{{ KAFKACONFIG.server }} +{% from 'kafka/config.map.jinja' import KAFKACONFIG -%} +{{ KAFKACONFIG.server | yaml(False) }} From bd5fe4328561017b87d78493867d1f410e83ffc1 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Tue, 9 Apr 2024 11:07:53 -0400 Subject: [PATCH 036/507] jinja config files --- salt/kafka/config.map.jinja | 8 -------- salt/kafka/config.sls | 9 --------- salt/kafka/etc/client.properties.jinja | 4 ++-- salt/kafka/etc/server.properties.jinja | 4 ++-- 4 files changed, 4 insertions(+), 21 deletions(-) delete mode 100644 salt/kafka/config.map.jinja diff --git a/salt/kafka/config.map.jinja b/salt/kafka/config.map.jinja deleted file mode 100644 index 33f9f8387..000000000 --- a/salt/kafka/config.map.jinja +++ /dev/null @@ -1,8 +0,0 @@ -{% from 'vars/globals.map.jinja' import GLOBALS %} -{% from 'kafka/map.jinja' import KAFKAMERGED %} - -{% set KAFKACONFIG = {} %} -{% for k, v in KAFKAMERGED.config.items() %} -{% do KAFKACONFIG.update({k | replace("_x_", "."): v}) %} -{% endfor %} - diff --git a/salt/kafka/config.sls b/salt/kafka/config.sls index 1666e65ae..c856c4f80 100644 --- a/salt/kafka/config.sls +++ b/salt/kafka/config.sls @@ -10,16 +10,8 @@ {% set kafka_ips_logstash = [] %} {% set kafka_ips_kraft = [] %} {% set kafkanodes = salt['pillar.get']('kafka:nodes', {}) %} -{% set kafka_nodeid = salt['pillar.get']('kafka:nodes:' ~ GLOBALS.hostname ~ ':nodeid') %} {% set kafka_ip = GLOBALS.node_ip %} -{% set nodes = salt['pillar.get']('kafka:nodes', {}) %} -{% set combined = [] %} -{% for hostname, data in nodes.items() %} - {% do combined.append(data.nodeid ~ "@" ~ hostname ~ ":9093") %} -{% endfor %} -{% set kraft_controller_quorum_voters = ','.join(combined) %} - {# Create list for kafka <-> logstash/searchnode communcations #} {% for node, node_data in kafkanodes.items() %} {% do kafka_ips_logstash.append(node_data['ip'] + ":9092") %} @@ -32,7 +24,6 @@ {% endfor %} {% set kraft_server_list = "','".join(kafka_ips_kraft) %} - include: - ssl diff --git a/salt/kafka/etc/client.properties.jinja b/salt/kafka/etc/client.properties.jinja index 1353ac491..0245c3c42 100644 --- a/salt/kafka/etc/client.properties.jinja +++ b/salt/kafka/etc/client.properties.jinja @@ -1,2 +1,2 @@ -{% from 'kafka/config.map.jinja' import KAFKACONFIG -%} -{{ KAFKACONFIG.client | yaml(False) }} +{% from 'kafka/map.jinja' import KAFKAMERGED -%} +{{ KAFKAMERGED.config.client | yaml(False) | replace("_x_", ".") }} diff --git a/salt/kafka/etc/server.properties.jinja b/salt/kafka/etc/server.properties.jinja index b02730faa..90a80063f 100644 --- a/salt/kafka/etc/server.properties.jinja +++ b/salt/kafka/etc/server.properties.jinja @@ -1,2 +1,2 @@ -{% from 'kafka/config.map.jinja' import KAFKACONFIG -%} -{{ KAFKACONFIG.server | yaml(False) }} +{% from 'kafka/map.jinja' import KAFKAMERGED -%} +{{ KAFKAMERGED.config.server | yaml(False) | replace("_x_", ".") }} From 86b984001d4088eb24449f522ded6c6ebc616f37 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Wed, 10 Apr 2024 10:39:06 -0400 Subject: [PATCH 037/507] annotations and enable/disable from ui --- salt/kafka/disabled.sls | 16 +++ salt/kafka/etc/client.properties.jinja | 5 + salt/kafka/etc/server.properties.jinja | 5 + salt/kafka/init.sls | 8 +- salt/kafka/map.jinja | 5 + salt/kafka/soc_kafka.yaml | 164 +++++++++++++++++++++++++ 6 files changed, 201 insertions(+), 2 deletions(-) create mode 100644 salt/kafka/disabled.sls create mode 100644 salt/kafka/soc_kafka.yaml diff --git a/salt/kafka/disabled.sls b/salt/kafka/disabled.sls new file mode 100644 index 000000000..6658f0c5e --- /dev/null +++ b/salt/kafka/disabled.sls @@ -0,0 +1,16 @@ +# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one +# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +# https://securityonion.net/license; you may not use this file except in compliance with the +# Elastic License 2.0. + +include: + - kafka.sostatus + +so-kafka: + docker_container.absent: + - force: True + +so-kafka_so-status.disabled: + file.comment: + - name: /opt/so/conf/so-status/so-status.conf + - regex: ^so-kafka$ diff --git a/salt/kafka/etc/client.properties.jinja b/salt/kafka/etc/client.properties.jinja index 0245c3c42..91ff5f7c2 100644 --- a/salt/kafka/etc/client.properties.jinja +++ b/salt/kafka/etc/client.properties.jinja @@ -1,2 +1,7 @@ +{# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one + or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at + https://securityonion.net/license; you may not use this file except in compliance with the + Elastic License 2.0. #} + {% from 'kafka/map.jinja' import KAFKAMERGED -%} {{ KAFKAMERGED.config.client | yaml(False) | replace("_x_", ".") }} diff --git a/salt/kafka/etc/server.properties.jinja b/salt/kafka/etc/server.properties.jinja index 90a80063f..df5632ba9 100644 --- a/salt/kafka/etc/server.properties.jinja +++ b/salt/kafka/etc/server.properties.jinja @@ -1,2 +1,7 @@ +{# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one + or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at + https://securityonion.net/license; you may not use this file except in compliance with the + Elastic License 2.0. #} + {% from 'kafka/map.jinja' import KAFKAMERGED -%} {{ KAFKAMERGED.config.server | yaml(False) | replace("_x_", ".") }} diff --git a/salt/kafka/init.sls b/salt/kafka/init.sls index 903c66867..b4a6a28b0 100644 --- a/salt/kafka/init.sls +++ b/salt/kafka/init.sls @@ -3,7 +3,11 @@ # https://securityonion.net/license; you may not use this file except in compliance with the # Elastic License 2.0. -{# Create map.jinja to enable / disable kafka from UI #} -{# Temporarily just enable kafka #} +{% from 'kafka/map.jinja' import KAFKAMERGED %} + include: +{% if KAFKAMERGED.enabled %} - kafka.enabled +{% else %} + - kafka.disabled +{% endif %} diff --git a/salt/kafka/map.jinja b/salt/kafka/map.jinja index f1da7ec95..771e6102b 100644 --- a/salt/kafka/map.jinja +++ b/salt/kafka/map.jinja @@ -1,3 +1,8 @@ +{# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one + or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at + https://securityonion.net/license; you may not use this file except in compliance with the + Elastic License 2.0. #} + {% import_yaml 'kafka/defaults.yaml' as KAFKADEFAULTS %} {% set KAFKAMERGED = salt['pillar.get']('kafka', KAFKADEFAULTS.kafka, merge=True) %} {% from 'vars/globals.map.jinja' import GLOBALS %} diff --git a/salt/kafka/soc_kafka.yaml b/salt/kafka/soc_kafka.yaml new file mode 100644 index 000000000..c16ff212e --- /dev/null +++ b/salt/kafka/soc_kafka.yaml @@ -0,0 +1,164 @@ +kafka: + enabled: + description: Enable or disable Kafka. + helpLink: kafka.html + config: + server: + advertised_x_listeners: + description: Specify the list of listeners (hostname and port) that Kafka brokers provide to clients for communication. + title: advertised.listeners + helpLink: kafka.html + auto_x_create_x_topics_x_enable: + description: Enable the auto creation of topics. + title: auto.create.topics.enable + forcedType: bool + helpLink: kafka.html + controller_x_listener_x_names: + description: Set listeners used by the controller in a comma-seperated list. + title: controller.listener.names + helpLink: kafka.html + controller_x_quorum_x_voters: + description: A comma-seperated list of ID and endpoint information mapped for a set of voters. + title: controller.quorum.voters + helpLink: kafka.html + inter_x_broker_x_listener_x_name: + description: The name of the listener used for inter-broker communication. + title: inter.broker.listener.name + helpLink: kafka.html + listeners: + description: Set of URIs that is listened on and the listener names in a comma-seperated list. + helpLink: kafka.html + listener_x_security_x_protocol_x_map: + description: Comma-seperated mapping of listener name and security protocols. + title: listener.security.protocol.map + helpLink: kafka.html + log_x_dirs: + description: Where Kafka logs are stored within the Docker container. + title: log.dirs + helpLink: kafka.html + log_x_retention_x_check_x_interval_x_ms: + description: Frequency at which log files are checked if they are qualified for deletion. + title: log.retention.check.interval.ms + helpLink: kafka.html + log_x_retention_x_hours: + description: How long, in hours, a log file is kept. + title: log.retention.hours + forcedType: int + helpLink: kafka.html + log_x_segment_x_bytes: + description: The maximum allowable size for a log file. + title: log.segment.bytes + forcedType: int + helpLink: kafka.html + node_x_id: + description: The node ID corresponds to the roles performed by this process whenever process.roles is populated. + title: node.id + forcedType: int + readonly: True + helpLink: kafka.html + num_x_io_x_threads: + description: The number of threads used by Kafka. + title: num.io.threads + forcedType: int + helpLink: kafka.html + num_x_network_x_threads: + description: The number of threads used for network communication. + title: num.network.threads + forcedType: int + helpLink: kafka.html + num_x_partitions: + description: The number of log partitions assigned per topic. + title: num.partitions + forcedType: int + helpLink: kafka.html + num_x_recovery_x_threads_x_per_x_data_x_dir: + description: The number of threads used for log recuperation at startup and purging at shutdown. This ammount of threads is used per data directory. + title: num.recovery.threads.per.data.dir + forcedType: int + helpLink: kafka.html + offsets_x_topic_x_replication_x_factor: + description: The offsets topic replication factor. + title: offsets.topic.replication.factor + forcedType: int + helpLink: kafka.html + process_x_roles: + description: The roles the process performs. Use a comma-seperated list is multiple. + title: process.roles + helpLink: kafka.html + socket_x_receive_x_buffer_x_bytes: + description: Size, in bytes of the SO_RCVBUF buffer. A value of -1 will use the OS default. + title: socket.receive.buffer.bytes + #forcedType: int - soc needs to allow -1 as an int before we can use this + helpLink: kafka.html + socket_x_request_x_max_x_bytes: + description: The maximum bytes allowed for a request to the socket. + title: socket.request.max.bytes + forcedType: int + helpLink: kafka.html + socket_x_send_x_buffer_x_bytes: + description: Size, in bytes of the SO_SNDBUF buffer. A value of -1 will use the OS default. + title: socket.send.buffer.byte + #forcedType: int - soc needs to allow -1 as an int before we can use this + helpLink: kafka.html + ssl_x_keystore_x_location: + description: The key store file location within the Docker container. + title: ssl.keystore.location + helpLink: kafka.html + ssl_x_keystore_x_password: + description: The key store file password. Invalid for PEM format. + title: ssl.keystore.password + sensitive: True + helpLink: kafka.html + ssl_x_keystore_x_type: + description: The key store file format. + title: ssl.keystore.type + regex: ^(JKS|PKCS12|PEM)$ + helpLink: kafka.html + ssl_x_truststore_x_location: + description: The trust store file location within the Docker container. + title: ssl.truststore.location + helpLink: kafka.html + ssl_x_truststore_x_password: + description: The trust store file password. If null, the trust store file is still use, but integrity checking is disabled. Invalid for PEM format. + title: ssl.truststore.password + sensitive: True + helpLink: kafka.html + transaction_x_state_x_log_x_min_x_isr: + description: Overrides min.insync.replicas for the transaction topic. When a producer configures acks to "all" (or "-1"), this setting determines the minimum number of replicas required to acknowledge a write as successful. Failure to meet this minimum triggers an exception (either NotEnoughReplicas or NotEnoughReplicasAfterAppend). When used in conjunction, min.insync.replicas and acks enable stronger durability guarantees. For instance, creating a topic with a replication factor of 3, setting min.insync.replicas to 2, and using acks of "all" ensures that the producer raises an exception if a majority of replicas fail to receive a write. + title: transaction.state.log.min.isr + forcedType: int + helpLink: kafka.html + transaction_x_state_x_log_x_replication_x_factor: + description: Set the replication factor higher for the transaction topic to ensure availability. Internal topic creation will not proceed until the cluster size satisfies this replication factor prerequisite. + title: transaction.state.log.replication.factor + forcedType: int + helpLink: kafka.html + client: + security_x_protocol: + description: Broker communication protocol. Options are: SASL_SSL, PLAINTEXT, SSL, SASL_PLAINTEXT + title: security.protocol + regex: ^(SASL_SSL|PLAINTEXT|SSL|SASL_PLAINTEXT) + helpLink: kafka.html + ssl_x_keystore_x_location: + description: The key store file location within the Docker container. + title: ssl.keystore.location + helpLink: kafka.html + ssl_x_keystore_x_password: + description: The key store file password. Invalid for PEM format. + title: ssl.keystore.password + sensitive: True + helpLink: kafka.html + ssl_x_keystore_x_type: + description: The key store file format. + title: ssl.keystore.type + regex: ^(JKS|PKCS12|PEM)$ + helpLink: kafka.html + ssl_x_truststore_x_location: + description: The trust store file location within the Docker container. + title: ssl.truststore.location + helpLink: kafka.html + ssl_x_truststore_x_password: + description: The trust store file password. If null, the trust store file is still use, but integrity checking is disabled. Invalid for PEM format. + title: ssl.truststore.password + sensitive: True + helpLink: kafka.html From d3bd56b131dfe372a04e012bc337333c0faca2bd Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Wed, 10 Apr 2024 14:13:27 -0400 Subject: [PATCH 038/507] disable logstash and redis if kafka enabled --- salt/kafka/soc_kafka.yaml | 2 +- salt/logstash/init.sls | 3 ++- salt/redis/init.sls | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/salt/kafka/soc_kafka.yaml b/salt/kafka/soc_kafka.yaml index c16ff212e..2fec8c302 100644 --- a/salt/kafka/soc_kafka.yaml +++ b/salt/kafka/soc_kafka.yaml @@ -135,7 +135,7 @@ kafka: helpLink: kafka.html client: security_x_protocol: - description: Broker communication protocol. Options are: SASL_SSL, PLAINTEXT, SSL, SASL_PLAINTEXT + description: 'Broker communication protocol. Options are: SASL_SSL, PLAINTEXT, SSL, SASL_PLAINTEXT' title: security.protocol regex: ^(SASL_SSL|PLAINTEXT|SSL|SASL_PLAINTEXT) helpLink: kafka.html diff --git a/salt/logstash/init.sls b/salt/logstash/init.sls index 62b2a2ebb..f7adc1330 100644 --- a/salt/logstash/init.sls +++ b/salt/logstash/init.sls @@ -4,9 +4,10 @@ # Elastic License 2.0. {% from 'logstash/map.jinja' import LOGSTASH_MERGED %} +{% from 'kafka/map.jinja' import KAFKAMERGED %} include: -{% if LOGSTASH_MERGED.enabled %} +{% if LOGSTASH_MERGED.enabled and not KAFKAMERGED.enabled %} - logstash.enabled {% else %} - logstash.disabled diff --git a/salt/redis/init.sls b/salt/redis/init.sls index 2f7f38dcc..4936c3254 100644 --- a/salt/redis/init.sls +++ b/salt/redis/init.sls @@ -4,9 +4,10 @@ # Elastic License 2.0. {% from 'redis/map.jinja' import REDISMERGED %} +{% from 'kafka/map.jinja' import KAFKAMERGED %} include: -{% if REDISMERGED.enabled %} +{% if REDISMERGED.enabled and not KAFKAMERGED.enabled %} - redis.enabled {% else %} - redis.disabled From af53dcda1bc064c7dba0a4fb1927007e7280c2ab Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Thu, 11 Apr 2024 15:32:00 -0400 Subject: [PATCH 039/507] Remove references to kafkanode Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- .../assigned_hostgroups.local.map.yaml | 3 +- pillar/kafka/nodes.sls | 2 +- pillar/logstash/nodes.sls | 2 +- pillar/top.sls | 9 +- salt/allowed_states.map.jinja | 14 +-- salt/firewall/containers.map.jinja | 6 +- salt/firewall/defaults.yaml | 92 +------------------ salt/firewall/soc_firewall.yaml | 62 ------------- salt/kafka/enabled.sls | 2 +- salt/logstash/config.sls | 2 +- salt/logstash/defaults.yaml | 4 - salt/logstash/enabled.sls | 2 +- .../config/so/0800_input_kafka.conf.jinja | 4 +- salt/logstash/soc_logstash.yaml | 2 - salt/manager/tools/sbin/so-firewall-minion | 3 - salt/manager/tools/sbin/so-minion | 5 - salt/ssl/init.sls | 5 +- salt/top.sls | 9 -- setup/so-functions | 4 +- setup/so-whiptail | 3 - 20 files changed, 17 insertions(+), 218 deletions(-) diff --git a/files/firewall/assigned_hostgroups.local.map.yaml b/files/firewall/assigned_hostgroups.local.map.yaml index fca293d3a..025b32131 100644 --- a/files/firewall/assigned_hostgroups.local.map.yaml +++ b/files/firewall/assigned_hostgroups.local.map.yaml @@ -19,5 +19,4 @@ role: receiver: standalone: searchnode: - sensor: - kafkanode: \ No newline at end of file + sensor: \ No newline at end of file diff --git a/pillar/kafka/nodes.sls b/pillar/kafka/nodes.sls index b1842834c..6fe64685d 100644 --- a/pillar/kafka/nodes.sls +++ b/pillar/kafka/nodes.sls @@ -1,4 +1,4 @@ -{% set current_kafkanodes = salt.saltutil.runner('mine.get', tgt='G@role:so-kafkanode or G@role:so-manager', fun='network.ip_addrs', tgt_type='compound') %} +{% set current_kafkanodes = salt.saltutil.runner('mine.get', tgt='G@role:so-receiver or G@role:so-manager', fun='network.ip_addrs', tgt_type='compound') %} {% set pillar_kafkanodes = salt['pillar.get']('kafka:nodes', default={}, merge=True) %} {% set existing_ids = [] %} diff --git a/pillar/logstash/nodes.sls b/pillar/logstash/nodes.sls index 99fbb857c..a77978821 100644 --- a/pillar/logstash/nodes.sls +++ b/pillar/logstash/nodes.sls @@ -2,7 +2,7 @@ {% set cached_grains = salt.saltutil.runner('cache.grains', tgt='*') %} {% for minionid, ip in salt.saltutil.runner( 'mine.get', - tgt='G@role:so-manager or G@role:so-managersearch or G@role:so-standalone or G@role:so-searchnode or G@role:so-heavynode or G@role:so-receiver or G@role:so-fleet or G@role:so-kafkanode ', + tgt='G@role:so-manager or G@role:so-managersearch or G@role:so-standalone or G@role:so-searchnode or G@role:so-heavynode or G@role:so-receiver or G@role:so-fleet ', fun='network.ip_addrs', tgt_type='compound') | dictsort() %} diff --git a/pillar/top.sls b/pillar/top.sls index 61f4f338f..817767bf7 100644 --- a/pillar/top.sls +++ b/pillar/top.sls @@ -233,15 +233,8 @@ base: - redis.adv_redis - minions.{{ grains.id }} - minions.adv_{{ grains.id }} - - '*_kafkanode': - - logstash.nodes - - logstash.soc_logstash - - logstash.adv_logstash - - minions.{{ grains.id }} - - minions.adv_{{ grains.id }} - - secrets - kafka.nodes + - secrets '*_import': - secrets diff --git a/salt/allowed_states.map.jinja b/salt/allowed_states.map.jinja index 6fa60c2ea..0fa968658 100644 --- a/salt/allowed_states.map.jinja +++ b/salt/allowed_states.map.jinja @@ -188,16 +188,8 @@ 'telegraf', 'firewall', 'schedule', - 'docker_clean' - ], - 'so-kafkanode': [ - 'kafka', - 'logstash', - 'ssl', - 'telegraf', - 'firewall', - 'schedule', - 'docker_clean' + 'docker_clean', + 'kafka' ], 'so-desktop': [ 'ssl', @@ -214,7 +206,7 @@ {% do allowed_states.append('strelka') %} {% endif %} - {% if grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-searchnode', 'so-managersearch', 'so-heavynode', 'so-import', 'so-kafkanode'] %} + {% if grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-searchnode', 'so-managersearch', 'so-heavynode', 'so-import'] %} {% do allowed_states.append('elasticsearch') %} {% endif %} diff --git a/salt/firewall/containers.map.jinja b/salt/firewall/containers.map.jinja index 7efb9abab..02a1b7cac 100644 --- a/salt/firewall/containers.map.jinja +++ b/salt/firewall/containers.map.jinja @@ -81,11 +81,7 @@ {% set NODE_CONTAINERS = [ 'so-logstash', 'so-redis', -] %} -{% elif GLOBALS.role == 'so-kafkanode' %} -{% set NODE_CONTAINERS = [ - 'so-logstash', - 'so-kafka', + 'so-kafka' ] %} {% elif GLOBALS.role == 'so-idh' %} diff --git a/salt/firewall/defaults.yaml b/salt/firewall/defaults.yaml index e51bf5825..0b6d06eda 100644 --- a/salt/firewall/defaults.yaml +++ b/salt/firewall/defaults.yaml @@ -19,7 +19,6 @@ firewall: manager: [] managersearch: [] receiver: [] - kafkanode: [] searchnode: [] self: [] sensor: [] @@ -443,15 +442,6 @@ firewall: - elastic_agent_data - elastic_agent_update - sensoroni - kafkanode: - portgroups: - - yum - - docker_registry - - influxdb - - elastic_agent_control - - elastic_agent_data - - elastic_agent_update - - sensoroni analyst: portgroups: - nginx @@ -530,9 +520,6 @@ firewall: receiver: portgroups: - salt_manager - kafkanode: - portgroups: - - salt_manager desktop: portgroups: - salt_manager @@ -647,15 +634,6 @@ firewall: - elastic_agent_data - elastic_agent_update - sensoroni - kafkanode: - portgroups: - - yum - - docker_registry - - influxdb - - elastic_agent_control - - elastic_agent_data - - elastic_agent_update - - sensoroni analyst: portgroups: - nginx @@ -1305,14 +1283,17 @@ firewall: - beats_5044 - beats_5644 - elastic_agent_data + - kafka searchnode: portgroups: - redis - beats_5644 + - kafka managersearch: portgroups: - redis - beats_5644 + - kafka self: portgroups: - redis @@ -1383,73 +1364,6 @@ firewall: portgroups: [] customhostgroup9: portgroups: [] - kafkanode: - chain: - DOCKER-USER: - hostgroups: - searchnode: - portgroups: - - kafka - kafkanode: - portgroups: - - kafka - customhostgroup0: - portgroups: [] - customhostgroup1: - portgroups: [] - customhostgroup2: - portgroups: [] - customhostgroup3: - portgroups: [] - customhostgroup4: - portgroups: [] - customhostgroup5: - portgroups: [] - customhostgroup6: - portgroups: [] - customhostgroup7: - portgroups: [] - customhostgroup8: - portgroups: [] - customhostgroup9: - portgroups: [] - INPUT: - hostgroups: - anywhere: - portgroups: - - ssh - dockernet: - portgroups: - - all - localhost: - portgroups: - - all - self: - portgroups: - - syslog - syslog: - portgroups: - - syslog - customhostgroup0: - portgroups: [] - customhostgroup1: - portgroups: [] - customhostgroup2: - portgroups: [] - customhostgroup3: - portgroups: [] - customhostgroup4: - portgroups: [] - customhostgroup5: - portgroups: [] - customhostgroup6: - portgroups: [] - customhostgroup7: - portgroups: [] - customhostgroup8: - portgroups: [] - customhostgroup9: - portgroups: [] idh: chain: DOCKER-USER: diff --git a/salt/firewall/soc_firewall.yaml b/salt/firewall/soc_firewall.yaml index 3e4c4355f..28791a705 100644 --- a/salt/firewall/soc_firewall.yaml +++ b/salt/firewall/soc_firewall.yaml @@ -34,7 +34,6 @@ firewall: heavynode: *hostgroupsettings idh: *hostgroupsettings import: *hostgroupsettings - kafkanode: *hostgroupsettings localhost: *ROhostgroupsettingsadv manager: *hostgroupsettings managersearch: *hostgroupsettings @@ -361,8 +360,6 @@ firewall: portgroups: *portgroupsdocker endgame: portgroups: *portgroupsdocker - kafkanode: - portgroups: *portgroupsdocker analyst: portgroups: *portgroupsdocker desktop: @@ -454,8 +451,6 @@ firewall: portgroups: *portgroupsdocker syslog: portgroups: *portgroupsdocker - kafkanode: - portgroups: *portgroupsdocker analyst: portgroups: *portgroupsdocker desktop: @@ -940,63 +935,6 @@ firewall: portgroups: *portgroupshost customhostgroup9: portgroups: *portgroupshost - kafkanode: - chain: - DOCKER-USER: - hostgroups: - searchnode: - portgroups: *portgroupsdocker - kafkanode: - portgroups: *portgroupsdocker - customhostgroup0: - portgroups: *portgroupsdocker - customhostgroup1: - portgroups: *portgroupsdocker - customhostgroup2: - portgroups: *portgroupsdocker - customhostgroup3: - portgroups: *portgroupsdocker - customhostgroup4: - portgroups: *portgroupsdocker - customhostgroup5: - portgroups: *portgroupsdocker - customhostgroup6: - portgroups: *portgroupsdocker - customhostgroup7: - portgroups: *portgroupsdocker - customhostgroup8: - portgroups: *portgroupsdocker - customhostgroup9: - portgroups: *portgroupsdocker - INPUT: - hostgroups: - anywhere: - portgroups: *portgroupshost - dockernet: - portgroups: *portgroupshost - localhost: - portgroups: *portgroupshost - customhostgroup0: - portgroups: *portgroupshost - customhostgroup1: - portgroups: *portgroupshost - customhostgroup2: - portgroups: *portgroupshost - customhostgroup3: - portgroups: *portgroupshost - customhostgroup4: - portgroups: *portgroupshost - customhostgroup5: - portgroups: *portgroupshost - customhostgroup6: - portgroups: *portgroupshost - customhostgroup7: - portgroups: *portgroupshost - customhostgroup8: - portgroups: *portgroupshost - customhostgroup9: - portgroups: *portgroupshost - idh: chain: DOCKER-USER: diff --git a/salt/kafka/enabled.sls b/salt/kafka/enabled.sls index c2fca70db..ed26297b3 100644 --- a/salt/kafka/enabled.sls +++ b/salt/kafka/enabled.sls @@ -7,7 +7,7 @@ {% if sls.split('.')[0] in allowed_states %} {% from 'vars/globals.map.jinja' import GLOBALS %} {% from 'docker/docker.map.jinja' import DOCKER %} -{% set KAFKANODES = salt['pillar.get']('kafka:nodes', {}) %} +{% set KAFKANODES = salt['pillar.get']('kafka:nodes', {}) %} include: - kafka.sostatus diff --git a/salt/logstash/config.sls b/salt/logstash/config.sls index 402d1ef20..8a59c83b7 100644 --- a/salt/logstash/config.sls +++ b/salt/logstash/config.sls @@ -12,7 +12,7 @@ include: - ssl - {% if GLOBALS.role not in ['so-receiver','so-fleet', 'so-kafkanode'] %} + {% if GLOBALS.role not in ['so-receiver','so-fleet'] %} - elasticsearch {% endif %} diff --git a/salt/logstash/defaults.yaml b/salt/logstash/defaults.yaml index 3ca4570fd..348acb622 100644 --- a/salt/logstash/defaults.yaml +++ b/salt/logstash/defaults.yaml @@ -19,8 +19,6 @@ logstash: - search fleet: - fleet - kafkanode: - - kafkanode defined_pipelines: fleet: - so/0012_input_elastic_agent.conf.jinja @@ -39,8 +37,6 @@ logstash: - so/0900_input_redis.conf.jinja - so/9805_output_elastic_agent.conf.jinja - so/9900_output_endgame.conf.jinja - kafkanode: - - so/0899_output_kafka.conf.jinja custom0: [] custom1: [] custom2: [] diff --git a/salt/logstash/enabled.sls b/salt/logstash/enabled.sls index fcc2ec190..3881ef1f4 100644 --- a/salt/logstash/enabled.sls +++ b/salt/logstash/enabled.sls @@ -75,7 +75,7 @@ so-logstash: {% else %} - /etc/pki/tls/certs/intca.crt:/usr/share/filebeat/ca.crt:ro {% endif %} - {% if GLOBALS.role in ['so-manager', 'so-managersearch', 'so-standalone', 'so-import', 'so-heavynode', 'so-searchnode', 'so-kafkanode' ] %} + {% if GLOBALS.role in ['so-manager', 'so-managersearch', 'so-standalone', 'so-import', 'so-heavynode', 'so-searchnode' ] %} - /opt/so/conf/ca/cacerts:/etc/pki/ca-trust/extracted/java/cacerts:ro - /opt/so/conf/ca/tls-ca-bundle.pem:/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem:ro - /etc/pki/kafka-logstash.p12:/usr/share/logstash/kafka-logstash.p12:ro diff --git a/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja b/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja index 1391ce983..85e6729e2 100644 --- a/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja +++ b/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja @@ -1,11 +1,9 @@ -{% set kafka_brokers = salt['pillar.get']('logstash:nodes:kafkanode', {}) %} +{% set kafka_brokers = salt['pillar.get']('logstash:nodes:receiver', {}) %} {% set kafka_on_mngr = salt ['pillar.get']('logstash:nodes:manager', {}) %} {% set broker_ips = [] %} {% for node, node_data in kafka_brokers.items() %} {% do broker_ips.append(node_data['ip'] + ":9092") %} {% endfor %} - -{# For testing kafka stuff from manager not dedicated kafkanodes #} {% for node, node_data in kafka_on_mngr.items() %} {% do broker_ips.append(node_data['ip'] + ":9092") %} {% endfor %} diff --git a/salt/logstash/soc_logstash.yaml b/salt/logstash/soc_logstash.yaml index 82fb25bec..3172ff7c5 100644 --- a/salt/logstash/soc_logstash.yaml +++ b/salt/logstash/soc_logstash.yaml @@ -16,7 +16,6 @@ logstash: manager: *assigned_pipelines managersearch: *assigned_pipelines fleet: *assigned_pipelines - kafkanode: *assigned_pipelines defined_pipelines: receiver: &defined_pipelines description: List of pipeline configurations assign to this group. @@ -27,7 +26,6 @@ logstash: fleet: *defined_pipelines manager: *defined_pipelines search: *defined_pipelines - kafkanode: *defined_pipelines custom0: *defined_pipelines custom1: *defined_pipelines custom2: *defined_pipelines diff --git a/salt/manager/tools/sbin/so-firewall-minion b/salt/manager/tools/sbin/so-firewall-minion index 3357e5185..66a0afcea 100755 --- a/salt/manager/tools/sbin/so-firewall-minion +++ b/salt/manager/tools/sbin/so-firewall-minion @@ -79,9 +79,6 @@ fi 'RECEIVER') so-firewall includehost receiver "$IP" --apply ;; - 'KAFKANODE') - so-firewall includehost kafkanode "$IP" --apply - ;; 'DESKTOP') so-firewall includehost desktop "$IP" --apply ;; diff --git a/salt/manager/tools/sbin/so-minion b/salt/manager/tools/sbin/so-minion index 7b3e6fd3e..34e069ece 100755 --- a/salt/manager/tools/sbin/so-minion +++ b/salt/manager/tools/sbin/so-minion @@ -565,11 +565,6 @@ function createRECEIVER() { add_telegraf_to_minion } -function createKAFKANODE() { - add_logstash_to_minion - # add_telegraf_to_minion -} - function createDESKTOP() { add_desktop_to_minion add_telegraf_to_minion diff --git a/salt/ssl/init.sls b/salt/ssl/init.sls index 90f9cc64f..f337d62cb 100644 --- a/salt/ssl/init.sls +++ b/salt/ssl/init.sls @@ -664,10 +664,7 @@ elastickeyperms: {%- endif %} -# Roles will need to be modified. Below is just for testing encrypted kafka pipelines -# Remove so-manager. Just inplace for testing -{% if grains['role'] in ['so-manager', 'so-kafkanode', 'so-searchnode'] %} -# Create a cert for Redis encryption +{% if grains['role'] in ['so-manager', 'so-searchnode', 'so-receiver'] %} kafka_key: x509.private_key_managed: - name: /etc/pki/kafka.key diff --git a/salt/top.sls b/salt/top.sls index 289dd462b..ec5e4d738 100644 --- a/salt/top.sls +++ b/salt/top.sls @@ -235,16 +235,7 @@ base: - firewall - logstash - redis - - elasticfleet.install_agent_grid - - '*_kafkanode and G@saltversion:{{saltversion}}': - - match: compound - kafka - - logstash - - ssl - - telegraf - - firewall - - docker_clean - elasticfleet.install_agent_grid '*_idh and G@saltversion:{{saltversion}}': diff --git a/setup/so-functions b/setup/so-functions index 070711d63..a669c52fc 100755 --- a/setup/so-functions +++ b/setup/so-functions @@ -1143,7 +1143,7 @@ get_redirect() { get_minion_type() { local minion_type case "$install_type" in - 'EVAL' | 'MANAGERSEARCH' | 'MANAGER' | 'SENSOR' | 'HEAVYNODE' | 'SEARCHNODE' | 'FLEET' | 'IDH' | 'STANDALONE' | 'IMPORT' | 'RECEIVER' | 'DESKTOP' | 'KAFKANODE') + 'EVAL' | 'MANAGERSEARCH' | 'MANAGER' | 'SENSOR' | 'HEAVYNODE' | 'SEARCHNODE' | 'FLEET' | 'IDH' | 'STANDALONE' | 'IMPORT' | 'RECEIVER' | 'DESKTOP') minion_type=$(echo "$install_type" | tr '[:upper:]' '[:lower:]') ;; esac @@ -1505,8 +1505,6 @@ process_installtype() { is_import=true elif [ "$install_type" = 'RECEIVER' ]; then is_receiver=true - elif [ "$install_type" = 'KAFKANODE' ]; then - is_kafka=true elif [ "$install_type" = 'DESKTOP' ]; then is_desktop=true fi diff --git a/setup/so-whiptail b/setup/so-whiptail index a732a9c97..fd9625ec4 100755 --- a/setup/so-whiptail +++ b/setup/so-whiptail @@ -681,7 +681,6 @@ whiptail_install_type_dist_existing() { "HEAVYNODE" "Sensor + Search Node " \ "IDH" "Intrusion Detection Honeypot Node " \ "RECEIVER" "Receiver Node " \ - "KAFKANODE" "Kafka Broker + Kraft controller" \ 3>&1 1>&2 2>&3 # "HOTNODE" "Add Hot Node (Uses Elastic Clustering)" \ # TODO # "WARMNODE" "Add Warm Node to existing Hot or Search node" \ # TODO @@ -712,8 +711,6 @@ whiptail_install_type_dist_existing() { is_import=true elif [ "$install_type" = 'RECEIVER' ]; then is_receiver=true - elif [ "$install_type" = 'KAFKANODE' ]; then - is_kafka=true elif [ "$install_type" = 'DESKTOP' ]; then is_desktop=true fi From ca7253a5896f2a028021339a04dccd9eabb3b863 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Thu, 11 Apr 2024 15:38:03 -0400 Subject: [PATCH 040/507] Run kafka-clusterid script when pillar values are missing Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/manager/tools/sbin/so-kafka-clusterid | 8 +++++--- setup/so-functions | 4 +++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/salt/manager/tools/sbin/so-kafka-clusterid b/salt/manager/tools/sbin/so-kafka-clusterid index 719973247..fcbe3ba42 100644 --- a/salt/manager/tools/sbin/so-kafka-clusterid +++ b/salt/manager/tools/sbin/so-kafka-clusterid @@ -16,7 +16,9 @@ fi if ! grep -q "^ kafka_cluster_id:" $local_salt_dir/pillar/secrets.sls; then kafka_cluster_id=$(get_random_value 22) echo ' kafka_cluster_id: '$kafka_cluster_id >> $local_salt_dir/pillar/secrets.sls -else - echo 'kafka_cluster_id exists' - salt-call pillar.get secrets +fi + +if ! grep -q "^ kafkapass:" $local_salt_dir/pillar/secrets.sls; then + kafkapass=$(get_random_value) + echo ' kafkapass: '$kafkapass >> $local_salt_dir/pillar/secrets.sls fi \ No newline at end of file diff --git a/setup/so-functions b/setup/so-functions index a669c52fc..176349edb 100755 --- a/setup/so-functions +++ b/setup/so-functions @@ -1116,6 +1116,7 @@ generate_passwords(){ SOCSRVKEY=$(get_random_value 64) IMPORTPASS=$(get_random_value) KAFKACLUSTERID=$(get_random_value 22) + KAFKAPASS=$(get_random_value) } generate_interface_vars() { @@ -1947,7 +1948,8 @@ secrets_pillar(){ "secrets:"\ " import_pass: $IMPORTPASS"\ " influx_pass: $INFLUXPASS"\ - " kafka_cluster_id: $KAFKACLUSTERID" > $local_salt_dir/pillar/secrets.sls + " kafka_cluster_id: $KAFKACLUSTERID"\ + " kafka_pass: $KAFKAPASS" > $local_salt_dir/pillar/secrets.sls fi } From 6b28dc72e86ee51476b5e95dedd28361223435ce Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Thu, 11 Apr 2024 15:38:33 -0400 Subject: [PATCH 041/507] Update annotation for global.pipeline Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/global/soc_global.yaml | 3 +-- salt/kafka/config.sls | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/salt/global/soc_global.yaml b/salt/global/soc_global.yaml index daaf28b28..667bf7826 100644 --- a/salt/global/soc_global.yaml +++ b/salt/global/soc_global.yaml @@ -36,9 +36,8 @@ global: global: True advanced: True pipeline: - description: Sets which pipeline technology for events to use. Currently only Redis is supported. + description: Sets which pipeline technology for events to use. Currently only Redis is fully supported. Kafka is experimental and requires a Security Onion Pro license. global: True - readonly: True advanced: True repo_host: description: Specify the host where operating system packages will be served from. diff --git a/salt/kafka/config.sls b/salt/kafka/config.sls index c856c4f80..c9e028ff5 100644 --- a/salt/kafka/config.sls +++ b/salt/kafka/config.sls @@ -26,7 +26,7 @@ include: - ssl - +g kafka_group: group.present: - name: kafka From 39555873729731bbf79ee3ebbe32d7c4c01e9ad9 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Thu, 11 Apr 2024 16:20:09 -0400 Subject: [PATCH 042/507] Use global.pipeline for redis / kafka states Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/global/defaults.yaml | 3 ++- salt/global/soc_global.yaml | 2 ++ salt/kafka/init.sls | 3 ++- salt/manager/tools/sbin/soup | 3 ++- salt/redis/init.sls | 4 ++-- salt/vars/kafkanode.map.jinja | 1 - setup/so-functions | 1 - 7 files changed, 10 insertions(+), 7 deletions(-) delete mode 100644 salt/vars/kafkanode.map.jinja diff --git a/salt/global/defaults.yaml b/salt/global/defaults.yaml index bd7244a58..5daa942c8 100644 --- a/salt/global/defaults.yaml +++ b/salt/global/defaults.yaml @@ -1,2 +1,3 @@ global: - pcapengine: STENO \ No newline at end of file + pcapengine: STENO + pipeline: REDIS \ No newline at end of file diff --git a/salt/global/soc_global.yaml b/salt/global/soc_global.yaml index 667bf7826..5a349a3c3 100644 --- a/salt/global/soc_global.yaml +++ b/salt/global/soc_global.yaml @@ -37,6 +37,8 @@ global: advanced: True pipeline: description: Sets which pipeline technology for events to use. Currently only Redis is fully supported. Kafka is experimental and requires a Security Onion Pro license. + regex: ^(REDIS|KAFKA)$ + regexFailureMessage: You must enter either REDIS or KAFKA. global: True advanced: True repo_host: diff --git a/salt/kafka/init.sls b/salt/kafka/init.sls index b4a6a28b0..acedba3c3 100644 --- a/salt/kafka/init.sls +++ b/salt/kafka/init.sls @@ -4,9 +4,10 @@ # Elastic License 2.0. {% from 'kafka/map.jinja' import KAFKAMERGED %} +{% from 'vars/globals.map.jinja' import GLOBALS %} include: -{% if KAFKAMERGED.enabled %} +{% if GLOBALS.pipeline == "KAFKA" and KAFKAMERGED.enabled %} - kafka.enabled {% else %} - kafka.disabled diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index fa3c3b5ee..3ca353856 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -438,7 +438,8 @@ post_to_2.4.60() { } post_to_2.4.70() { - echo "Nothing to apply" + echo "Removing global.pipeline pillar configuration" + sed -i '/pipeline:/d' /opt/so/saltstack/local/pillar/global/soc_global.sls POSTVERSION=2.4.70 } diff --git a/salt/redis/init.sls b/salt/redis/init.sls index 4936c3254..7142c92c3 100644 --- a/salt/redis/init.sls +++ b/salt/redis/init.sls @@ -4,10 +4,10 @@ # Elastic License 2.0. {% from 'redis/map.jinja' import REDISMERGED %} -{% from 'kafka/map.jinja' import KAFKAMERGED %} +{% from 'vars/globals.map.jinja' import GLOBALS %} include: -{% if REDISMERGED.enabled and not KAFKAMERGED.enabled %} +{% if GLOBALS.pipeline == "REDIS" and REDISMERGED.enabled %} - redis.enabled {% else %} - redis.disabled diff --git a/salt/vars/kafkanode.map.jinja b/salt/vars/kafkanode.map.jinja deleted file mode 100644 index 396cefcc9..000000000 --- a/salt/vars/kafkanode.map.jinja +++ /dev/null @@ -1 +0,0 @@ -{% set ROLE_GLOBALS = {} %} \ No newline at end of file diff --git a/setup/so-functions b/setup/so-functions index 176349edb..038a4deb4 100755 --- a/setup/so-functions +++ b/setup/so-functions @@ -1327,7 +1327,6 @@ create_global() { # Continue adding other details echo " imagerepo: '$IMAGEREPO'" >> $global_pillar_file - echo " pipeline: 'redis'" >> $global_pillar_file echo " repo_host: '$HOSTNAME'" >> $global_pillar_file echo " influxdb_host: '$HOSTNAME'" >> $global_pillar_file echo " registry_host: '$HOSTNAME'" >> $global_pillar_file From f514e5e9bba49f21b6e57ce41a40aceef8710c28 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Thu, 11 Apr 2024 16:23:05 -0400 Subject: [PATCH 043/507] add kafka to receiver --- salt/top.sls | 9 --------- 1 file changed, 9 deletions(-) diff --git a/salt/top.sls b/salt/top.sls index 289dd462b..e4cd067c3 100644 --- a/salt/top.sls +++ b/salt/top.sls @@ -236,16 +236,7 @@ base: - logstash - redis - elasticfleet.install_agent_grid - - '*_kafkanode and G@saltversion:{{saltversion}}': - - match: compound - kafka - - logstash - - ssl - - telegraf - - firewall - - docker_clean - - elasticfleet.install_agent_grid '*_idh and G@saltversion:{{saltversion}}': - match: compound From a54a72c2696f32b9d565efce7d9748b3bd148070 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Fri, 12 Apr 2024 11:19:20 -0400 Subject: [PATCH 044/507] move kafka_cluster_id to kafka:cluster_id --- pillar/top.sls | 4 +++- salt/allowed_states.map.jinja | 20 +++++++------------- salt/kafka/soc_kafka.yaml | 6 ++++++ salt/kafka/storage.sls | 15 ++++++++------- salt/manager/tools/sbin/so-kafka-clusterid | 11 ++++++----- salt/ssl/init.sls | 4 ++-- 6 files changed, 32 insertions(+), 28 deletions(-) diff --git a/pillar/top.sls b/pillar/top.sls index 61f4f338f..170b3f759 100644 --- a/pillar/top.sls +++ b/pillar/top.sls @@ -61,7 +61,7 @@ base: - backup.adv_backup - minions.{{ grains.id }} - minions.adv_{{ grains.id }} - - kafka.nodes + - kafka.* - stig.soc_stig '*_sensor': @@ -177,6 +177,7 @@ base: - minions.{{ grains.id }} - minions.adv_{{ grains.id }} - stig.soc_stig + - kafka.* '*_heavynode': - elasticsearch.auth @@ -233,6 +234,7 @@ base: - redis.adv_redis - minions.{{ grains.id }} - minions.adv_{{ grains.id }} + - kafka.* '*_kafkanode': - logstash.nodes diff --git a/salt/allowed_states.map.jinja b/salt/allowed_states.map.jinja index 6fa60c2ea..091cb3786 100644 --- a/salt/allowed_states.map.jinja +++ b/salt/allowed_states.map.jinja @@ -123,7 +123,8 @@ 'utility', 'schedule', 'docker_clean', - 'stig' + 'stig', + 'kafka' ], 'so-searchnode': [ 'ssl', @@ -157,7 +158,8 @@ 'schedule', 'tcpreplay', 'docker_clean', - 'stig' + 'stig', + 'kafka' ], 'so-sensor': [ 'ssl', @@ -188,16 +190,8 @@ 'telegraf', 'firewall', 'schedule', - 'docker_clean' - ], - 'so-kafkanode': [ - 'kafka', - 'logstash', - 'ssl', - 'telegraf', - 'firewall', - 'schedule', - 'docker_clean' + 'docker_clean', + 'kafka' ], 'so-desktop': [ 'ssl', @@ -214,7 +208,7 @@ {% do allowed_states.append('strelka') %} {% endif %} - {% if grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-searchnode', 'so-managersearch', 'so-heavynode', 'so-import', 'so-kafkanode'] %} + {% if grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-searchnode', 'so-managersearch', 'so-heavynode', 'so-import'] %} {% do allowed_states.append('elasticsearch') %} {% endif %} diff --git a/salt/kafka/soc_kafka.yaml b/salt/kafka/soc_kafka.yaml index 2fec8c302..8a6c516a9 100644 --- a/salt/kafka/soc_kafka.yaml +++ b/salt/kafka/soc_kafka.yaml @@ -2,6 +2,12 @@ kafka: enabled: description: Enable or disable Kafka. helpLink: kafka.html + cluster_id: + description: The ID of the Kafka cluster. + readonly: True + advanced: True + sensitive: True + helpLink: kafka.html config: server: advertised_x_listeners: diff --git a/salt/kafka/storage.sls b/salt/kafka/storage.sls index e99455e3d..fbb7c7328 100644 --- a/salt/kafka/storage.sls +++ b/salt/kafka/storage.sls @@ -6,17 +6,18 @@ {% from 'allowed_states.map.jinja' import allowed_states %} {% if sls.split('.')[0] in allowed_states %} {% from 'vars/globals.map.jinja' import GLOBALS %} -{% set kafka_cluster_id = salt['pillar.get']('secrets:kafka_cluster_id', default=None) %} +{% set kafka_cluster_id = salt['pillar.get']('kafka:cluster_id', default=None) %} -{% if kafka_cluster_id is none %} +{% if GLOBALS.role in ['so-manager', 'so-managersearch', 'so-standalone'] %} +{% if kafka_cluster_id is none %} generate_kafka_cluster_id: cmd.run: - name: /usr/sbin/so-kafka-clusterid -{% endif %} +{% endif %} +{% endif %} {# Initialize kafka storage if it doesn't already exist. Just looking for meta.properties in /nsm/kafka/data #} -{% if salt['file.file_exists']('/nsm/kafka/data/meta.properties') %} -{% else %} +{% if not salt['file.file_exists']('/nsm/kafka/data/meta.properties') %} kafka_storage_init: cmd.run: - name: | @@ -25,7 +26,7 @@ kafka_rm_kafkainit: cmd.run: - name: | docker rm so-kafkainit -{% endif %} +{% endif %} {% else %} @@ -34,4 +35,4 @@ kafka_rm_kafkainit: test.fail_without_changes: - name: {{sls}}_state_not_allowed -{% endif %} \ No newline at end of file +{% endif %} diff --git a/salt/manager/tools/sbin/so-kafka-clusterid b/salt/manager/tools/sbin/so-kafka-clusterid index 719973247..def454372 100644 --- a/salt/manager/tools/sbin/so-kafka-clusterid +++ b/salt/manager/tools/sbin/so-kafka-clusterid @@ -13,10 +13,11 @@ else source $(dirname $0)/../../../common/tools/sbin/so-common fi -if ! grep -q "^ kafka_cluster_id:" $local_salt_dir/pillar/secrets.sls; then +if ! grep -q "^ cluster_id:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then kafka_cluster_id=$(get_random_value 22) - echo ' kafka_cluster_id: '$kafka_cluster_id >> $local_salt_dir/pillar/secrets.sls + echo 'kafka: ' > $local_salt_dir/pillar/kafka/soc_kafka.sls + echo ' cluster_id: '$kafka_cluster_id >> $local_salt_dir/pillar/kafka/soc_kafka.sls else - echo 'kafka_cluster_id exists' - salt-call pillar.get secrets -fi \ No newline at end of file + echo 'kafka:cluster_id pillar exists' + salt-call pillar.get kafka:cluster_id +fi diff --git a/salt/ssl/init.sls b/salt/ssl/init.sls index 90f9cc64f..0aa06bc8e 100644 --- a/salt/ssl/init.sls +++ b/salt/ssl/init.sls @@ -666,7 +666,7 @@ elastickeyperms: # Roles will need to be modified. Below is just for testing encrypted kafka pipelines # Remove so-manager. Just inplace for testing -{% if grains['role'] in ['so-manager', 'so-kafkanode', 'so-searchnode'] %} +{% if grains['role'] in ['so-manager', 'so-receiver', 'so-searchnode'] %} # Create a cert for Redis encryption kafka_key: x509.private_key_managed: @@ -770,7 +770,7 @@ kafka_logstash_crt: - onchanges: - x509: /etc/pki/kafka-logstash.key -{% if grains['role'] in ['so-manager'] %} +{% if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone', 'so-receiver'] %} kafka_client_key: x509.private_key_managed: - name: /etc/pki/kafka-client.key From 0ed9894b7e921924193df51d11c2572689f7376e Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Fri, 12 Apr 2024 11:19:46 -0400 Subject: [PATCH 045/507] create kratos local pillar dirs during setup --- setup/so-functions | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/setup/so-functions b/setup/so-functions index 070711d63..153a3371c 100755 --- a/setup/so-functions +++ b/setup/so-functions @@ -1115,7 +1115,6 @@ generate_passwords(){ REDISPASS=$(get_random_value) SOCSRVKEY=$(get_random_value 64) IMPORTPASS=$(get_random_value) - KAFKACLUSTERID=$(get_random_value 22) } generate_interface_vars() { @@ -1392,7 +1391,7 @@ make_some_dirs() { mkdir -p $local_salt_dir/salt/firewall/portgroups mkdir -p $local_salt_dir/salt/firewall/ports - for THEDIR in bpf pcap elasticsearch ntp firewall redis backup influxdb strelka sensoroni soc docker zeek suricata nginx telegraf logstash soc manager kratos idstools idh elastalert stig global;do + for THEDIR in bpf pcap elasticsearch ntp firewall redis backup influxdb strelka sensoroni soc docker zeek suricata nginx telegraf logstash soc manager kratos idstools idh elastalert stig global kafka;do mkdir -p $local_salt_dir/pillar/$THEDIR touch $local_salt_dir/pillar/$THEDIR/adv_$THEDIR.sls touch $local_salt_dir/pillar/$THEDIR/soc_$THEDIR.sls @@ -1948,8 +1947,7 @@ secrets_pillar(){ printf '%s\n'\ "secrets:"\ " import_pass: $IMPORTPASS"\ - " influx_pass: $INFLUXPASS"\ - " kafka_cluster_id: $KAFKACLUSTERID" > $local_salt_dir/pillar/secrets.sls + " influx_pass: $INFLUXPASS" > $local_salt_dir/pillar/secrets.sls fi } From fbd3cff90d6665dce961ed0b56ea6352526e128b Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Fri, 12 Apr 2024 11:21:19 -0400 Subject: [PATCH 046/507] Make global.pipeline use GLOBALMERGED value Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/vars/globals.map.jinja | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/vars/globals.map.jinja b/salt/vars/globals.map.jinja index ed7129678..0a4995c0c 100644 --- a/salt/vars/globals.map.jinja +++ b/salt/vars/globals.map.jinja @@ -23,7 +23,7 @@ 'manager_ip': INIT.PILLAR.global.managerip, 'md_engine': INIT.PILLAR.global.mdengine, 'pcap_engine': GLOBALMERGED.pcapengine, - 'pipeline': INIT.PILLAR.global.pipeline, + 'pipeline': GLOBALMERGED.pipeline, 'so_version': INIT.PILLAR.global.soversion, 'so_docker_gateway': DOCKER.gateway, 'so_docker_range': DOCKER.range, From 04ddcd5c9328d090d4fe000eefef8af111abd7cb Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Fri, 12 Apr 2024 11:52:57 -0400 Subject: [PATCH 047/507] add receiver managersearch and standalone to kafka.nodes pillar --- pillar/kafka/nodes.sls | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pillar/kafka/nodes.sls b/pillar/kafka/nodes.sls index b1842834c..447e7a35d 100644 --- a/pillar/kafka/nodes.sls +++ b/pillar/kafka/nodes.sls @@ -1,4 +1,4 @@ -{% set current_kafkanodes = salt.saltutil.runner('mine.get', tgt='G@role:so-kafkanode or G@role:so-manager', fun='network.ip_addrs', tgt_type='compound') %} +{% set current_kafkanodes = salt.saltutil.runner('mine.get', tgt='G@role:so-manager or G@role:so-managersearch or G@role:so-standalone or G@role:so-receiver', fun='network.ip_addrs', tgt_type='compound') %} {% set pillar_kafkanodes = salt['pillar.get']('kafka:nodes', default={}, merge=True) %} {% set existing_ids = [] %} From d73ba7dd3e31a3ea1c3bb27788d78178f8c6cd86 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Fri, 12 Apr 2024 11:55:26 -0400 Subject: [PATCH 048/507] order kafka pillar assignment --- pillar/top.sls | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/pillar/top.sls b/pillar/top.sls index 170b3f759..fbb1604da 100644 --- a/pillar/top.sls +++ b/pillar/top.sls @@ -61,7 +61,9 @@ base: - backup.adv_backup - minions.{{ grains.id }} - minions.adv_{{ grains.id }} - - kafka.* + - kafka.nodes + - kafka.soc_kafka + - kafka.adv_kafka - stig.soc_stig '*_sensor': @@ -177,7 +179,9 @@ base: - minions.{{ grains.id }} - minions.adv_{{ grains.id }} - stig.soc_stig - - kafka.* + - kafka.nodes + - kafka.soc_kafka + - kafka.adv_kafka '*_heavynode': - elasticsearch.auth @@ -234,16 +238,9 @@ base: - redis.adv_redis - minions.{{ grains.id }} - minions.adv_{{ grains.id }} - - kafka.* - - '*_kafkanode': - - logstash.nodes - - logstash.soc_logstash - - logstash.adv_logstash - - minions.{{ grains.id }} - - minions.adv_{{ grains.id }} - - secrets - kafka.nodes + - kafka.soc_kafka + - kafka.adv_kafka '*_import': - secrets From a6ff92b099faa1c1a43def5e85331d084e18edc8 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Fri, 12 Apr 2024 12:11:18 -0400 Subject: [PATCH 049/507] Note to remove so-kafka-clusterid. Update soup and setup to generate needed kafka pillar values Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/manager/tools/sbin/so-kafka-clusterid | 5 +++++ salt/manager/tools/sbin/soup | 17 +++++++++++++++++ setup/so-functions | 13 +++++++++++++ setup/so-variables | 6 ++++++ 4 files changed, 41 insertions(+) diff --git a/salt/manager/tools/sbin/so-kafka-clusterid b/salt/manager/tools/sbin/so-kafka-clusterid index adddfe3ce..7ac055997 100644 --- a/salt/manager/tools/sbin/so-kafka-clusterid +++ b/salt/manager/tools/sbin/so-kafka-clusterid @@ -5,6 +5,11 @@ # https://securityonion.net/license; you may not use this file except in compliance with the # Elastic License 2.0. + + +### THIS SCRIPT AND SALT STATE REFERENCES TO THIS SCRIPT TO BE REMOVED ONCE INITIAL TESTING IS DONE - THESE VALUES WILL GENERATED IN SETUP AND SOUP + + local_salt_dir=/opt/so/saltstack/local if [[ -f /usr/sbin/so-common ]]; then diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index 3ca353856..a6f9032a5 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -438,8 +438,25 @@ post_to_2.4.60() { } post_to_2.4.70() { + # Global pipeline changes to REDIS or KAFKA echo "Removing global.pipeline pillar configuration" sed -i '/pipeline:/d' /opt/so/saltstack/local/pillar/global/soc_global.sls + + # Kafka configuration + mkdir -p /opt/so/saltstack/local/pillar/kafka + touch /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls + touch /opt/so/saltstack/local/pillar/kafka/adv_kafka.sls + echo 'kafka: ' > /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls + + if ! grep -q "^ cluster_id:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then + kafka_cluster_id=$(get_random_value 22) + echo ' cluster_id: '$kafka_cluster_id >> $local_salt_dir/pillar/kafka/soc_kafka.sls + + if ! grep -q "^ certpass:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then + kafkapass=$(get_random_value) + echo ' certpass: '$kafkapass >> $local_salt_dir/pillar/kafka/soc_kafka.sls + fi + POSTVERSION=2.4.70 } diff --git a/setup/so-functions b/setup/so-functions index 2332ab94c..30e8fbfd6 100755 --- a/setup/so-functions +++ b/setup/so-functions @@ -803,6 +803,7 @@ create_manager_pillars() { patch_pillar nginx_pillar kibana_pillar + kafka_pillar } create_repo() { @@ -1191,6 +1192,18 @@ kibana_pillar() { logCmd "touch $kibana_pillar_file" } +kafka_pillar() { + KAFKACLUSTERID=$(get_random_value 22) + KAFKAPASS=$(get_random_value) + logCmd "mkdir -p $local_salt_dir/pillar/kakfa" + logCmd "touch $adv_kafka_pillar_file" + logCmd "touch $kafka_pillar_file" + printf '%s\n'\ + "kafka:"\ + " cluster_id: $KAFKACLUSTERID"\ + " certpass: $KAFKAPASS" > $kafka_pillar_file +} + logrotate_pillar() { logCmd "mkdir -p $local_salt_dir/pillar/logrotate" logCmd "touch $adv_logrotate_pillar_file" diff --git a/setup/so-variables b/setup/so-variables index 42ed8fc5c..4a2f29c58 100644 --- a/setup/so-variables +++ b/setup/so-variables @@ -178,6 +178,12 @@ export redis_pillar_file adv_redis_pillar_file="$local_salt_dir/pillar/redis/adv_redis.sls" export adv_redis_pillar_file +kafka_pillar_file="local_salt_dir/pillar/kafka/soc_kafka.sls" +export kafka_pillar_file + +adv_kafka_pillar_file="$local_salt_dir/pillar/kafka/adv_kafka.sls" +export kafka_pillar_file + idh_pillar_file="$local_salt_dir/pillar/idh/soc_idh.sls" export idh_pillar_file From 911ee579a9e8a92b751695d12b7f449358df8260 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Fri, 12 Apr 2024 12:16:20 -0400 Subject: [PATCH 050/507] Typo Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/config.sls | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/kafka/config.sls b/salt/kafka/config.sls index c9e028ff5..c856c4f80 100644 --- a/salt/kafka/config.sls +++ b/salt/kafka/config.sls @@ -26,7 +26,7 @@ include: - ssl -g + kafka_group: group.present: - name: kafka From c014508519d024ce6425955bdc1512f22991a22d Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Fri, 12 Apr 2024 13:50:25 -0400 Subject: [PATCH 051/507] need /opt/so/conf/ca/cacerts on receiver for kafka to run --- salt/allowed_states.map.jinja | 3 ++- salt/elasticsearch/ca.sls | 2 +- salt/kafka/enabled.sls | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/salt/allowed_states.map.jinja b/salt/allowed_states.map.jinja index 091cb3786..57cff5b4f 100644 --- a/salt/allowed_states.map.jinja +++ b/salt/allowed_states.map.jinja @@ -191,7 +191,8 @@ 'firewall', 'schedule', 'docker_clean', - 'kafka' + 'kafka', + 'elasticsearch.ca' ], 'so-desktop': [ 'ssl', diff --git a/salt/elasticsearch/ca.sls b/salt/elasticsearch/ca.sls index 5485bb676..188450311 100644 --- a/salt/elasticsearch/ca.sls +++ b/salt/elasticsearch/ca.sls @@ -4,7 +4,7 @@ # Elastic License 2.0. {% from 'allowed_states.map.jinja' import allowed_states %} -{% if sls.split('.')[0] in allowed_states %} +{% if sls.split('.')[0] in allowed_states or sls in allowed_states %} {% from 'vars/globals.map.jinja' import GLOBALS %} # Move our new CA over so Elastic and Logstash can use SSL with the internal CA diff --git a/salt/kafka/enabled.sls b/salt/kafka/enabled.sls index ed26297b3..a42b6f18b 100644 --- a/salt/kafka/enabled.sls +++ b/salt/kafka/enabled.sls @@ -10,6 +10,7 @@ {% set KAFKANODES = salt['pillar.get']('kafka:nodes', {}) %} include: + - elasticsearch.ca - kafka.sostatus - kafka.config - kafka.storage From bb983d4ba2570c1764f4131743c82b98700d595a Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Fri, 12 Apr 2024 16:16:03 -0400 Subject: [PATCH 052/507] just broker as default process --- salt/kafka/defaults.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/salt/kafka/defaults.yaml b/salt/kafka/defaults.yaml index 7828f0536..91f55a07d 100644 --- a/salt/kafka/defaults.yaml +++ b/salt/kafka/defaults.yaml @@ -2,7 +2,7 @@ kafka: enabled: False config: server: - advertised_x_listeners: BROKER://10.66.166.231:9092 + advertised_x_listeners: auto_x_create_x_topics_x_enable: true controller_x_listener_x_names: CONTROLLER controller_x_quorum_x_voters: @@ -13,13 +13,13 @@ kafka: log_x_retention_x_check_x_interval_x_ms: 300000 log_x_retention_x_hours: 168 log_x_segment_x_bytes: 1073741824 - node_x_id: + node_x_id: num_x_io_x_threads: 8 num_x_network_x_threads: 3 num_x_partitions: 1 num_x_recovery_x_threads_x_per_x_data_x_dir: 1 offsets_x_topic_x_replication_x_factor: 1 - process_x_roles: broker,controller + process_x_roles: broker socket_x_receive_x_buffer_x_bytes: 102400 socket_x_request_x_max_x_bytes: 104857600 socket_x_send_x_buffer_x_bytes: 102400 From de6ea29e3b155de07278dbdee1ff1f63e758f19f Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Fri, 12 Apr 2024 16:18:53 -0400 Subject: [PATCH 053/507] update default process.role to broker only Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/defaults.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/kafka/defaults.yaml b/salt/kafka/defaults.yaml index 7828f0536..3da14acb4 100644 --- a/salt/kafka/defaults.yaml +++ b/salt/kafka/defaults.yaml @@ -19,7 +19,7 @@ kafka: num_x_partitions: 1 num_x_recovery_x_threads_x_per_x_data_x_dir: 1 offsets_x_topic_x_replication_x_factor: 1 - process_x_roles: broker,controller + process_x_roles: broker socket_x_receive_x_buffer_x_bytes: 102400 socket_x_request_x_max_x_bytes: 104857600 socket_x_send_x_buffer_x_bytes: 102400 From c4994a208b9f0746cc7b3867f8623faba41d718a Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Mon, 15 Apr 2024 11:37:21 -0400 Subject: [PATCH 054/507] restart salt minion if a manager and signing policies change --- salt/salt/minion.sls | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/salt/salt/minion.sls b/salt/salt/minion.sls index 2cc032745..8c6f7f019 100644 --- a/salt/salt/minion.sls +++ b/salt/salt/minion.sls @@ -13,6 +13,9 @@ include: - systemd.reload - repo.client - salt.mine_functions +{% if GLOBALS.role in GLOBALS.manager_roles %} + - ca +{% endif %} {% if INSTALLEDSALTVERSION|string != SALTVERSION|string %} @@ -98,5 +101,8 @@ salt_minion_service: - file: mine_functions {% if INSTALLEDSALTVERSION|string == SALTVERSION|string %} - file: set_log_levels +{% endif %} +{% if GLOBALS.role in GLOBALS.manager_roles %} + - file: /etc/salt/minion.d/signing_policies.conf {% endif %} - order: last From 4b79623ce31edfbf59763d41747ddb7a79fe7220 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Tue, 16 Apr 2024 16:51:35 -0400 Subject: [PATCH 055/507] watch pillar files for changes and do something --- salt/salt/engines/master/pillarWatch.py | 72 +++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 salt/salt/engines/master/pillarWatch.py diff --git a/salt/salt/engines/master/pillarWatch.py b/salt/salt/engines/master/pillarWatch.py new file mode 100644 index 000000000..c45e2383d --- /dev/null +++ b/salt/salt/engines/master/pillarWatch.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- + +import logging +from time import sleep +import os +import salt.client +import re + +log = logging.getLogger(__name__) +local = salt.client.LocalClient() + +def start(fpa, interval=10): + log.info("##### PILLARWATCH STARTED #####") + + try: + # maybe change this location + dataFile = open("/opt/so/state/pillarWatch.txt", "r+") + df = dataFile.read() + log.info("df: %s" % str(df)) + except FileNotFoundError: + log.info("No previous pillarWatch data saved") + + currentValues = [] + + log.info("FPA: %s" % str(fpa)) + for i in fpa: + log.trace("files: %s" % i['files']) + log.trace("pillar: %s" % i['pillar']) + log.trace("action: %s" % i['action']) + pillarFiles = i['files'] + pillar = i['pillar'] + action = i['action'] + + patterns = pillar.split(".") + log.trace("pillar: %s" % pillar) + log.trace("patterns: %s" % patterns) + log.trace("patterns length: %i" % len(patterns)) + # this var is used to track how many times the pattern has been found in the pillar file so that we can access the proper index later + patternFound = 0 + for pillarFile in pillarFiles: + with open(pillarFile, "r") as file: + log.info("checking file: %s" % pillarFile) + for line in file: + log.trace("line: %s" % line) + log.trace("pillarWatch engine: looking for: %s" % patterns[patternFound]) + # since we are looping line by line through a pillar file, the next line will check if each line matches the progression of keys through the pillar + # ex. if we are looking for the value of global.pipeline, then this will loop through the pillar file until 'global' is found, then it will look + # for pipeline. once pipeline is found, it will record the value + if re.search(patterns[patternFound], line): + log.trace("PILLARWATCH FOUND: %s" % patterns[patternFound]) + patternFound += 1 + # we have found the final key in the pillar that we are looking for, get the value + if patternFound == len(patterns): + for l in df.splitlines(): + if pillar in l: + previousPillarValue = l.split(":")[1] + log.info("%s previousPillarValue:%s" % (pillar, str(previousPillarValue))) + currentPillarValue = str(line.split(":")[1]).strip() + log.info("%s currentPillarValue: %s" % (pillar,currentPillarValue)) + if pillar in df: + df = re.sub(r"\b{}\b.*".format(pillar), pillar + ': ' + currentPillarValue, df) + #df = df.replace(pillar, pillar + ': ' + currentPillarValue) + else: + df = pillar + ': ' + currentPillarValue + log.info("df: %s" % df) + #currentValues.append(pillar + ":" + currentPillarValue) + # we have found the pillar so we dont need to loop throught the file anymore + break + dataFile.seek(0) + dataFile.write(df) + dataFile.truncate() + dataFile.close() From 665b7197a6a1820d4ced3bd2da4be7e2000c057a Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 17 Apr 2024 17:08:41 -0400 Subject: [PATCH 056/507] Update Kafka nodeid Update so-minion to include running kafka.nodes state to ensure nodeid is generated for new brokers Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- pillar/kafka/nodes.sls | 30 +------------ salt/kafka/enabled.sls | 7 ++- salt/kafka/files/managed_node_pillar.jinja | 7 +++ salt/kafka/nodes.map.jinja | 50 ++++++++++++++++++++++ salt/kafka/nodes.sls | 19 ++++++++ salt/manager/tools/sbin/so-minion | 4 ++ 6 files changed, 86 insertions(+), 31 deletions(-) create mode 100644 salt/kafka/files/managed_node_pillar.jinja create mode 100644 salt/kafka/nodes.map.jinja create mode 100644 salt/kafka/nodes.sls diff --git a/pillar/kafka/nodes.sls b/pillar/kafka/nodes.sls index 447e7a35d..ba14c219e 100644 --- a/pillar/kafka/nodes.sls +++ b/pillar/kafka/nodes.sls @@ -1,30 +1,2 @@ -{% set current_kafkanodes = salt.saltutil.runner('mine.get', tgt='G@role:so-manager or G@role:so-managersearch or G@role:so-standalone or G@role:so-receiver', fun='network.ip_addrs', tgt_type='compound') %} -{% set pillar_kafkanodes = salt['pillar.get']('kafka:nodes', default={}, merge=True) %} - -{% set existing_ids = [] %} -{% for node in pillar_kafkanodes.values() %} - {% if node.get('id') %} - {% do existing_ids.append(node['nodeid']) %} - {% endif %} -{% endfor %} -{% set all_possible_ids = range(1, 256)|list %} - -{% set available_ids = [] %} -{% for id in all_possible_ids %} - {% if id not in existing_ids %} - {% do available_ids.append(id) %} - {% endif %} -{% endfor %} - -{% set final_nodes = pillar_kafkanodes.copy() %} - -{% for minionid, ip in current_kafkanodes.items() %} - {% set hostname = minionid.split('_')[0] %} - {% if hostname not in final_nodes %} - {% set new_id = available_ids.pop(0) %} - {% do final_nodes.update({hostname: {'nodeid': new_id, 'ip': ip[0]}}) %} - {% endif %} -{% endfor %} - kafka: - nodes: {{ final_nodes|tojson }} + nodes: \ No newline at end of file diff --git a/salt/kafka/enabled.sls b/salt/kafka/enabled.sls index a42b6f18b..3c4f548f1 100644 --- a/salt/kafka/enabled.sls +++ b/salt/kafka/enabled.sls @@ -1,5 +1,5 @@ # Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one -# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at # https://securityonion.net/license; you may not use this file except in compliance with the # Elastic License 2.0. @@ -7,9 +7,12 @@ {% if sls.split('.')[0] in allowed_states %} {% from 'vars/globals.map.jinja' import GLOBALS %} {% from 'docker/docker.map.jinja' import DOCKER %} -{% set KAFKANODES = salt['pillar.get']('kafka:nodes', {}) %} +{% from 'kafka/nodes.map.jinja' import COMBINED_KAFKANODES as KAFKANODES %} include: + {% if grains.role in ['so-manager', 'so-managersearch', 'so-standalone'] %} + - kafka.nodes + {% endif %} - elasticsearch.ca - kafka.sostatus - kafka.config diff --git a/salt/kafka/files/managed_node_pillar.jinja b/salt/kafka/files/managed_node_pillar.jinja new file mode 100644 index 000000000..fb2ef410e --- /dev/null +++ b/salt/kafka/files/managed_node_pillar.jinja @@ -0,0 +1,7 @@ +kafka: + nodes: +{% for node, values in COMBINED_KAFKANODES.items() %} + {{ node }}: + ip: {{ values['ip'] }} + nodeid: {{ values['nodeid'] }} +{% endfor %} \ No newline at end of file diff --git a/salt/kafka/nodes.map.jinja b/salt/kafka/nodes.map.jinja new file mode 100644 index 000000000..a6e36d36a --- /dev/null +++ b/salt/kafka/nodes.map.jinja @@ -0,0 +1,50 @@ +{% set current_kafkanodes = salt.saltutil.runner('mine.get', tgt='G@role:so-manager or G@role:so-managersearch or G@role:so-standalone or G@role:so-receiver', fun='network.ip_addrs', tgt_type='compound') %} +{% set STORED_KAFKANODES = salt['pillar.get']('kafka:nodes', {}) %} + +{% set existing_ids = [] %} + +{# Check STORED_KAFKANODES for existing kafka nodes and pull their IDs so they are not reused across the grid #} +{% if STORED_KAFKANODES.get('nodes', {}).items() | length > 0 %} +{% for node, values in STORED_KAFKANODES.nodes.items() %} +{% if values.get('nodeid') %} +{% do existing_ids.append(values['nodeid']) %} +{% endif %} +{% endfor %} +{% endif %} + +{# Create list of possible node ids #} +{% set all_possible_ids = range(1, 65536)|list %} + +{# Don't like the below loop because the higher the range for all_possible_ids the more time spent on loop #} +{# Create list of available node ids by looping through all_possible_ids and ensuring it isn't in existing_ids #} +{% set available_ids = [] %} +{% for id in all_possible_ids %} +{% if id not in existing_ids %} +{% do available_ids.append(id) %} +{% endif %} +{% endfor %} + +{# Collect kafka eligible nodes and check if they're already in STORED_KAFKANODES to avoid potentially reassigning a nodeid #} +{% set NEW_KAFKANODES = {} %} +{% for minionid, ip in current_kafkanodes.items() %} +{% set hostname = minionid.split('_')[0] %} +{% if STORED_KAFKANODES.get('nodes', {}).items() | length > 0 and hostname not in STORED_KAFKANODES.nodes %} +{% set new_id = available_ids.pop(0) %} +{% do NEW_KAFKANODES.update({hostname: {'nodeid': new_id, 'ip': ip[0]}}) %} +{% endif %} +{% if hostname not in NEW_KAFKANODES %} +{% set new_id = available_ids.pop(0) %} +{% do NEW_KAFKANODES.update({hostname: {'nodeid': new_id, 'ip': ip[0]}}) %} +{% endif %} +{% endfor %} + +{# Combine STORED_KAFKANODES and NEW_KAFKANODES for writing to the pillar/kafka/nodes.sls #} +{% set COMBINED_KAFKANODES = {} %} +{% for node, details in NEW_KAFKANODES.items() %} +{% do COMBINED_KAFKANODES.update({node: details}) %} +{% endfor %} +{% if STORED_KAFKANODES.get('nodes', {}).items() | length > 0 %} +{% for node, details in STORED_KAFKANODES.nodes.items() %} +{% do COMBINED_KAFKANODES.update({node: details}) %} +{% endfor %} +{% endif %} diff --git a/salt/kafka/nodes.sls b/salt/kafka/nodes.sls new file mode 100644 index 000000000..5085c6cca --- /dev/null +++ b/salt/kafka/nodes.sls @@ -0,0 +1,19 @@ +# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one +# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +# https://securityonion.net/license; you may not use this file except in compliance with the +# Elastic License 2.0. +{% from 'vars/globals.map.jinja' import GLOBALS %} +{% if GLOBALS.pipeline == "KAFKA" %} +{% from 'kafka/nodes.map.jinja' import COMBINED_KAFKANODES %} + +{# Store kafka pillar in a file rather than memory where values could be lost. Kafka does not support nodeid's changing #} +write_kafka_pillar_yaml: + file.managed: + - name: /opt/so/saltstack/local/pillar/kafka/nodes.sls + - mode: 644 + - user: socore + - source: salt://kafka/files/managed_node_pillar.jinja + - template: jinja + - context: + COMBINED_KAFKANODES: {{ COMBINED_KAFKANODES }} +{% endif %} \ No newline at end of file diff --git a/salt/manager/tools/sbin/so-minion b/salt/manager/tools/sbin/so-minion index 34e069ece..72ae55209 100755 --- a/salt/manager/tools/sbin/so-minion +++ b/salt/manager/tools/sbin/so-minion @@ -616,6 +616,10 @@ function updateMineAndApplyStates() { salt $MINIONID state.apply elasticsearch queue=True --async salt $MINIONID state.apply soc queue=True --async fi + if [[ "$NODETYPE" == "RECEIVER" ]]; then + # Setup nodeid for Kafka + salt-call state.apply kafka.nodes queue=True + fi # run this async so the cli doesn't wait for a return salt "$MINION_ID" state.highstate --async queue=True } From 4caa6a10b586d733f02df376e715e9f4338fbe8e Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Wed, 17 Apr 2024 18:09:04 -0400 Subject: [PATCH 057/507] watch a pillar in files and take action --- salt/salt/engines/master/pillarWatch.py | 47 +++++++++++++++++++------ salt/salt/files/engines.conf | 30 ++++++++++++++++ 2 files changed, 66 insertions(+), 11 deletions(-) diff --git a/salt/salt/engines/master/pillarWatch.py b/salt/salt/engines/master/pillarWatch.py index c45e2383d..c6f343dc8 100644 --- a/salt/salt/engines/master/pillarWatch.py +++ b/salt/salt/engines/master/pillarWatch.py @@ -5,6 +5,7 @@ from time import sleep import os import salt.client import re +from ast import literal_eval log = logging.getLogger(__name__) local = salt.client.LocalClient() @@ -12,24 +13,26 @@ local = salt.client.LocalClient() def start(fpa, interval=10): log.info("##### PILLARWATCH STARTED #####") + # try to open the file that stores the previous runs data + # if the file doesn't exist, create a blank one try: # maybe change this location dataFile = open("/opt/so/state/pillarWatch.txt", "r+") - df = dataFile.read() - log.info("df: %s" % str(df)) except FileNotFoundError: log.info("No previous pillarWatch data saved") + dataFile = open("/opt/so/state/pillarWatch.txt", "w+") - currentValues = [] + df = dataFile.read() + log.info("df: %s" % str(df)) log.info("FPA: %s" % str(fpa)) for i in fpa: log.trace("files: %s" % i['files']) log.trace("pillar: %s" % i['pillar']) - log.trace("action: %s" % i['action']) + log.trace("action: %s" % i['actions']) pillarFiles = i['files'] pillar = i['pillar'] - action = i['action'] + actions = i['actions'] patterns = pillar.split(".") log.trace("pillar: %s" % pillar) @@ -49,23 +52,45 @@ def start(fpa, interval=10): if re.search(patterns[patternFound], line): log.trace("PILLARWATCH FOUND: %s" % patterns[patternFound]) patternFound += 1 - # we have found the final key in the pillar that we are looking for, get the value + # we have found the final key in the pillar that we are looking for, get the previous value then the current value if patternFound == len(patterns): + # at this point, df is equal to the contents of the pillarWatch file that is used to tract the previous values of the pillars + previousPillarValue = 'PREVIOUSPILLARVALUENOTSAVEDINDATAFILE' for l in df.splitlines(): if pillar in l: - previousPillarValue = l.split(":")[1] - log.info("%s previousPillarValue:%s" % (pillar, str(previousPillarValue))) + previousPillarValue = l.split(":")[1].strip() + log.info("%s previousPillarValue: %s" % (pillar, str(previousPillarValue))) currentPillarValue = str(line.split(":")[1]).strip() log.info("%s currentPillarValue: %s" % (pillar,currentPillarValue)) if pillar in df: df = re.sub(r"\b{}\b.*".format(pillar), pillar + ': ' + currentPillarValue, df) - #df = df.replace(pillar, pillar + ': ' + currentPillarValue) else: - df = pillar + ': ' + currentPillarValue + df += pillar + ': ' + currentPillarValue + '\n' log.info("df: %s" % df) - #currentValues.append(pillar + ":" + currentPillarValue) # we have found the pillar so we dont need to loop throught the file anymore break + if currentPillarValue != previousPillarValue: + log.info("cPV != pPV: %s != %s" % (currentPillarValue,previousPillarValue)) + if previousPillarValue in actions['from']: + ACTIONS=actions['from'][previousPillarValue]['to'][currentPillarValue] + elif '*' in actions['from']: + # need more logic here for to and from + ACTIONS=actions['from']['*']['to']['*'] + else: + ACTIONS='FROM TO NOT DEFINED' + #for f in actions: + log.info("actions: %s" % actions['from']) + log.info("ACTIONS: %s" % ACTIONS) + for action in ACTIONS: + log.info(action) + for saltModule, args in action.items(): + log.info(saltModule) + log.info(args) + # args=list(action.values())[0] + # log.info(args) + whatHappened = __salt__[saltModule](**args) + log.info("whatHappened: %s" % whatHappened) + dataFile.seek(0) dataFile.write(df) dataFile.truncate() diff --git a/salt/salt/files/engines.conf b/salt/salt/files/engines.conf index 7c43e99e1..26be7bf37 100644 --- a/salt/salt/files/engines.conf +++ b/salt/salt/files/engines.conf @@ -4,3 +4,33 @@ engines_dirs: engines: - checkmine: interval: 60 + - pillarWatch: + fpa: + - files: + - /opt/so/saltstack/local/pillar/global/soc_global.sls + - /opt/so/saltstack/local/pillar/global/adv_global.sls + pillar: global.pipeline + actions: + from: + REDIS: + to: + KAFKA: + - cmd.run: + cmd: /usr/sbin/so-yaml.py replace /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls kafka.enabled True + KAFKA: + to: + REDIS: + - cmd.run: + cmd: /usr/sbin/so-yaml.py replace /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls kafka.enabled False + - files: + - /opt/so/saltstack/local/pillar/idstools/soc_idstools.sls + - /opt/so/saltstack/local/pillar/idstools/adv_idstools.sls + pillar: idstools.config.ruleset + actions: + from: + '*': + to: + '*': + - cmd.run: + cmd: /usr/sbin/so-rule-update + interval: 10 From 506bbd314df0eff9fbd6a24f60135991e5270818 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Thu, 18 Apr 2024 10:26:10 -0400 Subject: [PATCH 058/507] more comments, better logging --- salt/salt/engines/master/pillarWatch.py | 96 +++++++++++++++---------- salt/salt/files/engines.conf | 4 +- 2 files changed, 60 insertions(+), 40 deletions(-) diff --git a/salt/salt/engines/master/pillarWatch.py b/salt/salt/engines/master/pillarWatch.py index c6f343dc8..b19a6d709 100644 --- a/salt/salt/engines/master/pillarWatch.py +++ b/salt/salt/engines/master/pillarWatch.py @@ -1,17 +1,19 @@ +# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one +# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +# https://securityonion.net/license; you may not use this file except in compliance with the +# Elastic License 2.0. + # -*- coding: utf-8 -*- import logging -from time import sleep -import os -import salt.client import re -from ast import literal_eval +import salt.client log = logging.getLogger(__name__) local = salt.client.LocalClient() def start(fpa, interval=10): - log.info("##### PILLARWATCH STARTED #####") + log.info("pillarWatch engine: started") # try to open the file that stores the previous runs data # if the file doesn't exist, create a blank one @@ -19,77 +21,95 @@ def start(fpa, interval=10): # maybe change this location dataFile = open("/opt/so/state/pillarWatch.txt", "r+") except FileNotFoundError: - log.info("No previous pillarWatch data saved") + log.warn("pillarWatch engine: No previous pillarWatch data saved") dataFile = open("/opt/so/state/pillarWatch.txt", "w+") df = dataFile.read() - log.info("df: %s" % str(df)) - - log.info("FPA: %s" % str(fpa)) for i in fpa: - log.trace("files: %s" % i['files']) - log.trace("pillar: %s" % i['pillar']) - log.trace("action: %s" % i['actions']) + log.trace("pillarWatch engine: files: %s" % i['files']) + log.trace("pillarWatch engine: pillar: %s" % i['pillar']) + log.trace("pillarWatch engine: actions: %s" % i['actions']) pillarFiles = i['files'] pillar = i['pillar'] actions = i['actions'] - + # these are the keys that we are going to look for as we traverse the pillarFiles patterns = pillar.split(".") - log.trace("pillar: %s" % pillar) - log.trace("patterns: %s" % patterns) - log.trace("patterns length: %i" % len(patterns)) # this var is used to track how many times the pattern has been found in the pillar file so that we can access the proper index later patternFound = 0 for pillarFile in pillarFiles: with open(pillarFile, "r") as file: - log.info("checking file: %s" % pillarFile) + log.info("pillarWatch engine: checking file: %s" % pillarFile) for line in file: - log.trace("line: %s" % line) + log.trace("pillarWatch engine: inspecting line: %s in file: %s" % (line, file)) log.trace("pillarWatch engine: looking for: %s" % patterns[patternFound]) # since we are looping line by line through a pillar file, the next line will check if each line matches the progression of keys through the pillar # ex. if we are looking for the value of global.pipeline, then this will loop through the pillar file until 'global' is found, then it will look # for pipeline. once pipeline is found, it will record the value - if re.search(patterns[patternFound], line): - log.trace("PILLARWATCH FOUND: %s" % patterns[patternFound]) + if re.search(patterns[patternFound] + ':', line): + # strip the newline because it makes the logs u-g-l-y + log.info("pillarWatch engine: found: %s" % line.strip('\n')) patternFound += 1 # we have found the final key in the pillar that we are looking for, get the previous value then the current value if patternFound == len(patterns): # at this point, df is equal to the contents of the pillarWatch file that is used to tract the previous values of the pillars previousPillarValue = 'PREVIOUSPILLARVALUENOTSAVEDINDATAFILE' + # check the contents of the dataFile that stores the previousPillarValue(s). + # find if the pillar we are checking for changes has previously been saved. if so, grab it's prior value for l in df.splitlines(): if pillar in l: - previousPillarValue = l.split(":")[1].strip() - log.info("%s previousPillarValue: %s" % (pillar, str(previousPillarValue))) + previousPillarValue = str(l.split(":")[1].strip()) + log.info("pillarWatch engine: %s previousPillarValue: %s" % (pillar, previousPillarValue)) currentPillarValue = str(line.split(":")[1]).strip() - log.info("%s currentPillarValue: %s" % (pillar,currentPillarValue)) + log.info("pillarWatch engine: %s currentPillarValue: %s" % (pillar, currentPillarValue)) + # if the pillar we are checking for changes has been defined in the dataFile, + # replace the previousPillarValue with the currentPillarValue. if it isn't in there, append it. if pillar in df: df = re.sub(r"\b{}\b.*".format(pillar), pillar + ': ' + currentPillarValue, df) else: df += pillar + ': ' + currentPillarValue + '\n' - log.info("df: %s" % df) + log.trace("pillarWatch engine: df: %s" % df) # we have found the pillar so we dont need to loop throught the file anymore break + # if the pillar value changed, then we find what actions we should take + log.info("pillarWatch engine: checking if currentPillarValue != previousPillarValue") + log.info("pillarWatch engine: %s currentPillarValue: %s" % (pillar, currentPillarValue)) + log.info("pillarWatch engine: %s previousPillarValue: %s" % (pillar, previousPillarValue)) if currentPillarValue != previousPillarValue: - log.info("cPV != pPV: %s != %s" % (currentPillarValue,previousPillarValue)) + log.info("pillarWatch engine: currentPillarValue != previousPillarValue: %s != %s" % (currentPillarValue, previousPillarValue)) + # check if the previous pillar value is defined in the pillar from -> to actions if previousPillarValue in actions['from']: - ACTIONS=actions['from'][previousPillarValue]['to'][currentPillarValue] + # check if the new / current pillar value is defined under to + if currentPillarValue in actions['from'][previousPillarValue]['to']: + ACTIONS=actions['from'][previousPillarValue]['to'][currentPillarValue] + # if the new / current pillar value isn't defined under to, is there a wildcard defined + elif '*' in actions['from'][previousPillarValue]['to']: + ACTIONS=actions['from'][previousPillarValue]['to']['*'] + # no action was defined for us to take when we see the pillar change + else: + ACTIONS='NO DEFINED ACTION FOR US TO TAKE' + # if the previous pillar wasn't defined in the actions from, is there a wildcard defined for the pillar that we are changing from elif '*' in actions['from']: + # is the new pillar value defined for the wildcard match + if currentPillarValue in actions['from']['*']['to']: + ACTIONS=actions['from']['*']['to'][currentPillarValue] + # if the new pillar doesn't have an action, was a wildcard defined + elif '*' in actions['from']['*']['to']: # need more logic here for to and from - ACTIONS=actions['from']['*']['to']['*'] + ACTIONS=actions['from']['*']['to']['*'] + else: + ACTIONS='NO DEFINED ACTION FOR US TO TAKE' + # a match for the previous pillar wasn't defined in the action in either the form of a direct match or wildcard else: - ACTIONS='FROM TO NOT DEFINED' - #for f in actions: - log.info("actions: %s" % actions['from']) - log.info("ACTIONS: %s" % ACTIONS) + ACTIONS='NO DEFINED ACTION FOR US TO TAKE' + log.info("pillarWatch engine: actions: %s" % actions['from']) + log.info("pillarWatch engine: ACTIONS: %s" % ACTIONS) for action in ACTIONS: - log.info(action) + log.info("pillarWatch engine: action: %s" % action) for saltModule, args in action.items(): - log.info(saltModule) - log.info(args) - # args=list(action.values())[0] - # log.info(args) - whatHappened = __salt__[saltModule](**args) - log.info("whatHappened: %s" % whatHappened) + log.info("pillarWatch engine: saltModule: %s" % saltModule) + log.info("pillarWatch engine: args: %s" % args) + actionReturn = __salt__[saltModule](**args) + log.info("pillarWatch engine: actionReturn: %s" % actionReturn) dataFile.seek(0) dataFile.write(df) diff --git a/salt/salt/files/engines.conf b/salt/salt/files/engines.conf index 26be7bf37..de5c1e43a 100644 --- a/salt/salt/files/engines.conf +++ b/salt/salt/files/engines.conf @@ -12,14 +12,14 @@ engines: pillar: global.pipeline actions: from: - REDIS: + '*': to: KAFKA: - cmd.run: cmd: /usr/sbin/so-yaml.py replace /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls kafka.enabled True KAFKA: to: - REDIS: + '*': - cmd.run: cmd: /usr/sbin/so-yaml.py replace /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls kafka.enabled False - files: From 610dd2c08d3907eac18b2a1841f7fc4d5d6665d1 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Thu, 18 Apr 2024 11:11:14 -0400 Subject: [PATCH 059/507] improve it --- salt/salt/engines/master/pillarWatch.py | 27 ++++++++++++++----------- salt/salt/files/engines.conf | 8 ++++++++ 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/salt/salt/engines/master/pillarWatch.py b/salt/salt/engines/master/pillarWatch.py index b19a6d709..abbb632f8 100644 --- a/salt/salt/engines/master/pillarWatch.py +++ b/salt/salt/engines/master/pillarWatch.py @@ -13,7 +13,7 @@ log = logging.getLogger(__name__) local = salt.client.LocalClient() def start(fpa, interval=10): - log.info("pillarWatch engine: started") + log.info("pillarWatch engine: checking watched pillars for changes") # try to open the file that stores the previous runs data # if the file doesn't exist, create a blank one @@ -26,6 +26,8 @@ def start(fpa, interval=10): df = dataFile.read() for i in fpa: + currentPillarValue = '' + previousPillarValue = '' log.trace("pillarWatch engine: files: %s" % i['files']) log.trace("pillarWatch engine: pillar: %s" % i['pillar']) log.trace("pillarWatch engine: actions: %s" % i['actions']) @@ -58,9 +60,9 @@ def start(fpa, interval=10): for l in df.splitlines(): if pillar in l: previousPillarValue = str(l.split(":")[1].strip()) - log.info("pillarWatch engine: %s previousPillarValue: %s" % (pillar, previousPillarValue)) currentPillarValue = str(line.split(":")[1]).strip() log.info("pillarWatch engine: %s currentPillarValue: %s" % (pillar, currentPillarValue)) + log.info("pillarWatch engine: %s previousPillarValue: %s" % (pillar, previousPillarValue)) # if the pillar we are checking for changes has been defined in the dataFile, # replace the previousPillarValue with the currentPillarValue. if it isn't in there, append it. if pillar in df: @@ -86,7 +88,7 @@ def start(fpa, interval=10): ACTIONS=actions['from'][previousPillarValue]['to']['*'] # no action was defined for us to take when we see the pillar change else: - ACTIONS='NO DEFINED ACTION FOR US TO TAKE' + ACTIONS=['NO DEFINED ACTION FOR US TO TAKE'] # if the previous pillar wasn't defined in the actions from, is there a wildcard defined for the pillar that we are changing from elif '*' in actions['from']: # is the new pillar value defined for the wildcard match @@ -97,19 +99,20 @@ def start(fpa, interval=10): # need more logic here for to and from ACTIONS=actions['from']['*']['to']['*'] else: - ACTIONS='NO DEFINED ACTION FOR US TO TAKE' + ACTIONS=['NO DEFINED ACTION FOR US TO TAKE'] # a match for the previous pillar wasn't defined in the action in either the form of a direct match or wildcard else: - ACTIONS='NO DEFINED ACTION FOR US TO TAKE' - log.info("pillarWatch engine: actions: %s" % actions['from']) - log.info("pillarWatch engine: ACTIONS: %s" % ACTIONS) + ACTIONS=['NO DEFINED ACTION FOR US TO TAKE'] + log.info("pillarWatch engine: all defined actions: %s" % actions['from']) + log.info("pillarWatch engine: ACTIONS: %s chosen based on previousPillarValue: %s switching to currentPillarValue: %s" % (ACTIONS, previousPillarValue, currentPillarValue)) for action in ACTIONS: log.info("pillarWatch engine: action: %s" % action) - for saltModule, args in action.items(): - log.info("pillarWatch engine: saltModule: %s" % saltModule) - log.info("pillarWatch engine: args: %s" % args) - actionReturn = __salt__[saltModule](**args) - log.info("pillarWatch engine: actionReturn: %s" % actionReturn) + if action != 'NO DEFINED ACTION FOR US TO TAKE': + for saltModule, args in action.items(): + log.info("pillarWatch engine: saltModule: %s" % saltModule) + log.info("pillarWatch engine: args: %s" % args) + actionReturn = __salt__[saltModule](**args) + log.info("pillarWatch engine: actionReturn: %s" % actionReturn) dataFile.seek(0) dataFile.write(df) diff --git a/salt/salt/files/engines.conf b/salt/salt/files/engines.conf index de5c1e43a..c15194eaf 100644 --- a/salt/salt/files/engines.conf +++ b/salt/salt/files/engines.conf @@ -17,11 +17,19 @@ engines: KAFKA: - cmd.run: cmd: /usr/sbin/so-yaml.py replace /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls kafka.enabled True + - cmd.run: + cmd: salt-call saltutil.kill_all_jobs + - cmd.run: + cmd: salt-call state.highstate & KAFKA: to: '*': - cmd.run: cmd: /usr/sbin/so-yaml.py replace /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls kafka.enabled False + - cmd.run: + cmd: salt-call saltutil.kill_all_jobs + - cmd.run: + cmd: salt-call state.highstate & - files: - /opt/so/saltstack/local/pillar/idstools/soc_idstools.sls - /opt/so/saltstack/local/pillar/idstools/adv_idstools.sls From 5cc358de4ef20965b708436c6fba707684227760 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Thu, 18 Apr 2024 11:58:25 -0400 Subject: [PATCH 060/507] Update map files to handle empty kafka:nodes pillar Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/map.jinja | 4 ++-- salt/kafka/nodes.map.jinja | 9 ++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/salt/kafka/map.jinja b/salt/kafka/map.jinja index 771e6102b..56f85144a 100644 --- a/salt/kafka/map.jinja +++ b/salt/kafka/map.jinja @@ -6,13 +6,13 @@ {% import_yaml 'kafka/defaults.yaml' as KAFKADEFAULTS %} {% set KAFKAMERGED = salt['pillar.get']('kafka', KAFKADEFAULTS.kafka, merge=True) %} {% from 'vars/globals.map.jinja' import GLOBALS %} +{% from 'kafka/nodes.map.jinja' import COMBINED_KAFKANODES %} {% do KAFKAMERGED.config.server.update({ 'node_x_id': salt['pillar.get']('kafka:nodes:' ~ GLOBALS.hostname ~ ':nodeid')}) %} {% do KAFKAMERGED.config.server.update({'advertised_x_listeners': 'BROKER://' ~ GLOBALS.node_ip ~ ':9092'}) %} -{% set nodes = salt['pillar.get']('kafka:nodes', {}) %} {% set combined = [] %} -{% for hostname, data in nodes.items() %} +{% for hostname, data in COMBINED_KAFKANODES.items() %} {% do combined.append(data.nodeid ~ "@" ~ hostname ~ ":9093") %} {% endfor %} {% set kraft_controller_quorum_voters = ','.join(combined) %} diff --git a/salt/kafka/nodes.map.jinja b/salt/kafka/nodes.map.jinja index a6e36d36a..5d74e9e1c 100644 --- a/salt/kafka/nodes.map.jinja +++ b/salt/kafka/nodes.map.jinja @@ -4,7 +4,8 @@ {% set existing_ids = [] %} {# Check STORED_KAFKANODES for existing kafka nodes and pull their IDs so they are not reused across the grid #} -{% if STORED_KAFKANODES.get('nodes', {}).items() | length > 0 %} +{# {% if STORED_KAFKANODES.get('nodes', {}).items() | length > 0 %} #} +{% if STORED_KAFKANODES != none %} {% for node, values in STORED_KAFKANODES.nodes.items() %} {% if values.get('nodeid') %} {% do existing_ids.append(values['nodeid']) %} @@ -28,7 +29,8 @@ {% set NEW_KAFKANODES = {} %} {% for minionid, ip in current_kafkanodes.items() %} {% set hostname = minionid.split('_')[0] %} -{% if STORED_KAFKANODES.get('nodes', {}).items() | length > 0 and hostname not in STORED_KAFKANODES.nodes %} +{# {% if STORED_KAFKANODES.get('nodes', {}).items() | length > 0 and hostname not in STORED_KAFKANODES.nodes %} #} +{% if STORED_KAFKANODES != none and hostname not in STORED_KAFKANODES.nodes %} {% set new_id = available_ids.pop(0) %} {% do NEW_KAFKANODES.update({hostname: {'nodeid': new_id, 'ip': ip[0]}}) %} {% endif %} @@ -43,7 +45,8 @@ {% for node, details in NEW_KAFKANODES.items() %} {% do COMBINED_KAFKANODES.update({node: details}) %} {% endfor %} -{% if STORED_KAFKANODES.get('nodes', {}).items() | length > 0 %} +{# {% if STORED_KAFKANODES.get('nodes', {}).items() | length > 0 %} #} +{% if STORED_KAFKANODES != none %} {% for node, details in STORED_KAFKANODES.nodes.items() %} {% do COMBINED_KAFKANODES.update({node: details}) %} {% endfor %} From 1f6eb9cdc34e496979c25223c32721fb9ad838b6 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Thu, 18 Apr 2024 13:50:37 -0400 Subject: [PATCH 061/507] match keys better. go through files reverse first found is prio --- salt/salt/engines/master/pillarWatch.py | 24 +++++++++++++++--------- salt/salt/files/engines.conf | 1 + 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/salt/salt/engines/master/pillarWatch.py b/salt/salt/engines/master/pillarWatch.py index abbb632f8..9f85a07c4 100644 --- a/salt/salt/engines/master/pillarWatch.py +++ b/salt/salt/engines/master/pillarWatch.py @@ -26,8 +26,6 @@ def start(fpa, interval=10): df = dataFile.read() for i in fpa: - currentPillarValue = '' - previousPillarValue = '' log.trace("pillarWatch engine: files: %s" % i['files']) log.trace("pillarWatch engine: pillar: %s" % i['pillar']) log.trace("pillarWatch engine: actions: %s" % i['actions']) @@ -36,9 +34,12 @@ def start(fpa, interval=10): actions = i['actions'] # these are the keys that we are going to look for as we traverse the pillarFiles patterns = pillar.split(".") - # this var is used to track how many times the pattern has been found in the pillar file so that we can access the proper index later - patternFound = 0 - for pillarFile in pillarFiles: + # check the pillar files in reveresed order to replicate the same hierarchy as the pillar top file + for pillarFile in reversed(pillarFiles): + currentPillarValue = '' + previousPillarValue = '' + # this var is used to track how many times the pattern has been found in the pillar file so that we can access the proper index later + patternFound = 0 with open(pillarFile, "r") as file: log.info("pillarWatch engine: checking file: %s" % pillarFile) for line in file: @@ -47,7 +48,7 @@ def start(fpa, interval=10): # since we are looping line by line through a pillar file, the next line will check if each line matches the progression of keys through the pillar # ex. if we are looking for the value of global.pipeline, then this will loop through the pillar file until 'global' is found, then it will look # for pipeline. once pipeline is found, it will record the value - if re.search(patterns[patternFound] + ':', line): + if re.search('^' + patterns[patternFound] + ':', line.strip()): # strip the newline because it makes the logs u-g-l-y log.info("pillarWatch engine: found: %s" % line.strip('\n')) patternFound += 1 @@ -70,8 +71,12 @@ def start(fpa, interval=10): else: df += pillar + ': ' + currentPillarValue + '\n' log.trace("pillarWatch engine: df: %s" % df) - # we have found the pillar so we dont need to loop throught the file anymore + # we have found the pillar so we dont need to loop through the file anymore break + # if key and value was found in the first file, then we don't want to look in + # any more files since we use the first file as the source of truth. + if patternFound == len(patterns): + break # if the pillar value changed, then we find what actions we should take log.info("pillarWatch engine: checking if currentPillarValue != previousPillarValue") log.info("pillarWatch engine: %s currentPillarValue: %s" % (pillar, currentPillarValue)) @@ -111,8 +116,9 @@ def start(fpa, interval=10): for saltModule, args in action.items(): log.info("pillarWatch engine: saltModule: %s" % saltModule) log.info("pillarWatch engine: args: %s" % args) - actionReturn = __salt__[saltModule](**args) - log.info("pillarWatch engine: actionReturn: %s" % actionReturn) + __salt__[saltModule](**args) + #actionReturn = __salt__[saltModule](**args) + #log.info("pillarWatch engine: actionReturn: %s" % actionReturn) dataFile.seek(0) dataFile.write(df) diff --git a/salt/salt/files/engines.conf b/salt/salt/files/engines.conf index c15194eaf..3066f588c 100644 --- a/salt/salt/files/engines.conf +++ b/salt/salt/files/engines.conf @@ -6,6 +6,7 @@ engines: interval: 60 - pillarWatch: fpa: + # these files will be checked in reversed order to replicate the same hierarchy as the pillar top file - files: - /opt/so/saltstack/local/pillar/global/soc_global.sls - /opt/so/saltstack/local/pillar/global/adv_global.sls From fe81ffaf78929c0d83dc3d465d6153b4c5d66070 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Thu, 18 Apr 2024 15:11:22 -0400 Subject: [PATCH 062/507] Variables no longer used. Replaced by map file Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/config.sls | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/salt/kafka/config.sls b/salt/kafka/config.sls index c856c4f80..b1a31d23f 100644 --- a/salt/kafka/config.sls +++ b/salt/kafka/config.sls @@ -7,23 +7,6 @@ {% if sls.split('.')[0] in allowed_states %} {% from 'vars/globals.map.jinja' import GLOBALS %} -{% set kafka_ips_logstash = [] %} -{% set kafka_ips_kraft = [] %} -{% set kafkanodes = salt['pillar.get']('kafka:nodes', {}) %} -{% set kafka_ip = GLOBALS.node_ip %} - -{# Create list for kafka <-> logstash/searchnode communcations #} -{% for node, node_data in kafkanodes.items() %} -{% do kafka_ips_logstash.append(node_data['ip'] + ":9092") %} -{% endfor %} -{% set kafka_server_list = "','".join(kafka_ips_logstash) %} - -{# Create a list for kraft controller <-> kraft controller communications. Used for Kafka metadata management #} -{% for node, node_data in kafkanodes.items() %} -{% do kafka_ips_kraft.append(node_data['nodeid'] ~ "@" ~ node_data['ip'] ~ ":9093") %} -{% endfor %} -{% set kraft_server_list = "','".join(kafka_ips_kraft) %} - include: - ssl From 746128e37b214251716d85702239464e3e3d8a4c Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Thu, 18 Apr 2024 15:13:29 -0400 Subject: [PATCH 063/507] update so-kafka-clusterid This is a temporary script used to setup kafka secret and clusterid needed for kafka to start. This scripts functionality will be replaced by soup/setup scripts Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/nodes.map.jinja | 2 +- salt/manager/tools/sbin/so-kafka-clusterid | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/salt/kafka/nodes.map.jinja b/salt/kafka/nodes.map.jinja index 5d74e9e1c..36f789259 100644 --- a/salt/kafka/nodes.map.jinja +++ b/salt/kafka/nodes.map.jinja @@ -1,5 +1,5 @@ {% set current_kafkanodes = salt.saltutil.runner('mine.get', tgt='G@role:so-manager or G@role:so-managersearch or G@role:so-standalone or G@role:so-receiver', fun='network.ip_addrs', tgt_type='compound') %} -{% set STORED_KAFKANODES = salt['pillar.get']('kafka:nodes', {}) %} +{% set STORED_KAFKANODES = salt['pillar.get']('kafka', {}) %} {% set existing_ids = [] %} diff --git a/salt/manager/tools/sbin/so-kafka-clusterid b/salt/manager/tools/sbin/so-kafka-clusterid index 7ac055997..829e4fc87 100644 --- a/salt/manager/tools/sbin/so-kafka-clusterid +++ b/salt/manager/tools/sbin/so-kafka-clusterid @@ -20,10 +20,10 @@ fi if ! grep -q "^ cluster_id:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then kafka_cluster_id=$(get_random_value 22) - echo 'kafka: ' > $local_salt_dir/pillar/kafka/soc_kafka.sls echo ' cluster_id: '$kafka_cluster_id >> $local_salt_dir/pillar/kafka/soc_kafka.sls +fi if ! grep -q "^ kafkapass:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then kafkapass=$(get_random_value) echo ' kafkapass: '$kafkapass >> $local_salt_dir/pillar/kafka/soc_kafka.sls -fi +fi \ No newline at end of file From 4ac04a1a4671d0d2ff3e486801ab4b4f50cebcbb Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Thu, 18 Apr 2024 16:46:36 -0400 Subject: [PATCH 064/507] add kafkapass soc annotation Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/soc_kafka.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/salt/kafka/soc_kafka.yaml b/salt/kafka/soc_kafka.yaml index 8a6c516a9..500ad59c3 100644 --- a/salt/kafka/soc_kafka.yaml +++ b/salt/kafka/soc_kafka.yaml @@ -9,6 +9,10 @@ kafka: sensitive: True helpLink: kafka.html config: + kafkapass: + description: The password to use for the Kafka certificates. + sensitive: True + helpLink: kafka.html server: advertised_x_listeners: description: Specify the list of listeners (hostname and port) that Kafka brokers provide to clients for communication. From 6c5e0579cf01a106ff16347e7817b40407e46744 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Fri, 19 Apr 2024 09:32:32 -0400 Subject: [PATCH 065/507] logging changes. ensure salt master has pillarWatch engine --- salt/salt/engines/master/pillarWatch.py | 35 ++++++++++++------------- salt/salt/files/engines.conf | 16 +++++------ salt/salt/master.sls | 5 ++++ 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/salt/salt/engines/master/pillarWatch.py b/salt/salt/engines/master/pillarWatch.py index 9f85a07c4..0f6f0ba6a 100644 --- a/salt/salt/engines/master/pillarWatch.py +++ b/salt/salt/engines/master/pillarWatch.py @@ -7,13 +7,14 @@ import logging import re -import salt.client - log = logging.getLogger(__name__) -local = salt.client.LocalClient() + +# will need this in future versions of this engine +#import salt.client +#local = salt.client.LocalClient() def start(fpa, interval=10): - log.info("pillarWatch engine: checking watched pillars for changes") + log.info("pillarWatch engine: ##### checking watched pillars for changes #####") # try to open the file that stores the previous runs data # if the file doesn't exist, create a blank one @@ -41,7 +42,7 @@ def start(fpa, interval=10): # this var is used to track how many times the pattern has been found in the pillar file so that we can access the proper index later patternFound = 0 with open(pillarFile, "r") as file: - log.info("pillarWatch engine: checking file: %s" % pillarFile) + log.debug("pillarWatch engine: checking file: %s" % pillarFile) for line in file: log.trace("pillarWatch engine: inspecting line: %s in file: %s" % (line, file)) log.trace("pillarWatch engine: looking for: %s" % patterns[patternFound]) @@ -50,7 +51,7 @@ def start(fpa, interval=10): # for pipeline. once pipeline is found, it will record the value if re.search('^' + patterns[patternFound] + ':', line.strip()): # strip the newline because it makes the logs u-g-l-y - log.info("pillarWatch engine: found: %s" % line.strip('\n')) + log.debug("pillarWatch engine: found: %s" % line.strip('\n')) patternFound += 1 # we have found the final key in the pillar that we are looking for, get the previous value then the current value if patternFound == len(patterns): @@ -62,8 +63,8 @@ def start(fpa, interval=10): if pillar in l: previousPillarValue = str(l.split(":")[1].strip()) currentPillarValue = str(line.split(":")[1]).strip() - log.info("pillarWatch engine: %s currentPillarValue: %s" % (pillar, currentPillarValue)) - log.info("pillarWatch engine: %s previousPillarValue: %s" % (pillar, previousPillarValue)) + log.debug("pillarWatch engine: %s currentPillarValue: %s" % (pillar, currentPillarValue)) + log.debug("pillarWatch engine: %s previousPillarValue: %s" % (pillar, previousPillarValue)) # if the pillar we are checking for changes has been defined in the dataFile, # replace the previousPillarValue with the currentPillarValue. if it isn't in there, append it. if pillar in df: @@ -78,9 +79,7 @@ def start(fpa, interval=10): if patternFound == len(patterns): break # if the pillar value changed, then we find what actions we should take - log.info("pillarWatch engine: checking if currentPillarValue != previousPillarValue") - log.info("pillarWatch engine: %s currentPillarValue: %s" % (pillar, currentPillarValue)) - log.info("pillarWatch engine: %s previousPillarValue: %s" % (pillar, previousPillarValue)) + log.debug("pillarWatch engine: checking if currentPillarValue != previousPillarValue") if currentPillarValue != previousPillarValue: log.info("pillarWatch engine: currentPillarValue != previousPillarValue: %s != %s" % (currentPillarValue, previousPillarValue)) # check if the previous pillar value is defined in the pillar from -> to actions @@ -108,17 +107,17 @@ def start(fpa, interval=10): # a match for the previous pillar wasn't defined in the action in either the form of a direct match or wildcard else: ACTIONS=['NO DEFINED ACTION FOR US TO TAKE'] - log.info("pillarWatch engine: all defined actions: %s" % actions['from']) - log.info("pillarWatch engine: ACTIONS: %s chosen based on previousPillarValue: %s switching to currentPillarValue: %s" % (ACTIONS, previousPillarValue, currentPillarValue)) + log.debug("pillarWatch engine: all defined actions: %s" % actions['from']) + log.debug("pillarWatch engine: ACTIONS: %s chosen based on previousPillarValue: %s switching to currentPillarValue: %s" % (ACTIONS, previousPillarValue, currentPillarValue)) for action in ACTIONS: log.info("pillarWatch engine: action: %s" % action) if action != 'NO DEFINED ACTION FOR US TO TAKE': for saltModule, args in action.items(): - log.info("pillarWatch engine: saltModule: %s" % saltModule) - log.info("pillarWatch engine: args: %s" % args) - __salt__[saltModule](**args) - #actionReturn = __salt__[saltModule](**args) - #log.info("pillarWatch engine: actionReturn: %s" % actionReturn) + log.debug("pillarWatch engine: saltModule: %s" % saltModule) + log.debug("pillarWatch engine: args: %s" % args) + #__salt__[saltModule](**args) + actionReturn = __salt__[saltModule](**args) + log.info("pillarWatch engine: actionReturn: %s" % actionReturn) dataFile.seek(0) dataFile.write(df) diff --git a/salt/salt/files/engines.conf b/salt/salt/files/engines.conf index 3066f588c..bee9493ee 100644 --- a/salt/salt/files/engines.conf +++ b/salt/salt/files/engines.conf @@ -18,19 +18,19 @@ engines: KAFKA: - cmd.run: cmd: /usr/sbin/so-yaml.py replace /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls kafka.enabled True - - cmd.run: - cmd: salt-call saltutil.kill_all_jobs - - cmd.run: - cmd: salt-call state.highstate & +# - cmd.run: +# cmd: salt-call saltutil.kill_all_jobs +# - cmd.run: +# cmd: salt-call state.highstate & KAFKA: to: '*': - cmd.run: cmd: /usr/sbin/so-yaml.py replace /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls kafka.enabled False - - cmd.run: - cmd: salt-call saltutil.kill_all_jobs - - cmd.run: - cmd: salt-call state.highstate & +# - cmd.run: +# cmd: salt-call saltutil.kill_all_jobs +# - cmd.run: +# cmd: salt-call state.highstate & - files: - /opt/so/saltstack/local/pillar/idstools/soc_idstools.sls - /opt/so/saltstack/local/pillar/idstools/adv_idstools.sls diff --git a/salt/salt/master.sls b/salt/salt/master.sls index 0a65f3e01..51acca61d 100644 --- a/salt/salt/master.sls +++ b/salt/salt/master.sls @@ -27,6 +27,11 @@ checkmine_engine: - source: salt://salt/engines/master/checkmine.py - makedirs: True +pillarWatch_engine: + file.managed: + - name: /etc/salt/engines/pillarWatch.py + - source: salt://salt/engines/master/pillarWatch.py + engines_config: file.managed: - name: /etc/salt/master.d/engines.conf From 25d63f751676b9fc708d04b4e4a5f60dc0e392e2 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Mon, 22 Apr 2024 16:42:59 -0400 Subject: [PATCH 066/507] Setup kafka reactor for managing kafka controllers globally Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/controllers.sls | 20 ++++++++++++++++++++ salt/kafka/enabled.sls | 1 + salt/reactor/kafka.sls | 16 ++++++++++++++++ salt/salt/files/reactor.conf | 3 +++ salt/salt/master.sls | 5 +++++ 5 files changed, 45 insertions(+) create mode 100644 salt/kafka/controllers.sls create mode 100644 salt/reactor/kafka.sls create mode 100644 salt/salt/files/reactor.conf diff --git a/salt/kafka/controllers.sls b/salt/kafka/controllers.sls new file mode 100644 index 000000000..c6df07b0c --- /dev/null +++ b/salt/kafka/controllers.sls @@ -0,0 +1,20 @@ +# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one +# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +# https://securityonion.net/license; you may not use this file except in compliance with the +# Elastic License 2.0. + +{% from 'allowed_states.map.jinja' import allowed_states %} +{% if sls.split('.')[0] in allowed_states %} +{% import_yaml 'kafka/defaults.yaml' as KAFKADEFAULTS %} + +{% set process_x_roles = salt['pillar.get']('kafka:config:server:process_x_roles', KAFKADEFAULTS.kafka.config.server.process_x_roles, merge=true) %} + +{# Send an event to the salt master at every highstate. Containing the minions process_x_roles. + if no value is set for this minion then the default in kafka/defaults.yaml is used #} +push_event_to_master: + event.send: + - name: kafka/controllers_update + - data: + id: {{ grains['id'] }} + process_x_roles: {{ process_x_roles }} +{% endif %} diff --git a/salt/kafka/enabled.sls b/salt/kafka/enabled.sls index 3c4f548f1..d05a49a0e 100644 --- a/salt/kafka/enabled.sls +++ b/salt/kafka/enabled.sls @@ -13,6 +13,7 @@ include: {% if grains.role in ['so-manager', 'so-managersearch', 'so-standalone'] %} - kafka.nodes {% endif %} + - kafka.controllers - elasticsearch.ca - kafka.sostatus - kafka.config diff --git a/salt/reactor/kafka.sls b/salt/reactor/kafka.sls new file mode 100644 index 000000000..879fb5431 --- /dev/null +++ b/salt/reactor/kafka.sls @@ -0,0 +1,16 @@ +{# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one +or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +https://securityonion.net/license; you may not use this file except in compliance with the +Elastic License 2.0. #} + +{% set minionid = data['id'].split('_')[0] %} +{% set role = data['data']['process_x_roles'] %} + +{# Run so-yaml to replace kafka.node..role with the value from kafka/controllers.sls #} + +update_global_kafka_pillar: + local.cmd.run: + - tgt: 'G@role:so-manager or G@role:so-managersearch or G@role:so-standalone' + - tgt_type: compound + - arg: + - '/usr/sbin/so-yaml.py replace /opt/so/saltstack/local/pillar/kafka/nodes.sls kafka.nodes.{{ minionid }}.role {{ role }}' \ No newline at end of file diff --git a/salt/salt/files/reactor.conf b/salt/salt/files/reactor.conf new file mode 100644 index 000000000..129305572 --- /dev/null +++ b/salt/salt/files/reactor.conf @@ -0,0 +1,3 @@ +reactor: + - 'kafka/controllers_update': + - salt://reactor/kafka.sls \ No newline at end of file diff --git a/salt/salt/master.sls b/salt/salt/master.sls index 0a65f3e01..76340fb3d 100644 --- a/salt/salt/master.sls +++ b/salt/salt/master.sls @@ -32,6 +32,11 @@ engines_config: - name: /etc/salt/master.d/engines.conf - source: salt://salt/files/engines.conf +reactor_config: + file.managed: + - name: /etc/salt/master.d/reactor.conf + - source: salt://salt/files/reactor.conf + salt_master_service: service.running: - name: salt-master From 5a401af1fddb967a52d1d66d089b6f48746639f7 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Mon, 22 Apr 2024 16:44:35 -0400 Subject: [PATCH 067/507] Update kafka process_x_roles annotation Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/soc_kafka.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/salt/kafka/soc_kafka.yaml b/salt/kafka/soc_kafka.yaml index 500ad59c3..47ff05719 100644 --- a/salt/kafka/soc_kafka.yaml +++ b/salt/kafka/soc_kafka.yaml @@ -92,8 +92,10 @@ kafka: forcedType: int helpLink: kafka.html process_x_roles: - description: The roles the process performs. Use a comma-seperated list is multiple. + description: The roles performed by Kafka node. Default is to act as 'broker' only. title: process.roles + regex: ^(broker|controller|broker,controller|controller,broker)$ + regexFailureMessage: Valid values include 'broker' 'controller' or 'broker,controller' helpLink: kafka.html socket_x_receive_x_buffer_x_bytes: description: Size, in bytes of the SO_RCVBUF buffer. A value of -1 will use the OS default. From aa0c589361f3719173d264d5aa7856f4ac66fcbd Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 23 Apr 2024 13:51:12 -0400 Subject: [PATCH 068/507] Update kafka managed node pillar template to include its process.role Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/files/managed_node_pillar.jinja | 3 +++ 1 file changed, 3 insertions(+) diff --git a/salt/kafka/files/managed_node_pillar.jinja b/salt/kafka/files/managed_node_pillar.jinja index fb2ef410e..aa4f7e502 100644 --- a/salt/kafka/files/managed_node_pillar.jinja +++ b/salt/kafka/files/managed_node_pillar.jinja @@ -4,4 +4,7 @@ kafka: {{ node }}: ip: {{ values['ip'] }} nodeid: {{ values['nodeid'] }} +{%- if values['role'] != none %} + role: {{ values['role'] }} +{%- endif %} {% endfor %} \ No newline at end of file From 36573d6005a40ccd7b83fe32087a453f0abb5a48 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 23 Apr 2024 16:45:36 -0400 Subject: [PATCH 069/507] Update kafka cert permissions Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/ssl/init.sls | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/salt/ssl/init.sls b/salt/ssl/init.sls index 853afb2b3..854628949 100644 --- a/salt/ssl/init.sls +++ b/salt/ssl/init.sls @@ -856,10 +856,10 @@ kafka_logstash_pkcs12_perms: - user: 960 - group: 931 -kafka_pkcs8_perms: +elasticfleet_kafka_pkcs8_perms: file.managed: - replace: False - - name: /etc/pki/kafka.p8 + - name: /etc/pki/elasticfleet-kafka.p8 - mode: 640 - user: 960 - group: 939 From 29c964cca12cbaa1e2cb5e2e0a5b066c9953ccab Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Mon, 29 Apr 2024 09:04:52 -0400 Subject: [PATCH 070/507] Set kafka.nodes state to run first to populate kafka.nodes pillar Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/init.sls | 4 ++++ salt/kafka/nodes.sls | 10 ++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/salt/kafka/init.sls b/salt/kafka/init.sls index acedba3c3..c4351ebfc 100644 --- a/salt/kafka/init.sls +++ b/salt/kafka/init.sls @@ -7,6 +7,10 @@ {% from 'vars/globals.map.jinja' import GLOBALS %} include: +{# Run kafka/nodes.sls before Kafka is enabled, so kafka nodes pillar is setup #} +{% if grains.role in ['so-manager','so-managersearch', 'so-standalone'] %} + - kafka.nodes +{% endif %} {% if GLOBALS.pipeline == "KAFKA" and KAFKAMERGED.enabled %} - kafka.enabled {% else %} diff --git a/salt/kafka/nodes.sls b/salt/kafka/nodes.sls index 5085c6cca..edc5f0701 100644 --- a/salt/kafka/nodes.sls +++ b/salt/kafka/nodes.sls @@ -2,11 +2,10 @@ # or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at # https://securityonion.net/license; you may not use this file except in compliance with the # Elastic License 2.0. -{% from 'vars/globals.map.jinja' import GLOBALS %} -{% if GLOBALS.pipeline == "KAFKA" %} -{% from 'kafka/nodes.map.jinja' import COMBINED_KAFKANODES %} -{# Store kafka pillar in a file rather than memory where values could be lost. Kafka does not support nodeid's changing #} +{% from 'kafka/nodes.map.jinja' import COMBINED_KAFKANODES %} + +{# Write Kafka pillar, so all grid members have access to nodeid of other kafka nodes and their roles #} write_kafka_pillar_yaml: file.managed: - name: /opt/so/saltstack/local/pillar/kafka/nodes.sls @@ -15,5 +14,4 @@ write_kafka_pillar_yaml: - source: salt://kafka/files/managed_node_pillar.jinja - template: jinja - context: - COMBINED_KAFKANODES: {{ COMBINED_KAFKANODES }} -{% endif %} \ No newline at end of file + COMBINED_KAFKANODES: {{ COMBINED_KAFKANODES }} \ No newline at end of file From 086ebe1a7c0d3b274e5824d4a352e50904a69b1e Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Mon, 29 Apr 2024 09:08:14 -0400 Subject: [PATCH 071/507] Split kafka defaults between broker / controller Setup config.map.jinja to update broker / controller / combined node types Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/config.map.jinja | 66 +++++++++++++++++++++++++ salt/kafka/defaults.yaml | 21 ++++++-- salt/kafka/enabled.sls | 5 +- salt/kafka/etc/server.properties.jinja | 4 +- salt/kafka/map.jinja | 16 ++---- salt/kafka/soc_kafka.yaml | 67 +++++++++++++++++--------- 6 files changed, 134 insertions(+), 45 deletions(-) create mode 100644 salt/kafka/config.map.jinja diff --git a/salt/kafka/config.map.jinja b/salt/kafka/config.map.jinja new file mode 100644 index 000000000..8f116c02e --- /dev/null +++ b/salt/kafka/config.map.jinja @@ -0,0 +1,66 @@ +{# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one + or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at + https://securityonion.net/license; you may not use this file except in compliance with the + Elastic License 2.0. #} +{% from 'kafka/map.jinja' import KAFKAMERGED %} +{% from 'vars/globals.map.jinja' import GLOBALS %} + +{% set KAFKA_NODES_PILLAR = salt['pillar.get']('kafka:nodes') %} + +{# Create list of KRaft controllers #} +{% set controllers = [] %} +{% for node, values in KAFKA_NODES_PILLAR.items() %} +{% if 'controller' in values['role'] %} +{% do controllers.append(values.nodeid ~ "@" ~ node ~ ":9093") %} +{% endif %} +{% endfor %} + +{% set kafka_controller_quorum_voters = ','.join(controllers) %} + +{# By default all Kafka eligible nodes are given the role of broker, except for + grid MANAGER (broker,controller) until overridden through SOC UI #} +{% set node_type = salt['pillar.get']('kafka:nodes:'+ GLOBALS.hostname + ':role') %} + +{# Generate server.properties for 'broker' , 'controller', 'broker,controller' node types + anything above this line is a configuration needed for ALL Kafka nodes #} +{% if node_type == 'broker' %} +{% do KAFKAMERGED.config.broker.update({'advertised_x_listeners': 'BROKER://'+ GLOBALS.node_ip +':9092' }) %} +{% do KAFKAMERGED.config.broker.update({'controller_x_quorum_x_voters': kafka_controller_quorum_voters }) %} +{% do KAFKAMERGED.config.broker.update({'node_x_id': salt['pillar.get']('kafka:nodes:'+ GLOBALS.hostname +':nodeid') }) %} + +{% endif %} + +{% if node_type == 'controller' %} +{% do KAFKAMERGED.config.controller.update({'controller_x_quorum_x_voters': kafka_controller_quorum_voters }) %} +{% do KAFKAMERGED.config.controller.update({'node_x_id': salt['pillar.get']('kafka:nodes:'+ GLOBALS.hostname +':nodeid') }) %} + +{% endif %} + +{# Kafka nodes of this type are not recommended for use outside of development / testing. #} +{% if node_type == 'broker,controller' %} +{% do KAFKAMERGED.config.broker.update({'advertised_x_listeners': 'BROKER://'+ GLOBALS.node_ip +':9092' }) %} +{% do KAFKAMERGED.config.broker.update({'controller_x_quorum_x_voters': kafka_controller_quorum_voters }) %} +{% do KAFKAMERGED.config.broker.update({'node_x_id': salt['pillar.get']('kafka:nodes:'+ GLOBALS.hostname +':nodeid') }) %} +{% do KAFKAMERGED.config.broker.update({'process_x_roles': 'broker,controller' }) %} + +{% do KAFKAMERGED.config.broker.update({ + 'listeners': + KAFKAMERGED.config.broker.listeners + + ',' + + KAFKAMERGED.config.controller.listeners }) + %} + +{% do KAFKAMERGED.config.broker.update({ + 'listener_x_security_x_protocol_x_map': + KAFKAMERGED.config.broker.listener_x_security_x_protocol_x_map + + ',' + + KAFKAMERGED.config.controller.listener_x_security_x_protocol_x_map }) + %} + +{% endif %} + +{% if 'broker' in node_type %} +{% set KAFKACONFIG = KAFKAMERGED.config.broker %} +{% else %} +{% set KAFKACONFIG = KAFKAMERGED.config.controller %} +{% endif %} \ No newline at end of file diff --git a/salt/kafka/defaults.yaml b/salt/kafka/defaults.yaml index 91f55a07d..8dcd70b98 100644 --- a/salt/kafka/defaults.yaml +++ b/salt/kafka/defaults.yaml @@ -1,14 +1,16 @@ kafka: enabled: False + cluster_id: + kafka_pass: + kafka_controllers: [] config: - server: + broker: advertised_x_listeners: auto_x_create_x_topics_x_enable: true - controller_x_listener_x_names: CONTROLLER controller_x_quorum_x_voters: inter_x_broker_x_listener_x_name: BROKER - listeners: BROKER://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093 - listener_x_security_x_protocol_x_map: CONTROLLER:SSL,BROKER:SSL + listeners: BROKER://0.0.0.0:9092 + listener_x_security_x_protocol_x_map: BROKER:SSL log_x_dirs: /nsm/kafka/data log_x_retention_x_check_x_interval_x_ms: 300000 log_x_retention_x_hours: 168 @@ -37,3 +39,14 @@ kafka: ssl_x_keystore_x_location: /etc/pki/kafka.jks ssl_x_keystore_x_type: JKS ssl_x_keystore_x_password: changeit + controller: + controller_x_listener_x_names: CONTROLLER + controller_x_quorum_x_voters: + listeners: CONTROLLER://0.0.0.0:9093 + listener_x_security_x_protocol_x_map: CONTROLLER:SSL + log_x_dirs: /nsm/kafka/data + log_x_retention_x_check_x_interval_x_ms: 300000 + log_x_retention_x_hours: 168 + log_x_segment_x_bytes: 1073741824 + node_x_id: + process_x_roles: controller \ No newline at end of file diff --git a/salt/kafka/enabled.sls b/salt/kafka/enabled.sls index d05a49a0e..ec2dc8e46 100644 --- a/salt/kafka/enabled.sls +++ b/salt/kafka/enabled.sls @@ -7,12 +7,9 @@ {% if sls.split('.')[0] in allowed_states %} {% from 'vars/globals.map.jinja' import GLOBALS %} {% from 'docker/docker.map.jinja' import DOCKER %} -{% from 'kafka/nodes.map.jinja' import COMBINED_KAFKANODES as KAFKANODES %} +{% set KAFKANODES = salt['pillar.get']('kafka:nodes') %} include: - {% if grains.role in ['so-manager', 'so-managersearch', 'so-standalone'] %} - - kafka.nodes - {% endif %} - kafka.controllers - elasticsearch.ca - kafka.sostatus diff --git a/salt/kafka/etc/server.properties.jinja b/salt/kafka/etc/server.properties.jinja index df5632ba9..fb0c785cf 100644 --- a/salt/kafka/etc/server.properties.jinja +++ b/salt/kafka/etc/server.properties.jinja @@ -3,5 +3,5 @@ https://securityonion.net/license; you may not use this file except in compliance with the Elastic License 2.0. #} -{% from 'kafka/map.jinja' import KAFKAMERGED -%} -{{ KAFKAMERGED.config.server | yaml(False) | replace("_x_", ".") }} +{% from 'kafka/config.map.jinja' import KAFKACONFIG -%} +{{ KAFKACONFIG | yaml(False) | replace("_x_", ".") }} diff --git a/salt/kafka/map.jinja b/salt/kafka/map.jinja index 56f85144a..996e5dedf 100644 --- a/salt/kafka/map.jinja +++ b/salt/kafka/map.jinja @@ -3,18 +3,8 @@ https://securityonion.net/license; you may not use this file except in compliance with the Elastic License 2.0. #} +{# This is only used to determine if Kafka is enabled / disabled. Configuration is found in kafka/config.map.jinja #} +{# kafka/config.map.jinja depends on there being a kafka nodes pillar being populated #} + {% import_yaml 'kafka/defaults.yaml' as KAFKADEFAULTS %} {% set KAFKAMERGED = salt['pillar.get']('kafka', KAFKADEFAULTS.kafka, merge=True) %} -{% from 'vars/globals.map.jinja' import GLOBALS %} -{% from 'kafka/nodes.map.jinja' import COMBINED_KAFKANODES %} - -{% do KAFKAMERGED.config.server.update({ 'node_x_id': salt['pillar.get']('kafka:nodes:' ~ GLOBALS.hostname ~ ':nodeid')}) %} -{% do KAFKAMERGED.config.server.update({'advertised_x_listeners': 'BROKER://' ~ GLOBALS.node_ip ~ ':9092'}) %} - -{% set combined = [] %} -{% for hostname, data in COMBINED_KAFKANODES.items() %} - {% do combined.append(data.nodeid ~ "@" ~ hostname ~ ":9093") %} -{% endfor %} -{% set kraft_controller_quorum_voters = ','.join(combined) %} - -{% do KAFKAMERGED.config.server.update({'controller_x_quorum_x_voters': kraft_controller_quorum_voters}) %} diff --git a/salt/kafka/soc_kafka.yaml b/salt/kafka/soc_kafka.yaml index 47ff05719..2216aaaa7 100644 --- a/salt/kafka/soc_kafka.yaml +++ b/salt/kafka/soc_kafka.yaml @@ -8,12 +8,15 @@ kafka: advanced: True sensitive: True helpLink: kafka.html + kafkapass: + description: The password to use for the Kafka certificates. + sensitive: True + helpLink: kafka.html + kafka_controllers: + description: A list of Security Onion grid members that should act as KRaft controllers for this Kafka cluster. By default, the grid manager will use a 'combined' role where it will act as both a broker and controller. All other nodes will default to broker roles. + helpLink: kafka.html config: - kafkapass: - description: The password to use for the Kafka certificates. - sensitive: True - helpLink: kafka.html - server: + broker: advertised_x_listeners: description: Specify the list of listeners (hostname and port) that Kafka brokers provide to clients for communication. title: advertised.listeners @@ -23,14 +26,6 @@ kafka: title: auto.create.topics.enable forcedType: bool helpLink: kafka.html - controller_x_listener_x_names: - description: Set listeners used by the controller in a comma-seperated list. - title: controller.listener.names - helpLink: kafka.html - controller_x_quorum_x_voters: - description: A comma-seperated list of ID and endpoint information mapped for a set of voters. - title: controller.quorum.voters - helpLink: kafka.html inter_x_broker_x_listener_x_name: description: The name of the listener used for inter-broker communication. title: inter.broker.listener.name @@ -60,12 +55,6 @@ kafka: title: log.segment.bytes forcedType: int helpLink: kafka.html - node_x_id: - description: The node ID corresponds to the roles performed by this process whenever process.roles is populated. - title: node.id - forcedType: int - readonly: True - helpLink: kafka.html num_x_io_x_threads: description: The number of threads used by Kafka. title: num.io.threads @@ -92,10 +81,9 @@ kafka: forcedType: int helpLink: kafka.html process_x_roles: - description: The roles performed by Kafka node. Default is to act as 'broker' only. + description: The role performed by Kafka brokers. title: process.roles - regex: ^(broker|controller|broker,controller|controller,broker)$ - regexFailureMessage: Valid values include 'broker' 'controller' or 'broker,controller' + readonly: True helpLink: kafka.html socket_x_receive_x_buffer_x_bytes: description: Size, in bytes of the SO_RCVBUF buffer. A value of -1 will use the OS default. @@ -174,3 +162,38 @@ kafka: title: ssl.truststore.password sensitive: True helpLink: kafka.html + controller: + controller_x_listener_x_names: + description: Set listeners used by the controller in a comma-seperated list. + title: controller.listener.names + helpLink: kafka.html + listeners: + description: Set of URIs that is listened on and the listener names in a comma-seperated list. + helpLink: kafka.html + listener_x_security_x_protocol_x_map: + description: Comma-seperated mapping of listener name and security protocols. + title: listener.security.protocol.map + helpLink: kafka.html + log_x_dirs: + description: Where Kafka logs are stored within the Docker container. + title: log.dirs + helpLink: kafka.html + log_x_retention_x_check_x_interval_x_ms: + description: Frequency at which log files are checked if they are qualified for deletion. + title: log.retention.check.interval.ms + helpLink: kafka.html + log_x_retention_x_hours: + description: How long, in hours, a log file is kept. + title: log.retention.hours + forcedType: int + helpLink: kafka.html + log_x_segment_x_bytes: + description: The maximum allowable size for a log file. + title: log.segment.bytes + forcedType: int + helpLink: kafka.html + process_x_roles: + description: The role performed by KRaft controller node. + title: process.roles + readonly: True + helpLink: kafka.html \ No newline at end of file From 529c8d7cf21bae87fd6d81d12327baed0ad600af Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Mon, 29 Apr 2024 11:35:46 -0400 Subject: [PATCH 072/507] Remove salt reactor for Kafka Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/controllers.sls | 20 -------------------- salt/salt/files/reactor.conf | 3 --- salt/salt/master.sls | 5 ----- 3 files changed, 28 deletions(-) delete mode 100644 salt/kafka/controllers.sls delete mode 100644 salt/salt/files/reactor.conf diff --git a/salt/kafka/controllers.sls b/salt/kafka/controllers.sls deleted file mode 100644 index c6df07b0c..000000000 --- a/salt/kafka/controllers.sls +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one -# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at -# https://securityonion.net/license; you may not use this file except in compliance with the -# Elastic License 2.0. - -{% from 'allowed_states.map.jinja' import allowed_states %} -{% if sls.split('.')[0] in allowed_states %} -{% import_yaml 'kafka/defaults.yaml' as KAFKADEFAULTS %} - -{% set process_x_roles = salt['pillar.get']('kafka:config:server:process_x_roles', KAFKADEFAULTS.kafka.config.server.process_x_roles, merge=true) %} - -{# Send an event to the salt master at every highstate. Containing the minions process_x_roles. - if no value is set for this minion then the default in kafka/defaults.yaml is used #} -push_event_to_master: - event.send: - - name: kafka/controllers_update - - data: - id: {{ grains['id'] }} - process_x_roles: {{ process_x_roles }} -{% endif %} diff --git a/salt/salt/files/reactor.conf b/salt/salt/files/reactor.conf deleted file mode 100644 index 129305572..000000000 --- a/salt/salt/files/reactor.conf +++ /dev/null @@ -1,3 +0,0 @@ -reactor: - - 'kafka/controllers_update': - - salt://reactor/kafka.sls \ No newline at end of file diff --git a/salt/salt/master.sls b/salt/salt/master.sls index d28f0b1bd..51acca61d 100644 --- a/salt/salt/master.sls +++ b/salt/salt/master.sls @@ -37,11 +37,6 @@ engines_config: - name: /etc/salt/master.d/engines.conf - source: salt://salt/files/engines.conf -reactor_config: - file.managed: - - name: /etc/salt/master.d/reactor.conf - - source: salt://salt/files/reactor.conf - salt_master_service: service.running: - name: salt-master From fd9a91420db18527e82940b6fbceb821a94d09a2 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Mon, 29 Apr 2024 11:37:24 -0400 Subject: [PATCH 073/507] Use SOC UI to configure list of KRaft (Kafka) controllers for cluster Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/config.map.jinja | 32 ++++++++++++++++------------ salt/kafka/enabled.sls | 1 - salt/kafka/nodes.map.jinja | 42 +++++++++++++++++++++++++------------ 3 files changed, 48 insertions(+), 27 deletions(-) diff --git a/salt/kafka/config.map.jinja b/salt/kafka/config.map.jinja index 8f116c02e..c9f3e79e2 100644 --- a/salt/kafka/config.map.jinja +++ b/salt/kafka/config.map.jinja @@ -7,13 +7,24 @@ {% set KAFKA_NODES_PILLAR = salt['pillar.get']('kafka:nodes') %} +{% set KAFKA_CONTROLLERS_PILLAR = salt['pillar.get']('kafka:kafka_controllers', default=None) %} + {# Create list of KRaft controllers #} {% set controllers = [] %} -{% for node, values in KAFKA_NODES_PILLAR.items() %} -{% if 'controller' in values['role'] %} -{% do controllers.append(values.nodeid ~ "@" ~ node ~ ":9093") %} -{% endif %} -{% endfor %} + +{% if KAFKA_CONTROLLERS_PILLAR != none %} +{% for node in KAFKA_CONTROLLERS_PILLAR %} +{# Check that the user input for kafka_controllers pillar exists as a kafka:node value #} +{% if node in KAFKA_NODES_PILLAR %} +{% do controllers.append(KAFKA_NODES_PILLAR[node]['nodeid'] ~ '@' ~ node ~ ':9093') %} +{% endif %} +{% endfor %} +{% endif %} +{# Ensure in the event that the SOC controllers pillar has a single hostname and that hostname doesn't exist in kafka:nodes + that a controller is still set for the Kafka cluster. Defaulting to the grid manager #} +{% if controllers | length < 1 %} +{% do controllers.append(KAFKA_NODES_PILLAR[GLOBALS.manager]['nodeid'] ~ "@" ~ GLOBALS.manager ~ ":9093") %} +{% endif %} {% set kafka_controller_quorum_voters = ','.join(controllers) %} @@ -44,17 +55,12 @@ {% do KAFKAMERGED.config.broker.update({'process_x_roles': 'broker,controller' }) %} {% do KAFKAMERGED.config.broker.update({ - 'listeners': - KAFKAMERGED.config.broker.listeners - + ',' - + KAFKAMERGED.config.controller.listeners }) + 'listeners': KAFKAMERGED.config.broker.listeners + ',' + KAFKAMERGED.config.controller.listeners }) %} {% do KAFKAMERGED.config.broker.update({ - 'listener_x_security_x_protocol_x_map': - KAFKAMERGED.config.broker.listener_x_security_x_protocol_x_map - + ',' - + KAFKAMERGED.config.controller.listener_x_security_x_protocol_x_map }) + 'listener_x_security_x_protocol_x_map': KAFKAMERGED.config.broker.listener_x_security_x_protocol_x_map + + ',' + KAFKAMERGED.config.controller.listener_x_security_x_protocol_x_map }) %} {% endif %} diff --git a/salt/kafka/enabled.sls b/salt/kafka/enabled.sls index ec2dc8e46..78e0d87d9 100644 --- a/salt/kafka/enabled.sls +++ b/salt/kafka/enabled.sls @@ -10,7 +10,6 @@ {% set KAFKANODES = salt['pillar.get']('kafka:nodes') %} include: - - kafka.controllers - elasticsearch.ca - kafka.sostatus - kafka.config diff --git a/salt/kafka/nodes.map.jinja b/salt/kafka/nodes.map.jinja index 36f789259..9b4979e92 100644 --- a/salt/kafka/nodes.map.jinja +++ b/salt/kafka/nodes.map.jinja @@ -1,12 +1,27 @@ -{% set current_kafkanodes = salt.saltutil.runner('mine.get', tgt='G@role:so-manager or G@role:so-managersearch or G@role:so-standalone or G@role:so-receiver', fun='network.ip_addrs', tgt_type='compound') %} -{% set STORED_KAFKANODES = salt['pillar.get']('kafka', {}) %} +{# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one + or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at + https://securityonion.net/license; you may not use this file except in compliance with the + Elastic License 2.0. #} + +{# USED TO GENERATE PILLAR/KAFKA/NODES.SLS. #} +{% import_yaml 'kafka/defaults.yaml' as KAFKADEFAULTS %} +{% from 'vars/globals.map.jinja' import GLOBALS %} + +{% set process_x_roles = KAFKADEFAULTS.kafka.config.broker.process_x_roles %} + +{% set current_kafkanodes = salt.saltutil.runner( + 'mine.get', + tgt='G@role:so-manager or G@role:so-managersearch or G@role:so-standalone or G@role:so-receiver', + fun='network.ip_addrs', + tgt_type='compound') %} + +{% set STORED_KAFKANODES = salt['pillar.get']('kafka:nodes', default=None) %} {% set existing_ids = [] %} {# Check STORED_KAFKANODES for existing kafka nodes and pull their IDs so they are not reused across the grid #} -{# {% if STORED_KAFKANODES.get('nodes', {}).items() | length > 0 %} #} {% if STORED_KAFKANODES != none %} -{% for node, values in STORED_KAFKANODES.nodes.items() %} +{% for node, values in STORED_KAFKANODES.items() %} {% if values.get('nodeid') %} {% do existing_ids.append(values['nodeid']) %} {% endif %} @@ -16,7 +31,6 @@ {# Create list of possible node ids #} {% set all_possible_ids = range(1, 65536)|list %} -{# Don't like the below loop because the higher the range for all_possible_ids the more time spent on loop #} {# Create list of available node ids by looping through all_possible_ids and ensuring it isn't in existing_ids #} {% set available_ids = [] %} {% for id in all_possible_ids %} @@ -29,14 +43,17 @@ {% set NEW_KAFKANODES = {} %} {% for minionid, ip in current_kafkanodes.items() %} {% set hostname = minionid.split('_')[0] %} -{# {% if STORED_KAFKANODES.get('nodes', {}).items() | length > 0 and hostname not in STORED_KAFKANODES.nodes %} #} -{% if STORED_KAFKANODES != none and hostname not in STORED_KAFKANODES.nodes %} -{% set new_id = available_ids.pop(0) %} -{% do NEW_KAFKANODES.update({hostname: {'nodeid': new_id, 'ip': ip[0]}}) %} +{# Override the default process_x_roles for manager and set to 'broker,controller'. Changes from SOC UI will overwrite this #} +{% if hostname == GLOBALS.manager %} +{% set process_x_roles = 'broker,controller' %} {% endif %} -{% if hostname not in NEW_KAFKANODES %} +{% if STORED_KAFKANODES != none and hostname not in STORED_KAFKANODES.items() %} {% set new_id = available_ids.pop(0) %} -{% do NEW_KAFKANODES.update({hostname: {'nodeid': new_id, 'ip': ip[0]}}) %} +{% do NEW_KAFKANODES.update({hostname: {'nodeid': new_id, 'ip': ip[0], 'role': process_x_roles }}) %} +{% endif %} +{% if hostname not in NEW_KAFKANODES.items() %} +{% set new_id = available_ids.pop(0) %} +{% do NEW_KAFKANODES.update({hostname: {'nodeid': new_id, 'ip': ip[0], 'role': process_x_roles }}) %} {% endif %} {% endfor %} @@ -45,9 +62,8 @@ {% for node, details in NEW_KAFKANODES.items() %} {% do COMBINED_KAFKANODES.update({node: details}) %} {% endfor %} -{# {% if STORED_KAFKANODES.get('nodes', {}).items() | length > 0 %} #} {% if STORED_KAFKANODES != none %} -{% for node, details in STORED_KAFKANODES.nodes.items() %} +{% for node, details in STORED_KAFKANODES.items() %} {% do COMBINED_KAFKANODES.update({node: details}) %} {% endfor %} {% endif %} From 11055b1d32d0b5a5b7f569d00f1c33eed6cf0f23 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Mon, 29 Apr 2024 14:09:09 -0400 Subject: [PATCH 074/507] Rename kafkapass -> kafka_pass Run so-kafka-clusterid within nodes.sls state so switchover is consistent Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/nodes.sls | 10 +++++++++- salt/kafka/soc_kafka.yaml | 2 +- salt/kafka/storage.sls | 10 +--------- salt/manager/tools/sbin/so-kafka-clusterid | 10 +++++----- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/salt/kafka/nodes.sls b/salt/kafka/nodes.sls index edc5f0701..7cafb10bc 100644 --- a/salt/kafka/nodes.sls +++ b/salt/kafka/nodes.sls @@ -4,6 +4,7 @@ # Elastic License 2.0. {% from 'kafka/nodes.map.jinja' import COMBINED_KAFKANODES %} +{% set kafka_cluster_id = salt['pillar.get']('kafka:cluster_id', default=None) %} {# Write Kafka pillar, so all grid members have access to nodeid of other kafka nodes and their roles #} write_kafka_pillar_yaml: @@ -14,4 +15,11 @@ write_kafka_pillar_yaml: - source: salt://kafka/files/managed_node_pillar.jinja - template: jinja - context: - COMBINED_KAFKANODES: {{ COMBINED_KAFKANODES }} \ No newline at end of file + COMBINED_KAFKANODES: {{ COMBINED_KAFKANODES }} + + +{% if kafka_cluster_id is none %} +generate_kafka_cluster_id: + cmd.run: + - name: /usr/sbin/so-kafka-clusterid +{% endif %} \ No newline at end of file diff --git a/salt/kafka/soc_kafka.yaml b/salt/kafka/soc_kafka.yaml index 2216aaaa7..505469d6b 100644 --- a/salt/kafka/soc_kafka.yaml +++ b/salt/kafka/soc_kafka.yaml @@ -8,7 +8,7 @@ kafka: advanced: True sensitive: True helpLink: kafka.html - kafkapass: + kafka_pass: description: The password to use for the Kafka certificates. sensitive: True helpLink: kafka.html diff --git a/salt/kafka/storage.sls b/salt/kafka/storage.sls index fbb7c7328..507c199c6 100644 --- a/salt/kafka/storage.sls +++ b/salt/kafka/storage.sls @@ -6,15 +6,7 @@ {% from 'allowed_states.map.jinja' import allowed_states %} {% if sls.split('.')[0] in allowed_states %} {% from 'vars/globals.map.jinja' import GLOBALS %} -{% set kafka_cluster_id = salt['pillar.get']('kafka:cluster_id', default=None) %} - -{% if GLOBALS.role in ['so-manager', 'so-managersearch', 'so-standalone'] %} -{% if kafka_cluster_id is none %} -generate_kafka_cluster_id: - cmd.run: - - name: /usr/sbin/so-kafka-clusterid -{% endif %} -{% endif %} +{% set kafka_cluster_id = salt['pillar.get']('kafka:cluster_id') %} {# Initialize kafka storage if it doesn't already exist. Just looking for meta.properties in /nsm/kafka/data #} {% if not salt['file.file_exists']('/nsm/kafka/data/meta.properties') %} diff --git a/salt/manager/tools/sbin/so-kafka-clusterid b/salt/manager/tools/sbin/so-kafka-clusterid index 829e4fc87..eb0701b8b 100644 --- a/salt/manager/tools/sbin/so-kafka-clusterid +++ b/salt/manager/tools/sbin/so-kafka-clusterid @@ -18,12 +18,12 @@ else source $(dirname $0)/../../../common/tools/sbin/so-common fi -if ! grep -q "^ cluster_id:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then +if ! grep -q "^ cluster_id:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then kafka_cluster_id=$(get_random_value 22) - echo ' cluster_id: '$kafka_cluster_id >> $local_salt_dir/pillar/kafka/soc_kafka.sls + echo ' cluster_id: '$kafka_cluster_id >> $local_salt_dir/pillar/kafka/soc_kafka.sls fi -if ! grep -q "^ kafkapass:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then +if ! grep -q "^ kafka_pass:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then kafkapass=$(get_random_value) - echo ' kafkapass: '$kafkapass >> $local_salt_dir/pillar/kafka/soc_kafka.sls -fi \ No newline at end of file + echo ' kafka_pass: '$kafkapass >> $local_salt_dir/pillar/kafka/soc_kafka.sls +fit \ No newline at end of file From 529bc01d6934acc31594779db68fe0b56913024f Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Mon, 29 Apr 2024 14:53:52 -0400 Subject: [PATCH 075/507] Add missing configuration for nodes running Kafka broker role only Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/config.map.jinja | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/salt/kafka/config.map.jinja b/salt/kafka/config.map.jinja index c9f3e79e2..4e82eac42 100644 --- a/salt/kafka/config.map.jinja +++ b/salt/kafka/config.map.jinja @@ -39,6 +39,12 @@ {% do KAFKAMERGED.config.broker.update({'controller_x_quorum_x_voters': kafka_controller_quorum_voters }) %} {% do KAFKAMERGED.config.broker.update({'node_x_id': salt['pillar.get']('kafka:nodes:'+ GLOBALS.hostname +':nodeid') }) %} +{# Nodes with only the 'broker' role need to have the below settings for communicating with controller nodes #} +{% do KAFKAMERGED.config.broker.update({'controller_x_listener_x_names': KAFKAMERGED.config.controller.controller_x_listener_x_names }) %} +{% do KAFKAMERGED.config.broker.update({ + 'listener_x_security_x_protocol_x_map': KAFKAMERGED.config.broker.listener_x_security_x_protocol_x_map + + ',' + KAFKAMERGED.config.controller.listener_x_security_x_protocol_x_map }) + %} {% endif %} {% if node_type == 'controller' %} @@ -50,6 +56,7 @@ {# Kafka nodes of this type are not recommended for use outside of development / testing. #} {% if node_type == 'broker,controller' %} {% do KAFKAMERGED.config.broker.update({'advertised_x_listeners': 'BROKER://'+ GLOBALS.node_ip +':9092' }) %} +{% do KAFKAMERGED.config.broker.update({'controller_x_listener_x_names': KAFKAMERGED.config.controller.controller_x_listener_x_names }) %} {% do KAFKAMERGED.config.broker.update({'controller_x_quorum_x_voters': kafka_controller_quorum_voters }) %} {% do KAFKAMERGED.config.broker.update({'node_x_id': salt['pillar.get']('kafka:nodes:'+ GLOBALS.hostname +':nodeid') }) %} {% do KAFKAMERGED.config.broker.update({'process_x_roles': 'broker,controller' }) %} From a6e8b25969c01439339f16a3f4f2d88ba7d4cb55 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Mon, 29 Apr 2024 15:48:57 -0400 Subject: [PATCH 076/507] Add Kafka connectivity between manager - > receiver nodes. Add connectivity to Kafka between other node types that may need to publish to Kafka. Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/firewall/defaults.yaml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/salt/firewall/defaults.yaml b/salt/firewall/defaults.yaml index 0b6d06eda..6dd3fead3 100644 --- a/salt/firewall/defaults.yaml +++ b/salt/firewall/defaults.yaml @@ -405,7 +405,6 @@ firewall: - docker_registry - influxdb - sensoroni - - kafka searchnode: portgroups: - redis @@ -433,6 +432,7 @@ firewall: - elastic_agent_data - elastic_agent_update - sensoroni + - kafka receiver: portgroups: - yum @@ -442,6 +442,7 @@ firewall: - elastic_agent_data - elastic_agent_update - sensoroni + - kafka analyst: portgroups: - nginx @@ -566,6 +567,7 @@ firewall: - elastic_agent_update - localrules - sensoroni + - kafka fleet: portgroups: - elasticsearch_rest @@ -613,6 +615,7 @@ firewall: - elastic_agent_data - elastic_agent_update - sensoroni + - kafka heavynode: portgroups: - redis @@ -625,6 +628,7 @@ firewall: - elastic_agent_data - elastic_agent_update - sensoroni + - kafka receiver: portgroups: - yum @@ -761,7 +765,7 @@ firewall: - beats_5044 - beats_5644 - beats_5056 - - redis + - kafka - elasticsearch_node - elastic_agent_control - elastic_agent_data @@ -813,6 +817,7 @@ firewall: - redis - elasticsearch_rest - elasticsearch_node + - kafka heavynode: portgroups: - docker_registry @@ -822,6 +827,7 @@ firewall: - redis - elasticsearch_rest - elasticsearch_node + - kafka receiver: portgroups: - yum @@ -1289,6 +1295,9 @@ firewall: - redis - beats_5644 - kafka + manager: + portgroups: + - kafka managersearch: portgroups: - redis From 9c83a52c6d22db4a3508e6fafe19e0e61b635da7 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 30 Apr 2024 12:01:31 -0400 Subject: [PATCH 077/507] Add Kafka output to elastic-fleet setup. Includes separating topics by event.module with fallback to default-logs if no event.module is specified or doesn't match processors Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- .../tools/sbin_jinja/so-elastic-fleet-setup | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-setup b/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-setup index 361469b26..e01360687 100755 --- a/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-setup +++ b/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-setup @@ -77,6 +77,23 @@ curl -K /opt/so/conf/elasticsearch/curl.config -L -X POST "localhost:5601/api/fl printf "\n\n" {%- endif %} +printf "\nCreate Kafka Output Config if node is not an Import or Eval install\n" +{% if grains.role not in ['so-import', 'so-eval'] %} +KAFKACRT=$(openssl x509 -in /etc/pki/elasticfleet-kafka.crt) +KAFKAKEY=$(openssl rsa -in /etc/pki/elasticfleet-kafka.key) +{# KAFKACA=$(openssl x509 -in $INTCA) #} +KAFKACA=$(openssl x509 -in /etc/pki/tls/certs/intca.crt) +KAFKA_OUTPUT_VERSION="2.6.0" +JSON_STRING=$( jq -n \ + --arg KAFKACRT "$KAFKACRT" \ + --arg KAFKAKEY "$KAFKAKEY" \ + --arg KAFKACA "$KAFKACA" \ + --arg KAFKA_OUTPUT_VERSION "$KAFKA_OUTPUT_VERSION" \ + '{ "name": "grid_kafka", "type": "kafka", "hosts": [ "{{ GLOBALS.manager }}:9092", "{{ GLOBALS.manager_ip }}:9092" ], "is_default": false, "is_default_monitoring": false, "config_yaml": "", "ssl": { "certificate_authorities": [ $KAFKACA ], "certificate": $KAFKACRT, "key": $KAFKAKEY, "verification_mode": "full" }, "proxy_id": null, "client_id": "Elastic", "version": $KAFKA_OUTPUT_VERSION, "compression": "none", "auth_type": "ssl", "partition": "round_robin", "round_robin": { "group_events": 1 }, "topics": [ { "topic": "zeek-logs", "when": { "type": "equals", "condition": "event.module:zeek" } }, { "topic": "suricata-logs", "when": { "type": "equals", "condition": "event.module:suricata" } }, { "topic": "strelka-logs", "when": { "type": "equals", "condition": "event.module:strelka" } }, { "topic": "opencanary-logs", "when": { "type": "equals", "condition": "event.module:opencanary" } }, { "topic": "system-logs", "when": { "type": "equals", "condition": "event.module:system" } }, { "topic": "kratos-logs", "when": { "type": "equals", "condition": "event.module:kratos" } }, { "topic": "soc-logs", "when": { "type": "equals", "condition": "event.module:soc" } }, { "topic": "rita-logs", "when": { "type": "equals", "condition": "event.module:rita" } }, { "topic": "default-logs" } ], "headers": [ { "key": "", "value": "" } ], "timeout": 30, "broker_timeout": 30, "required_acks": 1 }' + ) +curl -K /opt/so/conf/elasticsearch/curl.config -L -X POST "localhost:5601/api/fleet/outputs" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d "$JSON_STRING" +{% endif %} + # Add Manager Hostname & URL Base to Fleet Host URLs printf "\nAdd SO-Manager Fleet URL\n" if [ "{{ GLOBALS.hostname }}" = "{{ GLOBALS.url_base }}" ]; then From fcc4050f86da9c09a76d74bf40981a3f86abc632 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 30 Apr 2024 12:59:53 -0400 Subject: [PATCH 078/507] Add id to grid-kafka fleet output policy Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-setup | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-setup b/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-setup index e01360687..14ab58b45 100755 --- a/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-setup +++ b/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-setup @@ -89,7 +89,7 @@ JSON_STRING=$( jq -n \ --arg KAFKAKEY "$KAFKAKEY" \ --arg KAFKACA "$KAFKACA" \ --arg KAFKA_OUTPUT_VERSION "$KAFKA_OUTPUT_VERSION" \ - '{ "name": "grid_kafka", "type": "kafka", "hosts": [ "{{ GLOBALS.manager }}:9092", "{{ GLOBALS.manager_ip }}:9092" ], "is_default": false, "is_default_monitoring": false, "config_yaml": "", "ssl": { "certificate_authorities": [ $KAFKACA ], "certificate": $KAFKACRT, "key": $KAFKAKEY, "verification_mode": "full" }, "proxy_id": null, "client_id": "Elastic", "version": $KAFKA_OUTPUT_VERSION, "compression": "none", "auth_type": "ssl", "partition": "round_robin", "round_robin": { "group_events": 1 }, "topics": [ { "topic": "zeek-logs", "when": { "type": "equals", "condition": "event.module:zeek" } }, { "topic": "suricata-logs", "when": { "type": "equals", "condition": "event.module:suricata" } }, { "topic": "strelka-logs", "when": { "type": "equals", "condition": "event.module:strelka" } }, { "topic": "opencanary-logs", "when": { "type": "equals", "condition": "event.module:opencanary" } }, { "topic": "system-logs", "when": { "type": "equals", "condition": "event.module:system" } }, { "topic": "kratos-logs", "when": { "type": "equals", "condition": "event.module:kratos" } }, { "topic": "soc-logs", "when": { "type": "equals", "condition": "event.module:soc" } }, { "topic": "rita-logs", "when": { "type": "equals", "condition": "event.module:rita" } }, { "topic": "default-logs" } ], "headers": [ { "key": "", "value": "" } ], "timeout": 30, "broker_timeout": 30, "required_acks": 1 }' + '{ "name": "grid-kafka", "id": "so-manager_kafka", "type": "kafka", "hosts": [ "{{ GLOBALS.manager }}:9092", "{{ GLOBALS.manager_ip }}:9092" ], "is_default": false, "is_default_monitoring": false, "config_yaml": "", "ssl": { "certificate_authorities": [ $KAFKACA ], "certificate": $KAFKACRT, "key": $KAFKAKEY, "verification_mode": "full" }, "proxy_id": null, "client_id": "Elastic", "version": $KAFKA_OUTPUT_VERSION, "compression": "none", "auth_type": "ssl", "partition": "round_robin", "round_robin": { "group_events": 1 }, "topics": [ { "topic": "zeek-logs", "when": { "type": "equals", "condition": "event.module:zeek" } }, { "topic": "suricata-logs", "when": { "type": "equals", "condition": "event.module:suricata" } }, { "topic": "strelka-logs", "when": { "type": "equals", "condition": "event.module:strelka" } }, { "topic": "opencanary-logs", "when": { "type": "equals", "condition": "event.module:opencanary" } }, { "topic": "system-logs", "when": { "type": "equals", "condition": "event.module:system" } }, { "topic": "kratos-logs", "when": { "type": "equals", "condition": "event.module:kratos" } }, { "topic": "soc-logs", "when": { "type": "equals", "condition": "event.module:soc" } }, { "topic": "rita-logs", "when": { "type": "equals", "condition": "event.module:rita" } }, { "topic": "default-logs" } ], "headers": [ { "key": "", "value": "" } ], "timeout": 30, "broker_timeout": 30, "required_acks": 1 }' ) curl -K /opt/so/conf/elasticsearch/curl.config -L -X POST "localhost:5601/api/fleet/outputs" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d "$JSON_STRING" {% endif %} From bb49944b9613402cffdfa9ab0ebe4a88a5f6dc5d Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 30 Apr 2024 16:47:40 -0400 Subject: [PATCH 079/507] Setup elastic fleet rollover from logstash -> kafka output policy Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- .../so-elastic-fleet-outputs-update | 146 ++++++++++++------ .../tools/sbin_jinja/so-elastic-fleet-setup | 3 +- 2 files changed, 96 insertions(+), 53 deletions(-) diff --git a/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-outputs-update b/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-outputs-update index eb5ccc1ed..4d2867fc7 100644 --- a/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-outputs-update +++ b/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-outputs-update @@ -21,64 +21,104 @@ function update_logstash_outputs() { # Update Logstash Outputs curl -K /opt/so/conf/elasticsearch/curl.config -L -X PUT "localhost:5601/api/fleet/outputs/so-manager_logstash" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d "$JSON_STRING" | jq } +function update_kafka_outputs() { + # Make sure SSL configuration is included in policy updates for Kafka output. SSL is configured in so-elastic-fleet-setup + SSL_CONFIG=$(curl -K /opt/so/conf/elasticsearch/curl.config -L "http://localhost:5601/api/fleet/outputs/so-manager_kafka" | jq -r '.item.ssl') -# Get current list of Logstash Outputs -RAW_JSON=$(curl -K /opt/so/conf/elasticsearch/curl.config 'http://localhost:5601/api/fleet/outputs/so-manager_logstash') + JSON_STRING=$(jq -n \ + --arg UPDATEDLIST "$NEW_LIST_JSON" \ + --argjson SSL_CONFIG "$SSL_CONFIG" \ + '{"name": "grid-kafka","type": "kafka","hosts": $UPDATEDLIST,"is_default": true,"is_default_monitoring": true,"config_yaml": "","ssl": $SSL_CONFIG}') + # Update Kafka outputs + curl -K /opt/so/conf/elasticsearch/curl.config -L -X PUT "localhost:5601/api/fleet/outputs/so-manager_kafka" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d "$JSON_STRING" | jq +} -# Check to make sure that the server responded with good data - else, bail from script -CHECKSUM=$(jq -r '.item.id' <<< "$RAW_JSON") -if [ "$CHECKSUM" != "so-manager_logstash" ]; then - printf "Failed to query for current Logstash Outputs..." - exit 1 -fi +{% if GLOBALS.pipeline == "KAFKA" %} + # Get current list of Kafka Outputs + RAW_JSON=$(curl -K /opt/so/conf/elasticsearch/curl.config 'http://localhost:5601/api/fleet/outputs/so-manager_kafka') -# Get the current list of Logstash outputs & hash them -CURRENT_LIST=$(jq -c -r '.item.hosts' <<< "$RAW_JSON") -CURRENT_HASH=$(sha1sum <<< "$CURRENT_LIST" | awk '{print $1}') + # Check to make sure that the server responded with good data - else, bail from script + CHECKSUM=$(jq -r '.item.id' <<< "$RAW_JSON") + if [ "$CHECKSUM" != "so-manager_kafka" ]; then + printf "Failed to query for current Kafka Outputs..." + exit 1 + fi -declare -a NEW_LIST=() + # Get the current list of kafka outputs & hash them + CURRENT_LIST=$(jq -c -r '.item.hosts' <<< "$RAW_JSON") + CURRENT_HASH=$(sha1sum <<< "$CURRENT_LIST" | awk '{print $1}') + + declare -a NEW_LIST=() + + # Query for the current Grid Nodes that are running kafka + KAFKANODES=$(salt-call --out=json pillar.get kafka:nodes | jq '.local') + + # Query for Kafka nodes with Broker role and add hostname to list + while IFS= read -r line; do + NEW_LIST+=("$line") + done < <(jq -r 'to_entries | .[] | select(.value.role | contains("broker")) | .key + ":9092"' <<< $KAFKANODES) + + {# If global pipeline isn't set to KAFKA then assume default of REDIS / logstash #} +{% else %} + # Get current list of Logstash Outputs + RAW_JSON=$(curl -K /opt/so/conf/elasticsearch/curl.config 'http://localhost:5601/api/fleet/outputs/so-manager_logstash') + + # Check to make sure that the server responded with good data - else, bail from script + CHECKSUM=$(jq -r '.item.id' <<< "$RAW_JSON") + if [ "$CHECKSUM" != "so-manager_logstash" ]; then + printf "Failed to query for current Logstash Outputs..." + exit 1 + fi + + # Get the current list of Logstash outputs & hash them + CURRENT_LIST=$(jq -c -r '.item.hosts' <<< "$RAW_JSON") + CURRENT_HASH=$(sha1sum <<< "$CURRENT_LIST" | awk '{print $1}') + + declare -a NEW_LIST=() + + {# If we select to not send to manager via SOC, then omit the code that adds manager to NEW_LIST #} + {% if ELASTICFLEETMERGED.enable_manager_output %} + # Create array & add initial elements + if [ "{{ GLOBALS.hostname }}" = "{{ GLOBALS.url_base }}" ]; then + NEW_LIST+=("{{ GLOBALS.url_base }}:5055") + else + NEW_LIST+=("{{ GLOBALS.url_base }}:5055" "{{ GLOBALS.hostname }}:5055") + fi + {% endif %} + + # Query for FQDN entries & add them to the list + {% if ELASTICFLEETMERGED.config.server.custom_fqdn | length > 0 %} + CUSTOMFQDNLIST=('{{ ELASTICFLEETMERGED.config.server.custom_fqdn | join(' ') }}') + readarray -t -d ' ' CUSTOMFQDN < <(printf '%s' "$CUSTOMFQDNLIST") + for CUSTOMNAME in "${CUSTOMFQDN[@]}" + do + NEW_LIST+=("$CUSTOMNAME:5055") + done + {% endif %} + + # Query for the current Grid Nodes that are running Logstash + LOGSTASHNODES=$(salt-call --out=json pillar.get logstash:nodes | jq '.local') + + # Query for Receiver Nodes & add them to the list + if grep -q "receiver" <<< $LOGSTASHNODES; then + readarray -t RECEIVERNODES < <(jq -r ' .receiver | keys_unsorted[]' <<< $LOGSTASHNODES) + for NODE in "${RECEIVERNODES[@]}" + do + NEW_LIST+=("$NODE:5055") + done + fi + + # Query for Fleet Nodes & add them to the list + if grep -q "fleet" <<< $LOGSTASHNODES; then + readarray -t FLEETNODES < <(jq -r ' .fleet | keys_unsorted[]' <<< $LOGSTASHNODES) + for NODE in "${FLEETNODES[@]}" + do + NEW_LIST+=("$NODE:5055") + done + fi -{# If we select to not send to manager via SOC, then omit the code that adds manager to NEW_LIST #} -{% if ELASTICFLEETMERGED.enable_manager_output %} -# Create array & add initial elements -if [ "{{ GLOBALS.hostname }}" = "{{ GLOBALS.url_base }}" ]; then - NEW_LIST+=("{{ GLOBALS.url_base }}:5055") -else - NEW_LIST+=("{{ GLOBALS.url_base }}:5055" "{{ GLOBALS.hostname }}:5055") -fi {% endif %} -# Query for FQDN entries & add them to the list -{% if ELASTICFLEETMERGED.config.server.custom_fqdn | length > 0 %} -CUSTOMFQDNLIST=('{{ ELASTICFLEETMERGED.config.server.custom_fqdn | join(' ') }}') -readarray -t -d ' ' CUSTOMFQDN < <(printf '%s' "$CUSTOMFQDNLIST") -for CUSTOMNAME in "${CUSTOMFQDN[@]}" -do - NEW_LIST+=("$CUSTOMNAME:5055") -done -{% endif %} - -# Query for the current Grid Nodes that are running Logstash -LOGSTASHNODES=$(salt-call --out=json pillar.get logstash:nodes | jq '.local') - -# Query for Receiver Nodes & add them to the list -if grep -q "receiver" <<< $LOGSTASHNODES; then - readarray -t RECEIVERNODES < <(jq -r ' .receiver | keys_unsorted[]' <<< $LOGSTASHNODES) - for NODE in "${RECEIVERNODES[@]}" - do - NEW_LIST+=("$NODE:5055") - done -fi - -# Query for Fleet Nodes & add them to the list -if grep -q "fleet" <<< $LOGSTASHNODES; then - readarray -t FLEETNODES < <(jq -r ' .fleet | keys_unsorted[]' <<< $LOGSTASHNODES) - for NODE in "${FLEETNODES[@]}" - do - NEW_LIST+=("$NODE:5055") - done -fi - # Sort & hash the new list of Logstash Outputs NEW_LIST_JSON=$(jq --compact-output --null-input '$ARGS.positional' --args -- "${NEW_LIST[@]}") NEW_HASH=$(sha1sum <<< "$NEW_LIST_JSON" | awk '{print $1}') @@ -91,5 +131,9 @@ if [ "$NEW_HASH" = "$CURRENT_HASH" ]; then else printf "\nHashes don't match - update needed.\n" printf "Current List: $CURRENT_LIST\nNew List: $NEW_LIST_JSON\n" +{% if GLOBALS.pipeline == "KAFKA" %} + update_kafka_outputs +{% else %} update_logstash_outputs +{% endif %} fi diff --git a/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-setup b/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-setup index 14ab58b45..acaec360b 100755 --- a/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-setup +++ b/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-setup @@ -81,8 +81,7 @@ printf "\nCreate Kafka Output Config if node is not an Import or Eval install\n" {% if grains.role not in ['so-import', 'so-eval'] %} KAFKACRT=$(openssl x509 -in /etc/pki/elasticfleet-kafka.crt) KAFKAKEY=$(openssl rsa -in /etc/pki/elasticfleet-kafka.key) -{# KAFKACA=$(openssl x509 -in $INTCA) #} -KAFKACA=$(openssl x509 -in /etc/pki/tls/certs/intca.crt) +KAFKACA=$(openssl x509 -in $INTCA) KAFKA_OUTPUT_VERSION="2.6.0" JSON_STRING=$( jq -n \ --arg KAFKACRT "$KAFKACRT" \ From cef9bb148725e980933325ee86f294512438b487 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 1 May 2024 09:16:13 -0400 Subject: [PATCH 080/507] Dynamically create Kafka topics based on event.module from elastic agent logs eg. zeek-topic. Depends on Kafka brokers having auto.create.topics.enable set to true Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-setup | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-setup b/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-setup index acaec360b..aacc3ebc8 100755 --- a/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-setup +++ b/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-setup @@ -88,7 +88,7 @@ JSON_STRING=$( jq -n \ --arg KAFKAKEY "$KAFKAKEY" \ --arg KAFKACA "$KAFKACA" \ --arg KAFKA_OUTPUT_VERSION "$KAFKA_OUTPUT_VERSION" \ - '{ "name": "grid-kafka", "id": "so-manager_kafka", "type": "kafka", "hosts": [ "{{ GLOBALS.manager }}:9092", "{{ GLOBALS.manager_ip }}:9092" ], "is_default": false, "is_default_monitoring": false, "config_yaml": "", "ssl": { "certificate_authorities": [ $KAFKACA ], "certificate": $KAFKACRT, "key": $KAFKAKEY, "verification_mode": "full" }, "proxy_id": null, "client_id": "Elastic", "version": $KAFKA_OUTPUT_VERSION, "compression": "none", "auth_type": "ssl", "partition": "round_robin", "round_robin": { "group_events": 1 }, "topics": [ { "topic": "zeek-logs", "when": { "type": "equals", "condition": "event.module:zeek" } }, { "topic": "suricata-logs", "when": { "type": "equals", "condition": "event.module:suricata" } }, { "topic": "strelka-logs", "when": { "type": "equals", "condition": "event.module:strelka" } }, { "topic": "opencanary-logs", "when": { "type": "equals", "condition": "event.module:opencanary" } }, { "topic": "system-logs", "when": { "type": "equals", "condition": "event.module:system" } }, { "topic": "kratos-logs", "when": { "type": "equals", "condition": "event.module:kratos" } }, { "topic": "soc-logs", "when": { "type": "equals", "condition": "event.module:soc" } }, { "topic": "rita-logs", "when": { "type": "equals", "condition": "event.module:rita" } }, { "topic": "default-logs" } ], "headers": [ { "key": "", "value": "" } ], "timeout": 30, "broker_timeout": 30, "required_acks": 1 }' + '{ "name": "grid-kafka", "id": "so-manager_kafka", "type": "kafka", "hosts": [ "{{ GLOBALS.manager }}:9092", "{{ GLOBALS.manager_ip }}:9092" ], "is_default": false, "is_default_monitoring": false, "config_yaml": "", "ssl": { "certificate_authorities": [ $KAFKACA ], "certificate": $KAFKACRT, "key": $KAFKAKEY, "verification_mode": "full" }, "proxy_id": null, "client_id": "Elastic", "version": $KAFKA_OUTPUT_VERSION, "compression": "none", "auth_type": "ssl", "partition": "round_robin", "round_robin": { "group_events": 1 }, "topics":[{"topic":"%{[event.module]}-topic","when":{"type":"regexp","condition":"event.module:.+"}},{"topic":"default-topic"}], "headers": [ { "key": "", "value": "" } ], "timeout": 30, "broker_timeout": 30, "required_acks": 1 }' ) curl -K /opt/so/conf/elasticsearch/curl.config -L -X POST "localhost:5601/api/fleet/outputs" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d "$JSON_STRING" {% endif %} From eb1249618b995a83c02b2b56692703019fe3532f Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 1 May 2024 09:27:01 -0400 Subject: [PATCH 081/507] Update soup for Kafka Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/manager/tools/sbin/so-kafka-clusterid | 2 +- salt/manager/tools/sbin/soup | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/salt/manager/tools/sbin/so-kafka-clusterid b/salt/manager/tools/sbin/so-kafka-clusterid index eb0701b8b..c4e449448 100644 --- a/salt/manager/tools/sbin/so-kafka-clusterid +++ b/salt/manager/tools/sbin/so-kafka-clusterid @@ -26,4 +26,4 @@ fi if ! grep -q "^ kafka_pass:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then kafkapass=$(get_random_value) echo ' kafka_pass: '$kafkapass >> $local_salt_dir/pillar/kafka/soc_kafka.sls -fit \ No newline at end of file +fi \ No newline at end of file diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index a6f9032a5..abde1ed0a 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -448,13 +448,13 @@ post_to_2.4.70() { touch /opt/so/saltstack/local/pillar/kafka/adv_kafka.sls echo 'kafka: ' > /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls - if ! grep -q "^ cluster_id:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then + if ! grep -q "^ cluster_id:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then kafka_cluster_id=$(get_random_value 22) - echo ' cluster_id: '$kafka_cluster_id >> $local_salt_dir/pillar/kafka/soc_kafka.sls + echo ' cluster_id: '$kafka_cluster_id >> $local_salt_dir/pillar/kafka/soc_kafka.sls - if ! grep -q "^ certpass:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then + if ! grep -q "^ kafka_pass:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then kafkapass=$(get_random_value) - echo ' certpass: '$kafkapass >> $local_salt_dir/pillar/kafka/soc_kafka.sls + echo ' kafka_pass: '$kafkapass >> $local_salt_dir/pillar/kafka/soc_kafka.sls fi POSTVERSION=2.4.70 From 63f3e23e2b00af48a3e3789657ed1c3feee488be Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 1 May 2024 09:54:19 -0400 Subject: [PATCH 082/507] soup typo Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/manager/tools/sbin/soup | 1 + 1 file changed, 1 insertion(+) diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index abde1ed0a..16f4d9076 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -451,6 +451,7 @@ post_to_2.4.70() { if ! grep -q "^ cluster_id:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then kafka_cluster_id=$(get_random_value 22) echo ' cluster_id: '$kafka_cluster_id >> $local_salt_dir/pillar/kafka/soc_kafka.sls + fi if ! grep -q "^ kafka_pass:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then kafkapass=$(get_random_value) From 6b60e85a337f11ac8559740ff90bae3a43d0507a Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 1 May 2024 10:15:26 -0400 Subject: [PATCH 083/507] Make kafka configuration changes prior to 2.4.70 upgrade Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/manager/tools/sbin/soup | 41 ++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index 16f4d9076..6e4820717 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -438,26 +438,7 @@ post_to_2.4.60() { } post_to_2.4.70() { - # Global pipeline changes to REDIS or KAFKA - echo "Removing global.pipeline pillar configuration" - sed -i '/pipeline:/d' /opt/so/saltstack/local/pillar/global/soc_global.sls - - # Kafka configuration - mkdir -p /opt/so/saltstack/local/pillar/kafka - touch /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls - touch /opt/so/saltstack/local/pillar/kafka/adv_kafka.sls - echo 'kafka: ' > /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls - - if ! grep -q "^ cluster_id:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then - kafka_cluster_id=$(get_random_value 22) - echo ' cluster_id: '$kafka_cluster_id >> $local_salt_dir/pillar/kafka/soc_kafka.sls - fi - - if ! grep -q "^ kafka_pass:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then - kafkapass=$(get_random_value) - echo ' kafka_pass: '$kafkapass >> $local_salt_dir/pillar/kafka/soc_kafka.sls - fi - + echo "Nothing to apply" POSTVERSION=2.4.70 } @@ -603,6 +584,26 @@ up_to_2.4.60() { up_to_2.4.70() { playbook_migration toggle_telemetry + + # Kafka configuration changes + + # Global pipeline changes to REDIS or KAFKA + echo "Removing global.pipeline pillar configuration" + sed -i '/pipeline:/d' /opt/so/saltstack/local/pillar/global/soc_global.sls + # Kafka pillars + mkdir -p /opt/so/saltstack/local/pillar/kafka + touch /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls + touch /opt/so/saltstack/local/pillar/kafka/adv_kafka.sls + echo 'kafka: ' > /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls + if ! grep -q "^ cluster_id:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then + kafka_cluster_id=$(get_random_value 22) + echo ' cluster_id: '$kafka_cluster_id >> $local_salt_dir/pillar/kafka/soc_kafka.sls + fi + if ! grep -q "^ kafka_pass:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then + kafkapass=$(get_random_value) + echo ' kafka_pass: '$kafkapass >> $local_salt_dir/pillar/kafka/soc_kafka.sls + fi + INSTALLEDVERSION=2.4.70 } From 84abfa688181c0eb878e26c7e87cdce79861825c Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 1 May 2024 10:45:05 -0400 Subject: [PATCH 084/507] Remove check for existing value since Kafka pillar is made empty on upgrade Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/manager/tools/sbin/soup | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index 6e4820717..4c328b373 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -595,14 +595,10 @@ up_to_2.4.70() { touch /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls touch /opt/so/saltstack/local/pillar/kafka/adv_kafka.sls echo 'kafka: ' > /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls - if ! grep -q "^ cluster_id:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then - kafka_cluster_id=$(get_random_value 22) - echo ' cluster_id: '$kafka_cluster_id >> $local_salt_dir/pillar/kafka/soc_kafka.sls - fi - if ! grep -q "^ kafka_pass:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then - kafkapass=$(get_random_value) - echo ' kafka_pass: '$kafkapass >> $local_salt_dir/pillar/kafka/soc_kafka.sls - fi + kafka_cluster_id=$(get_random_value 22) + echo ' cluster_id: '$kafka_cluster_id >> $local_salt_dir/pillar/kafka/soc_kafka.sls + kafkapass=$(get_random_value) + echo ' kafka_pass: '$kafkapass >> $local_salt_dir/pillar/kafka/soc_kafka.sls INSTALLEDVERSION=2.4.70 } From de0af58cf8328ccc1c58886a9b0166b3cf67286d Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 1 May 2024 10:45:46 -0400 Subject: [PATCH 085/507] Write out Kafka pillar path Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/manager/tools/sbin/soup | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index 4c328b373..436765d30 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -596,9 +596,9 @@ up_to_2.4.70() { touch /opt/so/saltstack/local/pillar/kafka/adv_kafka.sls echo 'kafka: ' > /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls kafka_cluster_id=$(get_random_value 22) - echo ' cluster_id: '$kafka_cluster_id >> $local_salt_dir/pillar/kafka/soc_kafka.sls + echo ' cluster_id: '$kafka_cluster_id >> /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls kafkapass=$(get_random_value) - echo ' kafka_pass: '$kafkapass >> $local_salt_dir/pillar/kafka/soc_kafka.sls + echo ' kafka_pass: '$kafkapass >> /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls INSTALLEDVERSION=2.4.70 } From 3efdb4e5328713ab1633bf85de200a46f8d66a03 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 1 May 2024 13:01:29 -0400 Subject: [PATCH 086/507] Reconfigure logstash Kafka input - TODO: Configure what topics are pulled to searchnodes via the SOC UI Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- pillar/top.sls | 1 + salt/logstash/defaults.yaml | 1 + .../config/so/0800_input_kafka.conf.jinja | 19 +++++++++---------- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/pillar/top.sls b/pillar/top.sls index fbb1604da..61b812cc8 100644 --- a/pillar/top.sls +++ b/pillar/top.sls @@ -226,6 +226,7 @@ base: - minions.adv_{{ grains.id }} - stig.soc_stig - soc.license + - kafka.nodes '*_receiver': - logstash.nodes diff --git a/salt/logstash/defaults.yaml b/salt/logstash/defaults.yaml index 348acb622..d82cba1ff 100644 --- a/salt/logstash/defaults.yaml +++ b/salt/logstash/defaults.yaml @@ -37,6 +37,7 @@ logstash: - so/0900_input_redis.conf.jinja - so/9805_output_elastic_agent.conf.jinja - so/9900_output_endgame.conf.jinja + - so/0800_input_kafka.conf.jinja custom0: [] custom1: [] custom2: [] diff --git a/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja b/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja index 85e6729e2..087ed7755 100644 --- a/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja +++ b/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja @@ -1,18 +1,17 @@ -{% set kafka_brokers = salt['pillar.get']('logstash:nodes:receiver', {}) %} -{% set kafka_on_mngr = salt ['pillar.get']('logstash:nodes:manager', {}) %} -{% set broker_ips = [] %} -{% for node, node_data in kafka_brokers.items() %} - {% do broker_ips.append(node_data['ip'] + ":9092") %} +{% set kafka_brokers = salt['pillar.get']('kafka:nodes', {}) %} +{% set brokers = [] %} + +{% for key, values in kafka_brokers.items() %} +{% if 'broker' in values['role'] %} +{% do brokers.append(key ~ ':9092') %} +{% endif %} {% endfor %} -{% for node, node_data in kafka_on_mngr.items() %} - {% do broker_ips.append(node_data['ip'] + ":9092") %} -{% endfor %} -{% set bootstrap_servers = "','".join(broker_ips) %} +{% set bootstrap_servers = ','.join(brokers) %} input { kafka { codec => json - topics => ['default-logs', 'kratos-logs', 'soc-logs', 'strelka-logs', 'suricata-logs', 'zeek-logs'] + topics => ['default-topic', 'kratos-topic', 'soc-topic', 'strelka-topic', 'suricata-topic', 'zeek-topic', 'rita-topic', 'opencanary-topic', 'syslog-topic'] group_id => 'searchnodes' client_id => '{{ GLOBALS.hostname }}' security_protocol => 'SSL' From e164d15ec64c6238312f2fdf1a9c25f70238c22e Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 1 May 2024 13:02:47 -0400 Subject: [PATCH 087/507] Generate different Kafka certs for different SO nodetypes Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/ssl/init.sls | 221 +++++++++++++++++++++++++++++----------------- 1 file changed, 142 insertions(+), 79 deletions(-) diff --git a/salt/ssl/init.sls b/salt/ssl/init.sls index 854628949..72fc6c9a4 100644 --- a/salt/ssl/init.sls +++ b/salt/ssl/init.sls @@ -662,31 +662,27 @@ elastickeyperms: - mode: 640 - group: 930 -{%- endif %} - -{% if grains['role'] in ['so-manager', 'so-receiver', 'so-searchnode'] %} - -kafka_key: +kafka_logstash_key: x509.private_key_managed: - - name: /etc/pki/kafka.key + - name: /etc/pki/kafka-logstash.key - keysize: 4096 - backup: True - new: True - {% if salt['file.file_exists']('/etc/pki/kafka.key') -%} + {% if salt['file.file_exists']('/etc/pki/kafka-logstash.key') -%} - prereq: - - x509: /etc/pki/kafka.crt + - x509: /etc/pki/kafka-logstash.crt {%- endif %} - retry: attempts: 5 interval: 30 -kafka_crt: +kafka_logstash_crt: x509.certificate_managed: - - name: /etc/pki/kafka.crt + - name: /etc/pki/kafka-logstash.crt - ca_server: {{ ca_server }} - subjectAltName: DNS:{{ GLOBALS.hostname }}, IP:{{ GLOBALS.node_ip }} - signing_policy: kafka - - private_key: /etc/pki/kafka.key + - private_key: /etc/pki/kafka-logstash.key - CN: {{ GLOBALS.hostname }} - days_remaining: 0 - days_valid: 820 @@ -696,9 +692,37 @@ kafka_crt: attempts: 5 interval: 30 cmd.run: - - name: "/usr/bin/openssl pkcs12 -inkey /etc/pki/kafka.key -in /etc/pki/kafka.crt -export -out /etc/pki/kafka.p12 -nodes -passout pass:changeit" + - name: "/usr/bin/openssl pkcs12 -inkey /etc/pki/kafka-logstash.key -in /etc/pki/kafka-logstash.crt -export -out /etc/pki/kafka-logstash.p12 -nodes -passout pass:changeit" - onchanges: - - x509: /etc/pki/kafka.key + - x509: /etc/pki/kafka-logstash.key + +kafka_logstash_key_perms: + file.managed: + - replace: False + - name: /etc/pki/kafka-logstash.key + - mode: 640 + - user: 960 + - group: 939 + +kafka_logstash_crt_perms: + file.managed: + - replace: False + - name: /etc/pki/kafka-logstash.crt + - mode: 640 + - user: 960 + - group: 939 + +kafka_logstash_pkcs12_perms: + file.managed: + - replace: False + - name: /etc/pki/kafka-logstash.p12 + - mode: 640 + - user: 960 + - group: 931 + +{%- endif %} + +{% if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone'] %} elasticfleet_kafka_key: x509.private_key_managed: @@ -734,41 +758,30 @@ elasticfleet_kafka_crt: - onchanges: - x509: elasticfleet_kafka_key -kafka_logstash_key: - x509.private_key_managed: - - name: /etc/pki/kafka-logstash.key - - keysize: 4096 - - backup: True - - new: True - {% if salt['file.file_exists']('/etc/pki/kafka-logstash.key') -%} - - prereq: - - x509: /etc/pki/kafka-logstash.crt - {%- endif %} - - retry: - attempts: 5 - interval: 30 +elasticfleet_kafka_cert_perms: + file.managed: + - replace: False + - name: /etc/pki/elasticfleet-kafka.crt + - mode: 640 + - user: 960 + - group: 939 -kafka_logstash_crt: - x509.certificate_managed: - - name: /etc/pki/kafka-logstash.crt - - ca_server: {{ ca_server }} - - subjectAltName: DNS:{{ GLOBALS.hostname }}, IP:{{ GLOBALS.node_ip }} - - signing_policy: kafka - - private_key: /etc/pki/kafka-logstash.key - - CN: {{ GLOBALS.hostname }} - - days_remaining: 0 - - days_valid: 820 - - backup: True - - timeout: 30 - - retry: - attempts: 5 - interval: 30 - cmd.run: - - name: "/usr/bin/openssl pkcs12 -inkey /etc/pki/kafka-logstash.key -in /etc/pki/kafka-logstash.crt -export -out /etc/pki/kafka-logstash.p12 -nodes -passout pass:changeit" - - onchanges: - - x509: /etc/pki/kafka-logstash.key +elasticfleet_kafka_key_perms: + file.managed: + - replace: False + - name: /etc/pki/elasticfleet-kafka.key + - mode: 640 + - user: 960 + - group: 939 + +elasticfleet_kafka_pkcs8_perms: + file.managed: + - replace: False + - name: /etc/pki/elasticfleet-kafka.p8 + - mode: 640 + - user: 960 + - group: 939 -{% if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone', 'so-receiver'] %} kafka_client_key: x509.private_key_managed: - name: /etc/pki/kafka-client.key @@ -814,8 +827,44 @@ kafka_client_crt_perms: - mode: 640 - user: 960 - group: 939 -{% endif %} +{% endif %} + +{% if grains['role'] in ['so-manager', 'so-managersearch','so-receiver', 'so-standalone'] %} + +kafka_key: + x509.private_key_managed: + - name: /etc/pki/kafka.key + - keysize: 4096 + - backup: True + - new: True + {% if salt['file.file_exists']('/etc/pki/kafka.key') -%} + - prereq: + - x509: /etc/pki/kafka.crt + {%- endif %} + - retry: + attempts: 5 + interval: 30 + +kafka_crt: + x509.certificate_managed: + - name: /etc/pki/kafka.crt + - ca_server: {{ ca_server }} + - subjectAltName: DNS:{{ GLOBALS.hostname }}, IP:{{ GLOBALS.node_ip }} + - signing_policy: kafka + - private_key: /etc/pki/kafka.key + - CN: {{ GLOBALS.hostname }} + - days_remaining: 0 + - days_valid: 820 + - backup: True + - timeout: 30 + - retry: + attempts: 5 + interval: 30 + cmd.run: + - name: "/usr/bin/openssl pkcs12 -inkey /etc/pki/kafka.key -in /etc/pki/kafka.crt -export -out /etc/pki/kafka.p12 -nodes -passout pass:changeit" + - onchanges: + - x509: /etc/pki/kafka.key kafka_key_perms: file.managed: - replace: False @@ -832,6 +881,51 @@ kafka_crt_perms: - user: 960 - group: 939 +kafka_pkcs12_perms: + file.managed: + - replace: False + - name: /etc/pki/kafka.p12 + - mode: 640 + - user: 960 + - group: 939 + +{% endif %} +{# For automated testing standalone will need kafka-logstash key to pull logs from Kafka #} +{% if grains['role'] == 'so-standalone' %} +kafka_logstash_key: + x509.private_key_managed: + - name: /etc/pki/kafka-logstash.key + - keysize: 4096 + - backup: True + - new: True + {% if salt['file.file_exists']('/etc/pki/kafka-logstash.key') -%} + - prereq: + - x509: /etc/pki/kafka-logstash.crt + {%- endif %} + - retry: + attempts: 5 + interval: 30 + +kafka_logstash_crt: + x509.certificate_managed: + - name: /etc/pki/kafka-logstash.crt + - ca_server: {{ ca_server }} + - subjectAltName: DNS:{{ GLOBALS.hostname }}, IP:{{ GLOBALS.node_ip }} + - signing_policy: kafka + - private_key: /etc/pki/kafka-logstash.key + - CN: {{ GLOBALS.hostname }} + - days_remaining: 0 + - days_valid: 820 + - backup: True + - timeout: 30 + - retry: + attempts: 5 + interval: 30 + cmd.run: + - name: "/usr/bin/openssl pkcs12 -inkey /etc/pki/kafka-logstash.key -in /etc/pki/kafka-logstash.crt -export -out /etc/pki/kafka-logstash.p12 -nodes -passout pass:changeit" + - onchanges: + - x509: /etc/pki/kafka-logstash.key + kafka_logstash_key_perms: file.managed: - replace: False @@ -855,39 +949,8 @@ kafka_logstash_pkcs12_perms: - mode: 640 - user: 960 - group: 931 - -elasticfleet_kafka_pkcs8_perms: - file.managed: - - replace: False - - name: /etc/pki/elasticfleet-kafka.p8 - - mode: 640 - - user: 960 - - group: 939 - -kafka_pkcs12_perms: - file.managed: - - replace: False - - name: /etc/pki/kafka.p12 - - mode: 640 - - user: 960 - - group: 939 - -elasticfleet_kafka_cert_perms: - file.managed: - - replace: False - - name: /etc/pki/elasticfleet-kafka.crt - - mode: 640 - - user: 960 - - group: 939 - -elasticfleet_kafka_key_perms: - file.managed: - - replace: False - - name: /etc/pki/elasticfleet-kafka.key - - mode: 640 - - user: 960 - - group: 939 {% endif %} + {% else %} {{sls}}_state_not_allowed: From 58ebbfba206a314b217fa2cf9133609d1aae6c9c Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 1 May 2024 13:03:14 -0400 Subject: [PATCH 088/507] Add kafka state to standalone highstate Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/top.sls | 1 + 1 file changed, 1 insertion(+) diff --git a/salt/top.sls b/salt/top.sls index e4cd067c3..464f23ea5 100644 --- a/salt/top.sls +++ b/salt/top.sls @@ -141,6 +141,7 @@ base: - utility - elasticfleet - stig + - kafka '*_searchnode and G@saltversion:{{saltversion}}': - match: compound From 47ced60243d86337cf7e0e6d3133b10fb985bbd8 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 1 May 2024 14:49:51 -0400 Subject: [PATCH 089/507] Create new Kafka output policy using salt Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- .../tools/sbin_jinja/so-elastic-fleet-setup | 13 +---------- salt/kafka/elasticfleet.sls | 22 ++++++++++++++++++ salt/kafka/init.sls | 1 + .../sbin_jinja/so-kafka-fleet-output-policy | 23 +++++++++++++++++++ 4 files changed, 47 insertions(+), 12 deletions(-) create mode 100644 salt/kafka/elasticfleet.sls create mode 100644 salt/kafka/tools/sbin_jinja/so-kafka-fleet-output-policy diff --git a/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-setup b/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-setup index aacc3ebc8..02624d813 100755 --- a/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-setup +++ b/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-setup @@ -79,18 +79,7 @@ printf "\n\n" printf "\nCreate Kafka Output Config if node is not an Import or Eval install\n" {% if grains.role not in ['so-import', 'so-eval'] %} -KAFKACRT=$(openssl x509 -in /etc/pki/elasticfleet-kafka.crt) -KAFKAKEY=$(openssl rsa -in /etc/pki/elasticfleet-kafka.key) -KAFKACA=$(openssl x509 -in $INTCA) -KAFKA_OUTPUT_VERSION="2.6.0" -JSON_STRING=$( jq -n \ - --arg KAFKACRT "$KAFKACRT" \ - --arg KAFKAKEY "$KAFKAKEY" \ - --arg KAFKACA "$KAFKACA" \ - --arg KAFKA_OUTPUT_VERSION "$KAFKA_OUTPUT_VERSION" \ - '{ "name": "grid-kafka", "id": "so-manager_kafka", "type": "kafka", "hosts": [ "{{ GLOBALS.manager }}:9092", "{{ GLOBALS.manager_ip }}:9092" ], "is_default": false, "is_default_monitoring": false, "config_yaml": "", "ssl": { "certificate_authorities": [ $KAFKACA ], "certificate": $KAFKACRT, "key": $KAFKAKEY, "verification_mode": "full" }, "proxy_id": null, "client_id": "Elastic", "version": $KAFKA_OUTPUT_VERSION, "compression": "none", "auth_type": "ssl", "partition": "round_robin", "round_robin": { "group_events": 1 }, "topics":[{"topic":"%{[event.module]}-topic","when":{"type":"regexp","condition":"event.module:.+"}},{"topic":"default-topic"}], "headers": [ { "key": "", "value": "" } ], "timeout": 30, "broker_timeout": 30, "required_acks": 1 }' - ) -curl -K /opt/so/conf/elasticsearch/curl.config -L -X POST "localhost:5601/api/fleet/outputs" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d "$JSON_STRING" +salt-call state.apply kafka.elasticfleet queue=True {% endif %} # Add Manager Hostname & URL Base to Fleet Host URLs diff --git a/salt/kafka/elasticfleet.sls b/salt/kafka/elasticfleet.sls new file mode 100644 index 000000000..a91df765b --- /dev/null +++ b/salt/kafka/elasticfleet.sls @@ -0,0 +1,22 @@ +# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one +# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +# https://securityonion.net/license; you may not use this file except in compliance with the +# Elastic License 2.0. + +{% from 'vars/globals.map.jinja' import GLOBALS %} + +{# Create Kafka output policy if it doesn't exist #} +update_kafka_output_policy_script: + file.managed: + - name: /usr/sbin/so-kafka-fleet-output-policy + - source: salt://kafka/tools/sbin_jinja/so-kafka-fleet-output-policy + - user: root + - mode: 755 + - template: jinja + - defaults: + GLOBALS: {{ GLOBALS }} + +create_kafka_output_policy: + cmd.run: + - name: 'so-kafka-fleet-output-policy > /dev/null 2>&1' + - show_changes: false \ No newline at end of file diff --git a/salt/kafka/init.sls b/salt/kafka/init.sls index c4351ebfc..67b66c45d 100644 --- a/salt/kafka/init.sls +++ b/salt/kafka/init.sls @@ -10,6 +10,7 @@ include: {# Run kafka/nodes.sls before Kafka is enabled, so kafka nodes pillar is setup #} {% if grains.role in ['so-manager','so-managersearch', 'so-standalone'] %} - kafka.nodes + - kafka.elasticfleet {% endif %} {% if GLOBALS.pipeline == "KAFKA" and KAFKAMERGED.enabled %} - kafka.enabled diff --git a/salt/kafka/tools/sbin_jinja/so-kafka-fleet-output-policy b/salt/kafka/tools/sbin_jinja/so-kafka-fleet-output-policy new file mode 100644 index 000000000..13f158bdd --- /dev/null +++ b/salt/kafka/tools/sbin_jinja/so-kafka-fleet-output-policy @@ -0,0 +1,23 @@ +#!/bin/bash +# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one +# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +# https://securityonion.net/license; you may not use this file except in compliance with the +# Elastic License 2.0. + +output=$(curl -K /opt/so/conf/elasticsearch/curl.config -L "http://localhost:5601/api/fleet/outputs" | jq -r .items[].id) + +if ! echo "$output" | grep -q "so-manager_kafka"; then + KAFKACRT=$(openssl x509 -in /etc/pki/elasticfleet-kafka.crt) + KAFKAKEY=$(openssl rsa -in /etc/pki/elasticfleet-kafka.key) + KAFKACA=$(openssl x509 -in /etc/pki/tls/certs/intca.crt) + KAFKA_OUTPUT_VERSION="2.6.0" + JSON_STRING=$( jq -n \ + --arg KAFKACRT "$KAFKACRT" \ + --arg KAFKAKEY "$KAFKAKEY" \ + --arg KAFKACA "$KAFKACA" \ + --arg MANAGER_IP "{{ GLOBALS.manager_ip }}:9092" \ + --arg KAFKA_OUTPUT_VERSION "$KAFKA_OUTPUT_VERSION" \ + '{ "name": "grid-kafka", "id": "so-manager_kafka", "type": "kafka", "hosts": [ $MANAGER_IP ], "is_default": false, "is_default_monitoring": false, "config_yaml": "", "ssl": { "certificate_authorities": [ $KAFKACA ], "certificate": $KAFKACRT, "key": $KAFKAKEY, "verification_mode": "full" }, "proxy_id": null, "client_id": "Elastic", "version": $KAFKA_OUTPUT_VERSION, "compression": "none", "auth_type": "ssl", "partition": "round_robin", "round_robin": { "group_events": 1 }, "topics":[{"topic":"%{[event.module]}-topic","when":{"type":"regexp","condition":"event.module:.+"}},{"topic":"default-topic"}], "headers": [ { "key": "", "value": "" } ], "timeout": 30, "broker_timeout": 30, "required_acks": 1 }' + ) + curl -K /opt/so/conf/elasticsearch/curl.config -L -X POST "localhost:5601/api/fleet/outputs" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d "$JSON_STRING" 2&1> /dev/null +fi \ No newline at end of file From de9f6425f9901cc82697ba216484e420e2864578 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Thu, 2 May 2024 12:13:46 -0400 Subject: [PATCH 090/507] Automatically switch between Kafka output policy and logstash output policy when globals.pipeline changes Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- .../so-elastic-fleet-outputs-update | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-outputs-update b/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-outputs-update index 4d2867fc7..064d49d23 100644 --- a/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-outputs-update +++ b/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-outputs-update @@ -127,13 +127,27 @@ NEW_HASH=$(sha1sum <<< "$NEW_LIST_JSON" | awk '{print $1}') if [ "$NEW_HASH" = "$CURRENT_HASH" ]; then printf "\nHashes match - no update needed.\n" printf "Current List: $CURRENT_LIST\nNew List: $NEW_LIST_JSON\n" + + # Since output can be KAFKA or LOGSTASH, we need to check if the policy set as default matches the value set in GLOBALS.pipeline and update if needed + printf "Checking if the correct output policy is set as default\n" + OUTPUT_DEFAULT=$(jq -r '.item.is_default' <<< $RAW_JSON) + if [ "$OUTPUT_DEFAULT" = "false" ]; then + printf "Default output policy needs to be updated.\n" + {%- if GLOBALS.pipeline == "KAFKA" %} + update_kafka_outputs + {%- else %} + update_logstash_outputs + {%- endif %} + else + printf "Default output policy is set - no update needed.\n" + fi exit 0 else printf "\nHashes don't match - update needed.\n" printf "Current List: $CURRENT_LIST\nNew List: $NEW_LIST_JSON\n" -{% if GLOBALS.pipeline == "KAFKA" %} + {%- if GLOBALS.pipeline == "KAFKA" %} update_kafka_outputs -{% else %} + {%- else %} update_logstash_outputs -{% endif %} + {%- endif %} fi From f663ef8c168c880d4c6b06483e1ab5e0a406769c Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Thu, 2 May 2024 14:53:28 -0400 Subject: [PATCH 091/507] Setup Kafka to use PKCS12 and remove need for converting to JKS Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/config.sls | 14 -------------- salt/kafka/defaults.yaml | 10 +++++----- salt/kafka/enabled.sls | 4 +++- .../tools/sbin_jinja/so-kafka-generate-keystore | 13 ------------- 4 files changed, 8 insertions(+), 33 deletions(-) delete mode 100644 salt/kafka/tools/sbin_jinja/so-kafka-generate-keystore diff --git a/salt/kafka/config.sls b/salt/kafka/config.sls index b1a31d23f..5cf6f8201 100644 --- a/salt/kafka/config.sls +++ b/salt/kafka/config.sls @@ -54,20 +54,6 @@ kafka_data_dir: - group: 960 - makedirs: True -kafka_generate_keystore: - cmd.run: - - name: "/usr/sbin/so-kafka-generate-keystore" - - onchanges: - - x509: /etc/pki/kafka.key - -kafka_keystore_perms: - file.managed: - - replace: False - - name: /etc/pki/kafka.jks - - mode: 640 - - user: 960 - - group: 939 - {% for sc in ['server', 'client'] %} kafka_kraft_{{sc}}_properties: file.managed: diff --git a/salt/kafka/defaults.yaml b/salt/kafka/defaults.yaml index 8dcd70b98..1cf7b73f1 100644 --- a/salt/kafka/defaults.yaml +++ b/salt/kafka/defaults.yaml @@ -25,19 +25,19 @@ kafka: socket_x_receive_x_buffer_x_bytes: 102400 socket_x_request_x_max_x_bytes: 104857600 socket_x_send_x_buffer_x_bytes: 102400 - ssl_x_keystore_x_location: /etc/pki/kafka.jks + ssl_x_keystore_x_location: /etc/pki/kafka.p12 + ssl_x_keystore_x_type: PKCS12 ssl_x_keystore_x_password: changeit - ssl_x_keystore_x_type: JKS ssl_x_truststore_x_location: /etc/pki/java/sos/cacerts ssl_x_truststore_x_password: changeit - transaction_x_state_x_log_x_min_x_isr: 1 + transaction_x_state_x_log_x_min_x_isr: 1n transaction_x_state_x_log_x_replication_x_factor: 1 client: security_x_protocol: SSL ssl_x_truststore_x_location: /etc/pki/java/sos/cacerts ssl_x_truststore_x_password: changeit - ssl_x_keystore_x_location: /etc/pki/kafka.jks - ssl_x_keystore_x_type: JKS + ssl_x_keystore_x_location: /etc/pki/kafka.p12 + ssl_x_keystore_x_type: PKCS12 ssl_x_keystore_x_password: changeit controller: controller_x_listener_x_names: CONTROLLER diff --git a/salt/kafka/enabled.sls b/salt/kafka/enabled.sls index 78e0d87d9..9275eca91 100644 --- a/salt/kafka/enabled.sls +++ b/salt/kafka/enabled.sls @@ -40,11 +40,13 @@ so-kafka: - {{ BINDING }} {% endfor %} - binds: - - /etc/pki/kafka.jks:/etc/pki/kafka.jks + - /etc/pki/kafka.p12:/etc/pki/kafka.p12 - /opt/so/conf/ca/cacerts:/etc/pki/java/sos/cacerts - /nsm/kafka/data/:/nsm/kafka/data/:rw - /opt/so/conf/kafka/server.properties:/kafka/config/kraft/server.properties + {% if GLOBALS.is_manager %} - /opt/so/conf/kafka/client.properties:/kafka/config/kraft/client.properties + {% endif %} - watch: {% for sc in ['server', 'client'] %} - file: kafka_kraft_{{sc}}_properties diff --git a/salt/kafka/tools/sbin_jinja/so-kafka-generate-keystore b/salt/kafka/tools/sbin_jinja/so-kafka-generate-keystore deleted file mode 100644 index 8ae9d6db2..000000000 --- a/salt/kafka/tools/sbin_jinja/so-kafka-generate-keystore +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -# -# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one -# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at -# https://securityonion.net/license; you may not use this file except in compliance with the -# Elastic License 2.0. - -. /usr/sbin/so-common - -# Generate a new keystore -docker run -v /etc/pki/kafka.p12:/etc/pki/kafka.p12 --name so-kafka-keystore --user root --entrypoint keytool {{ GLOBALS.registry_host }}:5000/{{ GLOBALS.image_repo }}/so-kafka:{{ GLOBALS.so_version }} -importkeystore -srckeystore /etc/pki/kafka.p12 -srcstoretype PKCS12 -srcstorepass changeit -destkeystore /etc/pki/kafka.jks -deststoretype JKS -deststorepass changeit -noprompt -docker cp so-kafka-keystore:/etc/pki/kafka.jks /etc/pki/kafka.jks -docker rm so-kafka-keystore \ No newline at end of file From 093cbc5ebcfc59f70f9e6860006e802ce61fa7fc Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Thu, 2 May 2024 15:10:13 -0400 Subject: [PATCH 092/507] Reconfigure Kafka defaults - Set default number of partitions per topic -> 3. Helps ensure that out of the box we can take advantage of multi-node Kafka clusters via load balancing across atleast 3 brokers. Also multiple searchnodes will be able to pull from each topic. In this case 3 searchnodes (consumers) would be able to pull from all topics concurrently. - Set default replication factor -> 2. This is the minimum value required for redundancy. Every partition will have 1 replica. In this case if we have 2 brokers each topic will have 3 partitions (load balanced across brokers) and each partition will have a replica on separate broker for redundancy Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/defaults.yaml | 5 +++-- salt/kafka/soc_kafka.yaml | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/salt/kafka/defaults.yaml b/salt/kafka/defaults.yaml index 1cf7b73f1..86d2f6e94 100644 --- a/salt/kafka/defaults.yaml +++ b/salt/kafka/defaults.yaml @@ -8,6 +8,7 @@ kafka: advertised_x_listeners: auto_x_create_x_topics_x_enable: true controller_x_quorum_x_voters: + default_x_replication_x_factor: 2 inter_x_broker_x_listener_x_name: BROKER listeners: BROKER://0.0.0.0:9092 listener_x_security_x_protocol_x_map: BROKER:SSL @@ -18,7 +19,7 @@ kafka: node_x_id: num_x_io_x_threads: 8 num_x_network_x_threads: 3 - num_x_partitions: 1 + num_x_partitions: 3 num_x_recovery_x_threads_x_per_x_data_x_dir: 1 offsets_x_topic_x_replication_x_factor: 1 process_x_roles: broker @@ -30,7 +31,7 @@ kafka: ssl_x_keystore_x_password: changeit ssl_x_truststore_x_location: /etc/pki/java/sos/cacerts ssl_x_truststore_x_password: changeit - transaction_x_state_x_log_x_min_x_isr: 1n + transaction_x_state_x_log_x_min_x_isr: 1 transaction_x_state_x_log_x_replication_x_factor: 1 client: security_x_protocol: SSL diff --git a/salt/kafka/soc_kafka.yaml b/salt/kafka/soc_kafka.yaml index 505469d6b..ba673fa68 100644 --- a/salt/kafka/soc_kafka.yaml +++ b/salt/kafka/soc_kafka.yaml @@ -26,6 +26,11 @@ kafka: title: auto.create.topics.enable forcedType: bool helpLink: kafka.html + default_x_replication_x_factor: + description: The default replication factor for automatically created topics. + title: default.replication.factor + forcedType: int + helpLink: kafka.html inter_x_broker_x_listener_x_name: description: The name of the listener used for inter-broker communication. title: inter.broker.listener.name From dff609d829a3f0311e1d56d345185b87553b7ce9 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 8 May 2024 16:13:09 -0400 Subject: [PATCH 093/507] Add basic read-only metric collection from Kafka Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/docker/defaults.yaml | 1 + salt/kafka/enabled.sls | 9 +++++---- salt/telegraf/etc/telegraf.conf | 17 +++++++++++++++++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/salt/docker/defaults.yaml b/salt/docker/defaults.yaml index 82ad3b6ea..161dde485 100644 --- a/salt/docker/defaults.yaml +++ b/salt/docker/defaults.yaml @@ -192,6 +192,7 @@ docker: port_bindings: - 0.0.0.0:9092:9092 - 0.0.0.0:9093:9093 + - 0.0.0.0:8778:8778 custom_bind_mounts: [] extra_hosts: [] extra_env: [] diff --git a/salt/kafka/enabled.sls b/salt/kafka/enabled.sls index 9275eca91..b01e6f2a8 100644 --- a/salt/kafka/enabled.sls +++ b/salt/kafka/enabled.sls @@ -25,7 +25,8 @@ so-kafka: - ipv4_address: {{ DOCKER.containers['so-kafka'].ip }} - user: kafka - environment: - - KAFKA_HEAP_OPTS=-Xmx2G -Xms1G + KAFKA_HEAP_OPTS: -Xmx2G -Xms1G + KAFKA_OPTS: -javaagent:/jolokia/agents/jolokia-agent-jvm-javaagent.jar=port=8778,host={{ DOCKER.containers['so-kafka'].ip }},policyLocation=file:/jolokia/jolokia.xml - extra_hosts: {% for node in KAFKANODES %} - {{ node }}:{{ KAFKANODES[node].ip }} @@ -40,10 +41,10 @@ so-kafka: - {{ BINDING }} {% endfor %} - binds: - - /etc/pki/kafka.p12:/etc/pki/kafka.p12 - - /opt/so/conf/ca/cacerts:/etc/pki/java/sos/cacerts + - /etc/pki/kafka.p12:/etc/pki/kafka.p12:ro + - /opt/so/conf/ca/cacerts:/etc/pki/java/sos/cacerts:ro - /nsm/kafka/data/:/nsm/kafka/data/:rw - - /opt/so/conf/kafka/server.properties:/kafka/config/kraft/server.properties + - /opt/so/conf/kafka/server.properties:/kafka/config/kraft/server.properties:ro {% if GLOBALS.is_manager %} - /opt/so/conf/kafka/client.properties:/kafka/config/kraft/client.properties {% endif %} diff --git a/salt/telegraf/etc/telegraf.conf b/salt/telegraf/etc/telegraf.conf index 1c5801645..42a8d43bf 100644 --- a/salt/telegraf/etc/telegraf.conf +++ b/salt/telegraf/etc/telegraf.conf @@ -243,6 +243,23 @@ password = "{{ salt['pillar.get']('elasticsearch:auth:users:so_logstash_user:pass') }}" {%- endif %} +{% if grains.role in ['so-manager','so-managersearch','so-standalone','so-receiver'] -%} +[[inputs.jolokia2_agent]] + name_prefix= "kafka_" + urls = ["http://localhost:8778/jolokia"] + +[[inputs.jolokia2_agent.metric]] + name = "topics" + mbean = "kafka.server:name=*,type=BrokerTopicMetrics" + field_prefix = "$1." + +[[inputs.jolokia2_agent.metric]] + name = "topic" + mbean = "kafka.server:name=*,topic=*,type=BrokerTopicMetrics" + field_prefix = "$1." + tag_keys = ["topic"] + +{%- endif %} # # Read metrics from one or more commands that can output to stdout {%- if 'sostatus.sh' in TELEGRAFMERGED.scripts[GLOBALS.role.split('-')[1]] %} {%- do TELEGRAFMERGED.scripts[GLOBALS.role.split('-')[1]].remove('sostatus.sh') %} From eca2a4a9c8227d5065955b03ed299eaa3b7cfdbc Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 8 May 2024 16:17:09 -0400 Subject: [PATCH 094/507] Logstash consumer threads should match topic partition count - Default is set to 3. If there are too many consumer threads it may lead to idle logstash worker threads and could require decreasing this value to saturate workers Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja | 1 + 1 file changed, 1 insertion(+) diff --git a/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja b/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja index 087ed7755..3d0d03020 100644 --- a/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja +++ b/salt/logstash/pipelines/config/so/0800_input_kafka.conf.jinja @@ -13,6 +13,7 @@ input { codec => json topics => ['default-topic', 'kratos-topic', 'soc-topic', 'strelka-topic', 'suricata-topic', 'zeek-topic', 'rita-topic', 'opencanary-topic', 'syslog-topic'] group_id => 'searchnodes' + consumer_threads => 3 client_id => '{{ GLOBALS.hostname }}' security_protocol => 'SSL' bootstrap_servers => '{{ bootstrap_servers }}' From 91f8b1fef7d0bfc8059abd29e3a77103cb08076c Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 22 May 2024 13:35:09 -0400 Subject: [PATCH 095/507] Set default replication factor back to Kafka default If replication factor is > 1 Kafka will fail to start until another broker is added - For internal automated testing purposes a Standalone will be utilized Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/defaults.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/kafka/defaults.yaml b/salt/kafka/defaults.yaml index 86d2f6e94..9a8c05c43 100644 --- a/salt/kafka/defaults.yaml +++ b/salt/kafka/defaults.yaml @@ -8,7 +8,7 @@ kafka: advertised_x_listeners: auto_x_create_x_topics_x_enable: true controller_x_quorum_x_voters: - default_x_replication_x_factor: 2 + default_x_replication_x_factor: 1 inter_x_broker_x_listener_x_name: BROKER listeners: BROKER://0.0.0.0:9092 listener_x_security_x_protocol_x_map: BROKER:SSL From b1beb617b3202fed18a7ee4a8a6ea489c53fdd6a Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 22 May 2024 13:38:09 -0400 Subject: [PATCH 096/507] Logstash should be disabled when Kafka is enabled except when a minion override exists OR node is a standalone - Standalone subscribes to Kafka topics via logstash for ingest Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/logstash/init.sls | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/salt/logstash/init.sls b/salt/logstash/init.sls index f7adc1330..3bc539b35 100644 --- a/salt/logstash/init.sls +++ b/salt/logstash/init.sls @@ -7,7 +7,10 @@ {% from 'kafka/map.jinja' import KAFKAMERGED %} include: -{% if LOGSTASH_MERGED.enabled and not KAFKAMERGED.enabled %} +{# Disable logstash when Kafka is enabled except when the role is standalone #} +{% if LOGSTASH_MERGED.enabled and grains.role == 'so-standalone' %} + - logstash.enabled +{% elif LOGSTASH_MERGED.enabled and not KAFKAMERGED.enabled %} - logstash.enabled {% else %} - logstash.disabled From 382cd24a57b3394688dbe93f1f9b5d1c6e3998ed Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 22 May 2024 13:39:21 -0400 Subject: [PATCH 097/507] Small changes needed for using new Kafka docker image + added Kafka logging output to /opt/so/log/kafka/ Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/enabled.sls | 7 ++++--- salt/kafka/storage.sls | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/salt/kafka/enabled.sls b/salt/kafka/enabled.sls index b01e6f2a8..833cc7f3c 100644 --- a/salt/kafka/enabled.sls +++ b/salt/kafka/enabled.sls @@ -26,7 +26,7 @@ so-kafka: - user: kafka - environment: KAFKA_HEAP_OPTS: -Xmx2G -Xms1G - KAFKA_OPTS: -javaagent:/jolokia/agents/jolokia-agent-jvm-javaagent.jar=port=8778,host={{ DOCKER.containers['so-kafka'].ip }},policyLocation=file:/jolokia/jolokia.xml + KAFKA_OPTS: -javaagent:/opt/jolokia/agents/jolokia-agent-jvm-javaagent.jar=port=8778,host={{ DOCKER.containers['so-kafka'].ip }},policyLocation=file:/opt/jolokia/jolokia.xml - extra_hosts: {% for node in KAFKANODES %} - {{ node }}:{{ KAFKANODES[node].ip }} @@ -44,9 +44,10 @@ so-kafka: - /etc/pki/kafka.p12:/etc/pki/kafka.p12:ro - /opt/so/conf/ca/cacerts:/etc/pki/java/sos/cacerts:ro - /nsm/kafka/data/:/nsm/kafka/data/:rw - - /opt/so/conf/kafka/server.properties:/kafka/config/kraft/server.properties:ro + - /opt/so/log/kafka:/opt/kafka/logs/:rw + - /opt/so/conf/kafka/server.properties:/opt/kafka/config/kraft/server.properties:ro {% if GLOBALS.is_manager %} - - /opt/so/conf/kafka/client.properties:/kafka/config/kraft/client.properties + - /opt/so/conf/kafka/client.properties:/opt/kafka/config/kraft/client.properties {% endif %} - watch: {% for sc in ['server', 'client'] %} diff --git a/salt/kafka/storage.sls b/salt/kafka/storage.sls index 507c199c6..efc36acf6 100644 --- a/salt/kafka/storage.sls +++ b/salt/kafka/storage.sls @@ -13,7 +13,7 @@ kafka_storage_init: cmd.run: - name: | - docker run -v /nsm/kafka/data:/nsm/kafka/data -v /opt/so/conf/kafka/server.properties:/kafka/config/kraft/newserver.properties --name so-kafkainit --user root --entrypoint /kafka/bin/kafka-storage.sh {{ GLOBALS.registry_host }}:5000/{{ GLOBALS.image_repo }}/so-kafka:{{ GLOBALS.so_version }} format -t {{ kafka_cluster_id }} -c /kafka/config/kraft/newserver.properties + docker run -v /nsm/kafka/data:/nsm/kafka/data -v /opt/so/conf/kafka/server.properties:/opt/kafka/config/kraft/newserver.properties --name so-kafkainit --user root --entrypoint /opt/kafka/bin/kafka-storage.sh {{ GLOBALS.registry_host }}:5000/{{ GLOBALS.image_repo }}/so-kafka:{{ GLOBALS.so_version }} format -t {{ kafka_cluster_id }} -c /opt/kafka/config/kraft/newserver.properties kafka_rm_kafkainit: cmd.run: - name: | From b5f656ae58d2ea2580238211f278262d82e65a3f Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Thu, 23 May 2024 13:22:22 -0400 Subject: [PATCH 098/507] dont render pillar each time so-tcpreplay runs --- salt/common/tools/{sbin => sbin_jinja}/so-tcpreplay | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename salt/common/tools/{sbin => sbin_jinja}/so-tcpreplay (92%) diff --git a/salt/common/tools/sbin/so-tcpreplay b/salt/common/tools/sbin_jinja/so-tcpreplay similarity index 92% rename from salt/common/tools/sbin/so-tcpreplay rename to salt/common/tools/sbin_jinja/so-tcpreplay index 99314c289..6f3f02983 100755 --- a/salt/common/tools/sbin/so-tcpreplay +++ b/salt/common/tools/sbin_jinja/so-tcpreplay @@ -10,7 +10,7 @@ . /usr/sbin/so-common . /usr/sbin/so-image-common -REPLAYIFACE=${REPLAYIFACE:-$(lookup_pillar interface sensor)} +REPLAYIFACE=${REPLAYIFACE:-"{{pillar.sensor.interface}}"} REPLAYSPEED=${REPLAYSPEED:-10} mkdir -p /opt/so/samples @@ -57,8 +57,8 @@ if ! docker ps | grep -q so-tcpreplay; then fi if is_sensor_node; then - echo "Replaying PCAP(s) at ${REPLAYSPEED} Mbps on interface ${REPLAYIFACE}..." - docker exec so-tcpreplay /usr/bin/bash -c "/usr/local/bin/tcpreplay -i ${REPLAYIFACE} -M${REPLAYSPEED} $@" + echo "Replaying PCAP(s) at ${REPLAYSPEED} Mbps on interface $REPLAYIFACE..." + docker exec so-tcpreplay /usr/bin/bash -c "/usr/local/bin/tcpreplay -i $REPLAYIFACE -M${REPLAYSPEED} $@" echo "Replay completed. Warnings shown above are typically expected." elif is_manager_node; then From fcb6a47e8c39a4d7a0bd3d3f75ffd4357154c6cf Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Sun, 26 May 2024 21:10:41 -0400 Subject: [PATCH 099/507] Remove redis.sh telegraf script when Kafka is global pipeline Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/telegraf/map.jinja | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/salt/telegraf/map.jinja b/salt/telegraf/map.jinja index b56c8a64d..1d92b8b5b 100644 --- a/salt/telegraf/map.jinja +++ b/salt/telegraf/map.jinja @@ -22,3 +22,10 @@ {% endif %} {% endif %} + +{% if GLOBALS.pipeline != 'REDIS' %} +{# When global pipeline is not REDIS remove redis.sh script. KAFKA metrics are collected via jolokia agent. Config in telegraf.conf #} +{% if GLOBALS.role in ['so-standalone', 'so-manager', 'so-managersearch', 'so-receiver', 'so-heavynode'] %} +{% do TELEGRAFMERGED.scripts[GLOBALS.role.split('-')[1]].remove('redis.sh') %} +{% endif %} +{% endif %} From 15a0b959aae7a9a2381e9b2aa66b5240230b3499 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 28 May 2024 10:51:39 -0400 Subject: [PATCH 100/507] Add jolokia metrics for influxdb dashboard Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/telegraf/etc/telegraf.conf | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/salt/telegraf/etc/telegraf.conf b/salt/telegraf/etc/telegraf.conf index 42a8d43bf..1e8d9d3fe 100644 --- a/salt/telegraf/etc/telegraf.conf +++ b/salt/telegraf/etc/telegraf.conf @@ -259,6 +259,23 @@ field_prefix = "$1." tag_keys = ["topic"] +[[inputs.jolokia2_agent.metric]] + name = "controller" + mbean = "kafka.controller:name=*,type=*" + field_prefix = "$1." + +[[inputs.jolokia2_agent.metric]] + name = "partition" + mbean = "kafka.log:name=*,partition=*,topic=*,type=Log" + field_name = "$1" + tag_keys = ["topic", "partition"] + +[[inputs.jolokia2_agent.metric]] + name = "partition" + mbean = "kafka.cluster:name=UnderReplicated,partition=*,topic=*,type=Partition" + field_name = "UnderReplicatedPartitions" + tag_keys = ["topic", "partition"] + {%- endif %} # # Read metrics from one or more commands that can output to stdout {%- if 'sostatus.sh' in TELEGRAFMERGED.scripts[GLOBALS.role.split('-')[1]] %} From 47efcfd6e2ac4bf828755893b6f42343cd8297a6 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 28 May 2024 10:55:11 -0400 Subject: [PATCH 101/507] Add basic Kafka metrics to 'Security Onion Performance' influxdb dashboard Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- .../templates/dashboard-security_onion_performance.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/influxdb/templates/dashboard-security_onion_performance.json b/salt/influxdb/templates/dashboard-security_onion_performance.json index e4f2a6d38..05eb9de99 100644 --- a/salt/influxdb/templates/dashboard-security_onion_performance.json +++ b/salt/influxdb/templates/dashboard-security_onion_performance.json @@ -1 +1 @@ -[{"apiVersion":"influxdata.com/v2alpha1","kind":"Dashboard","metadata":{"name":"vivid-wilson-002001"},"spec":{"charts":[{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Uptime","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime\")\n |> hostFilter()\n |> map(fn: (r) => ({r with _value: r._value / (24 * 60 * 60)}))\n |> group(columns: [\"host\"])\n |> last()\n |> lowestMin(n:1)"}],"staticLegend":{},"suffix":" days","width":1},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"},{"id":"z83MTSufTrlrCoEPiBXda","name":"ruby","type":"text","hex":"#BF3D5E","value":1}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Critical Alarms","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> filter(fn: (r) => r[\"_level\"] == \"crit\")\n |> count()"}],"staticLegend":{},"suffix":" ","width":1,"yPos":2},{"colors":[{"id":"base","name":"rainforest","type":"text","hex":"#4ED8A0"},{"id":"QCTYWuGuHkikYFsZSKMzQ","name":"rainforest","type":"text","hex":"#4ED8A0"},{"id":"QdpMyTRBb0LJ56-P5wfAW","name":"laser","type":"text","hex":"#00C9FF","value":1},{"id":"VQGwCoMrxZyP8asiOW5Cq","name":"tiger","type":"text","hex":"#F48D38","value":2},{"id":"zSO9QkesSIxrU_ntCBx2i","name":"ruby","type":"text","hex":"#BF3D5E","value":3}],"fieldOptions":[{"fieldName":"_time","visible":true},{"displayName":"Alarm","fieldName":"_check_name","visible":true},{"displayName":"Severity","fieldName":"_value","visible":true},{"displayName":"Status","fieldName":"_level","visible":true}],"height":6,"kind":"Table","name":"Alarm Status","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> drop(columns: [\"_value\"])\n |> duplicate(column: \"_level\", as: \"_value\")\n |> map(fn: (r) => ({ r with _value: if r._value == \"ok\" then 0 else if r._value == \"info\" then 1 else if r._value == \"warn\" then 2 else 3 }))\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> keep(columns: [\"_check_name\",\"_level\",\"_value\"])"}],"staticLegend":{},"tableOptions":{"sortBy":"_check_name","verticalTimeAxis":true},"timeFormat":"YYYY-MM-DD HH:mm:ss","width":3,"yPos":4},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"B"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Elasticsearch Storage Size","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"store_size_in_bytes\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"mean\")"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"store_size_in_bytes\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":10},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"B"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"InfluxDB Size","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"influxsize\")\n |> filter(fn: (r) => r[\"_field\"] == \"kbytes\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 1000.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"mean\")"},{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"influxsize\")\n |> filter(fn: (r) => r[\"_field\"] == \"kbytes\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 1000.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":14},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":" days"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"System Uptime","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24 * 60 * 60)}))\n |> yield(name: \"last\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24 * 60 * 60)}))\n |> yield(name: \"Trend\")"}],"shade":true,"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":18},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"System CPU Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_idle\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: r._value * -1.0 + 100.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_idle\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\",\"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: r._value * -1.0 + 100.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":22},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"QDwChKZWuQV0BaJcEeSam","name":"Atlantis","type":"scale","hex":"#74D495"},{"id":"ThD0WTqKHltQEVlq9mo6K","name":"Atlantis","type":"scale","hex":"#3F3FBA"},{"id":"FBHYZiwDLKyQK3eRfUD-0","name":"Atlantis","type":"scale","hex":"#FF4D9E"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"System Memory Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":26},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Monitor Interface Traffic - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"bytes_recv\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":30},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Management Interface Traffic - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"bytes_recv\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":6,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":34},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Stenographer Packet Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"stenodrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"stenodrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":38},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Disk Usage /","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":42},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"5m Load Average","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"load5\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"width":1,"xPos":1},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"},{"id":"z83MTSufTrlrCoEPiBXda","name":"tiger","type":"text","hex":"#F48D38","value":1}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Warning Alarms","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> filter(fn: (r) => r[\"_level\"] == \"warn\")\n |> count()"}],"staticLegend":{},"suffix":" ","width":1,"xPos":1,"yPos":2},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"IO Wait","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_iowait\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":2},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"},{"id":"z83MTSufTrlrCoEPiBXda","name":"laser","type":"text","hex":"#00C9FF","value":1}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Informative Alarms","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> filter(fn: (r) => r[\"_level\"] == \"info\")\n |> count()"}],"staticLegend":{},"suffix":" ","width":1,"xPos":2,"yPos":2},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Estimated EPS In","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"in\")\n |> hostFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"width":1,"xPos":3},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"pineapple","type":"threshold","hex":"#FFB94A","value":70},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"fire","type":"threshold","hex":"#DC4E58","value":80},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"CPU Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_idle\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> map(fn: (r) => ({r with _value: r._value * -1.0 + 100.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":3,"yPos":2},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"kOQLOg2H4FVEE-E1_L8Kq","name":"laser","type":"threshold","hex":"#00C9FF","value":85},{"id":"5IArg2lDb8KvnphywgUXa","name":"tiger","type":"threshold","hex":"#F48D38","value":90},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"ruby","type":"threshold","hex":"#BF3D5E","value":95},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"Root Disk Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"path\"] == \"/\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":3,"yPos":6},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Suricata Packet Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"suridrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"suridrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","xPos":3,"yCol":"_value","yPos":38},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Redis Queue","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"redisqueue\")\n |> filter(fn: (r) => r[\"_field\"] == \"unparsed\")\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"width":1,"xPos":4},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Elasticsearch Document Count","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"docs_count\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"mean\")"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"docs_count\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":10},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"heightRatio":0.301556420233463,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Redis Queue","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"redisqueue\")\n |> filter(fn: (r) => r[\"_field\"] == \"unparsed\")\n |> group(columns: [\"host\", \"_field\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"redisqueue\")\n |> filter(fn: (r) => r[\"_field\"] == \"unparsed\")\n |> group(columns: [\"host\", \"_field\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.301556420233463,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":14},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":" days"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container Uptime","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_status\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime_ns\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> group(columns: [\"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24 * 60 * 60 * 1000000000)}))\n |> yield(name: \"last\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_status\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime_ns\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> group(columns: [\"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24.0 * 60.0 * 60.0 * 1000000000.0)}))\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":18},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"yT5vTIlaaFChSrQvKLfqf","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"mzzUVSu3ibTph1JmQmDAQ","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"mOcnDo7l8ii6qNLFIB5rs","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container CPU Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"mean\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":22},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"QDwChKZWuQV0BaJcEeSam","name":"Atlantis","type":"scale","hex":"#74D495"},{"id":"ThD0WTqKHltQEVlq9mo6K","name":"Atlantis","type":"scale","hex":"#3F3FBA"},{"id":"FBHYZiwDLKyQK3eRfUD-0","name":"Atlantis","type":"scale","hex":"#FF4D9E"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container Memory Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"mean\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":26},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b"}],"colorizeRows":true,"colors":[{"id":"0ynR6Zs0wuQ3WY0Lz-_KC","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"YiArehCNBwFm9mn8DSXSG","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"DxByY_EQW9Xs2jD5ktkG5","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container Traffic - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_net\")\n |> filter(fn: (r) => r[\"_field\"] == \"rx_bytes\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"mean\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_net\")\n |> filter(fn: (r) => r[\"_field\"] == \"rx_bytes\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with _value: r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":30},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Disk Usage /nsm","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/nsm\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/nsm\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xPos":4,"yPos":42},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Inbound Traffic","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\") \n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: r._value * 8.0 / (1000.0 * 1000.0)}))\n |> group(columns: [\"host\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> last()\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":" Mb/s","width":1,"xPos":5},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Inbound Drops","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop_in\") \n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: r._value * 8.0 / (1000.0 * 1000.0)}))\n |> group(columns: [\"host\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> last()\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":" Mb/s","width":1,"xPos":6},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"pineapple","type":"threshold","hex":"#FFB94A","value":70},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"fire","type":"threshold","hex":"#DC4E58","value":80},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"Memory Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":6,"yPos":2},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"laser","type":"threshold","hex":"#00C9FF","value":85},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"tiger","type":"threshold","hex":"#F48D38","value":90},{"id":"H7uprvKmMEh39en6X-ms_","name":"ruby","type":"threshold","hex":"#BF3D5E","value":95},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"NSM Disk Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"path\"] == \"/nsm\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":6,"yPos":6},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Management Interface Traffic - Outbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_sent\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n \n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"bytes_sent\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_sent\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n \n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":6,"widthRatio":1,"xCol":"_time","xPos":6,"yCol":"_value","yPos":34},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Zeek Packet Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekdrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekdrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","xPos":6,"yCol":"_value","yPos":38},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Capture Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekcaptureloss\")\n |> filter(fn: (r) => r[\"_field\"] == \"loss\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":7},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Zeek Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekdrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":8},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"s"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"heightRatio":0.301556420233463,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Elastic Ingest Time Spent","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_community_id_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"community.id_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_conditional_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"conditional_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_date_index_name_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"date.index.name_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_date_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"date_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_dissect_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"dissect_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_dot_expander_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"dot.expander_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_geoip_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"geoip_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_grok_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"grok_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_json_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"json_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_kv_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"kv_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_lowercase_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"lowercase_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_rename_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"rename_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_script_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"script_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_user_agent_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"user.agent_time\")"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.301556420233463,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":10},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"1m Load Average","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"load1\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"load1\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\",\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":14,"yTickStep":1},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":" e/s"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"heightRatio":0.301556420233463,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Logstash EPS","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"in\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"out\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: -r._value}))\n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"in\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"out\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: -r._value}))\n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.301556420233463,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":18},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"UAehjIsi65P8u92M_3sQY","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"_SCP8Npp4NVMx2N4mfuzX","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"BoMPg4R1KDp_UsRORdV3_","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"IO Wait","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_iowait\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_iowait\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":22},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"QDwChKZWuQV0BaJcEeSam","name":"Atlantis","type":"scale","hex":"#74D495"},{"id":"ThD0WTqKHltQEVlq9mo6K","name":"Atlantis","type":"scale","hex":"#3F3FBA"},{"id":"FBHYZiwDLKyQK3eRfUD-0","name":"Atlantis","type":"scale","hex":"#FF4D9E"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Swap Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"swap\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"swap\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":26},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Monitor Interface Drops - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop_in\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"drop_in\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop_in\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":30},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":" days"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Stenographer PCAP Retention","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"pcapage\")\n |> filter(fn: (r) => r[\"_field\"] == \"seconds\")\n |> map(fn: (r) => ({ r with _value: r._value / (24.0 * 3600.0)}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])"},{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"pcapage\")\n |> filter(fn: (r) => r[\"_field\"] == \"seconds\")\n |> map(fn: (r) => ({ r with _value: r._value / (24.0 * 3600.0)}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":42},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Suricata Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"suridrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":9},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"pineapple","type":"threshold","hex":"#FFB94A","value":50},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"fire","type":"threshold","hex":"#DC4E58","value":70},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"Swap Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"swap\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":9,"yPos":2},{"colors":[{"id":"base","name":"white","type":"text","hex":"#ffffff"}],"fieldOptions":[{"displayName":"Host","fieldName":"host","visible":true},{"displayName":"Name","fieldName":"container_name","visible":true},{"displayName":"Status","fieldName":"container_status","visible":true},{"displayName":"OOM Killed","fieldName":"_value","visible":true},{"displayName":"_start","fieldName":"_start","visible":true},{"displayName":"_stop","fieldName":"_stop","visible":true},{"displayName":"_time","fieldName":"_time","visible":true},{"displayName":"_field","fieldName":"_field","visible":true},{"displayName":"_measurement","fieldName":"_measurement","visible":true},{"displayName":"engine_host","fieldName":"engine_host","visible":true},{"displayName":"role","fieldName":"role","visible":true},{"displayName":"server_version","fieldName":"server_version","visible":true},{"displayName":"container_image","fieldName":"container_image","visible":true},{"displayName":"container_version","fieldName":"container_version","visible":true},{"displayName":"description","fieldName":"description","visible":true},{"displayName":"maintainer","fieldName":"maintainer","visible":true},{"displayName":"io.k8s.description","fieldName":"io.k8s.description","visible":true},{"displayName":"io.k8s.display-name","fieldName":"io.k8s.display-name","visible":true},{"displayName":"license","fieldName":"license","visible":true},{"displayName":"name","fieldName":"name","visible":true},{"displayName":"org.label-schema.build-date","fieldName":"org.label-schema.build-date","visible":true},{"displayName":"org.label-schema.license","fieldName":"org.label-schema.license","visible":true},{"displayName":"org.label-schema.name","fieldName":"org.label-schema.name","visible":true},{"displayName":"org.label-schema.schema-version","fieldName":"org.label-schema.schema-version","visible":true},{"displayName":"org.label-schema.url","fieldName":"org.label-schema.url","visible":true},{"displayName":"org.label-schema.vcs-ref","fieldName":"org.label-schema.vcs-ref","visible":true},{"displayName":"org.label-schema.vcs-url","fieldName":"org.label-schema.vcs-url","visible":true},{"displayName":"org.label-schema.vendor","fieldName":"org.label-schema.vendor","visible":true},{"displayName":"org.label-schema.version","fieldName":"org.label-schema.version","visible":true},{"displayName":"org.opencontainers.image.created","fieldName":"org.opencontainers.image.created","visible":true},{"displayName":"org.opencontainers.image.licenses","fieldName":"org.opencontainers.image.licenses","visible":true},{"displayName":"org.opencontainers.image.title","fieldName":"org.opencontainers.image.title","visible":true},{"displayName":"org.opencontainers.image.vendor","fieldName":"org.opencontainers.image.vendor","visible":true},{"displayName":"release","fieldName":"release","visible":true},{"displayName":"summary","fieldName":"summary","visible":true},{"displayName":"url","fieldName":"url","visible":true},{"displayName":"vendor","fieldName":"vendor","visible":true},{"displayName":"version","fieldName":"version","visible":true},{"displayName":"org.label-schema.usage","fieldName":"org.label-schema.usage","visible":true},{"displayName":"org.opencontainers.image.documentation","fieldName":"org.opencontainers.image.documentation","visible":true},{"displayName":"org.opencontainers.image.revision","fieldName":"org.opencontainers.image.revision","visible":true},{"displayName":"org.opencontainers.image.source","fieldName":"org.opencontainers.image.source","visible":true},{"displayName":"org.opencontainers.image.url","fieldName":"org.opencontainers.image.url","visible":true},{"displayName":"org.opencontainers.image.version","fieldName":"org.opencontainers.image.version","visible":true},{"displayName":"org.opencontainers.image.description","fieldName":"org.opencontainers.image.description","visible":true}],"height":4,"kind":"Table","name":"Most Recent Container Events","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_status\")\n |> filter(fn: (r) => r[\"_field\"] == \"oomkilled\")\n |> filter(fn: (r) => r[\"container_status\"] != \"running\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"container_name\", \"host\"])\n |> last()\n |> group()\n |> keep(columns: [\"_value\", \"container_name\", \"host\", \"container_status\"])"}],"staticLegend":{},"tableOptions":{"sortBy":"container_name","verticalTimeAxis":true},"timeFormat":"YYYY-MM-DD HH:mm:ss","width":3,"xPos":9,"yPos":6},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Zeek Capture Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekcaptureloss\")\n |> filter(fn: (r) => r[\"_field\"] == \"loss\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekcaptureloss\")\n |> filter(fn: (r) => r[\"_field\"] == \"loss\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","xPos":9,"yCol":"_value","yPos":38},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Stenographer Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"stenodrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":10},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"PCAP Retention","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"pcapage\")\n |> filter(fn: (r) => r[\"_field\"] == \"seconds\")\n |> hostFilter()\n |> map(fn: (r) => ({r with _value: r._value / (24.0 * 60.0 * 60.0)}))\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":" days","width":1,"xPos":11}],"description":"Visualize the Security Onion grid performance metrics and alarm statuses.","name":"Security Onion Performance"}}] \ No newline at end of file +[{"apiVersion":"influxdata.com/v2alpha1","kind":"Dashboard","metadata":{"name":"vivid-wilson-002001"},"spec":{"charts":[{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Uptime","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime\")\n |> hostFilter()\n |> map(fn: (r) => ({r with _value: r._value / (24 * 60 * 60)}))\n |> group(columns: [\"host\"])\n |> last()\n |> lowestMin(n:1)"}],"staticLegend":{},"suffix":" days","width":1},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"},{"id":"z83MTSufTrlrCoEPiBXda","name":"ruby","type":"text","hex":"#BF3D5E","value":1}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Critical Alarms","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> filter(fn: (r) => r[\"_level\"] == \"crit\")\n |> count()"}],"staticLegend":{},"suffix":" ","width":1,"yPos":2},{"colors":[{"id":"base","name":"rainforest","type":"text","hex":"#4ED8A0"},{"id":"QCTYWuGuHkikYFsZSKMzQ","name":"rainforest","type":"text","hex":"#4ED8A0"},{"id":"QdpMyTRBb0LJ56-P5wfAW","name":"laser","type":"text","hex":"#00C9FF","value":1},{"id":"VQGwCoMrxZyP8asiOW5Cq","name":"tiger","type":"text","hex":"#F48D38","value":2},{"id":"zSO9QkesSIxrU_ntCBx2i","name":"ruby","type":"text","hex":"#BF3D5E","value":3}],"fieldOptions":[{"fieldName":"_time","visible":true},{"displayName":"Alarm","fieldName":"_check_name","visible":true},{"displayName":"Severity","fieldName":"_value","visible":true},{"displayName":"Status","fieldName":"_level","visible":true}],"height":6,"kind":"Table","name":"Alarm Status","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> drop(columns: [\"_value\"])\n |> duplicate(column: \"_level\", as: \"_value\")\n |> map(fn: (r) => ({ r with _value: if r._value == \"ok\" then 0 else if r._value == \"info\" then 1 else if r._value == \"warn\" then 2 else 3 }))\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> keep(columns: [\"_check_name\",\"_level\",\"_value\"])"}],"staticLegend":{},"tableOptions":{"sortBy":"_check_name","verticalTimeAxis":true},"timeFormat":"YYYY-MM-DD HH:mm:ss","width":3,"yPos":4},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"B"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Elasticsearch Storage Size","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"store_size_in_bytes\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"mean\")"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"store_size_in_bytes\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":10},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"B"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"InfluxDB Size","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"influxsize\")\n |> filter(fn: (r) => r[\"_field\"] == \"kbytes\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 1000.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"mean\")"},{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"influxsize\")\n |> filter(fn: (r) => r[\"_field\"] == \"kbytes\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 1000.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":14},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":" days"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"System Uptime","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24 * 60 * 60)}))\n |> yield(name: \"last\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24 * 60 * 60)}))\n |> yield(name: \"Trend\")"}],"shade":true,"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":18},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"lQ75rvTyd2Lq5pZjzy6LB","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"KLfpRZtiEnU2GxjPtrrzQ","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"1kLynwKxvJ3B5IeJnrBqp","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Kafka EPS","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_topics\")\n |> filter(fn: (r) => r[\"_field\"] == \"MessagesInPerSec.Count\")\n |> derivative(unit: 1s, nonNegative: true)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_topics\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"MessagesInPerSec.Count\")\r\n |> derivative(unit: 1s, nonNegative: true)\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\r\n |> yield(name: \"trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":22},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"System CPU Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_idle\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: r._value * -1.0 + 100.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_idle\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\",\"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: r._value * -1.0 + 100.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":26},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"QDwChKZWuQV0BaJcEeSam","name":"Atlantis","type":"scale","hex":"#74D495"},{"id":"ThD0WTqKHltQEVlq9mo6K","name":"Atlantis","type":"scale","hex":"#3F3FBA"},{"id":"FBHYZiwDLKyQK3eRfUD-0","name":"Atlantis","type":"scale","hex":"#FF4D9E"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"System Memory Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":30},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Monitor Interface Traffic - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"bytes_recv\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":34},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Management Interface Traffic - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"bytes_recv\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":6,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":38},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Stenographer Packet Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"stenodrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"stenodrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":42},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Disk Usage /","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":46},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"5m Load Average","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"load5\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"width":1,"xPos":1},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"},{"id":"z83MTSufTrlrCoEPiBXda","name":"tiger","type":"text","hex":"#F48D38","value":1}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Warning Alarms","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> filter(fn: (r) => r[\"_level\"] == \"warn\")\n |> count()"}],"staticLegend":{},"suffix":" ","width":1,"xPos":1,"yPos":2},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"IO Wait","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_iowait\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":2},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"},{"id":"z83MTSufTrlrCoEPiBXda","name":"laser","type":"text","hex":"#00C9FF","value":1}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Informative Alarms","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> filter(fn: (r) => r[\"_level\"] == \"info\")\n |> count()"}],"staticLegend":{},"suffix":" ","width":1,"xPos":2,"yPos":2},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Estimated EPS In","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"in\")\n |> hostFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"width":1,"xPos":3},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"pineapple","type":"threshold","hex":"#FFB94A","value":70},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"fire","type":"threshold","hex":"#DC4E58","value":80},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"CPU Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_idle\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> map(fn: (r) => ({r with _value: r._value * -1.0 + 100.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":3,"yPos":2},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"kOQLOg2H4FVEE-E1_L8Kq","name":"laser","type":"threshold","hex":"#00C9FF","value":85},{"id":"5IArg2lDb8KvnphywgUXa","name":"tiger","type":"threshold","hex":"#F48D38","value":90},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"ruby","type":"threshold","hex":"#BF3D5E","value":95},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"Root Disk Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"path\"] == \"/\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":3,"yPos":6},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Suricata Packet Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"suridrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"suridrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","xPos":3,"yCol":"_value","yPos":42},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Redis Queue","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"redisqueue\")\n |> filter(fn: (r) => r[\"_field\"] == \"unparsed\")\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"width":1,"xPos":4},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Elasticsearch Document Count","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"docs_count\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"mean\")"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"docs_count\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":10},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"heightRatio":0.301556420233463,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Redis Queue","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"redisqueue\")\n |> filter(fn: (r) => r[\"_field\"] == \"unparsed\")\n |> group(columns: [\"host\", \"_field\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"redisqueue\")\n |> filter(fn: (r) => r[\"_field\"] == \"unparsed\")\n |> group(columns: [\"host\", \"_field\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.301556420233463,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":14},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":" days"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container Uptime","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_status\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime_ns\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> group(columns: [\"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24 * 60 * 60 * 1000000000)}))\n |> yield(name: \"last\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_status\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime_ns\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> group(columns: [\"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24.0 * 60.0 * 60.0 * 1000000000.0)}))\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":18},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":2,"hoverDimension":"auto","kind":"Single_Stat_Plus_Line","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Kafka Active Controllers","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_controller\")\n |> filter(fn: (r) => r[\"_field\"] == \"ActiveControllerCount.Value\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"current\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_controller\")\n |> filter(fn: (r) => r[\"_field\"] == \"ActiveControllerCount.Value\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":22},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":2,"hoverDimension":"auto","kind":"Single_Stat_Plus_Line","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Kafka Active Brokers","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_controller\")\n |> filter(fn: (r) => r[\"_field\"] == \"ActiveBrokerCount.Value\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"trend\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_controller\")\n |> filter(fn: (r) => r[\"_field\"] == \"ActiveBrokerCount.Value\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"current\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":24},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"yT5vTIlaaFChSrQvKLfqf","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"mzzUVSu3ibTph1JmQmDAQ","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"mOcnDo7l8ii6qNLFIB5rs","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container CPU Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"mean\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":26},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"QDwChKZWuQV0BaJcEeSam","name":"Atlantis","type":"scale","hex":"#74D495"},{"id":"ThD0WTqKHltQEVlq9mo6K","name":"Atlantis","type":"scale","hex":"#3F3FBA"},{"id":"FBHYZiwDLKyQK3eRfUD-0","name":"Atlantis","type":"scale","hex":"#FF4D9E"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container Memory Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"mean\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":30},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b"}],"colorizeRows":true,"colors":[{"id":"0ynR6Zs0wuQ3WY0Lz-_KC","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"YiArehCNBwFm9mn8DSXSG","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"DxByY_EQW9Xs2jD5ktkG5","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container Traffic - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_net\")\n |> filter(fn: (r) => r[\"_field\"] == \"rx_bytes\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"mean\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_net\")\n |> filter(fn: (r) => r[\"_field\"] == \"rx_bytes\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with _value: r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":34},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Disk Usage /nsm","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/nsm\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/nsm\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xPos":4,"yPos":46},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Inbound Traffic","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\") \n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: r._value * 8.0 / (1000.0 * 1000.0)}))\n |> group(columns: [\"host\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> last()\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":" Mb/s","width":1,"xPos":5},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Inbound Drops","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop_in\") \n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: r._value * 8.0 / (1000.0 * 1000.0)}))\n |> group(columns: [\"host\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> last()\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":" Mb/s","width":1,"xPos":6},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"pineapple","type":"threshold","hex":"#FFB94A","value":70},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"fire","type":"threshold","hex":"#DC4E58","value":80},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"Memory Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":6,"yPos":2},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"laser","type":"threshold","hex":"#00C9FF","value":85},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"tiger","type":"threshold","hex":"#F48D38","value":90},{"id":"H7uprvKmMEh39en6X-ms_","name":"ruby","type":"threshold","hex":"#BF3D5E","value":95},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"NSM Disk Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"path\"] == \"/nsm\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":6,"yPos":6},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Management Interface Traffic - Outbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_sent\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n \n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"bytes_sent\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_sent\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n \n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":6,"widthRatio":1,"xCol":"_time","xPos":6,"yCol":"_value","yPos":38},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Zeek Packet Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekdrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekdrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","xPos":6,"yCol":"_value","yPos":42},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Capture Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekcaptureloss\")\n |> filter(fn: (r) => r[\"_field\"] == \"loss\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":7},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Zeek Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekdrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":8},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"s"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"heightRatio":0.301556420233463,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Elastic Ingest Time Spent","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_community_id_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"community.id_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_conditional_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"conditional_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_date_index_name_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"date.index.name_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_date_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"date_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_dissect_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"dissect_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_dot_expander_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"dot.expander_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_geoip_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"geoip_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_grok_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"grok_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_json_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"json_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_kv_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"kv_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_lowercase_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"lowercase_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_rename_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"rename_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_script_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"script_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_user_agent_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"user.agent_time\")"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.301556420233463,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":10},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"1m Load Average","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"load1\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"load1\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\",\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":14,"yTickStep":1},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":" e/s"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"heightRatio":0.301556420233463,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Logstash EPS","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"in\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"out\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: -r._value}))\n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"in\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"out\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: -r._value}))\n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.301556420233463,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":18},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":4,"hoverDimension":"auto","kind":"Single_Stat_Plus_Line","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Kafka Under Replicated Partitions","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_partition\")\n |> filter(fn: (r) => r[\"_field\"] == \"UnderReplicatedPartitions\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_partition\")\n |> filter(fn: (r) => r[\"_field\"] == \"UnderReplicatedPartitions\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":22},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"UAehjIsi65P8u92M_3sQY","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"_SCP8Npp4NVMx2N4mfuzX","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"BoMPg4R1KDp_UsRORdV3_","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"IO Wait","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_iowait\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_iowait\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":26},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"QDwChKZWuQV0BaJcEeSam","name":"Atlantis","type":"scale","hex":"#74D495"},{"id":"ThD0WTqKHltQEVlq9mo6K","name":"Atlantis","type":"scale","hex":"#3F3FBA"},{"id":"FBHYZiwDLKyQK3eRfUD-0","name":"Atlantis","type":"scale","hex":"#FF4D9E"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Swap Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"swap\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"swap\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":30},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Monitor Interface Drops - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop_in\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"drop_in\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop_in\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":34},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":" days"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Stenographer PCAP Retention","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"pcapage\")\n |> filter(fn: (r) => r[\"_field\"] == \"seconds\")\n |> map(fn: (r) => ({ r with _value: r._value / (24.0 * 3600.0)}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])"},{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"pcapage\")\n |> filter(fn: (r) => r[\"_field\"] == \"seconds\")\n |> map(fn: (r) => ({ r with _value: r._value / (24.0 * 3600.0)}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":46},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Suricata Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"suridrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":9},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"pineapple","type":"threshold","hex":"#FFB94A","value":50},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"fire","type":"threshold","hex":"#DC4E58","value":70},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"Swap Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"swap\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":9,"yPos":2},{"colors":[{"id":"base","name":"white","type":"text","hex":"#ffffff"}],"fieldOptions":[{"displayName":"Host","fieldName":"host","visible":true},{"displayName":"Name","fieldName":"container_name","visible":true},{"displayName":"Status","fieldName":"container_status","visible":true},{"displayName":"OOM Killed","fieldName":"_value","visible":true},{"displayName":"_start","fieldName":"_start","visible":true},{"displayName":"_stop","fieldName":"_stop","visible":true},{"displayName":"_time","fieldName":"_time","visible":true},{"displayName":"_field","fieldName":"_field","visible":true},{"displayName":"_measurement","fieldName":"_measurement","visible":true},{"displayName":"engine_host","fieldName":"engine_host","visible":true},{"displayName":"role","fieldName":"role","visible":true},{"displayName":"server_version","fieldName":"server_version","visible":true},{"displayName":"container_image","fieldName":"container_image","visible":true},{"displayName":"container_version","fieldName":"container_version","visible":true},{"displayName":"description","fieldName":"description","visible":true},{"displayName":"maintainer","fieldName":"maintainer","visible":true},{"displayName":"io.k8s.description","fieldName":"io.k8s.description","visible":true},{"displayName":"io.k8s.display-name","fieldName":"io.k8s.display-name","visible":true},{"displayName":"license","fieldName":"license","visible":true},{"displayName":"name","fieldName":"name","visible":true},{"displayName":"org.label-schema.build-date","fieldName":"org.label-schema.build-date","visible":true},{"displayName":"org.label-schema.license","fieldName":"org.label-schema.license","visible":true},{"displayName":"org.label-schema.name","fieldName":"org.label-schema.name","visible":true},{"displayName":"org.label-schema.schema-version","fieldName":"org.label-schema.schema-version","visible":true},{"displayName":"org.label-schema.url","fieldName":"org.label-schema.url","visible":true},{"displayName":"org.label-schema.vcs-ref","fieldName":"org.label-schema.vcs-ref","visible":true},{"displayName":"org.label-schema.vcs-url","fieldName":"org.label-schema.vcs-url","visible":true},{"displayName":"org.label-schema.vendor","fieldName":"org.label-schema.vendor","visible":true},{"displayName":"org.label-schema.version","fieldName":"org.label-schema.version","visible":true},{"displayName":"org.opencontainers.image.created","fieldName":"org.opencontainers.image.created","visible":true},{"displayName":"org.opencontainers.image.licenses","fieldName":"org.opencontainers.image.licenses","visible":true},{"displayName":"org.opencontainers.image.title","fieldName":"org.opencontainers.image.title","visible":true},{"displayName":"org.opencontainers.image.vendor","fieldName":"org.opencontainers.image.vendor","visible":true},{"displayName":"release","fieldName":"release","visible":true},{"displayName":"summary","fieldName":"summary","visible":true},{"displayName":"url","fieldName":"url","visible":true},{"displayName":"vendor","fieldName":"vendor","visible":true},{"displayName":"version","fieldName":"version","visible":true},{"displayName":"org.label-schema.usage","fieldName":"org.label-schema.usage","visible":true},{"displayName":"org.opencontainers.image.documentation","fieldName":"org.opencontainers.image.documentation","visible":true},{"displayName":"org.opencontainers.image.revision","fieldName":"org.opencontainers.image.revision","visible":true},{"displayName":"org.opencontainers.image.source","fieldName":"org.opencontainers.image.source","visible":true},{"displayName":"org.opencontainers.image.url","fieldName":"org.opencontainers.image.url","visible":true},{"displayName":"org.opencontainers.image.version","fieldName":"org.opencontainers.image.version","visible":true},{"displayName":"org.opencontainers.image.description","fieldName":"org.opencontainers.image.description","visible":true}],"height":4,"kind":"Table","name":"Most Recent Container Events","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_status\")\n |> filter(fn: (r) => r[\"_field\"] == \"oomkilled\")\n |> filter(fn: (r) => r[\"container_status\"] != \"running\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"container_name\", \"host\"])\n |> last()\n |> group()\n |> keep(columns: [\"_value\", \"container_name\", \"host\", \"container_status\"])"}],"staticLegend":{},"tableOptions":{"sortBy":"container_name","verticalTimeAxis":true},"timeFormat":"YYYY-MM-DD HH:mm:ss","width":3,"xPos":9,"yPos":6},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Zeek Capture Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekcaptureloss\")\n |> filter(fn: (r) => r[\"_field\"] == \"loss\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekcaptureloss\")\n |> filter(fn: (r) => r[\"_field\"] == \"loss\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","xPos":9,"yCol":"_value","yPos":42},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Stenographer Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"stenodrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":10},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"PCAP Retention","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"pcapage\")\n |> filter(fn: (r) => r[\"_field\"] == \"seconds\")\n |> hostFilter()\n |> map(fn: (r) => ({r with _value: r._value / (24.0 * 60.0 * 60.0)}))\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":" days","width":1,"xPos":11}],"description":"Visualize the Security Onion grid performance metrics and alarm statuses.","name":"Security Onion Performance edit"}}] \ No newline at end of file From 1c1a1a1d3fc0138b3df81c19d61e80a9f4f62ec3 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 28 May 2024 11:14:19 -0400 Subject: [PATCH 102/507] Remove unneeded jolokia aggregate metrics to reduce data ingested to influx Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/telegraf/etc/telegraf.conf | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/salt/telegraf/etc/telegraf.conf b/salt/telegraf/etc/telegraf.conf index 1e8d9d3fe..ecfb0730a 100644 --- a/salt/telegraf/etc/telegraf.conf +++ b/salt/telegraf/etc/telegraf.conf @@ -247,6 +247,25 @@ [[inputs.jolokia2_agent]] name_prefix= "kafka_" urls = ["http://localhost:8778/jolokia"] + fieldexclude = [ + "*.EventType", + "*.FifteenMinuteRate", + "*.FiveMinuteRate", + "*.MeanRate", + "*.OneMinuteRate", + "*.RateUnit", + "*.LatencyUnit", + "*.50thPercentile", + "*.75thPercentile", + "*.95thPercentile", + "*.98thPercentile", + "*.99thPercentile", + "*.999thPercentile", + "*.Min", + "*.Mean", + "*.Max", + "*.StdDev" + ] [[inputs.jolokia2_agent.metric]] name = "topics" From 0d7c331ff0e99e5148a7e6c589eaa386ce0e05d2 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 28 May 2024 11:29:38 -0400 Subject: [PATCH 103/507] only show specific fields when hovering over Kafka influxdb panels Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- .../templates/dashboard-security_onion_performance.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/influxdb/templates/dashboard-security_onion_performance.json b/salt/influxdb/templates/dashboard-security_onion_performance.json index 05eb9de99..831f8eb16 100644 --- a/salt/influxdb/templates/dashboard-security_onion_performance.json +++ b/salt/influxdb/templates/dashboard-security_onion_performance.json @@ -1 +1 @@ -[{"apiVersion":"influxdata.com/v2alpha1","kind":"Dashboard","metadata":{"name":"vivid-wilson-002001"},"spec":{"charts":[{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Uptime","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime\")\n |> hostFilter()\n |> map(fn: (r) => ({r with _value: r._value / (24 * 60 * 60)}))\n |> group(columns: [\"host\"])\n |> last()\n |> lowestMin(n:1)"}],"staticLegend":{},"suffix":" days","width":1},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"},{"id":"z83MTSufTrlrCoEPiBXda","name":"ruby","type":"text","hex":"#BF3D5E","value":1}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Critical Alarms","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> filter(fn: (r) => r[\"_level\"] == \"crit\")\n |> count()"}],"staticLegend":{},"suffix":" ","width":1,"yPos":2},{"colors":[{"id":"base","name":"rainforest","type":"text","hex":"#4ED8A0"},{"id":"QCTYWuGuHkikYFsZSKMzQ","name":"rainforest","type":"text","hex":"#4ED8A0"},{"id":"QdpMyTRBb0LJ56-P5wfAW","name":"laser","type":"text","hex":"#00C9FF","value":1},{"id":"VQGwCoMrxZyP8asiOW5Cq","name":"tiger","type":"text","hex":"#F48D38","value":2},{"id":"zSO9QkesSIxrU_ntCBx2i","name":"ruby","type":"text","hex":"#BF3D5E","value":3}],"fieldOptions":[{"fieldName":"_time","visible":true},{"displayName":"Alarm","fieldName":"_check_name","visible":true},{"displayName":"Severity","fieldName":"_value","visible":true},{"displayName":"Status","fieldName":"_level","visible":true}],"height":6,"kind":"Table","name":"Alarm Status","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> drop(columns: [\"_value\"])\n |> duplicate(column: \"_level\", as: \"_value\")\n |> map(fn: (r) => ({ r with _value: if r._value == \"ok\" then 0 else if r._value == \"info\" then 1 else if r._value == \"warn\" then 2 else 3 }))\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> keep(columns: [\"_check_name\",\"_level\",\"_value\"])"}],"staticLegend":{},"tableOptions":{"sortBy":"_check_name","verticalTimeAxis":true},"timeFormat":"YYYY-MM-DD HH:mm:ss","width":3,"yPos":4},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"B"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Elasticsearch Storage Size","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"store_size_in_bytes\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"mean\")"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"store_size_in_bytes\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":10},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"B"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"InfluxDB Size","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"influxsize\")\n |> filter(fn: (r) => r[\"_field\"] == \"kbytes\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 1000.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"mean\")"},{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"influxsize\")\n |> filter(fn: (r) => r[\"_field\"] == \"kbytes\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 1000.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":14},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":" days"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"System Uptime","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24 * 60 * 60)}))\n |> yield(name: \"last\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24 * 60 * 60)}))\n |> yield(name: \"Trend\")"}],"shade":true,"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":18},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"lQ75rvTyd2Lq5pZjzy6LB","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"KLfpRZtiEnU2GxjPtrrzQ","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"1kLynwKxvJ3B5IeJnrBqp","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Kafka EPS","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_topics\")\n |> filter(fn: (r) => r[\"_field\"] == \"MessagesInPerSec.Count\")\n |> derivative(unit: 1s, nonNegative: true)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_topics\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"MessagesInPerSec.Count\")\r\n |> derivative(unit: 1s, nonNegative: true)\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\r\n |> yield(name: \"trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":22},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"System CPU Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_idle\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: r._value * -1.0 + 100.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_idle\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\",\"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: r._value * -1.0 + 100.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":26},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"QDwChKZWuQV0BaJcEeSam","name":"Atlantis","type":"scale","hex":"#74D495"},{"id":"ThD0WTqKHltQEVlq9mo6K","name":"Atlantis","type":"scale","hex":"#3F3FBA"},{"id":"FBHYZiwDLKyQK3eRfUD-0","name":"Atlantis","type":"scale","hex":"#FF4D9E"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"System Memory Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":30},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Monitor Interface Traffic - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"bytes_recv\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":34},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Management Interface Traffic - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"bytes_recv\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":6,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":38},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Stenographer Packet Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"stenodrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"stenodrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":42},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Disk Usage /","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":46},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"5m Load Average","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"load5\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"width":1,"xPos":1},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"},{"id":"z83MTSufTrlrCoEPiBXda","name":"tiger","type":"text","hex":"#F48D38","value":1}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Warning Alarms","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> filter(fn: (r) => r[\"_level\"] == \"warn\")\n |> count()"}],"staticLegend":{},"suffix":" ","width":1,"xPos":1,"yPos":2},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"IO Wait","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_iowait\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":2},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"},{"id":"z83MTSufTrlrCoEPiBXda","name":"laser","type":"text","hex":"#00C9FF","value":1}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Informative Alarms","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> filter(fn: (r) => r[\"_level\"] == \"info\")\n |> count()"}],"staticLegend":{},"suffix":" ","width":1,"xPos":2,"yPos":2},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Estimated EPS In","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"in\")\n |> hostFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"width":1,"xPos":3},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"pineapple","type":"threshold","hex":"#FFB94A","value":70},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"fire","type":"threshold","hex":"#DC4E58","value":80},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"CPU Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_idle\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> map(fn: (r) => ({r with _value: r._value * -1.0 + 100.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":3,"yPos":2},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"kOQLOg2H4FVEE-E1_L8Kq","name":"laser","type":"threshold","hex":"#00C9FF","value":85},{"id":"5IArg2lDb8KvnphywgUXa","name":"tiger","type":"threshold","hex":"#F48D38","value":90},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"ruby","type":"threshold","hex":"#BF3D5E","value":95},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"Root Disk Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"path\"] == \"/\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":3,"yPos":6},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Suricata Packet Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"suridrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"suridrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","xPos":3,"yCol":"_value","yPos":42},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Redis Queue","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"redisqueue\")\n |> filter(fn: (r) => r[\"_field\"] == \"unparsed\")\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"width":1,"xPos":4},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Elasticsearch Document Count","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"docs_count\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"mean\")"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"docs_count\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":10},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"heightRatio":0.301556420233463,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Redis Queue","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"redisqueue\")\n |> filter(fn: (r) => r[\"_field\"] == \"unparsed\")\n |> group(columns: [\"host\", \"_field\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"redisqueue\")\n |> filter(fn: (r) => r[\"_field\"] == \"unparsed\")\n |> group(columns: [\"host\", \"_field\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.301556420233463,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":14},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":" days"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container Uptime","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_status\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime_ns\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> group(columns: [\"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24 * 60 * 60 * 1000000000)}))\n |> yield(name: \"last\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_status\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime_ns\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> group(columns: [\"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24.0 * 60.0 * 60.0 * 1000000000.0)}))\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":18},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":2,"hoverDimension":"auto","kind":"Single_Stat_Plus_Line","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Kafka Active Controllers","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_controller\")\n |> filter(fn: (r) => r[\"_field\"] == \"ActiveControllerCount.Value\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"current\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_controller\")\n |> filter(fn: (r) => r[\"_field\"] == \"ActiveControllerCount.Value\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":22},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":2,"hoverDimension":"auto","kind":"Single_Stat_Plus_Line","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Kafka Active Brokers","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_controller\")\n |> filter(fn: (r) => r[\"_field\"] == \"ActiveBrokerCount.Value\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"trend\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_controller\")\n |> filter(fn: (r) => r[\"_field\"] == \"ActiveBrokerCount.Value\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"current\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":24},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"yT5vTIlaaFChSrQvKLfqf","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"mzzUVSu3ibTph1JmQmDAQ","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"mOcnDo7l8ii6qNLFIB5rs","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container CPU Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"mean\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":26},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"QDwChKZWuQV0BaJcEeSam","name":"Atlantis","type":"scale","hex":"#74D495"},{"id":"ThD0WTqKHltQEVlq9mo6K","name":"Atlantis","type":"scale","hex":"#3F3FBA"},{"id":"FBHYZiwDLKyQK3eRfUD-0","name":"Atlantis","type":"scale","hex":"#FF4D9E"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container Memory Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"mean\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":30},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b"}],"colorizeRows":true,"colors":[{"id":"0ynR6Zs0wuQ3WY0Lz-_KC","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"YiArehCNBwFm9mn8DSXSG","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"DxByY_EQW9Xs2jD5ktkG5","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container Traffic - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_net\")\n |> filter(fn: (r) => r[\"_field\"] == \"rx_bytes\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"mean\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_net\")\n |> filter(fn: (r) => r[\"_field\"] == \"rx_bytes\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with _value: r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":34},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Disk Usage /nsm","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/nsm\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/nsm\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xPos":4,"yPos":46},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Inbound Traffic","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\") \n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: r._value * 8.0 / (1000.0 * 1000.0)}))\n |> group(columns: [\"host\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> last()\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":" Mb/s","width":1,"xPos":5},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Inbound Drops","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop_in\") \n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: r._value * 8.0 / (1000.0 * 1000.0)}))\n |> group(columns: [\"host\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> last()\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":" Mb/s","width":1,"xPos":6},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"pineapple","type":"threshold","hex":"#FFB94A","value":70},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"fire","type":"threshold","hex":"#DC4E58","value":80},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"Memory Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":6,"yPos":2},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"laser","type":"threshold","hex":"#00C9FF","value":85},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"tiger","type":"threshold","hex":"#F48D38","value":90},{"id":"H7uprvKmMEh39en6X-ms_","name":"ruby","type":"threshold","hex":"#BF3D5E","value":95},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"NSM Disk Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"path\"] == \"/nsm\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":6,"yPos":6},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Management Interface Traffic - Outbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_sent\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n \n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"bytes_sent\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_sent\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n \n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":6,"widthRatio":1,"xCol":"_time","xPos":6,"yCol":"_value","yPos":38},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Zeek Packet Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekdrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekdrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","xPos":6,"yCol":"_value","yPos":42},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Capture Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekcaptureloss\")\n |> filter(fn: (r) => r[\"_field\"] == \"loss\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":7},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Zeek Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekdrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":8},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"s"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"heightRatio":0.301556420233463,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Elastic Ingest Time Spent","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_community_id_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"community.id_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_conditional_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"conditional_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_date_index_name_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"date.index.name_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_date_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"date_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_dissect_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"dissect_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_dot_expander_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"dot.expander_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_geoip_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"geoip_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_grok_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"grok_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_json_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"json_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_kv_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"kv_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_lowercase_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"lowercase_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_rename_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"rename_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_script_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"script_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_user_agent_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"user.agent_time\")"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.301556420233463,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":10},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"1m Load Average","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"load1\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"load1\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\",\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":14,"yTickStep":1},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":" e/s"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"heightRatio":0.301556420233463,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Logstash EPS","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"in\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"out\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: -r._value}))\n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"in\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"out\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: -r._value}))\n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.301556420233463,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":18},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":4,"hoverDimension":"auto","kind":"Single_Stat_Plus_Line","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Kafka Under Replicated Partitions","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_partition\")\n |> filter(fn: (r) => r[\"_field\"] == \"UnderReplicatedPartitions\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_partition\")\n |> filter(fn: (r) => r[\"_field\"] == \"UnderReplicatedPartitions\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":22},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"UAehjIsi65P8u92M_3sQY","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"_SCP8Npp4NVMx2N4mfuzX","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"BoMPg4R1KDp_UsRORdV3_","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"IO Wait","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_iowait\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_iowait\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":26},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"QDwChKZWuQV0BaJcEeSam","name":"Atlantis","type":"scale","hex":"#74D495"},{"id":"ThD0WTqKHltQEVlq9mo6K","name":"Atlantis","type":"scale","hex":"#3F3FBA"},{"id":"FBHYZiwDLKyQK3eRfUD-0","name":"Atlantis","type":"scale","hex":"#FF4D9E"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Swap Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"swap\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"swap\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":30},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Monitor Interface Drops - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop_in\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"drop_in\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop_in\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":34},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":" days"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Stenographer PCAP Retention","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"pcapage\")\n |> filter(fn: (r) => r[\"_field\"] == \"seconds\")\n |> map(fn: (r) => ({ r with _value: r._value / (24.0 * 3600.0)}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])"},{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"pcapage\")\n |> filter(fn: (r) => r[\"_field\"] == \"seconds\")\n |> map(fn: (r) => ({ r with _value: r._value / (24.0 * 3600.0)}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":46},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Suricata Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"suridrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":9},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"pineapple","type":"threshold","hex":"#FFB94A","value":50},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"fire","type":"threshold","hex":"#DC4E58","value":70},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"Swap Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"swap\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":9,"yPos":2},{"colors":[{"id":"base","name":"white","type":"text","hex":"#ffffff"}],"fieldOptions":[{"displayName":"Host","fieldName":"host","visible":true},{"displayName":"Name","fieldName":"container_name","visible":true},{"displayName":"Status","fieldName":"container_status","visible":true},{"displayName":"OOM Killed","fieldName":"_value","visible":true},{"displayName":"_start","fieldName":"_start","visible":true},{"displayName":"_stop","fieldName":"_stop","visible":true},{"displayName":"_time","fieldName":"_time","visible":true},{"displayName":"_field","fieldName":"_field","visible":true},{"displayName":"_measurement","fieldName":"_measurement","visible":true},{"displayName":"engine_host","fieldName":"engine_host","visible":true},{"displayName":"role","fieldName":"role","visible":true},{"displayName":"server_version","fieldName":"server_version","visible":true},{"displayName":"container_image","fieldName":"container_image","visible":true},{"displayName":"container_version","fieldName":"container_version","visible":true},{"displayName":"description","fieldName":"description","visible":true},{"displayName":"maintainer","fieldName":"maintainer","visible":true},{"displayName":"io.k8s.description","fieldName":"io.k8s.description","visible":true},{"displayName":"io.k8s.display-name","fieldName":"io.k8s.display-name","visible":true},{"displayName":"license","fieldName":"license","visible":true},{"displayName":"name","fieldName":"name","visible":true},{"displayName":"org.label-schema.build-date","fieldName":"org.label-schema.build-date","visible":true},{"displayName":"org.label-schema.license","fieldName":"org.label-schema.license","visible":true},{"displayName":"org.label-schema.name","fieldName":"org.label-schema.name","visible":true},{"displayName":"org.label-schema.schema-version","fieldName":"org.label-schema.schema-version","visible":true},{"displayName":"org.label-schema.url","fieldName":"org.label-schema.url","visible":true},{"displayName":"org.label-schema.vcs-ref","fieldName":"org.label-schema.vcs-ref","visible":true},{"displayName":"org.label-schema.vcs-url","fieldName":"org.label-schema.vcs-url","visible":true},{"displayName":"org.label-schema.vendor","fieldName":"org.label-schema.vendor","visible":true},{"displayName":"org.label-schema.version","fieldName":"org.label-schema.version","visible":true},{"displayName":"org.opencontainers.image.created","fieldName":"org.opencontainers.image.created","visible":true},{"displayName":"org.opencontainers.image.licenses","fieldName":"org.opencontainers.image.licenses","visible":true},{"displayName":"org.opencontainers.image.title","fieldName":"org.opencontainers.image.title","visible":true},{"displayName":"org.opencontainers.image.vendor","fieldName":"org.opencontainers.image.vendor","visible":true},{"displayName":"release","fieldName":"release","visible":true},{"displayName":"summary","fieldName":"summary","visible":true},{"displayName":"url","fieldName":"url","visible":true},{"displayName":"vendor","fieldName":"vendor","visible":true},{"displayName":"version","fieldName":"version","visible":true},{"displayName":"org.label-schema.usage","fieldName":"org.label-schema.usage","visible":true},{"displayName":"org.opencontainers.image.documentation","fieldName":"org.opencontainers.image.documentation","visible":true},{"displayName":"org.opencontainers.image.revision","fieldName":"org.opencontainers.image.revision","visible":true},{"displayName":"org.opencontainers.image.source","fieldName":"org.opencontainers.image.source","visible":true},{"displayName":"org.opencontainers.image.url","fieldName":"org.opencontainers.image.url","visible":true},{"displayName":"org.opencontainers.image.version","fieldName":"org.opencontainers.image.version","visible":true},{"displayName":"org.opencontainers.image.description","fieldName":"org.opencontainers.image.description","visible":true}],"height":4,"kind":"Table","name":"Most Recent Container Events","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_status\")\n |> filter(fn: (r) => r[\"_field\"] == \"oomkilled\")\n |> filter(fn: (r) => r[\"container_status\"] != \"running\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"container_name\", \"host\"])\n |> last()\n |> group()\n |> keep(columns: [\"_value\", \"container_name\", \"host\", \"container_status\"])"}],"staticLegend":{},"tableOptions":{"sortBy":"container_name","verticalTimeAxis":true},"timeFormat":"YYYY-MM-DD HH:mm:ss","width":3,"xPos":9,"yPos":6},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Zeek Capture Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekcaptureloss\")\n |> filter(fn: (r) => r[\"_field\"] == \"loss\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekcaptureloss\")\n |> filter(fn: (r) => r[\"_field\"] == \"loss\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","xPos":9,"yCol":"_value","yPos":42},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Stenographer Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"stenodrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":10},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"PCAP Retention","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"pcapage\")\n |> filter(fn: (r) => r[\"_field\"] == \"seconds\")\n |> hostFilter()\n |> map(fn: (r) => ({r with _value: r._value / (24.0 * 60.0 * 60.0)}))\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":" days","width":1,"xPos":11}],"description":"Visualize the Security Onion grid performance metrics and alarm statuses.","name":"Security Onion Performance edit"}}] \ No newline at end of file +[{"apiVersion":"influxdata.com/v2alpha1","kind":"Dashboard","metadata":{"name":"vivid-wilson-002001"},"spec":{"charts":[{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Uptime","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime\")\n |> hostFilter()\n |> map(fn: (r) => ({r with _value: r._value / (24 * 60 * 60)}))\n |> group(columns: [\"host\"])\n |> last()\n |> lowestMin(n:1)"}],"staticLegend":{},"suffix":" days","width":1},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"},{"id":"z83MTSufTrlrCoEPiBXda","name":"ruby","type":"text","hex":"#BF3D5E","value":1}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Critical Alarms","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> filter(fn: (r) => r[\"_level\"] == \"crit\")\n |> count()"}],"staticLegend":{},"suffix":" ","width":1,"yPos":2},{"colors":[{"id":"base","name":"rainforest","type":"text","hex":"#4ED8A0"},{"id":"QCTYWuGuHkikYFsZSKMzQ","name":"rainforest","type":"text","hex":"#4ED8A0"},{"id":"QdpMyTRBb0LJ56-P5wfAW","name":"laser","type":"text","hex":"#00C9FF","value":1},{"id":"VQGwCoMrxZyP8asiOW5Cq","name":"tiger","type":"text","hex":"#F48D38","value":2},{"id":"zSO9QkesSIxrU_ntCBx2i","name":"ruby","type":"text","hex":"#BF3D5E","value":3}],"fieldOptions":[{"fieldName":"_time","visible":true},{"displayName":"Alarm","fieldName":"_check_name","visible":true},{"displayName":"Severity","fieldName":"_value","visible":true},{"displayName":"Status","fieldName":"_level","visible":true}],"height":6,"kind":"Table","name":"Alarm Status","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> drop(columns: [\"_value\"])\n |> duplicate(column: \"_level\", as: \"_value\")\n |> map(fn: (r) => ({ r with _value: if r._value == \"ok\" then 0 else if r._value == \"info\" then 1 else if r._value == \"warn\" then 2 else 3 }))\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> keep(columns: [\"_check_name\",\"_level\",\"_value\"])"}],"staticLegend":{},"tableOptions":{"sortBy":"_check_name","verticalTimeAxis":true},"timeFormat":"YYYY-MM-DD HH:mm:ss","width":3,"yPos":4},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"B"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Elasticsearch Storage Size","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"store_size_in_bytes\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"mean\")"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"store_size_in_bytes\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":10},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"B"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"InfluxDB Size","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"influxsize\")\n |> filter(fn: (r) => r[\"_field\"] == \"kbytes\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 1000.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"mean\")"},{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"influxsize\")\n |> filter(fn: (r) => r[\"_field\"] == \"kbytes\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 1000.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":14},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":" days"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"System Uptime","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24 * 60 * 60)}))\n |> yield(name: \"last\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24 * 60 * 60)}))\n |> yield(name: \"Trend\")"}],"shade":true,"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":18},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"lQ75rvTyd2Lq5pZjzy6LB","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"KLfpRZtiEnU2GxjPtrrzQ","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"1kLynwKxvJ3B5IeJnrBqp","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Kafka EPS","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_topics\")\n |> filter(fn: (r) => r[\"_field\"] == \"MessagesInPerSec.Count\")\n |> derivative(unit: 1s, nonNegative: true)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_topics\")\n |> filter(fn: (r) => r[\"_field\"] == \"MessagesInPerSec.Count\")\n |> derivative(unit: 1s, nonNegative: true)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":22},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"System CPU Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_idle\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: r._value * -1.0 + 100.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_idle\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\",\"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: r._value * -1.0 + 100.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":26},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"QDwChKZWuQV0BaJcEeSam","name":"Atlantis","type":"scale","hex":"#74D495"},{"id":"ThD0WTqKHltQEVlq9mo6K","name":"Atlantis","type":"scale","hex":"#3F3FBA"},{"id":"FBHYZiwDLKyQK3eRfUD-0","name":"Atlantis","type":"scale","hex":"#FF4D9E"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"System Memory Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":30},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Monitor Interface Traffic - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"bytes_recv\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":34},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Management Interface Traffic - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"bytes_recv\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":6,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":38},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Stenographer Packet Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"stenodrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"stenodrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":42},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Disk Usage /","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":46},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"5m Load Average","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"load5\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"width":1,"xPos":1},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"},{"id":"z83MTSufTrlrCoEPiBXda","name":"tiger","type":"text","hex":"#F48D38","value":1}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Warning Alarms","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> filter(fn: (r) => r[\"_level\"] == \"warn\")\n |> count()"}],"staticLegend":{},"suffix":" ","width":1,"xPos":1,"yPos":2},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"IO Wait","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_iowait\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":2},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"},{"id":"z83MTSufTrlrCoEPiBXda","name":"laser","type":"text","hex":"#00C9FF","value":1}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Informative Alarms","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> filter(fn: (r) => r[\"_level\"] == \"info\")\n |> count()"}],"staticLegend":{},"suffix":" ","width":1,"xPos":2,"yPos":2},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Estimated EPS In","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"in\")\n |> hostFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"width":1,"xPos":3},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"pineapple","type":"threshold","hex":"#FFB94A","value":70},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"fire","type":"threshold","hex":"#DC4E58","value":80},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"CPU Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_idle\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> map(fn: (r) => ({r with _value: r._value * -1.0 + 100.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":3,"yPos":2},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"kOQLOg2H4FVEE-E1_L8Kq","name":"laser","type":"threshold","hex":"#00C9FF","value":85},{"id":"5IArg2lDb8KvnphywgUXa","name":"tiger","type":"threshold","hex":"#F48D38","value":90},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"ruby","type":"threshold","hex":"#BF3D5E","value":95},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"Root Disk Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"path\"] == \"/\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":3,"yPos":6},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Suricata Packet Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"suridrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"suridrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","xPos":3,"yCol":"_value","yPos":42},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Redis Queue","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"redisqueue\")\n |> filter(fn: (r) => r[\"_field\"] == \"unparsed\")\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"width":1,"xPos":4},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Elasticsearch Document Count","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"docs_count\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"mean\")"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"docs_count\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":10},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"heightRatio":0.301556420233463,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Redis Queue","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"redisqueue\")\n |> filter(fn: (r) => r[\"_field\"] == \"unparsed\")\n |> group(columns: [\"host\", \"_field\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"redisqueue\")\n |> filter(fn: (r) => r[\"_field\"] == \"unparsed\")\n |> group(columns: [\"host\", \"_field\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.301556420233463,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":14},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":" days"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container Uptime","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_status\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime_ns\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> group(columns: [\"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24 * 60 * 60 * 1000000000)}))\n |> yield(name: \"last\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_status\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime_ns\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> group(columns: [\"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24.0 * 60.0 * 60.0 * 1000000000.0)}))\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":18},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":2,"hoverDimension":"auto","kind":"Single_Stat_Plus_Line","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Kafka Active Controllers","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_controller\")\n |> filter(fn: (r) => r[\"_field\"] == \"ActiveControllerCount.Value\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"current\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_controller\")\n |> filter(fn: (r) => r[\"_field\"] == \"ActiveControllerCount.Value\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":22},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":2,"hoverDimension":"auto","kind":"Single_Stat_Plus_Line","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Kafka Active Brokers","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_controller\")\n |> filter(fn: (r) => r[\"_field\"] == \"ActiveBrokerCount.Value\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"trend\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_controller\")\n |> filter(fn: (r) => r[\"_field\"] == \"ActiveBrokerCount.Value\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"current\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":24},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"yT5vTIlaaFChSrQvKLfqf","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"mzzUVSu3ibTph1JmQmDAQ","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"mOcnDo7l8ii6qNLFIB5rs","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container CPU Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"mean\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":26},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"QDwChKZWuQV0BaJcEeSam","name":"Atlantis","type":"scale","hex":"#74D495"},{"id":"ThD0WTqKHltQEVlq9mo6K","name":"Atlantis","type":"scale","hex":"#3F3FBA"},{"id":"FBHYZiwDLKyQK3eRfUD-0","name":"Atlantis","type":"scale","hex":"#FF4D9E"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container Memory Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"mean\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":30},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b"}],"colorizeRows":true,"colors":[{"id":"0ynR6Zs0wuQ3WY0Lz-_KC","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"YiArehCNBwFm9mn8DSXSG","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"DxByY_EQW9Xs2jD5ktkG5","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container Traffic - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_net\")\n |> filter(fn: (r) => r[\"_field\"] == \"rx_bytes\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"mean\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_net\")\n |> filter(fn: (r) => r[\"_field\"] == \"rx_bytes\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with _value: r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":34},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Disk Usage /nsm","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/nsm\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/nsm\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xPos":4,"yPos":46},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Inbound Traffic","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\") \n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: r._value * 8.0 / (1000.0 * 1000.0)}))\n |> group(columns: [\"host\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> last()\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":" Mb/s","width":1,"xPos":5},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Inbound Drops","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop_in\") \n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: r._value * 8.0 / (1000.0 * 1000.0)}))\n |> group(columns: [\"host\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> last()\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":" Mb/s","width":1,"xPos":6},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"pineapple","type":"threshold","hex":"#FFB94A","value":70},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"fire","type":"threshold","hex":"#DC4E58","value":80},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"Memory Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":6,"yPos":2},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"laser","type":"threshold","hex":"#00C9FF","value":85},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"tiger","type":"threshold","hex":"#F48D38","value":90},{"id":"H7uprvKmMEh39en6X-ms_","name":"ruby","type":"threshold","hex":"#BF3D5E","value":95},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"NSM Disk Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"path\"] == \"/nsm\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":6,"yPos":6},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Management Interface Traffic - Outbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_sent\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n \n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"bytes_sent\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_sent\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n \n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":6,"widthRatio":1,"xCol":"_time","xPos":6,"yCol":"_value","yPos":38},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Zeek Packet Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekdrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekdrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","xPos":6,"yCol":"_value","yPos":42},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Capture Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekcaptureloss\")\n |> filter(fn: (r) => r[\"_field\"] == \"loss\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":7},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Zeek Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekdrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":8},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"s"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"heightRatio":0.301556420233463,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Elastic Ingest Time Spent","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_community_id_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"community.id_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_conditional_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"conditional_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_date_index_name_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"date.index.name_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_date_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"date_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_dissect_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"dissect_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_dot_expander_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"dot.expander_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_geoip_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"geoip_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_grok_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"grok_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_json_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"json_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_kv_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"kv_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_lowercase_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"lowercase_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_rename_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"rename_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_script_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"script_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_user_agent_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"user.agent_time\")"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.301556420233463,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":10},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"1m Load Average","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"load1\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"load1\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\",\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":14,"yTickStep":1},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":" e/s"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"heightRatio":0.301556420233463,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Logstash EPS","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"in\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"out\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: -r._value}))\n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"in\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"out\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: -r._value}))\n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.301556420233463,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":18},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":4,"hoverDimension":"auto","kind":"Single_Stat_Plus_Line","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Kafka Under Replicated Partitions","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_partition\")\n |> filter(fn: (r) => r[\"_field\"] == \"UnderReplicatedPartitions\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"partition\",\"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_partition\")\n |> filter(fn: (r) => r[\"_field\"] == \"UnderReplicatedPartitions\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"partition\",\"host\", \"role\"])\n |> yield(name: \"trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":22},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"UAehjIsi65P8u92M_3sQY","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"_SCP8Npp4NVMx2N4mfuzX","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"BoMPg4R1KDp_UsRORdV3_","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"IO Wait","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_iowait\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_iowait\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":26},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"QDwChKZWuQV0BaJcEeSam","name":"Atlantis","type":"scale","hex":"#74D495"},{"id":"ThD0WTqKHltQEVlq9mo6K","name":"Atlantis","type":"scale","hex":"#3F3FBA"},{"id":"FBHYZiwDLKyQK3eRfUD-0","name":"Atlantis","type":"scale","hex":"#FF4D9E"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Swap Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"swap\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"swap\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":30},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Monitor Interface Drops - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop_in\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"drop_in\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop_in\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":34},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":" days"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Stenographer PCAP Retention","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"pcapage\")\n |> filter(fn: (r) => r[\"_field\"] == \"seconds\")\n |> map(fn: (r) => ({ r with _value: r._value / (24.0 * 3600.0)}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])"},{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"pcapage\")\n |> filter(fn: (r) => r[\"_field\"] == \"seconds\")\n |> map(fn: (r) => ({ r with _value: r._value / (24.0 * 3600.0)}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":46},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Suricata Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"suridrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":9},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"pineapple","type":"threshold","hex":"#FFB94A","value":50},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"fire","type":"threshold","hex":"#DC4E58","value":70},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"Swap Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"swap\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":9,"yPos":2},{"colors":[{"id":"base","name":"white","type":"text","hex":"#ffffff"}],"fieldOptions":[{"displayName":"Host","fieldName":"host","visible":true},{"displayName":"Name","fieldName":"container_name","visible":true},{"displayName":"Status","fieldName":"container_status","visible":true},{"displayName":"OOM Killed","fieldName":"_value","visible":true},{"displayName":"_start","fieldName":"_start","visible":true},{"displayName":"_stop","fieldName":"_stop","visible":true},{"displayName":"_time","fieldName":"_time","visible":true},{"displayName":"_field","fieldName":"_field","visible":true},{"displayName":"_measurement","fieldName":"_measurement","visible":true},{"displayName":"engine_host","fieldName":"engine_host","visible":true},{"displayName":"role","fieldName":"role","visible":true},{"displayName":"server_version","fieldName":"server_version","visible":true},{"displayName":"container_image","fieldName":"container_image","visible":true},{"displayName":"container_version","fieldName":"container_version","visible":true},{"displayName":"description","fieldName":"description","visible":true},{"displayName":"maintainer","fieldName":"maintainer","visible":true},{"displayName":"io.k8s.description","fieldName":"io.k8s.description","visible":true},{"displayName":"io.k8s.display-name","fieldName":"io.k8s.display-name","visible":true},{"displayName":"license","fieldName":"license","visible":true},{"displayName":"name","fieldName":"name","visible":true},{"displayName":"org.label-schema.build-date","fieldName":"org.label-schema.build-date","visible":true},{"displayName":"org.label-schema.license","fieldName":"org.label-schema.license","visible":true},{"displayName":"org.label-schema.name","fieldName":"org.label-schema.name","visible":true},{"displayName":"org.label-schema.schema-version","fieldName":"org.label-schema.schema-version","visible":true},{"displayName":"org.label-schema.url","fieldName":"org.label-schema.url","visible":true},{"displayName":"org.label-schema.vcs-ref","fieldName":"org.label-schema.vcs-ref","visible":true},{"displayName":"org.label-schema.vcs-url","fieldName":"org.label-schema.vcs-url","visible":true},{"displayName":"org.label-schema.vendor","fieldName":"org.label-schema.vendor","visible":true},{"displayName":"org.label-schema.version","fieldName":"org.label-schema.version","visible":true},{"displayName":"org.opencontainers.image.created","fieldName":"org.opencontainers.image.created","visible":true},{"displayName":"org.opencontainers.image.licenses","fieldName":"org.opencontainers.image.licenses","visible":true},{"displayName":"org.opencontainers.image.title","fieldName":"org.opencontainers.image.title","visible":true},{"displayName":"org.opencontainers.image.vendor","fieldName":"org.opencontainers.image.vendor","visible":true},{"displayName":"release","fieldName":"release","visible":true},{"displayName":"summary","fieldName":"summary","visible":true},{"displayName":"url","fieldName":"url","visible":true},{"displayName":"vendor","fieldName":"vendor","visible":true},{"displayName":"version","fieldName":"version","visible":true},{"displayName":"org.label-schema.usage","fieldName":"org.label-schema.usage","visible":true},{"displayName":"org.opencontainers.image.documentation","fieldName":"org.opencontainers.image.documentation","visible":true},{"displayName":"org.opencontainers.image.revision","fieldName":"org.opencontainers.image.revision","visible":true},{"displayName":"org.opencontainers.image.source","fieldName":"org.opencontainers.image.source","visible":true},{"displayName":"org.opencontainers.image.url","fieldName":"org.opencontainers.image.url","visible":true},{"displayName":"org.opencontainers.image.version","fieldName":"org.opencontainers.image.version","visible":true},{"displayName":"org.opencontainers.image.description","fieldName":"org.opencontainers.image.description","visible":true}],"height":4,"kind":"Table","name":"Most Recent Container Events","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_status\")\n |> filter(fn: (r) => r[\"_field\"] == \"oomkilled\")\n |> filter(fn: (r) => r[\"container_status\"] != \"running\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"container_name\", \"host\"])\n |> last()\n |> group()\n |> keep(columns: [\"_value\", \"container_name\", \"host\", \"container_status\"])"}],"staticLegend":{},"tableOptions":{"sortBy":"container_name","verticalTimeAxis":true},"timeFormat":"YYYY-MM-DD HH:mm:ss","width":3,"xPos":9,"yPos":6},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Zeek Capture Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekcaptureloss\")\n |> filter(fn: (r) => r[\"_field\"] == \"loss\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekcaptureloss\")\n |> filter(fn: (r) => r[\"_field\"] == \"loss\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","xPos":9,"yCol":"_value","yPos":42},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Stenographer Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"stenodrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":10},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"PCAP Retention","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"pcapage\")\n |> filter(fn: (r) => r[\"_field\"] == \"seconds\")\n |> hostFilter()\n |> map(fn: (r) => ({r with _value: r._value / (24.0 * 60.0 * 60.0)}))\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":" days","width":1,"xPos":11}],"description":"Visualize the Security Onion grid performance metrics and alarm statuses.","name":"Security Onion Performance edit"}}] \ No newline at end of file From 77b5aa4369ae46240f069ef52fdb75714def9322 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 28 May 2024 11:34:35 -0400 Subject: [PATCH 104/507] Correct dashboard name Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- .../templates/dashboard-security_onion_performance.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/influxdb/templates/dashboard-security_onion_performance.json b/salt/influxdb/templates/dashboard-security_onion_performance.json index 831f8eb16..4f543c8d1 100644 --- a/salt/influxdb/templates/dashboard-security_onion_performance.json +++ b/salt/influxdb/templates/dashboard-security_onion_performance.json @@ -1 +1 @@ -[{"apiVersion":"influxdata.com/v2alpha1","kind":"Dashboard","metadata":{"name":"vivid-wilson-002001"},"spec":{"charts":[{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Uptime","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime\")\n |> hostFilter()\n |> map(fn: (r) => ({r with _value: r._value / (24 * 60 * 60)}))\n |> group(columns: [\"host\"])\n |> last()\n |> lowestMin(n:1)"}],"staticLegend":{},"suffix":" days","width":1},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"},{"id":"z83MTSufTrlrCoEPiBXda","name":"ruby","type":"text","hex":"#BF3D5E","value":1}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Critical Alarms","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> filter(fn: (r) => r[\"_level\"] == \"crit\")\n |> count()"}],"staticLegend":{},"suffix":" ","width":1,"yPos":2},{"colors":[{"id":"base","name":"rainforest","type":"text","hex":"#4ED8A0"},{"id":"QCTYWuGuHkikYFsZSKMzQ","name":"rainforest","type":"text","hex":"#4ED8A0"},{"id":"QdpMyTRBb0LJ56-P5wfAW","name":"laser","type":"text","hex":"#00C9FF","value":1},{"id":"VQGwCoMrxZyP8asiOW5Cq","name":"tiger","type":"text","hex":"#F48D38","value":2},{"id":"zSO9QkesSIxrU_ntCBx2i","name":"ruby","type":"text","hex":"#BF3D5E","value":3}],"fieldOptions":[{"fieldName":"_time","visible":true},{"displayName":"Alarm","fieldName":"_check_name","visible":true},{"displayName":"Severity","fieldName":"_value","visible":true},{"displayName":"Status","fieldName":"_level","visible":true}],"height":6,"kind":"Table","name":"Alarm Status","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> drop(columns: [\"_value\"])\n |> duplicate(column: \"_level\", as: \"_value\")\n |> map(fn: (r) => ({ r with _value: if r._value == \"ok\" then 0 else if r._value == \"info\" then 1 else if r._value == \"warn\" then 2 else 3 }))\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> keep(columns: [\"_check_name\",\"_level\",\"_value\"])"}],"staticLegend":{},"tableOptions":{"sortBy":"_check_name","verticalTimeAxis":true},"timeFormat":"YYYY-MM-DD HH:mm:ss","width":3,"yPos":4},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"B"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Elasticsearch Storage Size","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"store_size_in_bytes\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"mean\")"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"store_size_in_bytes\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":10},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"B"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"InfluxDB Size","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"influxsize\")\n |> filter(fn: (r) => r[\"_field\"] == \"kbytes\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 1000.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"mean\")"},{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"influxsize\")\n |> filter(fn: (r) => r[\"_field\"] == \"kbytes\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 1000.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":14},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":" days"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"System Uptime","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24 * 60 * 60)}))\n |> yield(name: \"last\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24 * 60 * 60)}))\n |> yield(name: \"Trend\")"}],"shade":true,"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":18},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"lQ75rvTyd2Lq5pZjzy6LB","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"KLfpRZtiEnU2GxjPtrrzQ","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"1kLynwKxvJ3B5IeJnrBqp","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Kafka EPS","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_topics\")\n |> filter(fn: (r) => r[\"_field\"] == \"MessagesInPerSec.Count\")\n |> derivative(unit: 1s, nonNegative: true)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_topics\")\n |> filter(fn: (r) => r[\"_field\"] == \"MessagesInPerSec.Count\")\n |> derivative(unit: 1s, nonNegative: true)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":22},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"System CPU Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_idle\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: r._value * -1.0 + 100.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_idle\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\",\"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: r._value * -1.0 + 100.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":26},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"QDwChKZWuQV0BaJcEeSam","name":"Atlantis","type":"scale","hex":"#74D495"},{"id":"ThD0WTqKHltQEVlq9mo6K","name":"Atlantis","type":"scale","hex":"#3F3FBA"},{"id":"FBHYZiwDLKyQK3eRfUD-0","name":"Atlantis","type":"scale","hex":"#FF4D9E"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"System Memory Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":30},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Monitor Interface Traffic - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"bytes_recv\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":34},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Management Interface Traffic - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"bytes_recv\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":6,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":38},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Stenographer Packet Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"stenodrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"stenodrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":42},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Disk Usage /","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":46},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"5m Load Average","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"load5\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"width":1,"xPos":1},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"},{"id":"z83MTSufTrlrCoEPiBXda","name":"tiger","type":"text","hex":"#F48D38","value":1}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Warning Alarms","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> filter(fn: (r) => r[\"_level\"] == \"warn\")\n |> count()"}],"staticLegend":{},"suffix":" ","width":1,"xPos":1,"yPos":2},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"IO Wait","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_iowait\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":2},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"},{"id":"z83MTSufTrlrCoEPiBXda","name":"laser","type":"text","hex":"#00C9FF","value":1}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Informative Alarms","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> filter(fn: (r) => r[\"_level\"] == \"info\")\n |> count()"}],"staticLegend":{},"suffix":" ","width":1,"xPos":2,"yPos":2},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Estimated EPS In","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"in\")\n |> hostFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"width":1,"xPos":3},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"pineapple","type":"threshold","hex":"#FFB94A","value":70},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"fire","type":"threshold","hex":"#DC4E58","value":80},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"CPU Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_idle\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> map(fn: (r) => ({r with _value: r._value * -1.0 + 100.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":3,"yPos":2},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"kOQLOg2H4FVEE-E1_L8Kq","name":"laser","type":"threshold","hex":"#00C9FF","value":85},{"id":"5IArg2lDb8KvnphywgUXa","name":"tiger","type":"threshold","hex":"#F48D38","value":90},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"ruby","type":"threshold","hex":"#BF3D5E","value":95},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"Root Disk Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"path\"] == \"/\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":3,"yPos":6},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Suricata Packet Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"suridrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"suridrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","xPos":3,"yCol":"_value","yPos":42},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Redis Queue","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"redisqueue\")\n |> filter(fn: (r) => r[\"_field\"] == \"unparsed\")\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"width":1,"xPos":4},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Elasticsearch Document Count","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"docs_count\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"mean\")"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"docs_count\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":10},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"heightRatio":0.301556420233463,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Redis Queue","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"redisqueue\")\n |> filter(fn: (r) => r[\"_field\"] == \"unparsed\")\n |> group(columns: [\"host\", \"_field\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"redisqueue\")\n |> filter(fn: (r) => r[\"_field\"] == \"unparsed\")\n |> group(columns: [\"host\", \"_field\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.301556420233463,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":14},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":" days"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container Uptime","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_status\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime_ns\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> group(columns: [\"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24 * 60 * 60 * 1000000000)}))\n |> yield(name: \"last\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_status\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime_ns\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> group(columns: [\"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24.0 * 60.0 * 60.0 * 1000000000.0)}))\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":18},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":2,"hoverDimension":"auto","kind":"Single_Stat_Plus_Line","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Kafka Active Controllers","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_controller\")\n |> filter(fn: (r) => r[\"_field\"] == \"ActiveControllerCount.Value\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"current\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_controller\")\n |> filter(fn: (r) => r[\"_field\"] == \"ActiveControllerCount.Value\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":22},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":2,"hoverDimension":"auto","kind":"Single_Stat_Plus_Line","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Kafka Active Brokers","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_controller\")\n |> filter(fn: (r) => r[\"_field\"] == \"ActiveBrokerCount.Value\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"trend\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_controller\")\n |> filter(fn: (r) => r[\"_field\"] == \"ActiveBrokerCount.Value\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"current\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":24},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"yT5vTIlaaFChSrQvKLfqf","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"mzzUVSu3ibTph1JmQmDAQ","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"mOcnDo7l8ii6qNLFIB5rs","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container CPU Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"mean\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":26},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"QDwChKZWuQV0BaJcEeSam","name":"Atlantis","type":"scale","hex":"#74D495"},{"id":"ThD0WTqKHltQEVlq9mo6K","name":"Atlantis","type":"scale","hex":"#3F3FBA"},{"id":"FBHYZiwDLKyQK3eRfUD-0","name":"Atlantis","type":"scale","hex":"#FF4D9E"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container Memory Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"mean\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":30},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b"}],"colorizeRows":true,"colors":[{"id":"0ynR6Zs0wuQ3WY0Lz-_KC","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"YiArehCNBwFm9mn8DSXSG","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"DxByY_EQW9Xs2jD5ktkG5","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container Traffic - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_net\")\n |> filter(fn: (r) => r[\"_field\"] == \"rx_bytes\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"mean\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_net\")\n |> filter(fn: (r) => r[\"_field\"] == \"rx_bytes\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with _value: r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":34},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Disk Usage /nsm","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/nsm\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/nsm\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xPos":4,"yPos":46},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Inbound Traffic","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\") \n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: r._value * 8.0 / (1000.0 * 1000.0)}))\n |> group(columns: [\"host\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> last()\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":" Mb/s","width":1,"xPos":5},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Inbound Drops","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop_in\") \n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: r._value * 8.0 / (1000.0 * 1000.0)}))\n |> group(columns: [\"host\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> last()\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":" Mb/s","width":1,"xPos":6},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"pineapple","type":"threshold","hex":"#FFB94A","value":70},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"fire","type":"threshold","hex":"#DC4E58","value":80},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"Memory Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":6,"yPos":2},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"laser","type":"threshold","hex":"#00C9FF","value":85},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"tiger","type":"threshold","hex":"#F48D38","value":90},{"id":"H7uprvKmMEh39en6X-ms_","name":"ruby","type":"threshold","hex":"#BF3D5E","value":95},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"NSM Disk Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"path\"] == \"/nsm\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":6,"yPos":6},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Management Interface Traffic - Outbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_sent\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n \n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"bytes_sent\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_sent\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n \n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":6,"widthRatio":1,"xCol":"_time","xPos":6,"yCol":"_value","yPos":38},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Zeek Packet Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekdrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekdrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","xPos":6,"yCol":"_value","yPos":42},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Capture Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekcaptureloss\")\n |> filter(fn: (r) => r[\"_field\"] == \"loss\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":7},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Zeek Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekdrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":8},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"s"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"heightRatio":0.301556420233463,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Elastic Ingest Time Spent","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_community_id_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"community.id_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_conditional_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"conditional_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_date_index_name_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"date.index.name_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_date_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"date_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_dissect_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"dissect_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_dot_expander_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"dot.expander_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_geoip_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"geoip_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_grok_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"grok_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_json_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"json_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_kv_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"kv_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_lowercase_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"lowercase_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_rename_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"rename_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_script_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"script_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_user_agent_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"user.agent_time\")"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.301556420233463,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":10},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"1m Load Average","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"load1\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"load1\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\",\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":14,"yTickStep":1},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":" e/s"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"heightRatio":0.301556420233463,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Logstash EPS","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"in\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"out\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: -r._value}))\n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"in\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"out\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: -r._value}))\n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.301556420233463,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":18},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":4,"hoverDimension":"auto","kind":"Single_Stat_Plus_Line","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Kafka Under Replicated Partitions","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_partition\")\n |> filter(fn: (r) => r[\"_field\"] == \"UnderReplicatedPartitions\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"partition\",\"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_partition\")\n |> filter(fn: (r) => r[\"_field\"] == \"UnderReplicatedPartitions\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"partition\",\"host\", \"role\"])\n |> yield(name: \"trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":22},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"UAehjIsi65P8u92M_3sQY","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"_SCP8Npp4NVMx2N4mfuzX","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"BoMPg4R1KDp_UsRORdV3_","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"IO Wait","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_iowait\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_iowait\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":26},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"QDwChKZWuQV0BaJcEeSam","name":"Atlantis","type":"scale","hex":"#74D495"},{"id":"ThD0WTqKHltQEVlq9mo6K","name":"Atlantis","type":"scale","hex":"#3F3FBA"},{"id":"FBHYZiwDLKyQK3eRfUD-0","name":"Atlantis","type":"scale","hex":"#FF4D9E"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Swap Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"swap\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"swap\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":30},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Monitor Interface Drops - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop_in\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"drop_in\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop_in\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":34},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":" days"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Stenographer PCAP Retention","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"pcapage\")\n |> filter(fn: (r) => r[\"_field\"] == \"seconds\")\n |> map(fn: (r) => ({ r with _value: r._value / (24.0 * 3600.0)}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])"},{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"pcapage\")\n |> filter(fn: (r) => r[\"_field\"] == \"seconds\")\n |> map(fn: (r) => ({ r with _value: r._value / (24.0 * 3600.0)}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":46},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Suricata Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"suridrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":9},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"pineapple","type":"threshold","hex":"#FFB94A","value":50},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"fire","type":"threshold","hex":"#DC4E58","value":70},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"Swap Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"swap\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":9,"yPos":2},{"colors":[{"id":"base","name":"white","type":"text","hex":"#ffffff"}],"fieldOptions":[{"displayName":"Host","fieldName":"host","visible":true},{"displayName":"Name","fieldName":"container_name","visible":true},{"displayName":"Status","fieldName":"container_status","visible":true},{"displayName":"OOM Killed","fieldName":"_value","visible":true},{"displayName":"_start","fieldName":"_start","visible":true},{"displayName":"_stop","fieldName":"_stop","visible":true},{"displayName":"_time","fieldName":"_time","visible":true},{"displayName":"_field","fieldName":"_field","visible":true},{"displayName":"_measurement","fieldName":"_measurement","visible":true},{"displayName":"engine_host","fieldName":"engine_host","visible":true},{"displayName":"role","fieldName":"role","visible":true},{"displayName":"server_version","fieldName":"server_version","visible":true},{"displayName":"container_image","fieldName":"container_image","visible":true},{"displayName":"container_version","fieldName":"container_version","visible":true},{"displayName":"description","fieldName":"description","visible":true},{"displayName":"maintainer","fieldName":"maintainer","visible":true},{"displayName":"io.k8s.description","fieldName":"io.k8s.description","visible":true},{"displayName":"io.k8s.display-name","fieldName":"io.k8s.display-name","visible":true},{"displayName":"license","fieldName":"license","visible":true},{"displayName":"name","fieldName":"name","visible":true},{"displayName":"org.label-schema.build-date","fieldName":"org.label-schema.build-date","visible":true},{"displayName":"org.label-schema.license","fieldName":"org.label-schema.license","visible":true},{"displayName":"org.label-schema.name","fieldName":"org.label-schema.name","visible":true},{"displayName":"org.label-schema.schema-version","fieldName":"org.label-schema.schema-version","visible":true},{"displayName":"org.label-schema.url","fieldName":"org.label-schema.url","visible":true},{"displayName":"org.label-schema.vcs-ref","fieldName":"org.label-schema.vcs-ref","visible":true},{"displayName":"org.label-schema.vcs-url","fieldName":"org.label-schema.vcs-url","visible":true},{"displayName":"org.label-schema.vendor","fieldName":"org.label-schema.vendor","visible":true},{"displayName":"org.label-schema.version","fieldName":"org.label-schema.version","visible":true},{"displayName":"org.opencontainers.image.created","fieldName":"org.opencontainers.image.created","visible":true},{"displayName":"org.opencontainers.image.licenses","fieldName":"org.opencontainers.image.licenses","visible":true},{"displayName":"org.opencontainers.image.title","fieldName":"org.opencontainers.image.title","visible":true},{"displayName":"org.opencontainers.image.vendor","fieldName":"org.opencontainers.image.vendor","visible":true},{"displayName":"release","fieldName":"release","visible":true},{"displayName":"summary","fieldName":"summary","visible":true},{"displayName":"url","fieldName":"url","visible":true},{"displayName":"vendor","fieldName":"vendor","visible":true},{"displayName":"version","fieldName":"version","visible":true},{"displayName":"org.label-schema.usage","fieldName":"org.label-schema.usage","visible":true},{"displayName":"org.opencontainers.image.documentation","fieldName":"org.opencontainers.image.documentation","visible":true},{"displayName":"org.opencontainers.image.revision","fieldName":"org.opencontainers.image.revision","visible":true},{"displayName":"org.opencontainers.image.source","fieldName":"org.opencontainers.image.source","visible":true},{"displayName":"org.opencontainers.image.url","fieldName":"org.opencontainers.image.url","visible":true},{"displayName":"org.opencontainers.image.version","fieldName":"org.opencontainers.image.version","visible":true},{"displayName":"org.opencontainers.image.description","fieldName":"org.opencontainers.image.description","visible":true}],"height":4,"kind":"Table","name":"Most Recent Container Events","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_status\")\n |> filter(fn: (r) => r[\"_field\"] == \"oomkilled\")\n |> filter(fn: (r) => r[\"container_status\"] != \"running\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"container_name\", \"host\"])\n |> last()\n |> group()\n |> keep(columns: [\"_value\", \"container_name\", \"host\", \"container_status\"])"}],"staticLegend":{},"tableOptions":{"sortBy":"container_name","verticalTimeAxis":true},"timeFormat":"YYYY-MM-DD HH:mm:ss","width":3,"xPos":9,"yPos":6},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Zeek Capture Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekcaptureloss\")\n |> filter(fn: (r) => r[\"_field\"] == \"loss\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekcaptureloss\")\n |> filter(fn: (r) => r[\"_field\"] == \"loss\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","xPos":9,"yCol":"_value","yPos":42},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Stenographer Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"stenodrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":10},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"PCAP Retention","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"pcapage\")\n |> filter(fn: (r) => r[\"_field\"] == \"seconds\")\n |> hostFilter()\n |> map(fn: (r) => ({r with _value: r._value / (24.0 * 60.0 * 60.0)}))\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":" days","width":1,"xPos":11}],"description":"Visualize the Security Onion grid performance metrics and alarm statuses.","name":"Security Onion Performance edit"}}] \ No newline at end of file +[{"apiVersion":"influxdata.com/v2alpha1","kind":"Dashboard","metadata":{"name":"vivid-wilson-002001"},"spec":{"charts":[{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Uptime","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime\")\n |> hostFilter()\n |> map(fn: (r) => ({r with _value: r._value / (24 * 60 * 60)}))\n |> group(columns: [\"host\"])\n |> last()\n |> lowestMin(n:1)"}],"staticLegend":{},"suffix":" days","width":1},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"},{"id":"z83MTSufTrlrCoEPiBXda","name":"ruby","type":"text","hex":"#BF3D5E","value":1}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Critical Alarms","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> filter(fn: (r) => r[\"_level\"] == \"crit\")\n |> count()"}],"staticLegend":{},"suffix":" ","width":1,"yPos":2},{"colors":[{"id":"base","name":"rainforest","type":"text","hex":"#4ED8A0"},{"id":"QCTYWuGuHkikYFsZSKMzQ","name":"rainforest","type":"text","hex":"#4ED8A0"},{"id":"QdpMyTRBb0LJ56-P5wfAW","name":"laser","type":"text","hex":"#00C9FF","value":1},{"id":"VQGwCoMrxZyP8asiOW5Cq","name":"tiger","type":"text","hex":"#F48D38","value":2},{"id":"zSO9QkesSIxrU_ntCBx2i","name":"ruby","type":"text","hex":"#BF3D5E","value":3}],"fieldOptions":[{"fieldName":"_time","visible":true},{"displayName":"Alarm","fieldName":"_check_name","visible":true},{"displayName":"Severity","fieldName":"_value","visible":true},{"displayName":"Status","fieldName":"_level","visible":true}],"height":6,"kind":"Table","name":"Alarm Status","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> drop(columns: [\"_value\"])\n |> duplicate(column: \"_level\", as: \"_value\")\n |> map(fn: (r) => ({ r with _value: if r._value == \"ok\" then 0 else if r._value == \"info\" then 1 else if r._value == \"warn\" then 2 else 3 }))\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> keep(columns: [\"_check_name\",\"_level\",\"_value\"])"}],"staticLegend":{},"tableOptions":{"sortBy":"_check_name","verticalTimeAxis":true},"timeFormat":"YYYY-MM-DD HH:mm:ss","width":3,"yPos":4},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"B"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Elasticsearch Storage Size","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"store_size_in_bytes\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"mean\")"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"store_size_in_bytes\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":10},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"B"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"InfluxDB Size","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"influxsize\")\n |> filter(fn: (r) => r[\"_field\"] == \"kbytes\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 1000.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"mean\")"},{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"influxsize\")\n |> filter(fn: (r) => r[\"_field\"] == \"kbytes\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 1000.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":14},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":" days"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"System Uptime","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24 * 60 * 60)}))\n |> yield(name: \"last\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24 * 60 * 60)}))\n |> yield(name: \"Trend\")"}],"shade":true,"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":18},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"lQ75rvTyd2Lq5pZjzy6LB","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"KLfpRZtiEnU2GxjPtrrzQ","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"1kLynwKxvJ3B5IeJnrBqp","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Kafka EPS","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_topics\")\n |> filter(fn: (r) => r[\"_field\"] == \"MessagesInPerSec.Count\")\n |> derivative(unit: 1s, nonNegative: true)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_topics\")\n |> filter(fn: (r) => r[\"_field\"] == \"MessagesInPerSec.Count\")\n |> derivative(unit: 1s, nonNegative: true)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":22},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"System CPU Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_idle\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: r._value * -1.0 + 100.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_idle\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\",\"host\", \"role\"])\n |> map(fn: (r) => ({r with _value: r._value * -1.0 + 100.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":26},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"QDwChKZWuQV0BaJcEeSam","name":"Atlantis","type":"scale","hex":"#74D495"},{"id":"ThD0WTqKHltQEVlq9mo6K","name":"Atlantis","type":"scale","hex":"#3F3FBA"},{"id":"FBHYZiwDLKyQK3eRfUD-0","name":"Atlantis","type":"scale","hex":"#FF4D9E"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"System Memory Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":30},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Monitor Interface Traffic - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"bytes_recv\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":34},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Management Interface Traffic - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"bytes_recv\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":6,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":38},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Stenographer Packet Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"stenodrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"stenodrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":42},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Disk Usage /","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":46},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"5m Load Average","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"load5\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"width":1,"xPos":1},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"},{"id":"z83MTSufTrlrCoEPiBXda","name":"tiger","type":"text","hex":"#F48D38","value":1}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Warning Alarms","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> filter(fn: (r) => r[\"_level\"] == \"warn\")\n |> count()"}],"staticLegend":{},"suffix":" ","width":1,"xPos":1,"yPos":2},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"IO Wait","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_iowait\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":2},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"},{"id":"z83MTSufTrlrCoEPiBXda","name":"laser","type":"text","hex":"#00C9FF","value":1}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Informative Alarms","queries":[{"query":"from(bucket: \"_monitoring\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"statuses\")\n |> filter(fn: (r) => r[\"_field\"] == \"_message\")\n |> group(columns: [\"_check_id\"])\n |> sort(columns: [\"_time\"])\n |> last()\n |> group()\n |> filter(fn: (r) => r[\"_level\"] == \"info\")\n |> count()"}],"staticLegend":{},"suffix":" ","width":1,"xPos":2,"yPos":2},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Estimated EPS In","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"in\")\n |> hostFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"width":1,"xPos":3},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"pineapple","type":"threshold","hex":"#FFB94A","value":70},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"fire","type":"threshold","hex":"#DC4E58","value":80},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"CPU Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_idle\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> map(fn: (r) => ({r with _value: r._value * -1.0 + 100.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":3,"yPos":2},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"kOQLOg2H4FVEE-E1_L8Kq","name":"laser","type":"threshold","hex":"#00C9FF","value":85},{"id":"5IArg2lDb8KvnphywgUXa","name":"tiger","type":"threshold","hex":"#F48D38","value":90},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"ruby","type":"threshold","hex":"#BF3D5E","value":95},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"Root Disk Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"path\"] == \"/\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":3,"yPos":6},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Suricata Packet Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"suridrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"suridrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","xPos":3,"yCol":"_value","yPos":42},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":2,"kind":"Single_Stat","name":"Redis Queue","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"redisqueue\")\n |> filter(fn: (r) => r[\"_field\"] == \"unparsed\")\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"width":1,"xPos":4},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Elasticsearch Document Count","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"docs_count\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"mean\")"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_indices\")\n |> filter(fn: (r) => r[\"_field\"] == \"docs_count\")\n |> filter(fn: (r) => r[\"host\"] == r[\"node_name\"])\n |> hostFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":10},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"heightRatio":0.301556420233463,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Redis Queue","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"redisqueue\")\n |> filter(fn: (r) => r[\"_field\"] == \"unparsed\")\n |> group(columns: [\"host\", \"_field\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"redisqueue\")\n |> filter(fn: (r) => r[\"_field\"] == \"unparsed\")\n |> group(columns: [\"host\", \"_field\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.301556420233463,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":14},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":" days"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container Uptime","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_status\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime_ns\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> group(columns: [\"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24 * 60 * 60 * 1000000000)}))\n |> yield(name: \"last\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_status\")\n |> filter(fn: (r) => r[\"_field\"] == \"uptime_ns\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> group(columns: [\"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> map(fn: (r) => ({r with _value: float(v: r._value) / float(v: 24.0 * 60.0 * 60.0 * 1000000000.0)}))\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":18},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":2,"hoverDimension":"auto","kind":"Single_Stat_Plus_Line","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Kafka Active Controllers","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_controller\")\n |> filter(fn: (r) => r[\"_field\"] == \"ActiveControllerCount.Value\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"current\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_controller\")\n |> filter(fn: (r) => r[\"_field\"] == \"ActiveControllerCount.Value\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":22},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":2,"hoverDimension":"auto","kind":"Single_Stat_Plus_Line","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Kafka Active Brokers","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_controller\")\n |> filter(fn: (r) => r[\"_field\"] == \"ActiveBrokerCount.Value\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"trend\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_controller\")\n |> filter(fn: (r) => r[\"_field\"] == \"ActiveBrokerCount.Value\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"current\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":24},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"yT5vTIlaaFChSrQvKLfqf","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"mzzUVSu3ibTph1JmQmDAQ","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"mOcnDo7l8ii6qNLFIB5rs","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container CPU Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"mean\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_cpu\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":26},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"QDwChKZWuQV0BaJcEeSam","name":"Atlantis","type":"scale","hex":"#74D495"},{"id":"ThD0WTqKHltQEVlq9mo6K","name":"Atlantis","type":"scale","hex":"#3F3FBA"},{"id":"FBHYZiwDLKyQK3eRfUD-0","name":"Atlantis","type":"scale","hex":"#FF4D9E"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container Memory Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"mean\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_percent\")\n |> filter(fn: (r) => r[\"container_status\"] == \"running\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":30},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b"}],"colorizeRows":true,"colors":[{"id":"0ynR6Zs0wuQ3WY0Lz-_KC","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"YiArehCNBwFm9mn8DSXSG","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"DxByY_EQW9Xs2jD5ktkG5","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Container Traffic - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_net\")\n |> filter(fn: (r) => r[\"_field\"] == \"rx_bytes\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"mean\")"},{"query":"containerFilter = (tables=<-) =>\n if v.Container != \"(All)\" then\n tables |> filter(fn: (r) => r[\"container_name\"] == v.Container)\n else\n tables\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_net\")\n |> filter(fn: (r) => r[\"_field\"] == \"rx_bytes\")\n |> hostFilter()\n |> roleFilter()\n |> containerFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with _value: r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\", \"container_name\"])\n |> sort(columns: [\"_time\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":4,"yCol":"_value","yPos":34},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Disk Usage /nsm","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/nsm\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> filter(fn: (r) => r[\"path\"] == \"/nsm\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xPos":4,"yPos":46},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Inbound Traffic","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_recv\") \n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: r._value * 8.0 / (1000.0 * 1000.0)}))\n |> group(columns: [\"host\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> last()\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":" Mb/s","width":1,"xPos":5},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Inbound Drops","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop_in\") \n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: r._value * 8.0 / (1000.0 * 1000.0)}))\n |> group(columns: [\"host\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> last()\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":" Mb/s","width":1,"xPos":6},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"pineapple","type":"threshold","hex":"#FFB94A","value":70},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"fire","type":"threshold","hex":"#DC4E58","value":80},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"Memory Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"mem\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":6,"yPos":2},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"laser","type":"threshold","hex":"#00C9FF","value":85},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"tiger","type":"threshold","hex":"#F48D38","value":90},{"id":"H7uprvKmMEh39en6X-ms_","name":"ruby","type":"threshold","hex":"#BF3D5E","value":95},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"NSM Disk Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"disk\")\n |> filter(fn: (r) => r[\"path\"] == \"/nsm\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":6,"yPos":6},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Management Interface Traffic - Outbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_sent\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n \n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"bytes_sent\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"manint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"bytes_sent\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n \n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":6,"widthRatio":1,"xCol":"_time","xPos":6,"yCol":"_value","yPos":38},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Zeek Packet Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekdrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekdrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> hostFilter()\n |> roleFilter()\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","xPos":6,"yCol":"_value","yPos":42},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Capture Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekcaptureloss\")\n |> filter(fn: (r) => r[\"_field\"] == \"loss\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":7},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Zeek Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekdrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":8},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"s"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"heightRatio":0.301556420233463,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Elastic Ingest Time Spent","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_community_id_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"community.id_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_conditional_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"conditional_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_date_index_name_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"date.index.name_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_date_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"date_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_dissect_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"dissect_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_dot_expander_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"dot.expander_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_geoip_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"geoip_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_grok_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"grok_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_json_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"json_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_kv_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"kv_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_lowercase_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"lowercase_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_rename_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"rename_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_script_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"script_time\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"elasticsearch_clusterstats_nodes\")\n |> filter(fn: (r) => r.role == \"standalone\" or r.role == \"eval\" or r.role == \"import\" or r.role == \"managersearch\" or r.role == \"search\" or r.role == \"node\" or r.role == \"heavynode\")\n |> filter(fn: (r) => r[\"_field\"] == \"ingest_processor_stats_user_agent_time_in_millis\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"user.agent_time\")"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.301556420233463,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":10},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"sW2GqpGAsGB5Adx16jKjp","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"TsdXuXwdI5Npi9S8L4f-i","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"OGL29-SUbJ6FyQb0JzbaD","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"1m Load Average","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"load1\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"system\")\n |> filter(fn: (r) => r[\"_field\"] == \"load1\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\",\"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: true)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":14,"yTickStep":1},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":" e/s"}],"colorizeRows":true,"colors":[{"id":"xflqbsX-j3iq4ry5QOntK","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#8F8AF4"},{"id":"5H28HcITm6QVfQsXon0vq","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#A51414"},{"id":"25MrINwurNBkQqeKCkMPg","name":"Do Androids Dream of Electric Sheep?","type":"scale","hex":"#F4CF31"}],"geom":"line","height":4,"heightRatio":0.301556420233463,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Logstash EPS","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"in\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"out\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: -r._value}))\n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"in\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"logstash_events\")\n |> filter(fn: (r) => r[\"_field\"] == \"out\")\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\") \n |> map(fn: (r) => ({r with _value: -r._value}))\n |> group(columns: [\"_field\", \"host\", \"pipeline\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.301556420233463,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":18},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":0,"height":4,"hoverDimension":"auto","kind":"Single_Stat_Plus_Line","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Kafka Under Replicated Partitions","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_partition\")\n |> filter(fn: (r) => r[\"_field\"] == \"UnderReplicatedPartitions\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"partition\",\"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"kafka_partition\")\n |> filter(fn: (r) => r[\"_field\"] == \"UnderReplicatedPartitions\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"partition\",\"host\", \"role\"])\n |> yield(name: \"trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":22},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"UAehjIsi65P8u92M_3sQY","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"_SCP8Npp4NVMx2N4mfuzX","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"BoMPg4R1KDp_UsRORdV3_","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"IO Wait","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_iowait\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"cpu\")\n |> filter(fn: (r) => r[\"cpu\"] == \"cpu-total\")\n |> filter(fn: (r) => r[\"_field\"] == \"usage_iowait\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":26},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"QDwChKZWuQV0BaJcEeSam","name":"Atlantis","type":"scale","hex":"#74D495"},{"id":"ThD0WTqKHltQEVlq9mo6K","name":"Atlantis","type":"scale","hex":"#3F3FBA"},{"id":"FBHYZiwDLKyQK3eRfUD-0","name":"Atlantis","type":"scale","hex":"#FF4D9E"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Swap Usage","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"swap\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"swap\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> roleFilter()\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":30},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear","suffix":"b/s"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"heightRatio":0.18482490272373542,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Monitor Interface Drops - Inbound","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop_in\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"drop_in\"}))"},{"query":"import \"join\"\n\nhostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nmanints = from(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"node_config\")\n |> hostFilter()\n |> filter(fn: (r) => r[\"_field\"] == \"monint\")\n |> distinct()\n |> group(columns: [\"host\"])\n\ntraffic = from(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"net\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop_in\")\n |> hostFilter()\n |> roleFilter()\n |> derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")\n |> map(fn: (r) => ({r with \"_value\": r._value * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"host\"])\n\njoin.inner(left: traffic, right: manints,\n on: (l,r) => l.interface == r._value,\n as: (l, r) => ({l with _value: l._value, result: \"Trend\"}))"}],"staticLegend":{"colorizeRows":true,"heightRatio":0.18482490272373542,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":34},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":" days"}],"colorizeRows":true,"colors":[{"id":"3PVw3hQuZUzyar7Js3mMH","name":"Ectoplasm","type":"scale","hex":"#DA6FF1"},{"id":"O34ux-D8Xq_1-eeWRyYYH","name":"Ectoplasm","type":"scale","hex":"#00717A"},{"id":"P04RoKOHBdLdvfrfFbn0F","name":"Ectoplasm","type":"scale","hex":"#ACFF76"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Stenographer PCAP Retention","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"pcapage\")\n |> filter(fn: (r) => r[\"_field\"] == \"seconds\")\n |> map(fn: (r) => ({ r with _value: r._value / (24.0 * 3600.0)}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])"},{"query":"import \"join\"\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"pcapage\")\n |> filter(fn: (r) => r[\"_field\"] == \"seconds\")\n |> map(fn: (r) => ({ r with _value: r._value / (24.0 * 3600.0)}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> group(columns: [\"_field\",\"host\"])\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":4,"widthRatio":1,"xCol":"_time","xPos":8,"yCol":"_value","yPos":46},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Suricata Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"suridrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":9},{"colors":[{"id":"0","name":"viridian","type":"min","hex":"#32B08C"},{"id":"5IArg2lDb8KvnphywgUXa","name":"pineapple","type":"threshold","hex":"#FFB94A","value":50},{"id":"yFhH3mtavjuAZh6cEt5lx","name":"fire","type":"threshold","hex":"#DC4E58","value":70},{"id":"1","name":"ruby","type":"max","hex":"#BF3D5E","value":100}],"decimalPlaces":0,"height":4,"kind":"Gauge","name":"Swap Usage","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"swap\")\n |> filter(fn: (r) => r[\"_field\"] == \"used_percent\")\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n: 1)\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"}],"staticLegend":{},"suffix":"%","tickSuffix":"%","width":3,"xPos":9,"yPos":2},{"colors":[{"id":"base","name":"white","type":"text","hex":"#ffffff"}],"fieldOptions":[{"displayName":"Host","fieldName":"host","visible":true},{"displayName":"Name","fieldName":"container_name","visible":true},{"displayName":"Status","fieldName":"container_status","visible":true},{"displayName":"OOM Killed","fieldName":"_value","visible":true},{"displayName":"_start","fieldName":"_start","visible":true},{"displayName":"_stop","fieldName":"_stop","visible":true},{"displayName":"_time","fieldName":"_time","visible":true},{"displayName":"_field","fieldName":"_field","visible":true},{"displayName":"_measurement","fieldName":"_measurement","visible":true},{"displayName":"engine_host","fieldName":"engine_host","visible":true},{"displayName":"role","fieldName":"role","visible":true},{"displayName":"server_version","fieldName":"server_version","visible":true},{"displayName":"container_image","fieldName":"container_image","visible":true},{"displayName":"container_version","fieldName":"container_version","visible":true},{"displayName":"description","fieldName":"description","visible":true},{"displayName":"maintainer","fieldName":"maintainer","visible":true},{"displayName":"io.k8s.description","fieldName":"io.k8s.description","visible":true},{"displayName":"io.k8s.display-name","fieldName":"io.k8s.display-name","visible":true},{"displayName":"license","fieldName":"license","visible":true},{"displayName":"name","fieldName":"name","visible":true},{"displayName":"org.label-schema.build-date","fieldName":"org.label-schema.build-date","visible":true},{"displayName":"org.label-schema.license","fieldName":"org.label-schema.license","visible":true},{"displayName":"org.label-schema.name","fieldName":"org.label-schema.name","visible":true},{"displayName":"org.label-schema.schema-version","fieldName":"org.label-schema.schema-version","visible":true},{"displayName":"org.label-schema.url","fieldName":"org.label-schema.url","visible":true},{"displayName":"org.label-schema.vcs-ref","fieldName":"org.label-schema.vcs-ref","visible":true},{"displayName":"org.label-schema.vcs-url","fieldName":"org.label-schema.vcs-url","visible":true},{"displayName":"org.label-schema.vendor","fieldName":"org.label-schema.vendor","visible":true},{"displayName":"org.label-schema.version","fieldName":"org.label-schema.version","visible":true},{"displayName":"org.opencontainers.image.created","fieldName":"org.opencontainers.image.created","visible":true},{"displayName":"org.opencontainers.image.licenses","fieldName":"org.opencontainers.image.licenses","visible":true},{"displayName":"org.opencontainers.image.title","fieldName":"org.opencontainers.image.title","visible":true},{"displayName":"org.opencontainers.image.vendor","fieldName":"org.opencontainers.image.vendor","visible":true},{"displayName":"release","fieldName":"release","visible":true},{"displayName":"summary","fieldName":"summary","visible":true},{"displayName":"url","fieldName":"url","visible":true},{"displayName":"vendor","fieldName":"vendor","visible":true},{"displayName":"version","fieldName":"version","visible":true},{"displayName":"org.label-schema.usage","fieldName":"org.label-schema.usage","visible":true},{"displayName":"org.opencontainers.image.documentation","fieldName":"org.opencontainers.image.documentation","visible":true},{"displayName":"org.opencontainers.image.revision","fieldName":"org.opencontainers.image.revision","visible":true},{"displayName":"org.opencontainers.image.source","fieldName":"org.opencontainers.image.source","visible":true},{"displayName":"org.opencontainers.image.url","fieldName":"org.opencontainers.image.url","visible":true},{"displayName":"org.opencontainers.image.version","fieldName":"org.opencontainers.image.version","visible":true},{"displayName":"org.opencontainers.image.description","fieldName":"org.opencontainers.image.description","visible":true}],"height":4,"kind":"Table","name":"Most Recent Container Events","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"docker_container_status\")\n |> filter(fn: (r) => r[\"_field\"] == \"oomkilled\")\n |> filter(fn: (r) => r[\"container_status\"] != \"running\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"container_name\", \"host\"])\n |> last()\n |> group()\n |> keep(columns: [\"_value\", \"container_name\", \"host\", \"container_status\"])"}],"staticLegend":{},"tableOptions":{"sortBy":"container_name","verticalTimeAxis":true},"timeFormat":"YYYY-MM-DD HH:mm:ss","width":3,"xPos":9,"yPos":6},{"axes":[{"base":"10","name":"x","scale":"linear"},{"name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"TtgHQAXNep94KBgtu48C_","name":"Cthulhu","type":"scale","hex":"#FDC44F"},{"id":"_IuzkORho_8QXTE6vMllv","name":"Cthulhu","type":"scale","hex":"#007C76"},{"id":"bUszW_YI_9oColDbLNQ-d","name":"Cthulhu","type":"scale","hex":"#8983FF"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Zeek Capture Loss","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekcaptureloss\")\n |> filter(fn: (r) => r[\"_field\"] == \"loss\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"},{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nroleFilter = (tables=<-) =>\n if v.Role != \"(All)\" then\n tables |> filter(fn: (r) => r[\"role\"] == v.Role)\n else\n tables\n\nfrom(bucket: \"telegraf/so_long_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"zeekcaptureloss\")\n |> filter(fn: (r) => r[\"_field\"] == \"loss\")\n |> hostFilter()\n |> roleFilter()\n |> group(columns: [\"_field\", \"host\", \"role\"])\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"Trend\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":3,"widthRatio":1,"xCol":"_time","xPos":9,"yCol":"_value","yPos":42},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"Stenographer Loss","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n\nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"stenodrop\")\n |> filter(fn: (r) => r[\"_field\"] == \"drop\")\n |> map(fn: (r) => ({r with _value: r._value * 100.0}))\n |> hostFilter()\n |> group(columns: [\"host\"])\n |> last()\n |> aggregateWindow(every: v.windowPeriod, fn: mean)\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":"%","width":1,"xPos":10},{"colors":[{"id":"base","name":"laser","type":"text","hex":"#00C9FF"}],"decimalPlaces":1,"height":2,"kind":"Single_Stat","name":"PCAP Retention","queries":[{"query":"hostFilter = (tables=<-) =>\n if v.Host != \"(All)\" then\n tables |> filter(fn: (r) => r[\"host\"] == v.Host)\n else\n tables\n \nfrom(bucket: \"telegraf/so_short_term\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"pcapage\")\n |> filter(fn: (r) => r[\"_field\"] == \"seconds\")\n |> hostFilter()\n |> map(fn: (r) => ({r with _value: r._value / (24.0 * 60.0 * 60.0)}))\n |> group(columns: [\"host\"])\n |> last()\n |> highestMax(n:1)"}],"staticLegend":{},"suffix":" days","width":1,"xPos":11}],"description":"Visualize the Security Onion grid performance metrics and alarm statuses.","name":"Security Onion Performance"}}] \ No newline at end of file From 59097070efc3391469418ff25beb77c04863e33e Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 28 May 2024 12:17:43 -0400 Subject: [PATCH 105/507] Revert "Remove unneeded jolokia aggregate metrics to reduce data ingested to influx" This reverts commit 1c1a1a1d3fc0138b3df81c19d61e80a9f4f62ec3. --- salt/telegraf/etc/telegraf.conf | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/salt/telegraf/etc/telegraf.conf b/salt/telegraf/etc/telegraf.conf index ecfb0730a..1e8d9d3fe 100644 --- a/salt/telegraf/etc/telegraf.conf +++ b/salt/telegraf/etc/telegraf.conf @@ -247,25 +247,6 @@ [[inputs.jolokia2_agent]] name_prefix= "kafka_" urls = ["http://localhost:8778/jolokia"] - fieldexclude = [ - "*.EventType", - "*.FifteenMinuteRate", - "*.FiveMinuteRate", - "*.MeanRate", - "*.OneMinuteRate", - "*.RateUnit", - "*.LatencyUnit", - "*.50thPercentile", - "*.75thPercentile", - "*.95thPercentile", - "*.98thPercentile", - "*.99thPercentile", - "*.999thPercentile", - "*.Min", - "*.Mean", - "*.Max", - "*.StdDev" - ] [[inputs.jolokia2_agent.metric]] name = "topics" From 876d86048834c0dcbdf032f5f2cfa7fe61b52967 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 29 May 2024 16:40:15 -0400 Subject: [PATCH 106/507] elastic agent should be able to communicate over 9092 for sending logs to kafka brokers Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/firewall/defaults.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/salt/firewall/defaults.yaml b/salt/firewall/defaults.yaml index 6dd3fead3..9d943ccab 100644 --- a/salt/firewall/defaults.yaml +++ b/salt/firewall/defaults.yaml @@ -77,6 +77,7 @@ firewall: elastic_agent_data: tcp: - 5055 + - 9092 udp: [] elastic_agent_update: tcp: From d9ec556061bbef5fe3a6215d0707bc6746182427 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 29 May 2024 16:41:02 -0400 Subject: [PATCH 107/507] Update some annotations and defaults Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/defaults.yaml | 7 ++++++- salt/kafka/soc_kafka.yaml | 10 ++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/salt/kafka/defaults.yaml b/salt/kafka/defaults.yaml index 9a8c05c43..56ad9252f 100644 --- a/salt/kafka/defaults.yaml +++ b/salt/kafka/defaults.yaml @@ -50,4 +50,9 @@ kafka: log_x_retention_x_hours: 168 log_x_segment_x_bytes: 1073741824 node_x_id: - process_x_roles: controller \ No newline at end of file + process_x_roles: controller + ssl_x_keystore_x_location: /etc/pki/kafka.p12 + ssl_x_keystore_x_type: PKCS12 + ssl_x_keystore_x_password: changeit + ssl_x_truststore_x_location: /etc/pki/java/sos/cacerts + ssl_x_truststore_x_password: changeit \ No newline at end of file diff --git a/salt/kafka/soc_kafka.yaml b/salt/kafka/soc_kafka.yaml index ba673fa68..b1de1f243 100644 --- a/salt/kafka/soc_kafka.yaml +++ b/salt/kafka/soc_kafka.yaml @@ -1,6 +1,6 @@ kafka: enabled: - description: Enable or disable Kafka. + description: Enable or disable Kafka. Recommended to have desired configuration staged prior to enabling Kafka. Join all receiver nodes to grid that will be converted to Kafka nodes, configure kafka_controllers with the hostnames of the nodes you want to act as controllers, and configure the default_replication_factor to the desired value for your redundancy needs. helpLink: kafka.html cluster_id: description: The ID of the Kafka cluster. @@ -13,7 +13,9 @@ kafka: sensitive: True helpLink: kafka.html kafka_controllers: - description: A list of Security Onion grid members that should act as KRaft controllers for this Kafka cluster. By default, the grid manager will use a 'combined' role where it will act as both a broker and controller. All other nodes will default to broker roles. + description: A list of Security Onion grid members that should act as controllers for this Kafka cluster. By default, the grid manager will use a 'combined' role where it will act as both a broker and controller. Keep total Kafka controllers to an odd number and ensure you do not assign ALL your Kafka nodes as controllers or this Kafka cluster will not start. + forcedType: "[]string" + multiline: True helpLink: kafka.html config: broker: @@ -27,7 +29,7 @@ kafka: forcedType: bool helpLink: kafka.html default_x_replication_x_factor: - description: The default replication factor for automatically created topics. + description: The default replication factor for automatically created topics. This value must be less than the amount of brokers in the cluster. Hosts specified in kafka_controllers should not be counted towards total broker count. title: default.replication.factor forcedType: int helpLink: kafka.html @@ -198,7 +200,7 @@ kafka: forcedType: int helpLink: kafka.html process_x_roles: - description: The role performed by KRaft controller node. + description: The role performed by controller node. title: process.roles readonly: True helpLink: kafka.html \ No newline at end of file From 386be4e746b08ebf4642ec82a2f7cecb84efe6e6 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 29 May 2024 16:48:39 -0400 Subject: [PATCH 108/507] WIP: Manage Kafka nodes pillar role value This way when kafka_controllers is updated the pillar value gets updated and any non-controllers get updated to revert to 'broker' only role. Needs more testing when a new controller joins in this manner Kafka errors due to cluster metadata being out of sync. One solution is to remove /nsm/kafka/data/__cluster_metadata-0/quorum-state and restart cluster. Alternative is working with Kafka cli tools to inform cluster of new voter, likely best option but requires a wrapper script of some sort to be created for updating cluster in-place. Easiest option is to have all receivers join grid and then configure Kafka with specific controllers via SOC UI prior to enabling Kafka. This way Kafka cluster comes up in the desired configuration with no need for immediately modifying cluster Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/config.map.jinja | 19 ++++++------------- salt/kafka/nodes.map.jinja | 34 ++++++++++++++++++++++++++++++---- 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/salt/kafka/config.map.jinja b/salt/kafka/config.map.jinja index 4e82eac42..e5b77db11 100644 --- a/salt/kafka/config.map.jinja +++ b/salt/kafka/config.map.jinja @@ -12,19 +12,12 @@ {# Create list of KRaft controllers #} {% set controllers = [] %} -{% if KAFKA_CONTROLLERS_PILLAR != none %} -{% for node in KAFKA_CONTROLLERS_PILLAR %} -{# Check that the user input for kafka_controllers pillar exists as a kafka:node value #} -{% if node in KAFKA_NODES_PILLAR %} -{% do controllers.append(KAFKA_NODES_PILLAR[node]['nodeid'] ~ '@' ~ node ~ ':9093') %} -{% endif %} -{% endfor %} -{% endif %} -{# Ensure in the event that the SOC controllers pillar has a single hostname and that hostname doesn't exist in kafka:nodes - that a controller is still set for the Kafka cluster. Defaulting to the grid manager #} -{% if controllers | length < 1 %} -{% do controllers.append(KAFKA_NODES_PILLAR[GLOBALS.manager]['nodeid'] ~ "@" ~ GLOBALS.manager ~ ":9093") %} -{% endif %} +{# Check for Kafka nodes with controller in process_x_roles #} +{% for node in KAFKA_NODES_PILLAR %} +{% if 'controller' in KAFKA_NODES_PILLAR[node].role %} +{% do controllers.append(KAFKA_NODES_PILLAR[node].nodeid ~ "@" ~ node ~ ":9093") %} +{% endif %} +{% endfor %} {% set kafka_controller_quorum_voters = ','.join(controllers) %} diff --git a/salt/kafka/nodes.map.jinja b/salt/kafka/nodes.map.jinja index 9b4979e92..e629ff783 100644 --- a/salt/kafka/nodes.map.jinja +++ b/salt/kafka/nodes.map.jinja @@ -8,6 +8,10 @@ {% from 'vars/globals.map.jinja' import GLOBALS %} {% set process_x_roles = KAFKADEFAULTS.kafka.config.broker.process_x_roles %} +{# Set grid manager to default process_x_roles of broker,controller until overridden via SOC UI #} +{% if grains.role in ["so-standalone", "so-manager", "so-managersearch"] %} +{% set process_x_roles = 'broker,controller'%} +{% endif %} {% set current_kafkanodes = salt.saltutil.runner( 'mine.get', @@ -16,6 +20,7 @@ tgt_type='compound') %} {% set STORED_KAFKANODES = salt['pillar.get']('kafka:nodes', default=None) %} +{% set KAFKA_CONTROLLERS_PILLAR = salt['pillar.get']('kafka:kafka_controllers', default=None) %} {% set existing_ids = [] %} @@ -43,10 +48,6 @@ {% set NEW_KAFKANODES = {} %} {% for minionid, ip in current_kafkanodes.items() %} {% set hostname = minionid.split('_')[0] %} -{# Override the default process_x_roles for manager and set to 'broker,controller'. Changes from SOC UI will overwrite this #} -{% if hostname == GLOBALS.manager %} -{% set process_x_roles = 'broker,controller' %} -{% endif %} {% if STORED_KAFKANODES != none and hostname not in STORED_KAFKANODES.items() %} {% set new_id = available_ids.pop(0) %} {% do NEW_KAFKANODES.update({hostname: {'nodeid': new_id, 'ip': ip[0], 'role': process_x_roles }}) %} @@ -67,3 +68,28 @@ {% do COMBINED_KAFKANODES.update({node: details}) %} {% endfor %} {% endif %} + +{# Update the process_x_roles value for any host in the kafka_controllers_pillar configured from SOC UI #} +{% set ns = namespace(has_controller=false) %} +{% if KAFKA_CONTROLLERS_PILLAR != none %} +{% for hostname in KAFKA_CONTROLLERS_PILLAR %} +{% if hostname in COMBINED_KAFKANODES %} +{% do COMBINED_KAFKANODES[hostname].update({'role': 'controller'}) %} +{% set ns.has_controller = true %} +{% endif %} +{% endfor %} +{% for hostname in COMBINED_KAFKANODES %} +{% if hostname not in KAFKA_CONTROLLERS_PILLAR %} +{% do COMBINED_KAFKANODES[hostname].update({'role': 'broker'}) %} +{% endif %} +{% endfor %} +{# If the kafka_controllers_pillar is NOT empty check that atleast one node contains the controller role. + otherwise default to GLOBALS.manager having broker,controller role #} +{% if not ns.has_controller %} +{% do COMBINED_KAFKANODES[GLOBALS.manager].update({'role': 'broker,controller'}) %} +{% endif %} +{# If kafka_controllers_pillar is empty, default to having grid manager as 'broker,controller' + so there is always atleast 1 controller in the cluster #} +{% else %} +{% do COMBINED_KAFKANODES[GLOBALS.manager].update({'role': 'broker,controller'}) %} +{% endif %} \ No newline at end of file From 62bdb2627aea9378f7c11ae9a72f04cbf2a14e96 Mon Sep 17 00:00:00 2001 From: Mike Reeves Date: Wed, 29 May 2024 16:53:27 -0400 Subject: [PATCH 109/507] Update VERSION --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index b3c5d8c27..d2587d896 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.4.70 +2.4.80 From 949cea95f4428f259fbaac39f02b6f22d1b14ef5 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 29 May 2024 23:19:44 -0400 Subject: [PATCH 110/507] Update pillarWatch config for global.pipeline Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/salt/files/engines.conf | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/salt/salt/files/engines.conf b/salt/salt/files/engines.conf index b12ba02ef..027521386 100644 --- a/salt/salt/files/engines.conf +++ b/salt/salt/files/engines.conf @@ -39,9 +39,20 @@ engines: from: '*': to: - '*': + 'KAFKA': - cmd.run: - cmd: salt-call saltutil.kill_all_jobs + cmd: /usr/sbin/so-yaml.py replace /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls kafka.enabled True - cmd.run: - cmd: salt-call state.highstate + cmd: salt -C 'G@role:so-standalone or G@role:so-manager or G@role:so-managersearch or G@role:so-receiver' saltutil.kill_all_jobs + - cmd.run: + cmd: salt -C 'G@role:so-standalone or G@role:so-manager or G@role:so-managersearch or G@role:so-receiver' state.highstate + 'KAFKA': + to: + 'REDIS': + - cmd.run: + cmd: /usr/sbin/so-yaml.py replace /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls kafka.enabled False + - cmd.run: + cmd: salt -C 'G@role:so-standalone or G@role:so-manager or G@role:so-managersearch or G@role:so-receiver' saltutil.kill_all_jobs + - cmd.run: + cmd: salt -C 'G@role:so-standalone or G@role:so-manager or G@role:so-managersearch or G@role:so-receiver' state.highstate interval: 10 From 55c5ea5c4cf75f8c73e2762ce6382f0adbe9d120 Mon Sep 17 00:00:00 2001 From: Wes Date: Thu, 30 May 2024 16:58:56 +0000 Subject: [PATCH 111/507] Add template for Suricata alerts --- salt/elasticsearch/defaults.yaml | 111 +++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) diff --git a/salt/elasticsearch/defaults.yaml b/salt/elasticsearch/defaults.yaml index e54d58c3b..6ecdc96a1 100644 --- a/salt/elasticsearch/defaults.yaml +++ b/salt/elasticsearch/defaults.yaml @@ -11088,6 +11088,117 @@ elasticsearch: set_priority: priority: 50 min_age: 30d + so-suricata_x_alerts: + index_sorting: false + index_template: + composed_of: + - agent-mappings + - dtc-agent-mappings + - base-mappings + - dtc-base-mappings + - client-mappings + - dtc-client-mappings + - cloud-mappings + - container-mappings + - data_stream-mappings + - destination-mappings + - dtc-destination-mappings + - pb-override-destination-mappings + - dll-mappings + - dns-mappings + - dtc-dns-mappings + - ecs-mappings + - dtc-ecs-mappings + - error-mappings + - event-mappings + - dtc-event-mappings + - file-mappings + - dtc-file-mappings + - group-mappings + - host-mappings + - dtc-host-mappings + - http-mappings + - dtc-http-mappings + - log-mappings + - network-mappings + - dtc-network-mappings + - observer-mappings + - dtc-observer-mappings + - orchestrator-mappings + - organization-mappings + - package-mappings + - process-mappings + - dtc-process-mappings + - registry-mappings + - related-mappings + - rule-mappings + - dtc-rule-mappings + - server-mappings + - service-mappings + - dtc-service-mappings + - source-mappings + - dtc-source-mappings + - pb-override-source-mappings + - suricata-mappings + - threat-mappings + - tls-mappings + - tracing-mappings + - url-mappings + - user_agent-mappings + - dtc-user_agent-mappings + - vulnerability-mappings + - common-settings + - common-dynamic-mappings + data_stream: {} + index_patterns: + - logs-suricata.alerts-* + priority: 500 + template: + mappings: + date_detection: false + dynamic_templates: + - strings_as_keyword: + mapping: + ignore_above: 1024 + type: keyword + match_mapping_type: string + settings: + index: + lifecycle: + name: so-suricata.alerts-logs + mapping: + total_fields: + limit: 5000 + number_of_replicas: 0 + number_of_shards: 1 + refresh_interval: 30s + sort: + field: '@timestamp' + order: desc + policy: + phases: + cold: + actions: + set_priority: + priority: 0 + min_age: 60d + delete: + actions: + delete: {} + min_age: 365d + hot: + actions: + rollover: + max_age: 1d + max_primary_shard_size: 50gb + set_priority: + priority: 100 + min_age: 0ms + warm: + actions: + set_priority: + priority: 50 + min_age: 30d so-syslog: index_sorting: false index_template: From e83135440198e8ed2bb0f79e420e6abd7d73e7be Mon Sep 17 00:00:00 2001 From: Wes Date: Thu, 30 May 2024 17:00:11 +0000 Subject: [PATCH 112/507] Add Suricata alerts setting for configuration --- salt/elasticsearch/soc_elasticsearch.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/salt/elasticsearch/soc_elasticsearch.yaml b/salt/elasticsearch/soc_elasticsearch.yaml index 000fd60b7..f56ed313e 100644 --- a/salt/elasticsearch/soc_elasticsearch.yaml +++ b/salt/elasticsearch/soc_elasticsearch.yaml @@ -521,6 +521,7 @@ elasticsearch: so-endgame: *indexSettings so-idh: *indexSettings so-suricata: *indexSettings + so-suricata_x_alerts: *indexSettings so-import: *indexSettings so-kratos: *indexSettings so-kismet: *indexSettings From 48713a4e7b1eeabe0568390359ce9450e3ef0130 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Thu, 30 May 2024 13:00:34 -0400 Subject: [PATCH 113/507] revert version for soup test before 2.4.80 pipeline unpaused Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index d2587d896..b3c5d8c27 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.4.80 +2.4.70 From 2c635bce6201859256af9891c4ae76411e8d38de Mon Sep 17 00:00:00 2001 From: Wes Date: Thu, 30 May 2024 17:02:31 +0000 Subject: [PATCH 114/507] Set index for Suricata alerts --- salt/elasticsearch/files/ingest/suricata.alert | 1 + 1 file changed, 1 insertion(+) diff --git a/salt/elasticsearch/files/ingest/suricata.alert b/salt/elasticsearch/files/ingest/suricata.alert index 87d5144ed..68e0a5cb3 100644 --- a/salt/elasticsearch/files/ingest/suricata.alert +++ b/salt/elasticsearch/files/ingest/suricata.alert @@ -1,6 +1,7 @@ { "description" : "suricata.alert", "processors" : [ + { "set": { "field": "_index", "value": "logs-suricata.alerts-so" } }, { "set": { "field": "tags","value": "alert" }}, { "rename":{ "field": "message2.alert", "target_field": "rule", "ignore_failure": true } }, { "rename":{ "field": "rule.signature", "target_field": "rule.name", "ignore_failure": true } }, From 7702f05756cf83830013e41217a756aa87c5876d Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Thu, 30 May 2024 15:00:32 -0400 Subject: [PATCH 115/507] upgrade salt 3006.8. soup for 2.4.80 --- salt/manager/tools/sbin/soup | 12 ++++++++++++ salt/salt/master.defaults.yaml | 2 +- salt/salt/minion.defaults.yaml | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index 525fce3f6..30f40ee5a 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -358,6 +358,7 @@ preupgrade_changes() { [[ "$INSTALLEDVERSION" == 2.4.40 ]] && up_to_2.4.50 [[ "$INSTALLEDVERSION" == 2.4.50 ]] && up_to_2.4.60 [[ "$INSTALLEDVERSION" == 2.4.60 ]] && up_to_2.4.70 + [[ "$INSTALLEDVERSION" == 2.4.70 ]] && up_to_2.4.80 true } @@ -375,6 +376,7 @@ postupgrade_changes() { [[ "$POSTVERSION" == 2.4.40 ]] && post_to_2.4.50 [[ "$POSTVERSION" == 2.4.50 ]] && post_to_2.4.60 [[ "$POSTVERSION" == 2.4.60 ]] && post_to_2.4.70 + [[ "$POSTVERSION" == 2.4.70 ]] && post_to_2.4.80 true } @@ -448,6 +450,11 @@ post_to_2.4.70() { POSTVERSION=2.4.70 } +post_to_2.4.80() { + echo "Nothing to apply" + POSTVERSION=2.4.80 +} + repo_sync() { echo "Sync the local repo." su socore -c '/usr/sbin/so-repo-sync' || fail "Unable to complete so-repo-sync." @@ -595,6 +602,11 @@ up_to_2.4.70() { INSTALLEDVERSION=2.4.70 } +up_to_2.4.80() { + echo "Nothing to do for 2.4.80" + INSTALLEDVERSION=2.4.80 +} + add_detection_test_pillars() { if [[ -n "$SOUP_INTERNAL_TESTING" ]]; then echo "Adding detection pillar values for automated testing" diff --git a/salt/salt/master.defaults.yaml b/salt/salt/master.defaults.yaml index 19677f70b..24ba29d98 100644 --- a/salt/salt/master.defaults.yaml +++ b/salt/salt/master.defaults.yaml @@ -1,4 +1,4 @@ # version cannot be used elsewhere in this pillar as soup is grepping for it to determine if Salt needs to be patched salt: master: - version: 3006.6 + version: 3006.8 diff --git a/salt/salt/minion.defaults.yaml b/salt/salt/minion.defaults.yaml index 2e4ebc93e..dddd6683b 100644 --- a/salt/salt/minion.defaults.yaml +++ b/salt/salt/minion.defaults.yaml @@ -1,6 +1,6 @@ # version cannot be used elsewhere in this pillar as soup is grepping for it to determine if Salt needs to be patched salt: minion: - version: 3006.6 + version: 3006.8 check_threshold: 3600 # in seconds, threshold used for so-salt-minion-check. any value less than 600 seconds may cause a lot of salt-minion restarts since the job to touch the file occurs every 5-8 minutes by default service_start_delay: 30 # in seconds. From dbb99d03679f2593533e0cb806ba31b5bdbf91d2 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Thu, 30 May 2024 15:10:15 -0400 Subject: [PATCH 116/507] Remove bad config Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/nodes.map.jinja | 4 ---- 1 file changed, 4 deletions(-) diff --git a/salt/kafka/nodes.map.jinja b/salt/kafka/nodes.map.jinja index e629ff783..fa33adda5 100644 --- a/salt/kafka/nodes.map.jinja +++ b/salt/kafka/nodes.map.jinja @@ -8,10 +8,6 @@ {% from 'vars/globals.map.jinja' import GLOBALS %} {% set process_x_roles = KAFKADEFAULTS.kafka.config.broker.process_x_roles %} -{# Set grid manager to default process_x_roles of broker,controller until overridden via SOC UI #} -{% if grains.role in ["so-standalone", "so-manager", "so-managersearch"] %} -{% set process_x_roles = 'broker,controller'%} -{% endif %} {% set current_kafkanodes = salt.saltutil.runner( 'mine.get', From 00b5a5cc0c9270c434ed0e55e1e5611497652e69 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Thu, 30 May 2024 15:13:16 -0400 Subject: [PATCH 117/507] Revert "revert version for soup test before 2.4.80 pipeline unpaused" This reverts commit 48713a4e7b1eeabe0568390359ce9450e3ef0130. --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index b3c5d8c27..d2587d896 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.4.70 +2.4.80 From 85c269e69758402cc1976187ca346016b29eac2e Mon Sep 17 00:00:00 2001 From: Corey Ogburn Date: Thu, 30 May 2024 15:59:03 -0600 Subject: [PATCH 118/507] Added TemplateDetections To Detection ClientParams The UI can now insert templates when you select a Detection language. These are those templates, annotated. --- salt/soc/defaults.yaml | 33 +++++++++++++++++++++++++++++++++ salt/soc/soc_soc.yaml | 13 ++++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/salt/soc/defaults.yaml b/salt/soc/defaults.yaml index 9f5faf50b..f5628f3c3 100644 --- a/salt/soc/defaults.yaml +++ b/salt/soc/defaults.yaml @@ -2253,3 +2253,36 @@ soc: severityTranslations: minor: low major: high + templateDetections: + suricata: | + alert tcp any any <> any any (msg:""; sid:[publicId];) + strelka: | + rule { + meta: + description = ""; + strings: + $x = \"string\"; + condition: + all of them; + } + elastalert: | + title: + id: [publicId] + status: + description: + references: + - + author: + date: + tags: + - + logsource: + product: + category: + detection: + selection: + condition: selection + falsepositives: + - + level: + diff --git a/salt/soc/soc_soc.yaml b/salt/soc/soc_soc.yaml index 1f64eb0bc..47d051e4e 100644 --- a/salt/soc/soc_soc.yaml +++ b/salt/soc/soc_soc.yaml @@ -119,7 +119,7 @@ soc: advanced: True rulesRepos: default: &eerulesRepos - description: "Custom Git repositories to pull Sigma rules from. 'license' field is required, 'folder' is optional. 'community' disables some management options for the imported rules - they can't be deleted or edited, just tuned, duplicated and Enabled | Disabled. The new settings will be applied within 15 minutes. At that point, you will need to wait for the scheduled rule update to take place (by default, every 24 hours), or you can force the update by nagivating to Detections --> Options dropdown menu --> Elastalert --> Full Update." + description: "Custom Git repositories to pull Sigma rules from. 'license' field is required, 'folder' is optional. 'community' disables some management options for the imported rules - they can't be deleted or edited, just tuned, duplicated and Enabled | Disabled. The new settings will be applied within 15 minutes. At that point, you will need to wait for the scheduled rule update to take place (by default, every 24 hours), or you can force the update by nagivating to Detections --> Options dropdown menu --> Elastalert --> Full Update." global: True advanced: True forcedType: "[]{}" @@ -319,6 +319,17 @@ soc: cases: *appSettings dashboards: *appSettings detections: *appSettings + detection: + templateDetections: + suricata: + description: The template used when creating a new Suricata detection. [publicId] will be replaced with an unused Public Id. + multiline: True + strelka: + description: The template used when creating a new Strelka detection. + multiline: True + elastalert: + description: The template used when creating a new ElastAlert detection. [publicId] will be replaced with an unused Public Id. + multiline: True grid: maxUploadSize: description: The maximum number of bytes for an uploaded PCAP import file. From e3ea4776c70cf472c195c2bd50d895ba3cd4d5d4 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Fri, 31 May 2024 13:34:28 -0400 Subject: [PATCH 119/507] Update kafka nodes pillar before running highstate with pillarwatch engine. This allows configuring your Kafka controllers before cluster comes up for the first time Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/salt/files/engines.conf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/salt/salt/files/engines.conf b/salt/salt/files/engines.conf index 027521386..69d596ed0 100644 --- a/salt/salt/files/engines.conf +++ b/salt/salt/files/engines.conf @@ -44,6 +44,8 @@ engines: cmd: /usr/sbin/so-yaml.py replace /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls kafka.enabled True - cmd.run: cmd: salt -C 'G@role:so-standalone or G@role:so-manager or G@role:so-managersearch or G@role:so-receiver' saltutil.kill_all_jobs + - cmd.run: + cmd: salt-call state.apply kafka.nodes - cmd.run: cmd: salt -C 'G@role:so-standalone or G@role:so-manager or G@role:so-managersearch or G@role:so-receiver' state.highstate 'KAFKA': From f396247838bd3c3cf8f3f0c49d20b500a5f4551b Mon Sep 17 00:00:00 2001 From: Wes Date: Fri, 31 May 2024 17:46:19 +0000 Subject: [PATCH 120/507] Add index templates and lifecycle policies --- salt/elasticsearch/defaults.yaml | 72 ++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/salt/elasticsearch/defaults.yaml b/salt/elasticsearch/defaults.yaml index 6ecdc96a1..36d673d70 100644 --- a/salt/elasticsearch/defaults.yaml +++ b/salt/elasticsearch/defaults.yaml @@ -170,6 +170,78 @@ elasticsearch: set_priority: priority: 50 min_age: 30d + so-items: + index_sorting: false + index_template: + composed_of: + - so-items-mappings + index_patterns: + - .items-default-** + priority: 500 + template: + mappings: + date_detection: false + settings: + index: + lifecycle: + name: so-items-logs + rollover_alias: ".items-default" + routing: + allocation: + include: + _tier_preference: "data_content" + mapping: + total_fields: + limit: 10000 + number_of_replicas: 0 + number_of_shards: 1 + refresh_interval: 30s + sort: + field: '@timestamp' + order: desc + policy: + phases: + hot: + actions: + rollover: + max_size: 50gb + min_age: 0ms + so-lists: + index_sorting: false + index_template: + composed_of: + - so-lists-mappings + index_patterns: + - .lists-default-** + priority: 500 + template: + mappings: + date_detection: false + settings: + index: + lifecycle: + name: so-lists-logs + rollover_alias: ".lists-default" + routing: + allocation: + include: + _tier_preference: "data_content" + mapping: + total_fields: + limit: 10000 + number_of_replicas: 0 + number_of_shards: 1 + refresh_interval: 30s + sort: + field: '@timestamp' + order: desc + policy: + phases: + hot: + actions: + rollover: + max_size: 50gb + min_age: 0ms so-case: index_sorting: false index_template: From a8c231ad8c59a09de4c134b6068d3f38bebe90d5 Mon Sep 17 00:00:00 2001 From: Wes Date: Fri, 31 May 2024 17:47:01 +0000 Subject: [PATCH 121/507] Add component templates --- .../elastic-agent/so-items-mappings.json | 112 ++++++++++++++++++ .../elastic-agent/so-lists-mappings.json | 55 +++++++++ 2 files changed, 167 insertions(+) create mode 100644 salt/elasticsearch/templates/component/elastic-agent/so-items-mappings.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/so-lists-mappings.json diff --git a/salt/elasticsearch/templates/component/elastic-agent/so-items-mappings.json b/salt/elasticsearch/templates/component/elastic-agent/so-items-mappings.json new file mode 100644 index 000000000..85e6c1984 --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/so-items-mappings.json @@ -0,0 +1,112 @@ +{ + "template": { + "mappings": { + "dynamic": "strict", + "properties": { + "binary": { + "type": "binary" + }, + "boolean": { + "type": "boolean" + }, + "byte": { + "type": "byte" + }, + "created_at": { + "type": "date" + }, + "created_by": { + "type": "keyword" + }, + "date": { + "type": "date" + }, + "date_nanos": { + "type": "date_nanos" + }, + "date_range": { + "type": "date_range" + }, + "deserializer": { + "type": "keyword" + }, + "double": { + "type": "double" + }, + "double_range": { + "type": "double_range" + }, + "float": { + "type": "float" + }, + "float_range": { + "type": "float_range" + }, + "geo_point": { + "type": "geo_point" + }, + "geo_shape": { + "type": "geo_shape" + }, + "half_float": { + "type": "half_float" + }, + "integer": { + "type": "integer" + }, + "integer_range": { + "type": "integer_range" + }, + "ip": { + "type": "ip" + }, + "ip_range": { + "type": "ip_range" + }, + "keyword": { + "type": "keyword" + }, + "list_id": { + "type": "keyword" + }, + "long": { + "type": "long" + }, + "long_range": { + "type": "long_range" + }, + "meta": { + "type": "object", + "enabled": false + }, + "serializer": { + "type": "keyword" + }, + "shape": { + "type": "shape" + }, + "short": { + "type": "short" + }, + "text": { + "type": "text" + }, + "tie_breaker_id": { + "type": "keyword" + }, + "updated_at": { + "type": "date" + }, + "updated_by": { + "type": "keyword" + } + } + }, + "aliases": {} + }, + "version": 2, + "_meta": { + "managed": true, + "description": "default mappings for the .items index template installed by Kibana/Security" + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/so-lists-mappings.json b/salt/elasticsearch/templates/component/elastic-agent/so-lists-mappings.json new file mode 100644 index 000000000..b2b5fda23 --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/so-lists-mappings.json @@ -0,0 +1,55 @@ +{ + "template": { + "mappings": { + "dynamic": "strict", + "properties": { + "created_at": { + "type": "date" + }, + "created_by": { + "type": "keyword" + }, + "description": { + "type": "keyword" + }, + "deserializer": { + "type": "keyword" + }, + "immutable": { + "type": "boolean" + }, + "meta": { + "type": "object", + "enabled": false + }, + "name": { + "type": "keyword" + }, + "serializer": { + "type": "keyword" + }, + "tie_breaker_id": { + "type": "keyword" + }, + "type": { + "type": "keyword" + }, + "updated_at": { + "type": "date" + }, + "updated_by": { + "type": "keyword" + }, + "version": { + "type": "keyword" + } + } + }, + "aliases": {} + }, + "version": 2, + "_meta": { + "managed": true, + "description": "default mappings for the .lists index template installed by Kibana/Security" + } +} From 1a832fa0a5192d326f8c6ff0073dd8e5382cef9b Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Fri, 31 May 2024 14:04:46 -0400 Subject: [PATCH 122/507] Move soup kafka needfuls to up_to_2.4.80 Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/manager/tools/sbin/soup | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index 8cb8fc6f5..95ca60b95 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -600,9 +600,13 @@ up_to_2.4.70() { toggle_telemetry add_detection_test_pillars + INSTALLEDVERSION=2.4.70 +} + +up_to_2.4.80() { # Kafka configuration changes - # Global pipeline changes to REDIS or KAFKA + # Global pipeline changes to REDIS or KAFKA echo "Removing global.pipeline pillar configuration" sed -i '/pipeline:/d' /opt/so/saltstack/local/pillar/global/soc_global.sls # Kafka pillars @@ -615,11 +619,6 @@ up_to_2.4.70() { kafkapass=$(get_random_value) echo ' kafka_pass: '$kafkapass >> /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls - INSTALLEDVERSION=2.4.70 -} - -up_to_2.4.80() { - echo "Nothing to do for 2.4.80" INSTALLEDVERSION=2.4.80 } From 2e85a28c0247a7c2303f029d2777c6bc6b0d4d46 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Sun, 2 Jun 2024 18:25:59 -0400 Subject: [PATCH 123/507] Remove so-kafka-clusterid script, created during soup Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/nodes.sls | 9 +------ salt/manager/tools/sbin/so-kafka-clusterid | 29 ---------------------- 2 files changed, 1 insertion(+), 37 deletions(-) delete mode 100644 salt/manager/tools/sbin/so-kafka-clusterid diff --git a/salt/kafka/nodes.sls b/salt/kafka/nodes.sls index 7cafb10bc..cae2a1d0f 100644 --- a/salt/kafka/nodes.sls +++ b/salt/kafka/nodes.sls @@ -15,11 +15,4 @@ write_kafka_pillar_yaml: - source: salt://kafka/files/managed_node_pillar.jinja - template: jinja - context: - COMBINED_KAFKANODES: {{ COMBINED_KAFKANODES }} - - -{% if kafka_cluster_id is none %} -generate_kafka_cluster_id: - cmd.run: - - name: /usr/sbin/so-kafka-clusterid -{% endif %} \ No newline at end of file + COMBINED_KAFKANODES: {{ COMBINED_KAFKANODES }} \ No newline at end of file diff --git a/salt/manager/tools/sbin/so-kafka-clusterid b/salt/manager/tools/sbin/so-kafka-clusterid deleted file mode 100644 index c4e449448..000000000 --- a/salt/manager/tools/sbin/so-kafka-clusterid +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash - -# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one -# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at -# https://securityonion.net/license; you may not use this file except in compliance with the -# Elastic License 2.0. - - - -### THIS SCRIPT AND SALT STATE REFERENCES TO THIS SCRIPT TO BE REMOVED ONCE INITIAL TESTING IS DONE - THESE VALUES WILL GENERATED IN SETUP AND SOUP - - -local_salt_dir=/opt/so/saltstack/local - -if [[ -f /usr/sbin/so-common ]]; then - source /usr/sbin/so-common -else - source $(dirname $0)/../../../common/tools/sbin/so-common -fi - -if ! grep -q "^ cluster_id:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then - kafka_cluster_id=$(get_random_value 22) - echo ' cluster_id: '$kafka_cluster_id >> $local_salt_dir/pillar/kafka/soc_kafka.sls -fi - -if ! grep -q "^ kafka_pass:" $local_salt_dir/pillar/kafka/soc_kafka.sls; then - kafkapass=$(get_random_value) - echo ' kafka_pass: '$kafkapass >> $local_salt_dir/pillar/kafka/soc_kafka.sls -fi \ No newline at end of file From c88b731793045bd957b28e4d519cab0cebfc2f34 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Mon, 3 Jun 2024 15:27:08 -0400 Subject: [PATCH 124/507] revert to 3006.6 --- salt/salt/master.defaults.yaml | 2 +- salt/salt/minion.defaults.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/salt/salt/master.defaults.yaml b/salt/salt/master.defaults.yaml index 24ba29d98..19677f70b 100644 --- a/salt/salt/master.defaults.yaml +++ b/salt/salt/master.defaults.yaml @@ -1,4 +1,4 @@ # version cannot be used elsewhere in this pillar as soup is grepping for it to determine if Salt needs to be patched salt: master: - version: 3006.8 + version: 3006.6 diff --git a/salt/salt/minion.defaults.yaml b/salt/salt/minion.defaults.yaml index dddd6683b..2e4ebc93e 100644 --- a/salt/salt/minion.defaults.yaml +++ b/salt/salt/minion.defaults.yaml @@ -1,6 +1,6 @@ # version cannot be used elsewhere in this pillar as soup is grepping for it to determine if Salt needs to be patched salt: minion: - version: 3006.8 + version: 3006.6 check_threshold: 3600 # in seconds, threshold used for so-salt-minion-check. any value less than 600 seconds may cause a lot of salt-minion restarts since the job to touch the file occurs every 5-8 minutes by default service_start_delay: 30 # in seconds. From d9c58d9333f24f695d6bc4a663c50cfe48683134 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 4 Jun 2024 08:33:45 -0400 Subject: [PATCH 125/507] update receiver pillar access Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- pillar/top.sls | 1 + 1 file changed, 1 insertion(+) diff --git a/pillar/top.sls b/pillar/top.sls index 61b812cc8..f7ec39957 100644 --- a/pillar/top.sls +++ b/pillar/top.sls @@ -242,6 +242,7 @@ base: - kafka.nodes - kafka.soc_kafka - kafka.adv_kafka + - soc.license '*_import': - secrets From c0b2cf73883954d8e3feff579d7f19d2446c2120 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Tue, 4 Jun 2024 10:28:21 -0400 Subject: [PATCH 126/507] add the curlys --- salt/common/tools/sbin_jinja/so-tcpreplay | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/salt/common/tools/sbin_jinja/so-tcpreplay b/salt/common/tools/sbin_jinja/so-tcpreplay index 6f3f02983..a9551c0fa 100755 --- a/salt/common/tools/sbin_jinja/so-tcpreplay +++ b/salt/common/tools/sbin_jinja/so-tcpreplay @@ -57,8 +57,8 @@ if ! docker ps | grep -q so-tcpreplay; then fi if is_sensor_node; then - echo "Replaying PCAP(s) at ${REPLAYSPEED} Mbps on interface $REPLAYIFACE..." - docker exec so-tcpreplay /usr/bin/bash -c "/usr/local/bin/tcpreplay -i $REPLAYIFACE -M${REPLAYSPEED} $@" + echo "Replaying PCAP(s) at ${REPLAYSPEED} Mbps on interface ${REPLAYIFACE}..." + docker exec so-tcpreplay /usr/bin/bash -c "/usr/local/bin/tcpreplay -i ${REPLAYIFACE} -M${REPLAYSPEED} $@" echo "Replay completed. Warnings shown above are typically expected." elif is_manager_node; then From fb1d4fdd3c1f58f4de6a100ec5f14d967aec5b92 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 4 Jun 2024 12:33:51 -0400 Subject: [PATCH 127/507] update license Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- .../so-elastic-fleet-outputs-update | 7 +++--- salt/kafka/disabled.sls | 8 +++++++ salt/kafka/elasticfleet.sls | 2 ++ salt/kafka/enabled.sls | 22 ++++++++++++++++++- salt/kafka/init.sls | 8 ++++++- 5 files changed, 42 insertions(+), 5 deletions(-) diff --git a/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-outputs-update b/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-outputs-update index 064d49d23..b5d6e1bfe 100644 --- a/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-outputs-update +++ b/salt/elasticfleet/tools/sbin_jinja/so-elastic-fleet-outputs-update @@ -131,9 +131,10 @@ if [ "$NEW_HASH" = "$CURRENT_HASH" ]; then # Since output can be KAFKA or LOGSTASH, we need to check if the policy set as default matches the value set in GLOBALS.pipeline and update if needed printf "Checking if the correct output policy is set as default\n" OUTPUT_DEFAULT=$(jq -r '.item.is_default' <<< $RAW_JSON) - if [ "$OUTPUT_DEFAULT" = "false" ]; then + OUTPUT_DEFAULT_MONITORING=$(jq -r '.item.is_default_monitoring' <<< $RAW_JSON) + if [[ "$OUTPUT_DEFAULT" = "false" || "$OUTPUT_DEFAULT_MONITORING" = "false" ]]; then printf "Default output policy needs to be updated.\n" - {%- if GLOBALS.pipeline == "KAFKA" %} + {%- if GLOBALS.pipeline == "KAFKA" and 'gmd' in salt['pillar.get']('features', []) %} update_kafka_outputs {%- else %} update_logstash_outputs @@ -145,7 +146,7 @@ if [ "$NEW_HASH" = "$CURRENT_HASH" ]; then else printf "\nHashes don't match - update needed.\n" printf "Current List: $CURRENT_LIST\nNew List: $NEW_LIST_JSON\n" - {%- if GLOBALS.pipeline == "KAFKA" %} + {%- if GLOBALS.pipeline == "KAFKA" and 'gmd' in salt['pillar.get']('features', []) %} update_kafka_outputs {%- else %} update_logstash_outputs diff --git a/salt/kafka/disabled.sls b/salt/kafka/disabled.sls index 6658f0c5e..0027fbfb9 100644 --- a/salt/kafka/disabled.sls +++ b/salt/kafka/disabled.sls @@ -14,3 +14,11 @@ so-kafka_so-status.disabled: file.comment: - name: /opt/so/conf/so-status/so-status.conf - regex: ^so-kafka$ + +{% if grains.role in ['so-manager','so-managersearch','so-standalone'] %} +ensure_default_pipeline: + cmd.run: + - name: | + /usr/sbin/so-yaml.py replace /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls kafka.enabled False; + /usr/sbin/so-yaml.py replace /opt/so/saltstack/local/pillar/global/soc_global.sls global.pipeline REDIS +{% endif %} \ No newline at end of file diff --git a/salt/kafka/elasticfleet.sls b/salt/kafka/elasticfleet.sls index a91df765b..ae8899821 100644 --- a/salt/kafka/elasticfleet.sls +++ b/salt/kafka/elasticfleet.sls @@ -4,6 +4,8 @@ # Elastic License 2.0. {% from 'vars/globals.map.jinja' import GLOBALS %} +include: + - elasticfleet.enabled {# Create Kafka output policy if it doesn't exist #} update_kafka_output_policy_script: diff --git a/salt/kafka/enabled.sls b/salt/kafka/enabled.sls index 833cc7f3c..e90a314d2 100644 --- a/salt/kafka/enabled.sls +++ b/salt/kafka/enabled.sls @@ -2,12 +2,19 @@ # or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at # https://securityonion.net/license; you may not use this file except in compliance with the # Elastic License 2.0. +# +# Note: Per the Elastic License 2.0, the second limitation states: +# +# "You may not move, change, disable, or circumvent the license key functionality +# in the software, and you may not remove or obscure any functionality in the +# software that is protected by the license key." {% from 'allowed_states.map.jinja' import allowed_states %} {% if sls.split('.')[0] in allowed_states %} {% from 'vars/globals.map.jinja' import GLOBALS %} {% from 'docker/docker.map.jinja' import DOCKER %} -{% set KAFKANODES = salt['pillar.get']('kafka:nodes') %} +{% set KAFKANODES = salt['pillar.get']('kafka:nodes') %} +{% if 'gmd' in salt['pillar.get']('features', []) %} include: - elasticsearch.ca @@ -59,6 +66,19 @@ delete_so-kafka_so-status.disabled: - name: /opt/so/conf/so-status/so-status.conf - regex: ^so-kafka$ +{% else %} + +{{sls}}_no_license_detected: + test.fail_without_changes: + - name: {{sls}}_no_license_detected + - comment: + - "Kafka for Guaranteed Message Delivery is a feature supported only for customers with a valid license. + Contact Security Onion Solutions, LLC via our website at https://securityonionsolutions.com + for more information about purchasing a license to enable this feature." +include: + - kafka.disabled +{% endif %} + {% else %} {{sls}}_state_not_allowed: diff --git a/salt/kafka/init.sls b/salt/kafka/init.sls index 67b66c45d..49707033e 100644 --- a/salt/kafka/init.sls +++ b/salt/kafka/init.sls @@ -1,7 +1,13 @@ # Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one -# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at # https://securityonion.net/license; you may not use this file except in compliance with the # Elastic License 2.0. +# +# Note: Per the Elastic License 2.0, the second limitation states: +# +# "You may not move, change, disable, or circumvent the license key functionality +# in the software, and you may not remove or obscure any functionality in the +# software that is protected by the license key." {% from 'kafka/map.jinja' import KAFKAMERGED %} {% from 'vars/globals.map.jinja' import GLOBALS %} From 3b0339a9b3196491dac1f9a95ed053b056ca1eb1 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 4 Jun 2024 14:27:52 -0400 Subject: [PATCH 128/507] create kafka.id from kafka {partition}-{offset}-{timestamp} for tracking event Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/elasticsearch/files/ingest/.fleet_final_pipeline-1 | 1 + 1 file changed, 1 insertion(+) diff --git a/salt/elasticsearch/files/ingest/.fleet_final_pipeline-1 b/salt/elasticsearch/files/ingest/.fleet_final_pipeline-1 index c3e70ec2c..a17b3a17a 100644 --- a/salt/elasticsearch/files/ingest/.fleet_final_pipeline-1 +++ b/salt/elasticsearch/files/ingest/.fleet_final_pipeline-1 @@ -84,6 +84,7 @@ { "community_id":{ "if": "ctx.event?.dataset == 'endpoint.events.network'", "ignore_failure":true } }, { "set": { "if": "ctx.event?.module == 'fim'", "override": true, "field": "event.module", "value": "file_integrity" } }, { "rename": { "if": "ctx.winlog?.provider_name == 'Microsoft-Windows-Windows Defender'", "ignore_missing": true, "field": "winlog.event_data.Threat Name", "target_field": "winlog.event_data.threat_name" } }, + { "set": { "field": "kafka.id", "value": "{{metadata.kafka.partition}}-{{metadata.kafka.offset}}-{{metadata.kafka.timestamp}}", "ignore_failure": true } }, { "remove": { "field": [ "message2", "type", "fields", "category", "module", "dataset", "event.dataset_temp", "dataset_tag_temp", "module_temp" ], "ignore_missing": true, "ignore_failure": true } } ], "on_failure": [ From a2467d0418532cef20e9c13724b13ee1e4e8618f Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Wed, 5 Jun 2024 08:24:57 -0400 Subject: [PATCH 129/507] move so-tcpreplay to sensor state --- salt/sensor/init.sls | 19 ++++++++++++++++++- .../tools/sbin_jinja/so-tcpreplay | 0 2 files changed, 18 insertions(+), 1 deletion(-) rename salt/{common => sensor}/tools/sbin_jinja/so-tcpreplay (100%) diff --git a/salt/sensor/init.sls b/salt/sensor/init.sls index 53cd808c6..ca1cf13c2 100644 --- a/salt/sensor/init.sls +++ b/salt/sensor/init.sls @@ -9,4 +9,21 @@ execute_checksum: cmd.run: - name: /etc/NetworkManager/dispatcher.d/pre-up.d/99-so-checksum-offload-disable - onchanges: - - file: offload_script \ No newline at end of file + - file: offload_script + +sensor_sbin: + file.recurse: + - name: /usr/sbin + - source: salt://sensor/tools/sbin + - user: 939 + - group: 939 + - file_mode: 755 + +sensor_sbin_jinja: + file.recurse: + - name: /usr/sbin + - source: salt://sensor/tools/sbin_jinja + - user: 939 + - group: 939 + - file_mode: 755 + - template: jinja diff --git a/salt/common/tools/sbin_jinja/so-tcpreplay b/salt/sensor/tools/sbin_jinja/so-tcpreplay similarity index 100% rename from salt/common/tools/sbin_jinja/so-tcpreplay rename to salt/sensor/tools/sbin_jinja/so-tcpreplay From ff5773c8379d140cb6a239e89f4dd48672b15f7e Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Wed, 5 Jun 2024 08:56:32 -0400 Subject: [PATCH 130/507] move so-tcpreplay back to common. return empty string if no sensor.interface pillar --- .../tools/sbin_jinja/so-tcpreplay | 2 +- salt/sensor/init.sls | 18 +----------------- 2 files changed, 2 insertions(+), 18 deletions(-) rename salt/{sensor => common}/tools/sbin_jinja/so-tcpreplay (96%) diff --git a/salt/sensor/tools/sbin_jinja/so-tcpreplay b/salt/common/tools/sbin_jinja/so-tcpreplay similarity index 96% rename from salt/sensor/tools/sbin_jinja/so-tcpreplay rename to salt/common/tools/sbin_jinja/so-tcpreplay index a9551c0fa..969ca699f 100755 --- a/salt/sensor/tools/sbin_jinja/so-tcpreplay +++ b/salt/common/tools/sbin_jinja/so-tcpreplay @@ -10,7 +10,7 @@ . /usr/sbin/so-common . /usr/sbin/so-image-common -REPLAYIFACE=${REPLAYIFACE:-"{{pillar.sensor.interface}}"} +REPLAYIFACE=${REPLAYIFACE:-"{{salt['pillar.get']('sensor:interface', '')}}"} REPLAYSPEED=${REPLAYSPEED:-10} mkdir -p /opt/so/samples diff --git a/salt/sensor/init.sls b/salt/sensor/init.sls index ca1cf13c2..c9c6a6db5 100644 --- a/salt/sensor/init.sls +++ b/salt/sensor/init.sls @@ -10,20 +10,4 @@ execute_checksum: - name: /etc/NetworkManager/dispatcher.d/pre-up.d/99-so-checksum-offload-disable - onchanges: - file: offload_script - -sensor_sbin: - file.recurse: - - name: /usr/sbin - - source: salt://sensor/tools/sbin - - user: 939 - - group: 939 - - file_mode: 755 - -sensor_sbin_jinja: - file.recurse: - - name: /usr/sbin - - source: salt://sensor/tools/sbin_jinja - - user: 939 - - group: 939 - - file_mode: 755 - - template: jinja + \ No newline at end of file From f6a8a21f94715786f6b645b6342de76a836d498a Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Wed, 5 Jun 2024 08:58:46 -0400 Subject: [PATCH 131/507] remove space --- salt/sensor/init.sls | 1 - 1 file changed, 1 deletion(-) diff --git a/salt/sensor/init.sls b/salt/sensor/init.sls index c9c6a6db5..730a7c7ad 100644 --- a/salt/sensor/init.sls +++ b/salt/sensor/init.sls @@ -10,4 +10,3 @@ execute_checksum: - name: /etc/NetworkManager/dispatcher.d/pre-up.d/99-so-checksum-offload-disable - onchanges: - file: offload_script - \ No newline at end of file From c4723263a485a5025d7793d088e00dc566d34bd0 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Thu, 6 Jun 2024 08:59:17 -0400 Subject: [PATCH 132/507] Remove unused kafka reactor Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/reactor/kafka.sls | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 salt/reactor/kafka.sls diff --git a/salt/reactor/kafka.sls b/salt/reactor/kafka.sls deleted file mode 100644 index 879fb5431..000000000 --- a/salt/reactor/kafka.sls +++ /dev/null @@ -1,16 +0,0 @@ -{# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one -or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at -https://securityonion.net/license; you may not use this file except in compliance with the -Elastic License 2.0. #} - -{% set minionid = data['id'].split('_')[0] %} -{% set role = data['data']['process_x_roles'] %} - -{# Run so-yaml to replace kafka.node..role with the value from kafka/controllers.sls #} - -update_global_kafka_pillar: - local.cmd.run: - - tgt: 'G@role:so-manager or G@role:so-managersearch or G@role:so-standalone' - - tgt_type: compound - - arg: - - '/usr/sbin/so-yaml.py replace /opt/so/saltstack/local/pillar/kafka/nodes.sls kafka.nodes.{{ minionid }}.role {{ role }}' \ No newline at end of file From ccd6b3914cda395999a0fc3819b9ed0cd0ef569d Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Thu, 6 Jun 2024 10:33:55 -0400 Subject: [PATCH 133/507] add final msg queue for soup. --- salt/manager/tools/sbin/soup | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index 02c01920d..258c09ed6 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -19,6 +19,9 @@ SOUP_LOG=/root/soup.log WHATWOULDYOUSAYYAHDOHERE=soup whiptail_title='Security Onion UPdater' NOTIFYCUSTOMELASTICCONFIG=false +# used to display messages to the user at the end of soup +declare -a FINAL_MESSAGE_QUEUE=() + check_err() { local exit_code=$1 @@ -344,6 +347,22 @@ masterunlock() { mv -v $BACKUPTOPFILE $TOPFILE } +phases_pillar_2_4_80() { + echo "Checking if pillar value: elasticsearch.index_settings.global_overrides.index_template.phases exists" + + #so-yaml.py remove /opt/so/saltstack/local/pillar/elasticsearch/soc_elasticsearch.sls elasticsearch.index_settings.global_overrides.index_template.phases + #if so-yaml removed stuff add this message to the FINAL_MESSAGE_QUEUE + read -r -d '' msg << EOM + Found elasticsearch.index_settings.global_overrides.index_template.phases set to: + so-yaml removed stuff here + A backup of all pillars was saved to /nsm/backup/ + Removed unused pillar value: elasticsearch.index_settings.global_overrides.index_template.phases + If you want to set policies, navigate to the SOC Grid Configuration UI at elasticsearch.index_settings.global_overrides.policy.phases" + EOM + + FINAL_MESSAGE_QUEUE+=("$msg") +} + preupgrade_changes() { # This function is to add any new pillar items if needed. echo "Checking to see if changes are needed." @@ -603,7 +622,7 @@ up_to_2.4.70() { } up_to_2.4.80() { - echo "Nothing to do for 2.4.80" + phases_pillar_2_4_80 INSTALLEDVERSION=2.4.80 } @@ -1267,6 +1286,14 @@ EOF fi +# check if the FINAL_MESSAGE_QUEUE is not empty +if (( ${#FINAL_MESSAGE_QUEUE[@]} != 0 )); then + for m in "${FINAL_MESSAGE_QUEUE[@]}"; do + echo "$m" + echo + done +fi + echo "### soup has been served at $(date) ###" } From 6920b77b4a3425fd3eb8f6a5316d702d5f6cbf1f Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Thu, 6 Jun 2024 11:00:43 -0400 Subject: [PATCH 134/507] fix msg --- salt/manager/tools/sbin/soup | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index 258c09ed6..c510e832b 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -352,13 +352,13 @@ phases_pillar_2_4_80() { #so-yaml.py remove /opt/so/saltstack/local/pillar/elasticsearch/soc_elasticsearch.sls elasticsearch.index_settings.global_overrides.index_template.phases #if so-yaml removed stuff add this message to the FINAL_MESSAGE_QUEUE - read -r -d '' msg << EOM + read -r -d '' msg << EOF Found elasticsearch.index_settings.global_overrides.index_template.phases set to: so-yaml removed stuff here A backup of all pillars was saved to /nsm/backup/ Removed unused pillar value: elasticsearch.index_settings.global_overrides.index_template.phases - If you want to set policies, navigate to the SOC Grid Configuration UI at elasticsearch.index_settings.global_overrides.policy.phases" - EOM + If you want to set policies, navigate to the SOC Grid Configuration UI at elasticsearch.index_settings.global_overrides.policy.phases +EOF FINAL_MESSAGE_QUEUE+=("$msg") } From 5600fed9c4854f06e98c9aed31d0ce0550d13936 Mon Sep 17 00:00:00 2001 From: Jason Ertel Date: Thu, 6 Jun 2024 11:56:07 -0400 Subject: [PATCH 135/507] add ability to retrieve yaml values via so-yaml.py; improve so-minion id matching --- pyci.sh | 14 +-- salt/manager/tools/sbin/so-minion | 4 +- salt/manager/tools/sbin/so-yaml.py | 74 +++++++++++----- salt/manager/tools/sbin/so-yaml_test.py | 111 +++++++++++++++++++----- 4 files changed, 149 insertions(+), 54 deletions(-) diff --git a/pyci.sh b/pyci.sh index e85287063..8cbee5e75 100755 --- a/pyci.sh +++ b/pyci.sh @@ -15,12 +15,16 @@ TARGET_DIR=${1:-.} PATH=$PATH:/usr/local/bin -if ! which pytest &> /dev/null || ! which flake8 &> /dev/null ; then - echo "Missing dependencies. Consider running the following command:" - echo " python -m pip install flake8 pytest pytest-cov" +if [ ! -d .venv ]; then + python -m venv .venv +fi + +source .venv/bin/activate + +if ! pip install flake8 pytest pytest-cov pyyaml; then + echo "Unable to install dependencies." exit 1 fi -pip install pytest pytest-cov flake8 "$TARGET_DIR" "--config=${HOME_DIR}/pytest.ini" -python3 -m pytest "--cov-config=${HOME_DIR}/pytest.ini" "--cov=$TARGET_DIR" --doctest-modules --cov-report=term --cov-fail-under=100 "$TARGET_DIR" \ No newline at end of file +python3 -m pytest "--cov-config=${HOME_DIR}/pytest.ini" "--cov=$TARGET_DIR" --doctest-modules --cov-report=term --cov-fail-under=100 "$TARGET_DIR" diff --git a/salt/manager/tools/sbin/so-minion b/salt/manager/tools/sbin/so-minion index 8b563ef1d..da1a6d2a2 100755 --- a/salt/manager/tools/sbin/so-minion +++ b/salt/manager/tools/sbin/so-minion @@ -112,8 +112,8 @@ function testMinion() { result=$? # If this so-minion script is not running on the given minion ID, run so-test remotely on the sensor as well - local_id=$(lookup_grain id) - if [[ ! "$local_id" =~ "${MINION_ID}_" ]]; then + local_id=$(lookup_grain id) + if [[ ! "$local_id" =~ "${MINION_ID}_" && "$local_id" != "${MINION_ID}" ]]; then salt "$MINION_ID" cmd.run 'so-test' result=$? fi diff --git a/salt/manager/tools/sbin/so-yaml.py b/salt/manager/tools/sbin/so-yaml.py index 5427a2e48..cddc827b5 100755 --- a/salt/manager/tools/sbin/so-yaml.py +++ b/salt/manager/tools/sbin/so-yaml.py @@ -14,19 +14,20 @@ lockFile = "/tmp/so-yaml.lock" def showUsage(args): - print('Usage: {} [ARGS...]'.format(sys.argv[0])) - print(' General commands:') - print(' append - Append a list item to a yaml key, if it exists and is a list. Requires KEY and LISTITEM args.') - print(' add - Add a new key and set its value. Fails if key already exists. Requires KEY and VALUE args.') - print(' remove - Removes a yaml key, if it exists. Requires KEY arg.') - print(' replace - Replaces (or adds) a new key and set its value. Requires KEY and VALUE args.') - print(' help - Prints this usage information.') - print('') - print(' Where:') - print(' YAML_FILE - Path to the file that will be modified. Ex: /opt/so/conf/service/conf.yaml') - print(' KEY - YAML key, does not support \' or " characters at this time. Ex: level1.level2') - print(' VALUE - Value to set for a given key') - print(' LISTITEM - Item to append to a given key\'s list value') + print('Usage: {} [ARGS...]'.format(sys.argv[0]), file=sys.stderr) + print(' General commands:', file=sys.stderr) + print(' append - Append a list item to a yaml key, if it exists and is a list. Requires KEY and LISTITEM args.', file=sys.stderr) + print(' add - Add a new key and set its value. Fails if key already exists. Requires KEY and VALUE args.', file=sys.stderr) + print(' get - Displays (to stdout) the value stored in the given key. Requires KEY arg.', file=sys.stderr) + print(' remove - Removes a yaml key, if it exists. Requires KEY arg.', file=sys.stderr) + print(' replace - Replaces (or adds) a new key and set its value. Requires KEY and VALUE args.', file=sys.stderr) + print(' help - Prints this usage information.', file=sys.stderr) + print('', file=sys.stderr) + print(' Where:', file=sys.stderr) + print(' YAML_FILE - Path to the file that will be modified. Ex: /opt/so/conf/service/conf.yaml', file=sys.stderr) + print(' KEY - YAML key, does not support \' or " characters at this time. Ex: level1.level2', file=sys.stderr) + print(' VALUE - Value to set for a given key', file=sys.stderr) + print(' LISTITEM - Item to append to a given key\'s list value', file=sys.stderr) sys.exit(1) @@ -38,7 +39,7 @@ def loadYaml(filename): def writeYaml(filename, content): file = open(filename, "w") - return yaml.dump(content, file) + return yaml.safe_dump(content, file) def appendItem(content, key, listItem): @@ -49,15 +50,15 @@ def appendItem(content, key, listItem): try: content[key].append(listItem) except AttributeError: - print("The existing value for the given key is not a list. No action was taken on the file.") + print("The existing value for the given key is not a list. No action was taken on the file.", file=sys.stderr) return 1 except KeyError: - print("The key provided does not exist. No action was taken on the file.") + print("The key provided does not exist. No action was taken on the file.", file=sys.stderr) return 1 def convertType(value): - if len(value) > 0 and (not value.startswith("0") or len(value) == 1): + if isinstance(value, str) and len(value) > 0 and (not value.startswith("0") or len(value) == 1): if "." in value: try: value = float(value) @@ -83,7 +84,7 @@ def append(args): if len(args) != 3: print('Missing filename, key arg, or list item to append', file=sys.stderr) showUsage(None) - return + return 1 filename = args[0] key = args[1] @@ -112,7 +113,7 @@ def add(args): if len(args) != 3: print('Missing filename, key arg, and/or value', file=sys.stderr) showUsage(None) - return + return 1 filename = args[0] key = args[1] @@ -137,7 +138,7 @@ def remove(args): if len(args) != 2: print('Missing filename or key arg', file=sys.stderr) showUsage(None) - return + return 1 filename = args[0] key = args[1] @@ -153,7 +154,7 @@ def replace(args): if len(args) != 3: print('Missing filename, key arg, and/or value', file=sys.stderr) showUsage(None) - return + return 1 filename = args[0] key = args[1] @@ -167,6 +168,32 @@ def replace(args): return 0 +def getKeyValue(content, key): + pieces = key.split(".", 1) + if len(pieces) > 1: + return getKeyValue(content[pieces[0]], pieces[1]) + return content.get(key, None) + + +def get(args): + if len(args) != 2: + print('Missing filename or key arg', file=sys.stderr) + showUsage(None) + return 1 + + filename = args[0] + key = args[1] + + content = loadYaml(filename) + output = getKeyValue(content, key) + if output is None: + print("Not found", file=sys.stderr) + return 2 + + print(yaml.safe_dump(output)) + return 0 + + def main(): args = sys.argv[1:] @@ -178,6 +205,7 @@ def main(): "help": showUsage, "add": add, "append": append, + "get": get, "remove": remove, "replace": replace, } @@ -195,11 +223,11 @@ def main(): break except Exception: if lockAttempts == 1: - print("Waiting for lock file to be released from another process...") + print("Waiting for lock file to be released from another process...", file=sys.stderr) time.sleep(2) if lockAttempts == maxAttempts: - print("Lock file (" + lockFile + ") could not be created; proceeding without lock.") + print("Lock file (" + lockFile + ") could not be created; proceeding without lock.", file=sys.stderr) cmd = commands.get(args[0], showUsage) code = cmd(args[1:]) diff --git a/salt/manager/tools/sbin/so-yaml_test.py b/salt/manager/tools/sbin/so-yaml_test.py index 7effabac9..ca9839e02 100644 --- a/salt/manager/tools/sbin/so-yaml_test.py +++ b/salt/manager/tools/sbin/so-yaml_test.py @@ -15,40 +15,40 @@ class TestRemove(unittest.TestCase): def test_main_missing_input(self): with patch('sys.exit', new=MagicMock()) as sysmock: - with patch('sys.stderr', new=StringIO()) as mock_stdout: + with patch('sys.stderr', new=StringIO()) as mock_stderr: sys.argv = ["cmd"] soyaml.main() sysmock.assert_called_once_with(1) - self.assertIn(mock_stdout.getvalue(), "Usage:") + self.assertIn("Usage:", mock_stderr.getvalue()) def test_main_help_locked(self): filename = "/tmp/so-yaml.lock" file = open(filename, "w") file.write = "fake lock file" with patch('sys.exit', new=MagicMock()) as sysmock: - with patch('sys.stderr', new=StringIO()) as mock_stdout: + with patch('sys.stderr', new=StringIO()) as mock_stderr: with patch('time.sleep', new=MagicMock()) as mock_sleep: sys.argv = ["cmd", "help"] soyaml.main() sysmock.assert_called() mock_sleep.assert_called_with(2) - self.assertIn(mock_stdout.getvalue(), "Usage:") + self.assertIn("Usage:", mock_stderr.getvalue()) def test_main_help(self): with patch('sys.exit', new=MagicMock()) as sysmock: - with patch('sys.stderr', new=StringIO()) as mock_stdout: + with patch('sys.stderr', new=StringIO()) as mock_stderr: sys.argv = ["cmd", "help"] soyaml.main() sysmock.assert_called() - self.assertIn(mock_stdout.getvalue(), "Usage:") + self.assertIn("Usage:", mock_stderr.getvalue()) def test_remove_missing_arg(self): with patch('sys.exit', new=MagicMock()) as sysmock: - with patch('sys.stderr', new=StringIO()) as mock_stdout: + with patch('sys.stderr', new=StringIO()) as mock_stderr: sys.argv = ["cmd", "help"] soyaml.remove(["file"]) sysmock.assert_called() - self.assertIn(mock_stdout.getvalue(), "Missing filename or key arg\n") + self.assertIn("Missing filename or key arg\n", mock_stderr.getvalue()) def test_remove(self): filename = "/tmp/so-yaml_test-remove.yaml" @@ -97,7 +97,7 @@ class TestRemove(unittest.TestCase): def test_remove_missing_args(self): with patch('sys.exit', new=MagicMock()) as sysmock: - with patch('sys.stderr', new=StringIO()) as mock_stdout: + with patch('sys.stderr', new=StringIO()) as mock_stderr: filename = "/tmp/so-yaml_test-remove.yaml" file = open(filename, "w") file.write("{key1: { child1: 123, child2: abc }, key2: false}") @@ -112,15 +112,15 @@ class TestRemove(unittest.TestCase): expected = "{key1: { child1: 123, child2: abc }, key2: false}" self.assertEqual(actual, expected) sysmock.assert_called_once_with(1) - self.assertIn(mock_stdout.getvalue(), "Missing filename or key arg\n") + self.assertIn("Missing filename or key arg\n", mock_stderr.getvalue()) def test_append_missing_arg(self): with patch('sys.exit', new=MagicMock()) as sysmock: - with patch('sys.stderr', new=StringIO()) as mock_stdout: + with patch('sys.stderr', new=StringIO()) as mock_stderr: sys.argv = ["cmd", "help"] soyaml.append(["file", "key"]) sysmock.assert_called() - self.assertIn(mock_stdout.getvalue(), "Missing filename, key arg, or list item to append\n") + self.assertIn("Missing filename, key arg, or list item to append\n", mock_stderr.getvalue()) def test_append(self): filename = "/tmp/so-yaml_test-remove.yaml" @@ -173,11 +173,11 @@ class TestRemove(unittest.TestCase): file.close() with patch('sys.exit', new=MagicMock()) as sysmock: - with patch('sys.stdout', new=StringIO()) as mock_stdout: + with patch('sys.stderr', new=StringIO()) as mock_stderr: sys.argv = ["cmd", "append", filename, "key4", "h"] soyaml.main() sysmock.assert_called() - self.assertEqual(mock_stdout.getvalue(), "The key provided does not exist. No action was taken on the file.\n") + self.assertEqual("The key provided does not exist. No action was taken on the file.\n", mock_stderr.getvalue()) def test_append_key_noexist_deep(self): filename = "/tmp/so-yaml_test-append.yaml" @@ -186,11 +186,11 @@ class TestRemove(unittest.TestCase): file.close() with patch('sys.exit', new=MagicMock()) as sysmock: - with patch('sys.stdout', new=StringIO()) as mock_stdout: + with patch('sys.stderr', new=StringIO()) as mock_stderr: sys.argv = ["cmd", "append", filename, "key1.child2.deep3", "h"] soyaml.main() sysmock.assert_called() - self.assertEqual(mock_stdout.getvalue(), "The key provided does not exist. No action was taken on the file.\n") + self.assertEqual("The key provided does not exist. No action was taken on the file.\n", mock_stderr.getvalue()) def test_append_key_nonlist(self): filename = "/tmp/so-yaml_test-append.yaml" @@ -199,11 +199,11 @@ class TestRemove(unittest.TestCase): file.close() with patch('sys.exit', new=MagicMock()) as sysmock: - with patch('sys.stdout', new=StringIO()) as mock_stdout: + with patch('sys.stderr', new=StringIO()) as mock_stderr: sys.argv = ["cmd", "append", filename, "key1", "h"] soyaml.main() sysmock.assert_called() - self.assertEqual(mock_stdout.getvalue(), "The existing value for the given key is not a list. No action was taken on the file.\n") + self.assertEqual("The existing value for the given key is not a list. No action was taken on the file.\n", mock_stderr.getvalue()) def test_append_key_nonlist_deep(self): filename = "/tmp/so-yaml_test-append.yaml" @@ -212,11 +212,11 @@ class TestRemove(unittest.TestCase): file.close() with patch('sys.exit', new=MagicMock()) as sysmock: - with patch('sys.stdout', new=StringIO()) as mock_stdout: + with patch('sys.stderr', new=StringIO()) as mock_stderr: sys.argv = ["cmd", "append", filename, "key1.child2.deep1", "h"] soyaml.main() sysmock.assert_called() - self.assertEqual(mock_stdout.getvalue(), "The existing value for the given key is not a list. No action was taken on the file.\n") + self.assertEqual("The existing value for the given key is not a list. No action was taken on the file.\n", mock_stderr.getvalue()) def test_add_key(self): content = {} @@ -244,11 +244,11 @@ class TestRemove(unittest.TestCase): def test_add_missing_arg(self): with patch('sys.exit', new=MagicMock()) as sysmock: - with patch('sys.stderr', new=StringIO()) as mock_stdout: + with patch('sys.stderr', new=StringIO()) as mock_stderr: sys.argv = ["cmd", "help"] soyaml.add(["file", "key"]) sysmock.assert_called() - self.assertIn(mock_stdout.getvalue(), "Missing filename, key arg, and/or value\n") + self.assertIn("Missing filename, key arg, and/or value\n", mock_stderr.getvalue()) def test_add(self): filename = "/tmp/so-yaml_test-add.yaml" @@ -296,11 +296,11 @@ class TestRemove(unittest.TestCase): def test_replace_missing_arg(self): with patch('sys.exit', new=MagicMock()) as sysmock: - with patch('sys.stderr', new=StringIO()) as mock_stdout: + with patch('sys.stderr', new=StringIO()) as mock_stderr: sys.argv = ["cmd", "help"] soyaml.replace(["file", "key"]) sysmock.assert_called() - self.assertIn(mock_stdout.getvalue(), "Missing filename, key arg, and/or value\n") + self.assertIn("Missing filename, key arg, and/or value\n", mock_stderr.getvalue()) def test_replace(self): filename = "/tmp/so-yaml_test-add.yaml" @@ -360,3 +360,66 @@ class TestRemove(unittest.TestCase): self.assertEqual(soyaml.convertType("false"), False) self.assertEqual(soyaml.convertType("FALSE"), False) self.assertEqual(soyaml.convertType(""), "") + + def test_get_int(self): + with patch('sys.stdout', new=StringIO()) as mock_stdout: + filename = "/tmp/so-yaml_test-get.yaml" + file = open(filename, "w") + file.write("{key1: { child1: 123, child2: { deep1: 45 } }, key2: false, key3: [e,f,g]}") + file.close() + + result = soyaml.get([filename, "key1.child2.deep1"]) + self.assertEqual(result, 0) + self.assertIn("45\n...", mock_stdout.getvalue()) + + def test_get_str(self): + with patch('sys.stdout', new=StringIO()) as mock_stdout: + filename = "/tmp/so-yaml_test-get.yaml" + file = open(filename, "w") + file.write("{key1: { child1: 123, child2: { deep1: \"hello\" } }, key2: false, key3: [e,f,g]}") + file.close() + + result = soyaml.get([filename, "key1.child2.deep1"]) + self.assertEqual(result, 0) + self.assertIn("hello\n...", mock_stdout.getvalue()) + + def test_get_list(self): + with patch('sys.stdout', new=StringIO()) as mock_stdout: + filename = "/tmp/so-yaml_test-get.yaml" + file = open(filename, "w") + file.write("{key1: { child1: 123, child2: { deep1: \"hello\" } }, key2: false, key3: [e,f,g]}") + file.close() + + result = soyaml.get([filename, "key3"]) + self.assertEqual(result, 0) + self.assertIn("- e\n- f\n- g\n", mock_stdout.getvalue()) + + def test_get_dict(self): + with patch('sys.stdout', new=StringIO()) as mock_stdout: + filename = "/tmp/so-yaml_test-get.yaml" + file = open(filename, "w") + file.write("{key1: { child1: 123, child2: { deep1: \"hello\" } }, key2: false, key3: [e,f,g]}") + file.close() + + result = soyaml.get([filename, "key1"]) + self.assertEqual(result, 0) + self.assertIn("child1: 123\nchild2:\n deep1: hello\n", mock_stdout.getvalue()) + + def test_get_missing(self): + with patch('sys.stdout', new=StringIO()) as mock_stdout: + filename = "/tmp/so-yaml_test-get.yaml" + file = open(filename, "w") + file.write("{key1: { child1: 123, child2: { deep1: 45 } }, key2: false, key3: [e,f,g]}") + file.close() + + result = soyaml.get([filename, "key1.child2.deep3"]) + self.assertEqual(result, 2) + self.assertEqual("", mock_stdout.getvalue()) + + def test_get_usage(self): + with patch('sys.exit', new=MagicMock()) as sysmock: + with patch('sys.stderr', new=StringIO()) as mock_stderr: + result = soyaml.get([]) + self.assertEqual(result, 1) + self.assertIn("Missing filename or key arg", mock_stderr.getvalue()) + sysmock.assert_called_once_with(1) From a39c88c7b4c678aad35edd9c2c3e1fcff76a1dc4 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Thu, 6 Jun 2024 12:56:24 -0400 Subject: [PATCH 136/507] add set to troubleshoot failure --- salt/manager/tools/sbin/soup | 2 ++ 1 file changed, 2 insertions(+) diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index c510e832b..c09db0626 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -350,6 +350,7 @@ masterunlock() { phases_pillar_2_4_80() { echo "Checking if pillar value: elasticsearch.index_settings.global_overrides.index_template.phases exists" + set +e #so-yaml.py remove /opt/so/saltstack/local/pillar/elasticsearch/soc_elasticsearch.sls elasticsearch.index_settings.global_overrides.index_template.phases #if so-yaml removed stuff add this message to the FINAL_MESSAGE_QUEUE read -r -d '' msg << EOF @@ -361,6 +362,7 @@ phases_pillar_2_4_80() { EOF FINAL_MESSAGE_QUEUE+=("$msg") + set -e } preupgrade_changes() { From e85c3e5b27b026238d7ebf9bb39f23f2aa6fc97a Mon Sep 17 00:00:00 2001 From: Corey Ogburn Date: Wed, 5 Jun 2024 14:45:06 -0600 Subject: [PATCH 137/507] SOC Proxy Setting The so_proxy value we build during install is now copied to SOC's config. --- salt/soc/defaults.yaml | 1 + salt/soc/merged.map.jinja | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/salt/soc/defaults.yaml b/salt/soc/defaults.yaml index f5628f3c3..65fb450d9 100644 --- a/salt/soc/defaults.yaml +++ b/salt/soc/defaults.yaml @@ -1286,6 +1286,7 @@ soc: maxPacketCount: 5000 htmlDir: html importUploadDir: /nsm/soc/uploads + proxy: '' modules: cases: soc filedatastore: diff --git a/salt/soc/merged.map.jinja b/salt/soc/merged.map.jinja index f2c88fde9..4ee0eea1e 100644 --- a/salt/soc/merged.map.jinja +++ b/salt/soc/merged.map.jinja @@ -1,5 +1,5 @@ {# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one - or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at + or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at https://securityonion.net/license; you may not use this file except in compliance with the Elastic License 2.0. #} @@ -11,6 +11,9 @@ {% set SOCMERGED = salt['pillar.get']('soc', SOCDEFAULTS, merge=true) %} +{% set MANAGER_PROXY = salt['pillar.get']('manager:proxy', '') %} +{% do SOCMERGED.config.server.update({'proxy': MANAGER_PROXY}) %} + {# if SOCMERGED.config.server.modules.cases == httpcase details come from the soc pillar #} {% if SOCMERGED.config.server.modules.cases != 'soc' %} {% do SOCMERGED.config.server.modules.elastic.update({'casesEnabled': false}) %} From 42818a9950bb7832e08099aa243fcafd71c8f75f Mon Sep 17 00:00:00 2001 From: Corey Ogburn Date: Thu, 6 Jun 2024 13:28:07 -0600 Subject: [PATCH 138/507] Remove proxy from SOC defaults --- salt/soc/defaults.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/salt/soc/defaults.yaml b/salt/soc/defaults.yaml index 65fb450d9..f5628f3c3 100644 --- a/salt/soc/defaults.yaml +++ b/salt/soc/defaults.yaml @@ -1286,7 +1286,6 @@ soc: maxPacketCount: 5000 htmlDir: html importUploadDir: /nsm/soc/uploads - proxy: '' modules: cases: soc filedatastore: From f37f5ba97b4fa1b79de7d1325f639db3d7f94fc5 Mon Sep 17 00:00:00 2001 From: Mike Reeves Date: Thu, 6 Jun 2024 15:57:58 -0400 Subject: [PATCH 139/507] Update soc_suricata.yaml --- salt/suricata/soc_suricata.yaml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/salt/suricata/soc_suricata.yaml b/salt/suricata/soc_suricata.yaml index e157ff852..1ecabacd8 100644 --- a/salt/suricata/soc_suricata.yaml +++ b/salt/suricata/soc_suricata.yaml @@ -150,13 +150,16 @@ suricata: helpLink: suricata.html vars: address-groups: - HOME_NET: &suriaddressgroup + HOME_NET: description: Assign a list of hosts, or networks, using CIDR notation, to this Suricata variable. The variable can then be re-used within Suricata rules. This allows for a single adjustment to the variable that will then affect all rules referencing the variable. regex: ^(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\/([0-9]|[1-2][0-9]|3[0-2]))?$|^((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|(2[0-4]|1[0-9])[0-9]|0?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4]|1[0-9])[0-9]|0?[0-9][0-9]?))|:))|(([0-9A-Fa-f]{1,4}:){5}((:[0-9A-Fa-f]{1,4}){1,2}|:((25[0-5]|(2[0-4]|1[0-9])[0-9]|0?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4]|1[0-9])[0-9]|0?[0-9][0-9]?)|:))|(([0-9A-Fa-f]{1,4}:){4}((:[0-9A-Fa-f]{1,4}){1,3}|:((25[0-5]|(2[0-4]|1[0-9])[0-9]|0?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4]|1[0-9])[0-9]|0?[0-9][0-9]?)|:))|(([0-9A-Fa-f]{1,4}:){3}((:[0-9A-Fa-f]{1,4}){1,4}|:((25[0-5]|(2[0-4]|1[0-9])[0-9]|0?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4]|1[0-9])[0-9]|0?[0-9][0-9]?)|:))|(([0-9A-Fa-f]{1,4}:){2}((:[0-9A-Fa-f]{1,4}){1,5}|:((25[0-5]|(2[0-4]|1[0-9])[0-9]|0?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4]|1[0-9])[0-9]|0?[0-9][0-9]?)|:))|(([0-9A-Fa-f]{1,4}:){1}((:[0-9A-Fa-f]{1,4}){1,6}|:((25[0-5]|(2[0-4]|1[0-9])[0-9]|0?[0-9][0-9]?)\.){3}(25[0-5]|(2[0-4]|1[0-9])[0-9]|0?[0-9][0-9]?)|:))|(:((:[0-9A-Fa-f]{1,4}){1,7}|:)))(\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$ regexFailureMessage: You must enter a valid IP address or CIDR. helpLink: suricata.html duplicates: True - EXTERNAL_NET: *suriaddressgroup + EXTERNAL_NET: &suriaddressgroup + description: Assign a list of hosts, or networks, or other customization, to this Suricata variable. The variable can then be re-used within Suricata rules. This allows for a single adjustment to the variable that will then affect all rules referencing the variable. + helpLink: suricata.html + duplicates: True HTTP_SERVERS: *suriaddressgroup SMTP_SERVERS: *suriaddressgroup SQL_SERVERS: *suriaddressgroup From d3b81babec949fc9631de3be24768ec1971389ea Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Thu, 6 Jun 2024 16:15:21 -0400 Subject: [PATCH 140/507] check for phases with so-yaml, remove if exists --- salt/manager/tools/sbin/soup | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index c09db0626..1850c2b9b 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -349,20 +349,24 @@ masterunlock() { phases_pillar_2_4_80() { echo "Checking if pillar value: elasticsearch.index_settings.global_overrides.index_template.phases exists" - - set +e - #so-yaml.py remove /opt/so/saltstack/local/pillar/elasticsearch/soc_elasticsearch.sls elasticsearch.index_settings.global_overrides.index_template.phases - #if so-yaml removed stuff add this message to the FINAL_MESSAGE_QUEUE - read -r -d '' msg << EOF - Found elasticsearch.index_settings.global_overrides.index_template.phases set to: - so-yaml removed stuff here - A backup of all pillars was saved to /nsm/backup/ - Removed unused pillar value: elasticsearch.index_settings.global_overrides.index_template.phases - If you want to set policies, navigate to the SOC Grid Configuration UI at elasticsearch.index_settings.global_overrides.policy.phases + PHASES=$(so-yaml.py get /opt/so/saltstack/local/pillar/elasticsearch/soc_elasticsearch.sls elasticsearch.index_settings.global_overrides.index_template.phases) + case $? in + 0) + so-yaml.py remove /opt/so/saltstack/local/pillar/elasticsearch/soc_elasticsearch.sls elasticsearch.index_settings.global_overrides.index_template.phases + set +e + read -r -d '' msg << EOF + Found elasticsearch.index_settings.global_overrides.index_template.phases was set to: + ${PHASES} + Removed unused pillar value: elasticsearch.index_settings.global_overrides.index_template.phases + If you want to set policies, navigate to the SOC Grid Configuration UI at elasticsearch.index_settings.global_overrides.policy.phases + A backup of all pillars was saved to /nsm/backup/ EOF - - FINAL_MESSAGE_QUEUE+=("$msg") - set -e + FINAL_MESSAGE_QUEUE+=("$msg") + set -e + ;; + 2) echo "Pillar elasticsearch.index_settings.global_overrides.index_template.phases does not exist. No action taken." ;; + *) echo "so-yaml.py returned something other than 0 or 2 exit code" ;; # we shouldn't see this + esac } preupgrade_changes() { From d39c8fae54abfb4625a0de35de2d4ee3b0d7ac83 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Fri, 7 Jun 2024 09:01:16 -0400 Subject: [PATCH 141/507] format output --- salt/manager/tools/sbin/soup | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index 1850c2b9b..81a7545d7 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -354,12 +354,13 @@ phases_pillar_2_4_80() { 0) so-yaml.py remove /opt/so/saltstack/local/pillar/elasticsearch/soc_elasticsearch.sls elasticsearch.index_settings.global_overrides.index_template.phases set +e - read -r -d '' msg << EOF - Found elasticsearch.index_settings.global_overrides.index_template.phases was set to: - ${PHASES} - Removed unused pillar value: elasticsearch.index_settings.global_overrides.index_template.phases - If you want to set policies, navigate to the SOC Grid Configuration UI at elasticsearch.index_settings.global_overrides.policy.phases - A backup of all pillars was saved to /nsm/backup/ + read -r -d '' msg <<- EOF + Found elasticsearch.index_settings.global_overrides.index_template.phases was set to: + ${PHASES} + + Removed unused pillar value: elasticsearch.index_settings.global_overrides.index_template.phases + To set policies, navigate to the SOC Grid Configuration UI at elasticsearch.index_settings.global_overrides.policy.phases + A backup of all pillar files was saved to /nsm/backup/ EOF FINAL_MESSAGE_QUEUE+=("$msg") set -e From f5cc35509b48bbb944b4922a94105193c89e545e Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Fri, 7 Jun 2024 11:03:26 -0400 Subject: [PATCH 142/507] fix output alignment --- salt/manager/tools/sbin/soup | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index 81a7545d7..0ab8d9d46 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -355,12 +355,12 @@ phases_pillar_2_4_80() { so-yaml.py remove /opt/so/saltstack/local/pillar/elasticsearch/soc_elasticsearch.sls elasticsearch.index_settings.global_overrides.index_template.phases set +e read -r -d '' msg <<- EOF - Found elasticsearch.index_settings.global_overrides.index_template.phases was set to: - ${PHASES} +Found elasticsearch.index_settings.global_overrides.index_template.phases was set to: +${PHASES} - Removed unused pillar value: elasticsearch.index_settings.global_overrides.index_template.phases - To set policies, navigate to the SOC Grid Configuration UI at elasticsearch.index_settings.global_overrides.policy.phases - A backup of all pillar files was saved to /nsm/backup/ +Removed unused pillar value: elasticsearch.index_settings.global_overrides.index_template.phases +To set policies, navigate to the SOC Grid Configuration UI at elasticsearch.index_settings.global_overrides.policy.phases +A backup of all pillar files was saved to /nsm/backup/ EOF FINAL_MESSAGE_QUEUE+=("$msg") set -e From fa063722e102cc07da2f076f64375f061bfea2ad Mon Sep 17 00:00:00 2001 From: Corey Ogburn Date: Thu, 6 Jun 2024 16:36:09 -0600 Subject: [PATCH 143/507] RootCA and InsecureSkipVerify New empty settings and their annotations. --- salt/soc/defaults.yaml | 2 ++ salt/soc/soc_soc.yaml | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/salt/soc/defaults.yaml b/salt/soc/defaults.yaml index f5628f3c3..03476c3f5 100644 --- a/salt/soc/defaults.yaml +++ b/salt/soc/defaults.yaml @@ -1286,6 +1286,8 @@ soc: maxPacketCount: 5000 htmlDir: html importUploadDir: /nsm/soc/uploads + rootCA: '' + insecureSkipVerify: false modules: cases: soc filedatastore: diff --git a/salt/soc/soc_soc.yaml b/salt/soc/soc_soc.yaml index 47d051e4e..ec633f773 100644 --- a/salt/soc/soc_soc.yaml +++ b/salt/soc/soc_soc.yaml @@ -81,6 +81,14 @@ soc: description: Maximum number of packets to show in the PCAP viewer. Larger values can cause more resource utilization on both the SOC server and the browser. global: True advanced: True + rootCA: + description: Root Certificate Authority (CA) public key in PEM format that SOC will use to validate outgoing requests. This is useful when the SOC server is behind a reverse proxy that performs SSL termination. + multiline: True + advanced: True + insecureSkipVerify: + description: Disable TLS verification for outgoing requests. This will make your installation less secure to MITM attacks. Recommended only for debugging purposes. + advanced: True + forcedType: bool modules: elastalertengine: additionalAlerters: From 5d3fd3d389b7ed5b751d0229153c05461966f472 Mon Sep 17 00:00:00 2001 From: Corey Ogburn Date: Fri, 7 Jun 2024 12:47:09 -0600 Subject: [PATCH 144/507] AdditionalCA and InsecureSkipVerify New fields have been added to manager and then duplicated over to SOC's config in the same vein as how proxy was updated earlier this week. AdditionalCA holds the PEM formatted public keys that should be trusted when making requests. It has been implemented for both Sigma's zip downloads and Sigma and Suricata's repository clones and pulls. InsecureSkipVerify has been added to help our users troubleshoot their configuration. Setting it to true will not verify the cert on outgoing requests. Self signed, missing, or invalid certs will not throw an error. --- salt/manager/defaults.yaml | 4 +++- salt/manager/map.jinja | 7 +++++++ salt/manager/soc_manager.yaml | 18 +++++++++++++++--- salt/soc/merged.map.jinja | 6 ++++-- salt/soc/soc_soc.yaml | 8 -------- 5 files changed, 29 insertions(+), 14 deletions(-) create mode 100644 salt/manager/map.jinja diff --git a/salt/manager/defaults.yaml b/salt/manager/defaults.yaml index 8bb34690e..708900af6 100644 --- a/salt/manager/defaults.yaml +++ b/salt/manager/defaults.yaml @@ -2,4 +2,6 @@ manager: reposync: enabled: True hour: 3 - minute: 0 \ No newline at end of file + minute: 0 + additionalCA: '' + insecureSkipVerify: False diff --git a/salt/manager/map.jinja b/salt/manager/map.jinja new file mode 100644 index 000000000..1ab9c12c3 --- /dev/null +++ b/salt/manager/map.jinja @@ -0,0 +1,7 @@ +{# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one + or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at + https://securityonion.net/license; you may not use this file except in compliance with the + Elastic License 2.0. #} + +{% import_yaml 'manager/defaults.yaml' as MANAGERDEFAULTS %} +{% set MANAGERMERGED = salt['pillar.get']('manager', MANAGERDEFAULTS.manager, merge=True) %} \ No newline at end of file diff --git a/salt/manager/soc_manager.yaml b/salt/manager/soc_manager.yaml index f6461a0c7..f3346269e 100644 --- a/salt/manager/soc_manager.yaml +++ b/salt/manager/soc_manager.yaml @@ -7,7 +7,7 @@ manager: hour: description: The hour of the day in which the repo sync takes place. global: True - helpLink: soup.html + helpLink: soup.html minute: description: The minute within the hour to run the repo sync. global: True @@ -16,11 +16,23 @@ manager: description: Enable elastalert 1=enabled 0=disabled. global: True helpLink: elastalert.html - no_proxy: - description: String of hosts to ignore the proxy settings for. + no_proxy: + description: String of hosts to ignore the proxy settings for. global: True helpLink: proxy.html proxy: description: Proxy server to use for updates. global: True helpLink: proxy.html + additionalCA: + description: Additional CA certificates to trust in PEM format. + global: True + advanced: True + multiline: True + helpLink: proxy.html + insecureSkipVerify: + description: Disable TLS verification for outgoing requests. This will make your installation less secure to MITM attacks. Recommended only for debugging purposes. + advanced: True + forcedType: bool + global: True + helpLink: proxy.html diff --git a/salt/soc/merged.map.jinja b/salt/soc/merged.map.jinja index 4ee0eea1e..c823175cb 100644 --- a/salt/soc/merged.map.jinja +++ b/salt/soc/merged.map.jinja @@ -6,13 +6,15 @@ {% from 'vars/globals.map.jinja' import GLOBALS %} {% from 'soc/defaults.map.jinja' import SOCDEFAULTS with context %} {% from 'logstash/map.jinja' import LOGSTASH_NODES %} +{% from 'manager/map.jinja' import MANAGERMERGED %} {% set DOCKER_EXTRA_HOSTS = LOGSTASH_NODES %} {% do DOCKER_EXTRA_HOSTS.append({GLOBALS.influxdb_host:pillar.node_data[GLOBALS.influxdb_host].ip}) %} {% set SOCMERGED = salt['pillar.get']('soc', SOCDEFAULTS, merge=true) %} -{% set MANAGER_PROXY = salt['pillar.get']('manager:proxy', '') %} -{% do SOCMERGED.config.server.update({'proxy': MANAGER_PROXY}) %} +{% do SOCMERGED.config.server.update({'proxy': MANAGERMERGED.proxy}) %} +{% do SOCMERGED.config.server.update({'additionalCA': MANAGERMERGED.additionalCA}) %} +{% do SOCMERGED.config.server.update({'insecureSkipVerify': MANAGERMERGED.insecureSkipVerify}) %} {# if SOCMERGED.config.server.modules.cases == httpcase details come from the soc pillar #} {% if SOCMERGED.config.server.modules.cases != 'soc' %} diff --git a/salt/soc/soc_soc.yaml b/salt/soc/soc_soc.yaml index ec633f773..47d051e4e 100644 --- a/salt/soc/soc_soc.yaml +++ b/salt/soc/soc_soc.yaml @@ -81,14 +81,6 @@ soc: description: Maximum number of packets to show in the PCAP viewer. Larger values can cause more resource utilization on both the SOC server and the browser. global: True advanced: True - rootCA: - description: Root Certificate Authority (CA) public key in PEM format that SOC will use to validate outgoing requests. This is useful when the SOC server is behind a reverse proxy that performs SSL termination. - multiline: True - advanced: True - insecureSkipVerify: - description: Disable TLS verification for outgoing requests. This will make your installation less secure to MITM attacks. Recommended only for debugging purposes. - advanced: True - forcedType: bool modules: elastalertengine: additionalAlerters: From ee696be51d5fd01276aa8db15b26af4a3a44d40c Mon Sep 17 00:00:00 2001 From: Corey Ogburn Date: Fri, 7 Jun 2024 13:04:54 -0600 Subject: [PATCH 145/507] Remove rootCA and insecureSkipVerify from SOC defaults --- salt/soc/defaults.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/salt/soc/defaults.yaml b/salt/soc/defaults.yaml index 03476c3f5..f5628f3c3 100644 --- a/salt/soc/defaults.yaml +++ b/salt/soc/defaults.yaml @@ -1286,8 +1286,6 @@ soc: maxPacketCount: 5000 htmlDir: html importUploadDir: /nsm/soc/uploads - rootCA: '' - insecureSkipVerify: false modules: cases: soc filedatastore: From dbc56ffee787feb6f124db5e54bbd66b7c87734f Mon Sep 17 00:00:00 2001 From: Mike Reeves Date: Fri, 7 Jun 2024 15:09:09 -0400 Subject: [PATCH 146/507] Update defaults.yaml --- salt/firewall/defaults.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/salt/firewall/defaults.yaml b/salt/firewall/defaults.yaml index b10505956..0f7ce911a 100644 --- a/salt/firewall/defaults.yaml +++ b/salt/firewall/defaults.yaml @@ -1293,6 +1293,9 @@ firewall: beats_endpoint_ssl: portgroups: - beats_5644 + elastic_agent_endpoint: + portgroups: + - elastic_agent_data endgame: portgroups: - endgame From 4057238185aad7a4c8c58b226e25f23b84ef09bb Mon Sep 17 00:00:00 2001 From: Mike Reeves Date: Fri, 7 Jun 2024 15:33:49 -0400 Subject: [PATCH 147/507] Update defaults.yaml --- salt/firewall/defaults.yaml | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/salt/firewall/defaults.yaml b/salt/firewall/defaults.yaml index 0f7ce911a..5d53b9864 100644 --- a/salt/firewall/defaults.yaml +++ b/salt/firewall/defaults.yaml @@ -1267,26 +1267,37 @@ firewall: chain: DOCKER-USER: hostgroups: + desktop: + portgroups: + - elastic_agent_data fleet: portgroups: - - beats_5056 + - elastic_agent_data + idh: + portgroups: + - elastic_agent_data sensor: portgroups: - - beats_5044 - - beats_5644 - elastic_agent_data searchnode: portgroups: - redis - - beats_5644 + - elastic_agent_data + standalone: + portgroups: + - redis + - elastic_agent_data + manager: + portgroups: + - elastic_agent_data managersearch: portgroups: - redis - - beats_5644 + - elastic_agent_data self: portgroups: - redis - - beats_5644 + - elastic_agent_data beats_endpoint: portgroups: - beats_5044 From 0139e1827113b3ef81a20487409145116fdd46f6 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Fri, 7 Jun 2024 16:03:21 -0400 Subject: [PATCH 148/507] additional description --- salt/manager/tools/sbin/soup | 1 + 1 file changed, 1 insertion(+) diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index 0ab8d9d46..6adb39f2f 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -1295,6 +1295,7 @@ EOF # check if the FINAL_MESSAGE_QUEUE is not empty if (( ${#FINAL_MESSAGE_QUEUE[@]} != 0 )); then +echo "The following additional information specifically applies to your grid:\n" for m in "${FINAL_MESSAGE_QUEUE[@]}"; do echo "$m" echo From f2f688b9b8b1e5eb1467eb140efbba6df590d87e Mon Sep 17 00:00:00 2001 From: Jason Ertel Date: Fri, 7 Jun 2024 16:18:09 -0400 Subject: [PATCH 149/507] Update soup --- salt/manager/tools/sbin/soup | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index 6adb39f2f..0d52e5c16 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -1295,7 +1295,7 @@ EOF # check if the FINAL_MESSAGE_QUEUE is not empty if (( ${#FINAL_MESSAGE_QUEUE[@]} != 0 )); then -echo "The following additional information specifically applies to your grid:\n" + echo "The following additional information applies specifically to your grid:\n" for m in "${FINAL_MESSAGE_QUEUE[@]}"; do echo "$m" echo From f96b82b11203e7ca400f5dfa131556fc075799e2 Mon Sep 17 00:00:00 2001 From: Jason Ertel Date: Sat, 8 Jun 2024 07:44:46 -0400 Subject: [PATCH 150/507] gracefully handle missing parent key --- salt/manager/tools/sbin/so-yaml.py | 2 +- salt/manager/tools/sbin/so-yaml_test.py | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/salt/manager/tools/sbin/so-yaml.py b/salt/manager/tools/sbin/so-yaml.py index cddc827b5..275032ee0 100755 --- a/salt/manager/tools/sbin/so-yaml.py +++ b/salt/manager/tools/sbin/so-yaml.py @@ -170,7 +170,7 @@ def replace(args): def getKeyValue(content, key): pieces = key.split(".", 1) - if len(pieces) > 1: + if len(pieces) > 1 and pieces[0] in content: return getKeyValue(content[pieces[0]], pieces[1]) return content.get(key, None) diff --git a/salt/manager/tools/sbin/so-yaml_test.py b/salt/manager/tools/sbin/so-yaml_test.py index ca9839e02..5ca46cb68 100644 --- a/salt/manager/tools/sbin/so-yaml_test.py +++ b/salt/manager/tools/sbin/so-yaml_test.py @@ -416,6 +416,17 @@ class TestRemove(unittest.TestCase): self.assertEqual(result, 2) self.assertEqual("", mock_stdout.getvalue()) + def test_get_missing_parent(self): + with patch('sys.stdout', new=StringIO()) as mock_stdout: + filename = "/tmp/so-yaml_test-get.yaml" + file = open(filename, "w") + file.write("{key1: { child1: 123, child2: { deep1: 45 } }, key2: false, key3: [e,f,g]}") + file.close() + + result = soyaml.get([filename, "key1.child3.deep3"]) + self.assertEqual(result, 2) + self.assertEqual("", mock_stdout.getvalue()) + def test_get_usage(self): with patch('sys.exit', new=MagicMock()) as sysmock: with patch('sys.stderr', new=StringIO()) as mock_stderr: From f1638faa3a669c91f93e866a34ce19424fb34b7f Mon Sep 17 00:00:00 2001 From: Jason Ertel Date: Sat, 8 Jun 2024 08:18:34 -0400 Subject: [PATCH 151/507] correct placement of error check override --- salt/manager/tools/sbin/soup | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index 0d52e5c16..9ee4058f9 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -349,11 +349,11 @@ masterunlock() { phases_pillar_2_4_80() { echo "Checking if pillar value: elasticsearch.index_settings.global_overrides.index_template.phases exists" + set +e PHASES=$(so-yaml.py get /opt/so/saltstack/local/pillar/elasticsearch/soc_elasticsearch.sls elasticsearch.index_settings.global_overrides.index_template.phases) case $? in 0) so-yaml.py remove /opt/so/saltstack/local/pillar/elasticsearch/soc_elasticsearch.sls elasticsearch.index_settings.global_overrides.index_template.phases - set +e read -r -d '' msg <<- EOF Found elasticsearch.index_settings.global_overrides.index_template.phases was set to: ${PHASES} @@ -363,11 +363,11 @@ To set policies, navigate to the SOC Grid Configuration UI at elasticsearch.inde A backup of all pillar files was saved to /nsm/backup/ EOF FINAL_MESSAGE_QUEUE+=("$msg") - set -e ;; 2) echo "Pillar elasticsearch.index_settings.global_overrides.index_template.phases does not exist. No action taken." ;; *) echo "so-yaml.py returned something other than 0 or 2 exit code" ;; # we shouldn't see this esac + set -e } preupgrade_changes() { From 284c1be85fc058945e772b5ee02898d13594e070 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Mon, 10 Jun 2024 11:08:54 -0400 Subject: [PATCH 152/507] Update Kafka controller(s) via SOC UI Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/config.map.jinja | 2 -- salt/kafka/config.sls | 6 ++++++ salt/kafka/defaults.yaml | 2 +- salt/kafka/enabled.sls | 2 -- salt/kafka/nodes.map.jinja | 5 +++-- salt/kafka/soc_kafka.yaml | 5 ++--- salt/salt/files/engines.conf | 18 ++++++++++++++++++ 7 files changed, 30 insertions(+), 10 deletions(-) diff --git a/salt/kafka/config.map.jinja b/salt/kafka/config.map.jinja index e5b77db11..88d27c1a8 100644 --- a/salt/kafka/config.map.jinja +++ b/salt/kafka/config.map.jinja @@ -7,8 +7,6 @@ {% set KAFKA_NODES_PILLAR = salt['pillar.get']('kafka:nodes') %} -{% set KAFKA_CONTROLLERS_PILLAR = salt['pillar.get']('kafka:kafka_controllers', default=None) %} - {# Create list of KRaft controllers #} {% set controllers = [] %} diff --git a/salt/kafka/config.sls b/salt/kafka/config.sls index 5cf6f8201..165daf7eb 100644 --- a/salt/kafka/config.sls +++ b/salt/kafka/config.sls @@ -66,6 +66,12 @@ kafka_kraft_{{sc}}_properties: - show_changes: False {% endfor %} +reset_quorum_on_changes: + cmd.run: + - name: rm -f /nsm/kafka/data/__cluster_metadata-0/quorum-state + - watch: + - file: /opt/so/conf/kafka/server.properties + {% else %} {{sls}}_state_not_allowed: diff --git a/salt/kafka/defaults.yaml b/salt/kafka/defaults.yaml index 56ad9252f..f45560e60 100644 --- a/salt/kafka/defaults.yaml +++ b/salt/kafka/defaults.yaml @@ -2,7 +2,7 @@ kafka: enabled: False cluster_id: kafka_pass: - kafka_controllers: [] + kafka_controllers: config: broker: advertised_x_listeners: diff --git a/salt/kafka/enabled.sls b/salt/kafka/enabled.sls index e90a314d2..75cf71148 100644 --- a/salt/kafka/enabled.sls +++ b/salt/kafka/enabled.sls @@ -53,9 +53,7 @@ so-kafka: - /nsm/kafka/data/:/nsm/kafka/data/:rw - /opt/so/log/kafka:/opt/kafka/logs/:rw - /opt/so/conf/kafka/server.properties:/opt/kafka/config/kraft/server.properties:ro - {% if GLOBALS.is_manager %} - /opt/so/conf/kafka/client.properties:/opt/kafka/config/kraft/client.properties - {% endif %} - watch: {% for sc in ['server', 'client'] %} - file: kafka_kraft_{{sc}}_properties diff --git a/salt/kafka/nodes.map.jinja b/salt/kafka/nodes.map.jinja index fa33adda5..c0b98de14 100644 --- a/salt/kafka/nodes.map.jinja +++ b/salt/kafka/nodes.map.jinja @@ -68,14 +68,15 @@ {# Update the process_x_roles value for any host in the kafka_controllers_pillar configured from SOC UI #} {% set ns = namespace(has_controller=false) %} {% if KAFKA_CONTROLLERS_PILLAR != none %} -{% for hostname in KAFKA_CONTROLLERS_PILLAR %} +{% set KAFKA_CONTROLLERS_PILLAR_LIST = KAFKA_CONTROLLERS_PILLAR.split(',') %} +{% for hostname in KAFKA_CONTROLLERS_PILLAR_LIST %} {% if hostname in COMBINED_KAFKANODES %} {% do COMBINED_KAFKANODES[hostname].update({'role': 'controller'}) %} {% set ns.has_controller = true %} {% endif %} {% endfor %} {% for hostname in COMBINED_KAFKANODES %} -{% if hostname not in KAFKA_CONTROLLERS_PILLAR %} +{% if hostname not in KAFKA_CONTROLLERS_PILLAR_LIST %} {% do COMBINED_KAFKANODES[hostname].update({'role': 'broker'}) %} {% endif %} {% endfor %} diff --git a/salt/kafka/soc_kafka.yaml b/salt/kafka/soc_kafka.yaml index b1de1f243..05f047c4a 100644 --- a/salt/kafka/soc_kafka.yaml +++ b/salt/kafka/soc_kafka.yaml @@ -13,9 +13,8 @@ kafka: sensitive: True helpLink: kafka.html kafka_controllers: - description: A list of Security Onion grid members that should act as controllers for this Kafka cluster. By default, the grid manager will use a 'combined' role where it will act as both a broker and controller. Keep total Kafka controllers to an odd number and ensure you do not assign ALL your Kafka nodes as controllers or this Kafka cluster will not start. - forcedType: "[]string" - multiline: True + description: A comma-seperated list of Security Onion grid members that should act as controllers for this Kafka cluster. By default, the grid manager will use a 'combined' role where it will act as both a broker and controller. Keep total Kafka controllers to an odd number and ensure you do not assign ALL your Kafka nodes as controllers or this Kafka cluster will not start. + forcedType: "string" helpLink: kafka.html config: broker: diff --git a/salt/salt/files/engines.conf b/salt/salt/files/engines.conf index 69d596ed0..de5685fff 100644 --- a/salt/salt/files/engines.conf +++ b/salt/salt/files/engines.conf @@ -57,4 +57,22 @@ engines: cmd: salt -C 'G@role:so-standalone or G@role:so-manager or G@role:so-managersearch or G@role:so-receiver' saltutil.kill_all_jobs - cmd.run: cmd: salt -C 'G@role:so-standalone or G@role:so-manager or G@role:so-managersearch or G@role:so-receiver' state.highstate + - files: + - /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls + - /opt/so/saltstack/local/pillar/kafka/adv_kafka.sls + pillar: kafka.kafka_controllers + default: '' + actions: + from: + '*': + to: + '*': + - cmd.run: + cmd: salt -C 'G@role:so-standalone or G@role:so-manager or G@role:so-managersearch or G@role:so-receiver' saltutil.kill_all_jobs + - cmd.run: + cmd: salt-call state.apply kafka.nodes + - cmd.run: + cmd: salt -C 'G@role:so-standalone or G@role:so-manager or G@role:so-managersearch or G@role:so-receiver' state.apply kafka + - cmd.run: + cmd: salt-call state.apply elasticfleet interval: 10 From adeab10f6d88bdf733e7b7284178eb172fbe95d9 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Mon, 10 Jun 2024 12:14:27 -0400 Subject: [PATCH 153/507] upgrade docker and containerd.io for oracle --- salt/docker/init.sls | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/salt/docker/init.sls b/salt/docker/init.sls index 769c58af8..281fbc4ac 100644 --- a/salt/docker/init.sls +++ b/salt/docker/init.sls @@ -51,10 +51,10 @@ dockerheldpackages: dockerheldpackages: pkg.installed: - pkgs: - - containerd.io: 1.6.21-3.1.el9 - - docker-ce: 24.0.4-1.el9 - - docker-ce-cli: 24.0.4-1.el9 - - docker-ce-rootless-extras: 24.0.4-1.el9 + - containerd.io: 1.6.33-3.1.el9 + - docker-ce: 26.1.4-1.el9 + - docker-ce-cli: 26.1.4-1.el9 + - docker-ce-rootless-extras: 26.1.4-1.el9 - hold: True - update_holds: True {% endif %} From c6d0a1766937ebc7ae7425e7cba2d23271c93c17 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Mon, 10 Jun 2024 15:43:29 -0400 Subject: [PATCH 154/507] docker upgrade debian 12 --- salt/docker/init.sls | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/salt/docker/init.sls b/salt/docker/init.sls index 281fbc4ac..732a9d7dd 100644 --- a/salt/docker/init.sls +++ b/salt/docker/init.sls @@ -20,10 +20,10 @@ dockergroup: dockerheldpackages: pkg.installed: - pkgs: - - containerd.io: 1.6.21-1 - - docker-ce: 5:24.0.3-1~debian.12~bookworm - - docker-ce-cli: 5:24.0.3-1~debian.12~bookworm - - docker-ce-rootless-extras: 5:24.0.3-1~debian.12~bookworm + - containerd.io: 1.6.33-1 + - docker-ce: 5:26.1.4-1~debian.12~bookworm + - docker-ce-cli: 5:26.1.4-1~debian.12~bookworm + - docker-ce-rootless-extras: 5:26.1.4-1~debian.12~bookworm - hold: True - update_holds: True {% elif grains.oscodename == 'jammy' %} From dbd987345075eea5a3d28f188eb6543b2d8bc30e Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Mon, 10 Jun 2024 16:04:11 -0400 Subject: [PATCH 155/507] upgrade docker for jammy --- salt/docker/init.sls | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/salt/docker/init.sls b/salt/docker/init.sls index 732a9d7dd..9140c1c33 100644 --- a/salt/docker/init.sls +++ b/salt/docker/init.sls @@ -30,10 +30,10 @@ dockerheldpackages: dockerheldpackages: pkg.installed: - pkgs: - - containerd.io: 1.6.21-1 - - docker-ce: 5:24.0.2-1~ubuntu.22.04~jammy - - docker-ce-cli: 5:24.0.2-1~ubuntu.22.04~jammy - - docker-ce-rootless-extras: 5:24.0.2-1~ubuntu.22.04~jammy + - containerd.io: 1.6.33-1 + - docker-ce: 5:26.1.4-1~ubuntu.22.04~jammy + - docker-ce-cli: 5:26.1.4-1~ubuntu.22.04~jammy + - docker-ce-rootless-extras: 5:26.1.4-1~ubuntu.22.04~jammy - hold: True - update_holds: True {% else %} From 0b1e3b2a7f066b3bfe219ee028acda912422c06c Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Mon, 10 Jun 2024 16:24:44 -0400 Subject: [PATCH 156/507] upgrade docker for focal --- salt/docker/init.sls | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/salt/docker/init.sls b/salt/docker/init.sls index 9140c1c33..a02aa4a3b 100644 --- a/salt/docker/init.sls +++ b/salt/docker/init.sls @@ -40,10 +40,10 @@ dockerheldpackages: dockerheldpackages: pkg.installed: - pkgs: - - containerd.io: 1.4.9-1 - - docker-ce: 5:20.10.8~3-0~ubuntu-focal - - docker-ce-cli: 5:20.10.5~3-0~ubuntu-focal - - docker-ce-rootless-extras: 5:20.10.5~3-0~ubuntu-focal + - containerd.io: 1.6.33-1 + - docker-ce: 5:26.1.4-1~ubuntu.20.04~focal + - docker-ce-cli: 5:26.1.4-1~ubuntu.20.04~focal + - docker-ce-rootless-extras: 5:26.1.4-1~ubuntu.20.04~focal - hold: True - update_holds: True {% endif %} From 4b481bd405ea088a9d7e6f36d6b512ad2fa4caea Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Tue, 11 Jun 2024 09:41:58 -0400 Subject: [PATCH 157/507] add epoch to docker for oracle --- salt/docker/init.sls | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/salt/docker/init.sls b/salt/docker/init.sls index a02aa4a3b..1e37364bc 100644 --- a/salt/docker/init.sls +++ b/salt/docker/init.sls @@ -52,8 +52,8 @@ dockerheldpackages: pkg.installed: - pkgs: - containerd.io: 1.6.33-3.1.el9 - - docker-ce: 26.1.4-1.el9 - - docker-ce-cli: 26.1.4-1.el9 + - docker-ce: 3:26.1.4-1.el9 + - docker-ce-cli: 1:26.1.4-1.el9 - docker-ce-rootless-extras: 26.1.4-1.el9 - hold: True - update_holds: True From 08d2a6242dfa11ce9a89798d4fd8007df9d4cb9f Mon Sep 17 00:00:00 2001 From: DefensiveDepth Date: Tue, 11 Jun 2024 10:03:33 -0400 Subject: [PATCH 158/507] Add new bind - suricata all.rules --- salt/soc/enabled.sls | 1 + 1 file changed, 1 insertion(+) diff --git a/salt/soc/enabled.sls b/salt/soc/enabled.sls index 4d4b5f6fd..9b50b449b 100644 --- a/salt/soc/enabled.sls +++ b/salt/soc/enabled.sls @@ -27,6 +27,7 @@ so-soc: - /opt/so/conf/strelka:/opt/sensoroni/yara:rw - /opt/so/conf/sigma:/opt/sensoroni/sigma:rw - /opt/so/rules/elastalert/rules:/opt/sensoroni/elastalert:rw + - /opt/so/rules/nids/suri:/opt/sensoroni/nids:ro - /opt/so/conf/soc/fingerprints:/opt/sensoroni/fingerprints:rw - /nsm/soc/jobs:/opt/sensoroni/jobs:rw - /nsm/soc/uploads:/nsm/soc/uploads:rw From 08557ae2875ff6fb8959bd28573394acede60a6b Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 11 Jun 2024 11:01:34 -0400 Subject: [PATCH 159/507] kafka.id field should only be present when metadata for kafka exists Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/elasticsearch/files/ingest/.fleet_final_pipeline-1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/elasticsearch/files/ingest/.fleet_final_pipeline-1 b/salt/elasticsearch/files/ingest/.fleet_final_pipeline-1 index a17b3a17a..899ec0c64 100644 --- a/salt/elasticsearch/files/ingest/.fleet_final_pipeline-1 +++ b/salt/elasticsearch/files/ingest/.fleet_final_pipeline-1 @@ -84,7 +84,7 @@ { "community_id":{ "if": "ctx.event?.dataset == 'endpoint.events.network'", "ignore_failure":true } }, { "set": { "if": "ctx.event?.module == 'fim'", "override": true, "field": "event.module", "value": "file_integrity" } }, { "rename": { "if": "ctx.winlog?.provider_name == 'Microsoft-Windows-Windows Defender'", "ignore_missing": true, "field": "winlog.event_data.Threat Name", "target_field": "winlog.event_data.threat_name" } }, - { "set": { "field": "kafka.id", "value": "{{metadata.kafka.partition}}-{{metadata.kafka.offset}}-{{metadata.kafka.timestamp}}", "ignore_failure": true } }, + { "set": { "if": "ctx?.metadata?.kafka != null" , "field": "kafka.id", "value": "{{metadata.kafka.partition}}-{{metadata.kafka.offset}}-{{metadata.kafka.timestamp}}", "ignore_failure": true } }, { "remove": { "field": [ "message2", "type", "fields", "category", "module", "dataset", "event.dataset_temp", "dataset_tag_temp", "module_temp" ], "ignore_missing": true, "ignore_failure": true } } ], "on_failure": [ From ca7b89c308ede9fad5429c7e6d4061590a936911 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 11 Jun 2024 11:21:13 -0400 Subject: [PATCH 160/507] Added Kafka reset to SOC UI. Incase of changing an active broker to a controller topics may become unavailable. Resolving this would require manual intervention. This option allows running a reset to start from a clean slate to then configure cluster to desired state before reenabling Kafka as global pipeline. Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/defaults.yaml | 1 + salt/kafka/disabled.sls | 3 --- salt/kafka/reset_kafka.sls | 9 +++++++++ salt/kafka/soc_kafka.yaml | 7 +++++-- salt/salt/files/engines.conf | 16 ++++++++++++++++ 5 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 salt/kafka/reset_kafka.sls diff --git a/salt/kafka/defaults.yaml b/salt/kafka/defaults.yaml index f45560e60..e029bc251 100644 --- a/salt/kafka/defaults.yaml +++ b/salt/kafka/defaults.yaml @@ -3,6 +3,7 @@ kafka: cluster_id: kafka_pass: kafka_controllers: + reset_kafka: config: broker: advertised_x_listeners: diff --git a/salt/kafka/disabled.sls b/salt/kafka/disabled.sls index 0027fbfb9..4678e2602 100644 --- a/salt/kafka/disabled.sls +++ b/salt/kafka/disabled.sls @@ -3,9 +3,6 @@ # https://securityonion.net/license; you may not use this file except in compliance with the # Elastic License 2.0. -include: - - kafka.sostatus - so-kafka: docker_container.absent: - force: True diff --git a/salt/kafka/reset_kafka.sls b/salt/kafka/reset_kafka.sls new file mode 100644 index 000000000..8789516cd --- /dev/null +++ b/salt/kafka/reset_kafka.sls @@ -0,0 +1,9 @@ +# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one +# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +# https://securityonion.net/license; you may not use this file except in compliance with the +# Elastic License 2.0. + +wipe_kafka_data: + file.absent: + - name: /nsm/kafka/data/ + - force: True \ No newline at end of file diff --git a/salt/kafka/soc_kafka.yaml b/salt/kafka/soc_kafka.yaml index 05f047c4a..686b2ad97 100644 --- a/salt/kafka/soc_kafka.yaml +++ b/salt/kafka/soc_kafka.yaml @@ -1,6 +1,6 @@ kafka: enabled: - description: Enable or disable Kafka. Recommended to have desired configuration staged prior to enabling Kafka. Join all receiver nodes to grid that will be converted to Kafka nodes, configure kafka_controllers with the hostnames of the nodes you want to act as controllers, and configure the default_replication_factor to the desired value for your redundancy needs. + description: Enable or disable Kafka. Recommended to have desired configuration staged prior to enabling Kafka. Configure kafka_controllers with the hostnames of the nodes you want to act as controllers, join all receiver nodes to grid that will be converted to Kafka nodes, and configure the default_replication_factor to the desired value for your redundancy needs. helpLink: kafka.html cluster_id: description: The ID of the Kafka cluster. @@ -13,9 +13,12 @@ kafka: sensitive: True helpLink: kafka.html kafka_controllers: - description: A comma-seperated list of Security Onion grid members that should act as controllers for this Kafka cluster. By default, the grid manager will use a 'combined' role where it will act as both a broker and controller. Keep total Kafka controllers to an odd number and ensure you do not assign ALL your Kafka nodes as controllers or this Kafka cluster will not start. + description: A comma-seperated list of Security Onion hosts that will act as Kafka controllers. These hosts will be responsible for managing the Kafka cluster. WARNING - The hostnames of receiver nodes intended to be controllers should be added here BEFORE they have joined the Security Onion grid or BEFORE enabling KAFKA. This is to ensure that data is not lost by converting a data broker to a controller. Failure to do so may result in topics becoming unavailable and requiring manual intervention to repair or resetting Kafka data. forcedType: "string" helpLink: kafka.html + reset_kafka: + description: Disable and reset the Kafka cluster. This will remove all Kafka data including logs that may have not yet been ingested into Elasticsearch and reverts the grid to using REDIS as the global pipeline. This is useful when testing different Kafka configurations such as rearranging Kafka brokers / controllers allowing you to reset the cluster rather than manually fixing any issues arising from attempting to reassign a Kafka broker into a controller. Enter 'YES_RESET_KAFKA' and submit to disable and reset Kafka. Make any configuration changes required and re-enable Kafka when ready. + helpLink: kafka.html config: broker: advertised_x_listeners: diff --git a/salt/salt/files/engines.conf b/salt/salt/files/engines.conf index de5685fff..dbfb89973 100644 --- a/salt/salt/files/engines.conf +++ b/salt/salt/files/engines.conf @@ -75,4 +75,20 @@ engines: cmd: salt -C 'G@role:so-standalone or G@role:so-manager or G@role:so-managersearch or G@role:so-receiver' state.apply kafka - cmd.run: cmd: salt-call state.apply elasticfleet + - files: + - /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls + - /opt/so/saltstack/local/pillar/kafka/adv_kafka.sls + pillar: kafka.reset_kafka + default: '' + actions: + from: + '*': + to: + 'YES_RESET_KAFKA': + - cmd.run: + cmd: salt -C 'G@role:so-standalone or G@role:so-manager or G@role:so-managersearch or G@role:so-receiver' saltutil.kill_all_jobs + - cmd.run: + cmd: salt -C 'G@role:so-standalone or G@role:so-manager or G@role:so-managersearch or G@role:so-receiver' state.apply kafka.disabled,kafka.reset_kafka + - cmd.run: + cmd: /usr/sbin/so-yaml.py remove /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls kafka.reset_kafka interval: 10 From a81e4c33625cbdfd0ceb3ac7ad3a001ce4f8ad96 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 11 Jun 2024 11:55:17 -0400 Subject: [PATCH 161/507] remove dash(-) from kafka.id Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/elasticsearch/files/ingest/.fleet_final_pipeline-1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/elasticsearch/files/ingest/.fleet_final_pipeline-1 b/salt/elasticsearch/files/ingest/.fleet_final_pipeline-1 index 899ec0c64..233cd647b 100644 --- a/salt/elasticsearch/files/ingest/.fleet_final_pipeline-1 +++ b/salt/elasticsearch/files/ingest/.fleet_final_pipeline-1 @@ -84,7 +84,7 @@ { "community_id":{ "if": "ctx.event?.dataset == 'endpoint.events.network'", "ignore_failure":true } }, { "set": { "if": "ctx.event?.module == 'fim'", "override": true, "field": "event.module", "value": "file_integrity" } }, { "rename": { "if": "ctx.winlog?.provider_name == 'Microsoft-Windows-Windows Defender'", "ignore_missing": true, "field": "winlog.event_data.Threat Name", "target_field": "winlog.event_data.threat_name" } }, - { "set": { "if": "ctx?.metadata?.kafka != null" , "field": "kafka.id", "value": "{{metadata.kafka.partition}}-{{metadata.kafka.offset}}-{{metadata.kafka.timestamp}}", "ignore_failure": true } }, + { "set": { "if": "ctx?.metadata?.kafka != null" , "field": "kafka.id", "value": "{{metadata.kafka.partition}}{{metadata.kafka.offset}}{{metadata.kafka.timestamp}}", "ignore_failure": true } }, { "remove": { "field": [ "message2", "type", "fields", "category", "module", "dataset", "event.dataset_temp", "dataset_tag_temp", "module_temp" ], "ignore_missing": true, "ignore_failure": true } } ], "on_failure": [ From 628893fd5b85da670d7fd4860c00dfe93ae208b5 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Tue, 11 Jun 2024 11:56:21 -0400 Subject: [PATCH 162/507] remove redundant 'kafka_' from annotations & defaults Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/defaults.yaml | 6 +++--- salt/kafka/soc_kafka.yaml | 13 +++++++------ salt/manager/tools/sbin/soup | 2 +- salt/salt/files/engines.conf | 6 +++--- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/salt/kafka/defaults.yaml b/salt/kafka/defaults.yaml index e029bc251..062c2d5ca 100644 --- a/salt/kafka/defaults.yaml +++ b/salt/kafka/defaults.yaml @@ -1,9 +1,9 @@ kafka: enabled: False cluster_id: - kafka_pass: - kafka_controllers: - reset_kafka: + password: + controllers: + reset: config: broker: advertised_x_listeners: diff --git a/salt/kafka/soc_kafka.yaml b/salt/kafka/soc_kafka.yaml index 686b2ad97..59816cef3 100644 --- a/salt/kafka/soc_kafka.yaml +++ b/salt/kafka/soc_kafka.yaml @@ -1,6 +1,6 @@ kafka: enabled: - description: Enable or disable Kafka. Recommended to have desired configuration staged prior to enabling Kafka. Configure kafka_controllers with the hostnames of the nodes you want to act as controllers, join all receiver nodes to grid that will be converted to Kafka nodes, and configure the default_replication_factor to the desired value for your redundancy needs. + description: Enable or disable Kafka. Recommended to have desired configuration staged prior to enabling Kafka. Configure controllers with the hostnames of the nodes you want to act as controllers, join all receiver nodes to grid that will be converted to Kafka nodes, and configure the default_replication_factor to the desired value for your redundancy needs. helpLink: kafka.html cluster_id: description: The ID of the Kafka cluster. @@ -8,16 +8,17 @@ kafka: advanced: True sensitive: True helpLink: kafka.html - kafka_pass: + password: description: The password to use for the Kafka certificates. sensitive: True helpLink: kafka.html - kafka_controllers: + controllers: description: A comma-seperated list of Security Onion hosts that will act as Kafka controllers. These hosts will be responsible for managing the Kafka cluster. WARNING - The hostnames of receiver nodes intended to be controllers should be added here BEFORE they have joined the Security Onion grid or BEFORE enabling KAFKA. This is to ensure that data is not lost by converting a data broker to a controller. Failure to do so may result in topics becoming unavailable and requiring manual intervention to repair or resetting Kafka data. forcedType: "string" helpLink: kafka.html - reset_kafka: - description: Disable and reset the Kafka cluster. This will remove all Kafka data including logs that may have not yet been ingested into Elasticsearch and reverts the grid to using REDIS as the global pipeline. This is useful when testing different Kafka configurations such as rearranging Kafka brokers / controllers allowing you to reset the cluster rather than manually fixing any issues arising from attempting to reassign a Kafka broker into a controller. Enter 'YES_RESET_KAFKA' and submit to disable and reset Kafka. Make any configuration changes required and re-enable Kafka when ready. + reset: + description: Disable and reset the Kafka cluster. This will remove all Kafka data including logs that may have not yet been ingested into Elasticsearch and reverts the grid to using REDIS as the global pipeline. This is useful when testing different Kafka configurations such as rearranging Kafka brokers / controllers allowing you to reset the cluster rather than manually fixing any issues arising from attempting to reassign a Kafka broker into a controller. Enter 'YES_reset' and submit to disable and reset Kafka. Make any configuration changes required and re-enable Kafka when ready. This action CANNOT be reversed. + advanced: True helpLink: kafka.html config: broker: @@ -31,7 +32,7 @@ kafka: forcedType: bool helpLink: kafka.html default_x_replication_x_factor: - description: The default replication factor for automatically created topics. This value must be less than the amount of brokers in the cluster. Hosts specified in kafka_controllers should not be counted towards total broker count. + description: The default replication factor for automatically created topics. This value must be less than the amount of brokers in the cluster. Hosts specified in controllers should not be counted towards total broker count. title: default.replication.factor forcedType: int helpLink: kafka.html diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index 56d2d7de3..e38ba40e0 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -644,7 +644,7 @@ up_to_2.4.80() { kafka_cluster_id=$(get_random_value 22) echo ' cluster_id: '$kafka_cluster_id >> /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls kafkapass=$(get_random_value) - echo ' kafka_pass: '$kafkapass >> /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls + echo ' password: '$kafkapass >> /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls INSTALLEDVERSION=2.4.80 } diff --git a/salt/salt/files/engines.conf b/salt/salt/files/engines.conf index dbfb89973..7b1f9bf3e 100644 --- a/salt/salt/files/engines.conf +++ b/salt/salt/files/engines.conf @@ -60,7 +60,7 @@ engines: - files: - /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls - /opt/so/saltstack/local/pillar/kafka/adv_kafka.sls - pillar: kafka.kafka_controllers + pillar: kafka.controllers default: '' actions: from: @@ -78,7 +78,7 @@ engines: - files: - /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls - /opt/so/saltstack/local/pillar/kafka/adv_kafka.sls - pillar: kafka.reset_kafka + pillar: kafka.reset default: '' actions: from: @@ -90,5 +90,5 @@ engines: - cmd.run: cmd: salt -C 'G@role:so-standalone or G@role:so-manager or G@role:so-managersearch or G@role:so-receiver' state.apply kafka.disabled,kafka.reset_kafka - cmd.run: - cmd: /usr/sbin/so-yaml.py remove /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls kafka.reset_kafka + cmd: /usr/sbin/so-yaml.py remove /opt/so/saltstack/local/pillar/kafka/soc_kafka.sls kafka.reset interval: 10 From 2ecac38f6d4aba6c5e1cc5bd31ef48209a098a80 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Tue, 11 Jun 2024 13:50:29 -0400 Subject: [PATCH 163/507] disable logstash on heavynodes --- salt/manager/tools/sbin/so-minion | 1 - salt/manager/tools/sbin/soup | 17 ++++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/salt/manager/tools/sbin/so-minion b/salt/manager/tools/sbin/so-minion index da1a6d2a2..bdcf4a08d 100755 --- a/salt/manager/tools/sbin/so-minion +++ b/salt/manager/tools/sbin/so-minion @@ -528,7 +528,6 @@ function createHEAVYNODE() { pcapspace add_elasticsearch_to_minion add_elastic_agent_to_minion - add_logstash_to_minion add_sensor_to_minion add_strelka_to_minion add_redis_to_minion diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index 9ee4058f9..61246c29a 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -308,6 +308,21 @@ clone_to_tmp() { fi } +disable_logstash_heavynodes() { + c=0 + printf "\nChecking for heavynodes and disabling Logstash if they exist\n" + for file in /opt/so/saltstack/local/pillar/minions/*.sls; do + if [[ $file =~ "_heavynode.sls" && ! $file =~ "/opt/so/saltstack/local/pillar/minions/adv_" ]]; then + if [ $c -eq 0 ]; then + ((c++)) + FINAL_MESSAGE_QUEUE+=("Logstash has been disabled on all heavynodes. It can be re-enabled via Grid Configuration in SOC.") + fi + echo "Disabling Logstash for: $file" + so-yaml.py replace "$file" logstash.enabled False + fi + done +} + enable_highstate() { echo "Enabling highstate." salt-call state.enable highstate -l info --local @@ -477,7 +492,7 @@ post_to_2.4.70() { } post_to_2.4.80() { - echo "Nothing to apply" + disable_logstash_heavynodes POSTVERSION=2.4.80 } From d5ef0e57443edd62a801392cc7bcb52d11f12d56 Mon Sep 17 00:00:00 2001 From: Corey Ogburn Date: Tue, 11 Jun 2024 12:34:32 -0600 Subject: [PATCH 164/507] Fix unnecessary escaping --- salt/soc/defaults.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/soc/defaults.yaml b/salt/soc/defaults.yaml index f5628f3c3..f0d028fdb 100644 --- a/salt/soc/defaults.yaml +++ b/salt/soc/defaults.yaml @@ -2261,7 +2261,7 @@ soc: meta: description = ""; strings: - $x = \"string\"; + $x = "string"; condition: all of them; } From 88fc1bbe329f8ffc66a282255e194fda1e6b1dac Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Tue, 11 Jun 2024 16:32:57 -0400 Subject: [PATCH 165/507] quotes on vars --- salt/manager/tools/sbin/soup | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index 61246c29a..06ce1757b 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -312,8 +312,8 @@ disable_logstash_heavynodes() { c=0 printf "\nChecking for heavynodes and disabling Logstash if they exist\n" for file in /opt/so/saltstack/local/pillar/minions/*.sls; do - if [[ $file =~ "_heavynode.sls" && ! $file =~ "/opt/so/saltstack/local/pillar/minions/adv_" ]]; then - if [ $c -eq 0 ]; then + if [[ "$file" =~ "_heavynode.sls" && ! "$file" =~ "/opt/so/saltstack/local/pillar/minions/adv_" ]]; then + if [ "$c" -eq 0 ]; then ((c++)) FINAL_MESSAGE_QUEUE+=("Logstash has been disabled on all heavynodes. It can be re-enabled via Grid Configuration in SOC.") fi From 98837bc3790964db831a5dc95994f0eea075546f Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Wed, 12 Jun 2024 09:11:02 -0400 Subject: [PATCH 166/507] this method does not cause soup to fail --- salt/manager/tools/sbin/soup | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index 06ce1757b..e29a6811e 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -314,7 +314,7 @@ disable_logstash_heavynodes() { for file in /opt/so/saltstack/local/pillar/minions/*.sls; do if [[ "$file" =~ "_heavynode.sls" && ! "$file" =~ "/opt/so/saltstack/local/pillar/minions/adv_" ]]; then if [ "$c" -eq 0 ]; then - ((c++)) + c=$((c + 1)) FINAL_MESSAGE_QUEUE+=("Logstash has been disabled on all heavynodes. It can be re-enabled via Grid Configuration in SOC.") fi echo "Disabling Logstash for: $file" From c38f48c7f28f8b8e669eb2ae6dcf092fbf8896b8 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Wed, 12 Jun 2024 10:34:32 -0400 Subject: [PATCH 167/507] remove this \n --- salt/manager/tools/sbin/soup | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index 0d52e5c16..821feed73 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -1295,7 +1295,7 @@ EOF # check if the FINAL_MESSAGE_QUEUE is not empty if (( ${#FINAL_MESSAGE_QUEUE[@]} != 0 )); then - echo "The following additional information applies specifically to your grid:\n" + echo "The following additional information applies specifically to your grid:" for m in "${FINAL_MESSAGE_QUEUE[@]}"; do echo "$m" echo From b7eebad2a570d53383194014787df2dffa8bad5d Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 12 Jun 2024 11:01:40 -0400 Subject: [PATCH 168/507] Update Kafka self reset & add initial Kafka wrapper scripts to build out Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- salt/kafka/config.sls | 5 +- salt/kafka/nodes.map.jinja | 2 +- salt/kafka/{reset_kafka.sls => reset.sls} | 0 salt/kafka/soc_kafka.yaml | 2 +- salt/kafka/tools/sbin/so-kafka-cli | 47 +++++++++++ salt/kafka/tools/sbin/so-kafka-config-update | 87 ++++++++++++++++++++ salt/salt/files/engines.conf | 2 +- 7 files changed, 139 insertions(+), 6 deletions(-) rename salt/kafka/{reset_kafka.sls => reset.sls} (100%) create mode 100644 salt/kafka/tools/sbin/so-kafka-cli create mode 100644 salt/kafka/tools/sbin/so-kafka-config-update diff --git a/salt/kafka/config.sls b/salt/kafka/config.sls index 165daf7eb..1c3d8c26b 100644 --- a/salt/kafka/config.sls +++ b/salt/kafka/config.sls @@ -20,14 +20,13 @@ kafka: - uid: 960 - gid: 960 -{# Future tools to query kafka directly / show consumer groups kafka_sbin_tools: file.recurse: - name: /usr/sbin - source: salt://kafka/tools/sbin - user: 960 - group: 960 - - file_mode: 755 #} + - file_mode: 755 kafka_sbin_jinja_tools: file.recurse: @@ -69,7 +68,7 @@ kafka_kraft_{{sc}}_properties: reset_quorum_on_changes: cmd.run: - name: rm -f /nsm/kafka/data/__cluster_metadata-0/quorum-state - - watch: + - onchanges: - file: /opt/so/conf/kafka/server.properties {% else %} diff --git a/salt/kafka/nodes.map.jinja b/salt/kafka/nodes.map.jinja index c0b98de14..3a73b038f 100644 --- a/salt/kafka/nodes.map.jinja +++ b/salt/kafka/nodes.map.jinja @@ -16,7 +16,7 @@ tgt_type='compound') %} {% set STORED_KAFKANODES = salt['pillar.get']('kafka:nodes', default=None) %} -{% set KAFKA_CONTROLLERS_PILLAR = salt['pillar.get']('kafka:kafka_controllers', default=None) %} +{% set KAFKA_CONTROLLERS_PILLAR = salt['pillar.get']('kafka:controllers', default=None) %} {% set existing_ids = [] %} diff --git a/salt/kafka/reset_kafka.sls b/salt/kafka/reset.sls similarity index 100% rename from salt/kafka/reset_kafka.sls rename to salt/kafka/reset.sls diff --git a/salt/kafka/soc_kafka.yaml b/salt/kafka/soc_kafka.yaml index 59816cef3..1172fc5b9 100644 --- a/salt/kafka/soc_kafka.yaml +++ b/salt/kafka/soc_kafka.yaml @@ -17,7 +17,7 @@ kafka: forcedType: "string" helpLink: kafka.html reset: - description: Disable and reset the Kafka cluster. This will remove all Kafka data including logs that may have not yet been ingested into Elasticsearch and reverts the grid to using REDIS as the global pipeline. This is useful when testing different Kafka configurations such as rearranging Kafka brokers / controllers allowing you to reset the cluster rather than manually fixing any issues arising from attempting to reassign a Kafka broker into a controller. Enter 'YES_reset' and submit to disable and reset Kafka. Make any configuration changes required and re-enable Kafka when ready. This action CANNOT be reversed. + description: Disable and reset the Kafka cluster. This will remove all Kafka data including logs that may have not yet been ingested into Elasticsearch and reverts the grid to using REDIS as the global pipeline. This is useful when testing different Kafka configurations such as rearranging Kafka brokers / controllers allowing you to reset the cluster rather than manually fixing any issues arising from attempting to reassign a Kafka broker into a controller. Enter 'YES_RESET_KAFKA' and submit to disable and reset Kafka. Make any configuration changes required and re-enable Kafka when ready. This action CANNOT be reversed. advanced: True helpLink: kafka.html config: diff --git a/salt/kafka/tools/sbin/so-kafka-cli b/salt/kafka/tools/sbin/so-kafka-cli new file mode 100644 index 000000000..41993f67f --- /dev/null +++ b/salt/kafka/tools/sbin/so-kafka-cli @@ -0,0 +1,47 @@ +#! /bin/bash +# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one +# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at +# https://securityonion.net/license; you may not use this file except in compliance with the +# Elastic License 2.0. + +if [ -z "$NOROOT" ]; then + # Check for prerequisites + if [ "$(id -u)" -ne 0 ]; then + echo "This script must be run using sudo!" + exit 1 + fi +fi + +function usage() { + echo -e "\nUsage: $0 + diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/css/desktop.css b/salt/idh/skins/http/opencanary/nasLogin/static/css/desktop.css new file mode 100644 index 000000000..85bcd44ad --- /dev/null +++ b/salt/idh/skins/http/opencanary/nasLogin/static/css/desktop.css @@ -0,0 +1 @@ +.scrollgeneric{line-height:1px;font-size:1px;position:absolute;top:0;left:0}.vscrollerbase,.hscrollerbase{width:0px;height:0px}.vscrollerbar,.hscrollerbar{background-position:0 0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=20);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=20);opacity:0.2;-webkit-transition-property:opacity;-moz-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity;-webkit-transition-timing-function:ease-in;-moz-transition-timing-function:ease-in;-o-transition-timing-function:ease-in;transition-timing-function:ease-in;-webkit-transition-duration:0.2s;-moz-transition-duration:0.2s;-o-transition-duration:0.2s;transition-duration:0.2s}.vscrollerbar:hover,.hscrollerbar:hover{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=30);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=30);opacity:0.3}.vscrollerbar:active,.hscrollerbar:active{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=40);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);opacity:0.4}.vscrollerbar{width:10px;margin-left:-10px}.hscrollerbar{height:10px;margin-top:-10px}.vscrollerbar{background-image:url("images/scrollbar/scrollbar_black_v.png");background-repeat:repeat-y}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .vscrollerbar{background-image:url("../img/synohdpack/images/scrollbar/scrollbar_black_v.png");background-size:10px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .vscrollerbar{background-image:url("../img/synohdpack/images/scrollbar/scrollbar_black_v.png");background-size:10px;outline:1px green dashed}}.white-scrollerbar .vscrollerbar{background-image:url("images/scrollbar/scrollbar_white_v.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .white-scrollerbar .vscrollerbar{background-image:url("../img/synohdpack/images/scrollbar/scrollbar_white_v.png");background-size:10px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .white-scrollerbar .vscrollerbar{background-image:url("../img/synohdpack/images/scrollbar/scrollbar_white_v.png");background-size:10px;outline:1px green dashed}}.hscrollerbar{background-image:url "images/scrollbar/scrollbar_black_h.png";background-repeat:repeat-x}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .hscrollerbar{background-image:url("../img/synohdpack/images/scrollbar/scrollbar_black_h.png");background-size:10px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .hscrollerbar{background-image:url("../img/synohdpack/images/scrollbar/scrollbar_black_h.png");background-size:10px;outline:1px green dashed}}.white-scrollerbar .hscrollerbar{background-image:url "images/scrollbar/scrollbar_white_h.png"}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .white-scrollerbar .hscrollerbar{background-image:url("../img/synohdpack/images/scrollbar/scrollbar_white_h.png");background-size:10px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .white-scrollerbar .hscrollerbar{background-image:url("../img/synohdpack/images/scrollbar/scrollbar_white_h.png");background-size:10px;outline:1px green dashed}}.flexcrollactive{outline:none}.vscrollerbar{background-image:url("../../../scripts/scrollbar/images/scrollbar/scrollbar_black_v.png");background-repeat:repeat-y}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .vscrollerbar{background-image:url("../img/synohdpack/images/scrollbar/scrollbar_black_v.png");background-size:10px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .vscrollerbar{background-image:url("../img/synohdpack/images/scrollbar/scrollbar_black_v.png");background-size:10px;outline:1px green dashed}}.white-scrollerbar .vscrollerbar{background-image:url("../../../scripts/scrollbar/images/scrollbar/scrollbar_white_v.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .white-scrollerbar .vscrollerbar{background-image:url("../img/synohdpack/images/scrollbar/scrollbar_white_v.png");background-size:10px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .white-scrollerbar .vscrollerbar{background-image:url("../img/synohdpack/images/scrollbar/scrollbar_white_v.png");background-size:10px;outline:1px green dashed}}.hscrollerbar{background-image:url("../../../scripts/scrollbar/images/scrollbar/scrollbar_black_h.png");background-repeat:repeat-x}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .hscrollerbar{background-image:url("../img/synohdpack/images/scrollbar/scrollbar_black_h.png");background-size:10px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .hscrollerbar{background-image:url("../img/synohdpack/images/scrollbar/scrollbar_black_h.png");background-size:10px;outline:1px green dashed}}.white-scrollerbar .hscrollerbar{background-image:url("../../../scripts/scrollbar/images/scrollbar/scrollbar_white_h.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .white-scrollerbar .hscrollerbar{background-image:url("../img/synohdpack/images/scrollbar/scrollbar_white_h.png");background-size:10px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .white-scrollerbar .hscrollerbar{background-image:url("../img/synohdpack/images/scrollbar/scrollbar_white_h.png");background-size:10px;outline:1px green dashed}}body{font-size:12px}body,.normal-font{color:#505a64}.disable-font{color:#96a0aa}.note-font{color:#00a66e}.link-font{font-weight:bold}.link-font{color:#0086e5}.green-status{color:#1ca600}.red-status{color:#fa4b4b}.orange-status{color:#ff7f00}a,.blue-status{color:#0086e5}.sds-logo{position:absolute;display:inline-block;height:32px;right:20px;bottom:8px}.sds-logo.light .logo-0{background-image:url("../images/login/light/0.png");width:17px;height:32px;display:inline-block}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-logo.light .logo-0{background-image:url("../img/synohdpack/images/dsm/resources/images/login/light/0.png");background-size:17px 32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-logo.light .logo-0{background-image:url("../img/synohdpack/images/dsm/resources/images/login/light/0.png");background-size:17px 32px;outline:1px green dashed}}.sds-logo.light .logo-1{background-image:url("../images/login/light/1.png");width:17px;height:32px;display:inline-block}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-logo.light .logo-1{background-image:url("../img/synohdpack/images/dsm/resources/images/login/light/1.png");background-size:17px 32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-logo.light .logo-1{background-image:url("../img/synohdpack/images/dsm/resources/images/login/light/1.png");background-size:17px 32px;outline:1px green dashed}}.sds-logo.light .logo-2{background-image:url("../images/login/light/2.png");width:17px;height:32px;display:inline-block}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-logo.light .logo-2{background-image:url("../img/synohdpack/images/dsm/resources/images/login/light/2.png");background-size:17px 32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-logo.light .logo-2{background-image:url("../img/synohdpack/images/dsm/resources/images/login/light/2.png");background-size:17px 32px;outline:1px green dashed}}.sds-logo.light .logo-3{background-image:url("../images/login/light/3.png");width:17px;height:32px;display:inline-block}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-logo.light .logo-3{background-image:url("../img/synohdpack/images/dsm/resources/images/login/light/3.png");background-size:17px 32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-logo.light .logo-3{background-image:url("../img/synohdpack/images/dsm/resources/images/login/light/3.png");background-size:17px 32px;outline:1px green dashed}}.sds-logo.light .logo-4{background-image:url("../images/login/light/4.png");width:17px;height:32px;display:inline-block}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-logo.light .logo-4{background-image:url("../img/synohdpack/images/dsm/resources/images/login/light/4.png");background-size:17px 32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-logo.light .logo-4{background-image:url("../img/synohdpack/images/dsm/resources/images/login/light/4.png");background-size:17px 32px;outline:1px green dashed}}.sds-logo.light .logo-5dot{background-image:url("../images/login/light/5dot.png");width:19px;height:32px;display:inline-block}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-logo.light .logo-5dot{background-image:url("../img/synohdpack/images/dsm/resources/images/login/light/5dot.png");background-size:19px 32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-logo.light .logo-5dot{background-image:url("../img/synohdpack/images/dsm/resources/images/login/light/5dot.png");background-size:19px 32px;outline:1px green dashed}}.sds-logo.light .logo-DSM{background-image:url("../images/login/light/DSM.png");width:56px;height:32px;display:inline-block}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-logo.light .logo-DSM{background-image:url("../img/synohdpack/images/dsm/resources/images/login/light/DSM.png");background-size:56px 32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-logo.light .logo-DSM{background-image:url("../img/synohdpack/images/dsm/resources/images/login/light/DSM.png");background-size:56px 32px;outline:1px green dashed}}.sds-logo.light .logo-synology{background-image:url("../images/login/light/synology.png");width:111px;height:32px;display:inline-block}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-logo.light .logo-synology{background-image:url("../img/synohdpack/images/dsm/resources/images/login/light/synology.png");background-size:111px 32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-logo.light .logo-synology{background-image:url("../img/synohdpack/images/dsm/resources/images/login/light/synology.png");background-size:111px 32px;outline:1px green dashed}}.sds-logo.light .logo-beta{background-image:url("../images/login/light/beta.png");width:45px;height:32px;display:inline-block}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-logo.light .logo-beta{background-image:url("../img/synohdpack/images/dsm/resources/images/login/light/beta.png");background-size:45px 32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-logo.light .logo-beta{background-image:url("../img/synohdpack/images/dsm/resources/images/login/light/beta.png");background-size:45px 32px;outline:1px green dashed}}.sds-logo.dark .logo-0{background-image:url("../images/login/dark/0.png");width:17px;height:32px;display:inline-block}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-logo.dark .logo-0{background-image:url("../img/synohdpack/images/dsm/resources/images/login/dark/0.png");background-size:17px 32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-logo.dark .logo-0{background-image:url("../img/synohdpack/images/dsm/resources/images/login/dark/0.png");background-size:17px 32px;outline:1px green dashed}}.sds-logo.dark .logo-1{background-image:url("../images/login/dark/1.png");width:17px;height:32px;display:inline-block}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-logo.dark .logo-1{background-image:url("../img/synohdpack/images/dsm/resources/images/login/dark/1.png");background-size:17px 32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-logo.dark .logo-1{background-image:url("../img/synohdpack/images/dsm/resources/images/login/dark/1.png");background-size:17px 32px;outline:1px green dashed}}.sds-logo.dark .logo-2{background-image:url("../images/login/dark/2.png");width:17px;height:32px;display:inline-block}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-logo.dark .logo-2{background-image:url("../img/synohdpack/images/dsm/resources/images/login/dark/2.png");background-size:17px 32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-logo.dark .logo-2{background-image:url("../img/synohdpack/images/dsm/resources/images/login/dark/2.png");background-size:17px 32px;outline:1px green dashed}}.sds-logo.dark .logo-3{background-image:url("../images/login/dark/3.png");width:17px;height:32px;display:inline-block}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-logo.dark .logo-3{background-image:url("../img/synohdpack/images/dsm/resources/images/login/dark/3.png");background-size:17px 32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-logo.dark .logo-3{background-image:url("../img/synohdpack/images/dsm/resources/images/login/dark/3.png");background-size:17px 32px;outline:1px green dashed}}.sds-logo.dark .logo-4{background-image:url("../images/login/dark/4.png");width:17px;height:32px;display:inline-block}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-logo.dark .logo-4{background-image:url("../img/synohdpack/images/dsm/resources/images/login/dark/4.png");background-size:17px 32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-logo.dark .logo-4{background-image:url("../img/synohdpack/images/dsm/resources/images/login/dark/4.png");background-size:17px 32px;outline:1px green dashed}}.sds-logo.dark .logo-5dot{background-image:url("../images/login/dark/5dot.png");width:19px;height:32px;display:inline-block}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-logo.dark .logo-5dot{background-image:url("../img/synohdpack/images/dsm/resources/images/login/dark/5dot.png");background-size:19px 32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-logo.dark .logo-5dot{background-image:url("../img/synohdpack/images/dsm/resources/images/login/dark/5dot.png");background-size:19px 32px;outline:1px green dashed}}.sds-logo.dark .logo-DSM{background-image:url("../images/login/dark/DSM.png");width:56px;height:32px;display:inline-block}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-logo.dark .logo-DSM{background-image:url("../img/synohdpack/images/dsm/resources/images/login/dark/DSM.png");background-size:56px 32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-logo.dark .logo-DSM{background-image:url("../img/synohdpack/images/dsm/resources/images/login/dark/DSM.png");background-size:56px 32px;outline:1px green dashed}}.sds-logo.dark .logo-synology{background-image:url("../images/login/dark/synology.png");width:111px;height:32px;display:inline-block}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-logo.dark .logo-synology{background-image:url("../img/synohdpack/images/dsm/resources/images/login/dark/synology.png");background-size:111px 32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-logo.dark .logo-synology{background-image:url("../img/synohdpack/images/dsm/resources/images/login/dark/synology.png");background-size:111px 32px;outline:1px green dashed}}.sds-logo.dark .logo-beta{background-image:url("../images/login/dark/beta.png");width:45px;height:32px;display:inline-block}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-logo.dark .logo-beta{background-image:url("../img/synohdpack/images/dsm/resources/images/login/dark/beta.png");background-size:45px 32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-logo.dark .logo-beta{background-image:url("../img/synohdpack/images/dsm/resources/images/login/dark/beta.png");background-size:45px 32px;outline:1px green dashed}}#sds-desktop .sds-logo{bottom:12px}#sds-login .sds-logo{bottom:28px}#sds-copyright{position:absolute;width:248px;height:20px;bottom:8px;right:20px}#sds-copyright.light .logo-copyright_2014{background-image:url("../images/login/light/copyright_2014.png");height:100%}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-copyright.light .logo-copyright_2014{background-image:url("../img/synohdpack/images/dsm/resources/images/login/light/copyright_2014.png");background-size:248px 20px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-copyright.light .logo-copyright_2014{background-image:url("../img/synohdpack/images/dsm/resources/images/login/light/copyright_2014.png");background-size:248px 20px;outline:1px green dashed}}#sds-copyright.light .logo-copyright_2015{background-image:url("../images/login/light/copyright_2015.png");height:100%}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-copyright.light .logo-copyright_2015{background-image:url("../img/synohdpack/images/dsm/resources/images/login/light/copyright_2015.png");background-size:248px 20px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-copyright.light .logo-copyright_2015{background-image:url("../img/synohdpack/images/dsm/resources/images/login/light/copyright_2015.png");background-size:248px 20px;outline:1px green dashed}}#sds-copyright.dark .logo-copyright_2014{background-image:url("../images/login/dark/copyright_2014.png");height:100%}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-copyright.dark .logo-copyright_2014{background-image:url("../img/synohdpack/images/dsm/resources/images/login/dark/copyright_2014.png");background-size:248px 20px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-copyright.dark .logo-copyright_2014{background-image:url("../img/synohdpack/images/dsm/resources/images/login/dark/copyright_2014.png");background-size:248px 20px;outline:1px green dashed}}#sds-copyright.dark .logo-copyright_2015{background-image:url("../images/login/dark/copyright_2015.png");height:100%}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-copyright.dark .logo-copyright_2015{background-image:url("../img/synohdpack/images/dsm/resources/images/login/dark/copyright_2015.png");background-size:248px 20px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-copyright.dark .logo-copyright_2015{background-image:url("../img/synohdpack/images/dsm/resources/images/login/dark/copyright_2015.png");background-size:248px 20px;outline:1px green dashed}}#sds-bug-report-container,#sds-mobile-edition-container{position:absolute;bottom:0px;height:36px;width:100%;text-align:center}#sds-mobile-edition,#sds-bug-report{position:absolute;bottom:0px;background-position:0 0}#sds-mobile-edition:hover,#sds-bug-report:hover{background-position:0 -40px;cursor:pointer}#sds-mobile-edition:active,#sds-bug-report:active{background-position:0 -80px}#sds-mobile-edition{background-image:url("../images/bt_dsm_mobile.png");left:50%;margin-left:-84px;width:168px;height:40px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-mobile-edition{background-image:url("../img/synohdpack/images/dsm/resources/images/bt_dsm_mobile.png");background-size:168px 160px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-mobile-edition{background-image:url("../img/synohdpack/images/dsm/resources/images/bt_dsm_mobile.png");background-size:168px 160px;outline:1px green dashed}}#sds-bug-report{background-image:url("../images/bt_bugs.png");left:50%;margin-left:-84px;width:168px;height:40px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-bug-report{background-image:url("../img/synohdpack/images/dsm/resources/images/bt_bugs.png");background-size:168px 160px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-bug-report{background-image:url("../img/synohdpack/images/dsm/resources/images/bt_bugs.png");background-size:168px 160px;outline:1px green dashed}}.desktop-timeout-mask.ext-el-mask{background-color:#000000;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=20);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=20);opacity:0.2}.x-window-tl .x-window-header{font-family:verdana, tahoma, arial ,sans-serif;background-size:16px 16px}.sds-desktop-dd-ct li.launch-icon,li.launch-icon .image,li.launch-icon .image .virtual-group-icon-background{width:64px;height:64px;background-size:64px 64px}.sds-desktop-dd-ct li.launch-icon.classical,li.launch-icon.classical .image,li.launch-icon.classical .image .virtual-group-icon-background{width:48px;height:48px;background-size:48px 48px}#sds-desktop li.launch-icon{width:136px;height:100px;padding-top:16px;position:absolute;float:left;overflow:visible;cursor:pointer}#sds-desktop li.launch-icon.classical{height:84px}.sds-desktop-dd-ct{position:absolute;width:144px;height:240px;overflow:visible;top:-10000px;list-style:none}.sds-desktop-dd-ct li.launch-icon .text,.sds-desktop-dd-ct li.launch-icon .text a{white-space:normal;visibility:hidden}.sds-desktop-dd-ct .sds-desktop-icon-selected{border-radius:0;-moz-border-radius:0;background-color:transparent;filter:none}li.launch-icon .image{position:relative;background-position:center center;background-repeat:no-repeat;margin:0 auto 4px auto}li.launch-icon .image .virtual-group-icon-background{position:absolute;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=75);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=75);opacity:0.75;background:#282d32;background:#282d32;border-radius:5px}.sds-launch-icon-dragging-proxy.x-dd-drop-ok-add .x-dd-drop-icon{width:64px;height:64px;background-image:url(../images/icon_drag_add.png)}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-launch-icon-dragging-proxy.x-dd-drop-ok-add .x-dd-drop-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/icon_drag_add.png");background-size:36px 36px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-launch-icon-dragging-proxy.x-dd-drop-ok-add .x-dd-drop-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/icon_drag_add.png");background-size:36px 36px;outline:1px green dashed}}.sds-launch-icon-dragging-proxy.x-dd-drop-nodrop .x-dd-drop-icon{width:64px;height:64px;background-image:url(../images/icon_drag_ban.png)}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-launch-icon-dragging-proxy.x-dd-drop-nodrop .x-dd-drop-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/icon_drag_ban.png");background-size:36px 36px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-launch-icon-dragging-proxy.x-dd-drop-nodrop .x-dd-drop-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/icon_drag_ban.png");background-size:36px 36px;outline:1px green dashed}}.classical.sds-launch-icon-dragging-proxy.x-dd-drop-ok-add .x-dd-drop-icon,.classical.sds-launch-icon-dragging-proxy.x-dd-drop-nodrop .x-dd-drop-icon{width:48px;height:48px}.sds-grouping-preview-icon{position:absolute;width:24px;height:24px}.classical .sds-grouping-preview-icon{width:16px;height:16px}.sds-grouping-big-preview-icon{position:absolute;visibility:hidden;left:8px;top:8px;width:48px;height:48px}.classical .sds-grouping-big-preview-icon{width:32px;height:32px}#sds-desktop{overflow:hidden;position:absolute;width:100%;height:100%;border:0 none;overflow:hidden;cursor:default;zoom:1;top:39px}#sds-desktop.sds-desktop-hide{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=0);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=0);opacity:0}#sds-desktop.semi-transparent{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=60);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=60);opacity:0.6}#sds-desktop.sent-back{z-index:0}.ext-ie8m #sds-desktop.semi-transparent .x-window,.ext-ie8m #sds-desktop.semi-transparent .x-ie-shadow{z-index:0 !important}.sds-launch-icon-dragging-proxy .x-dd-drag-ghost{border:none !important;background-color:transparent !important;opacity:1 !important;filter:none !important}.sds-launch-icon-dragging-proxy .x-dd-drag-ghost .text{visibility:hidden !important}.sds-launch-icon-dragging-proxy .image{white-space:normal}.sds-launch-icon-dragging-proxy li{list-style:none}#sds-sub-container{position:absolute;width:316px;height:192px;overflow:visible;z-index:14002;border-radius:5px}#sds-sub-container .virtual-group-background{position:absolute;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=75);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=75);opacity:0.75;background:#282d32;background:#282d32;top:0px;left:0px;right:0px;bottom:0px;box-shadow:0 2px 4px rgba(0,0,0,0.5);border-radius:5px}#sds-sub-container .virtual-group-background .virtual-group-arrow{left:-22px;top:84px;position:absolute;overflow:hidden;width:22px;height:35px}#sds-sub-container .virtual-group-background .virtual-group-arrow.right-arrow{left:316px}.ext-ie8m #sds-sub-container .virtual-group-background .virtual-group-arrow{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=75);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=75);opacity:0.75;left:-12px;width:0px;height:0px;border:12px solid transparent;border-right-color:#282d32;border-left-width:0px}.ext-ie8m #sds-sub-container .virtual-group-background .virtual-group-arrow.right-arrow{border-left-color:#282d32;border-left-width:12px;border-right-width:0px;left:316px}#sds-sub-container .virtual-group-background .virtual-group-arrow::after{background:#282d32;background:#282d32;content:'';position:absolute;left:6px;width:16px;height:16px;-webkit-transform-origin:right top;-moz-transform-origin:right top;-ms-transform-origin:right top;-o-transform-origin:right top;transform-origin:right top;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg);box-shadow:0 2px 4px rgba(0,0,0,0.5)}#sds-sub-container .virtual-group-background .virtual-group-arrow.right-arrow::after{left:0px;-webkit-transform-origin:left top;-moz-transform-origin:left top;-ms-transform-origin:left top;-o-transform-origin:left top;transform-origin:left top;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}#sds-sub-container hr{margin:0px 10px;position:relative;border:0px solid;border-top-width:1px;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=50);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=50);opacity:0.5;border-color:#b4bec8;border-color:#b4bec8}#sds-sub-container .sds-sub-container-desc{color:#FFF;font-size:14px;font-weight:bold;margin:7px 20px;padding:2px;width:268px;height:18px;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;white-space:nowrap;font-family:verdana, tahoma, arial, helvetica, sans-serif;border:2px solid transparent;background-color:transparent}#sds-sub-container .sds-sub-container-desc:hover{border-color:#3182c1;background-color:#b4d7f0;color:#000}#sds-sub-container .sds-sub-container-desc:focus{border-color:#3182c1;background-color:#FFF;color:#000}#sds-sub-container .sds-sub-container-div-ct{height:152px;width:276px;overflow:hidden;padding:0 20px}.ext-ie8m #sds-sub-container .sds-sub-container-div-ct div.mcontentwrapper,.ext-ie8m #sds-sub-container .sds-sub-container-div-ct div.scrollwrapper{height:100% !important}#sds-sub-container .sds-sub-container-div-ct .sds-desktop-shortcut li.launch-icon .text,#sds-sub-container .sds-sub-container-div-ct .sds-desktop-shortcut li.launch-icon .text a{overflow:hidden}#sds-sub-container .sds-desktop-shortcut{float:none;width:276px;margin:0px}#sds-sub-container .sds-desktop-shortcut li{float:none;height:84px;padding-top:0}#sds-sub-container .sds-desktop-shortcut li.launch-icon{width:64px;height:128px;margin:0px;padding:0px;overflow:visible}#sds-sub-container .sds-desktop-shortcut li.launch-icon div.image{margin:0px auto}#sds-sub-container .sds-desktop-shortcut li.launch-icon .text,#sds-sub-container .sds-desktop-shortcut li.launch-icon .text a{color:#FFFFFF}#sds-sub-container.classical{height:176px}#sds-sub-container.classical .sds-sub-container-div-ct{height:136px}#sds-sub-container.classical .sds-desktop-shortcut li.launch-icon{width:74px;height:112px}#sds-sub-container-shim{background-color:#000;opacity:0;filter:alpha(opacity=0);position:absolute;width:100%;height:100%;left:0px;top:0px;border:0px;z-index:14000}html,body{height:100%;overflow-x:hidden;overflow-y:hidden;user-select:none;-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none}body{position:relative}*::-moz-focus-inner{border:0;padding:0}input{position:relative}input[type=text],input[type=password],input[type=textarea]{user-select:text;-moz-user-select:text;-khtml-user-select:text;-webkit-user-select:text;-ms-user-select:text}input[type=text][readonly],input[type=password][readonly],input[type=textarea][readonly]{user-select:none;-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none}.x-box-item input{position:static}.x-window-header{height:18px}.x-window-header-text{line-height:18px;white-space:nowrap;display:block;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis}.x-masked{overflow:visible !important}.sds-window-mask{z-index:102}.ext-el-mask{z-index:20000}#sds-wallpaper{visibility:hidden;position:absolute;z-index:-2}.ext-ie #sds-desktop{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVR42mNgAAIAAAUAAen63NgAAAAASUVORK5CYII=)}.x-window-ml{padding-left:0px}.x-window-mr{padding-right:0px}.x-window-mc,.x-window-dlg .x-window-mc,.x-window-plain .x-window-mc{border-width:0 1px 0 1px !important;border-style:solid !important;border-color:#D0D0D0 #AAAFB4 !important}.x-window-dlg .x-window-mc{border-bottom:0 !important}.x-window-maximized .x-window-mc{border-left:1px solid #AAAFB4;border-right:1px solid #AAAFB4}.x-window-body{background-color:#FAFAFA;border-top:1px solid #AAA;border-bottom:1px solid #AAA}.x-window-dlg .x-window-footer{margin-left:-6px}.x-panel-nofooter .x-panel-bc,.x-panel-nofooter .x-window-bc{height:0px}.x-window-maximized .x-window-bc{height:0}.x-resizable-over .x-resizable-handle-southeast,.x-resizable-pinned .x-resizable-handle-southeast{width:12px;height:12px;margin:3px;background:transparent;-moz-opacity:1.0;opacity:1.0;filter:none}ul.x-tab-strip li{margin-left:4px}.x-tab-strip span.x-tab-strip-text{padding-left:10px;padding-right:10px;color:#3C3C3C}.x-tab-strip-active span.x-tab-strip-text{color:#002D4D}.x-form-display-field{padding-top:3px;padding-bottom:4px}.ext-gecko .x-form-display-field,.ext-strict .ext-ie7 .x-form-display-field{padding-top:3px;padding-bottom:4px}.x-form-check-wrap{padding:2px 0}.ext-ie7 .x-form-check-wrap{padding:1px 0}.x-window-mc{background:#ffffff none}.x-border-layout-ct,.x-panel-body{background:transparent none}.x-tree .x-panel-body{background-color:transparent}.x-window .x-toolbar-cell .x-btn{margin:2px 3px}.x-window .x-btn button{padding-left:15px;padding-right:15px}.x-window-bbar .x-toolbar-cell .x-btn,.x-panel-bbar .x-toolbar-cell .x-btn{margin:0}.x-window-bbar .x-btn button,.x-panel-bbar .x-btn button{padding:0}.ext-opera .x-form-field-trigger-wrap{overflow:hidden}ul.sds-desktop-shortcut{position:relative;float:left;width:86px;margin:0 0 0 16px}li.launch-icon .text,li.launch-icon .text a{width:100%;font-size:12px;line-height:16px;text-align:center;margin:0 auto;overflow:visible;text-overflow:ellipsis;-o-text-overflow:ellipsis}li.launch-icon{list-style-type:none}li.launch-icon.transition-cls{transition-property:left, top;transition-duration:0.5s;-webkit-transition-property:left, top;-webkit-transition-duration:0.5s;-moz-transition-property:left, top;-moz-transition-duration:0.5s;-o-transition-property:left, top;-o-transition-duration:0.5s}#sds-desktop li.launch-icon .text,#sds-desktop li.launch-icon .text a{color:#FFFFFF}.ext-chrome.syno-cjk #sds-appview .app-panel-title,.ext-chrome.syno-cjk #sds-appview .sds-appview-app-item-title,.ext-chrome.syno-cjk #sds-desktop li.launch-icon .text,.ext-chrome.syno-cjk #sds-desktop li.launch-icon .text a{text-shadow:none}#sds-desktop li.launch-icon.x-btn-click .text,#sds-desktop li.launch-icon.x-btn-click .text a{color:#8C8C8C}.sds-desktop-select-range{position:absolute;background-color:rgba(255,255,255,0.3);border:solid 1px white;opacity:1}.ext-ie .sds-desktop-select-range{background:transparent;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4CFFFFFF,endColorstr=#4CFFFFFF);zoom:1}.sds-desktop-icon-selected{background-color:rgba(255,255,255,0.3);border-radius:10px;-moz-border-radius:10px}.ext-ie .sds-desktop-icon-selected{background:transparent;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4CFFFFFF,endColorstr=#4CFFFFFF);zoom:1}.sds-launchbox li.launch-icon{position:absolute;width:95px;height:98px;margin:12px 0 0 7px}.sds-launchbox li.launch-icon .image{width:48px;height:48px}.sds-launchbox li.launch-icon .text,.sds-launchbox li.launch-icon .text a{font-size:11px;color:#3C3C3C}.sds-launchbox li.launch-icon.x-btn-over .text,.sds-launchbox li.launch-icon.x-btn-over .text a{color:#000000}.sds-launchbox li.launch-icon.x-btn-click .text,.sds-launchbox li.launch-icon.x-btn-click .text a{font-size:11px;color:#3C3C3C}.x-panel-body,.x-tab-panel-body,.x-tab-panel-footer,.x-window-plain .x-window-mc{background-color:#FAFAFA}.x-fieldset,.x-tab-panel-bwrap,.x-tab-panel-body{border-color:#7AAACC}.x-tab-panel-header-plain .x-tab-strip-spacer,.x-tab-panel-footer-plain .x-tab-strip-spacer{background-color:#D2EDFD;border-color:#3D7299}ul.x-tab-strip-top{border-bottom-color:#3D7299}.x-btn button{color:#3C3C3C}.x-tab-strip-top .x-tab-right,.x-tab-strip-top .x-tab-left,.x-tab-strip-top .x-tab-strip-inner{background-image:url(../images/tab_a.png)}.x-tab-strip-top .x-tab-right{padding-left:8px;background-position:0 0}.x-tab-strip-top .x-tab-left{padding-right:8px;background-position:right -100px}.x-tab-strip-top .x-tab-strip-inner{background-position:0 -50px}.x-tab-strip-top .x-tab-strip-over .x-tab-right{background-position:0 -150px}.x-tab-strip-top .x-tab-strip-over .x-tab-left{background-position:right -250px}.x-tab-strip-top .x-tab-strip-over .x-tab-strip-inner{background-position:0 -200px}.x-tab-strip-top .x-tab-strip-active .x-tab-right{background-position:0 -300px}.x-tab-strip-top .x-tab-strip-active .x-tab-left{background-position:right -400px}.x-tab-strip-top .x-tab-strip-active .x-tab-strip-inner{background-position:0 -350px}ul.x-tab-strip-bottom{background:url("../images/tab_bg_b.png") repeat-x !important;padding-bottom:2px;border-top-color:#AAAFB4}.x-tab-panel-noborder .x-tab-panel-footer-noborder{background-color:#F6F7F8;border-color:#AAAFB4}.x-layout-split.x-splitbar-v{background:url("../images/split_hcolumn.png") repeat-x scroll 0 0 transparent}.x-tab-strip-bottom .x-tab-right,.x-tab-strip-bottom .x-tab-left,.x-tab-strip-bottom .x-tab-strip-inner{background-image:url("../images/tab_b.png") !important}.x-tab-strip-bottom .x-tab-right{background-position:right -128px;padding-right:5px}.x-tab-strip-bottom .x-tab-left{background-position:0 -28px;padding-left:5px;padding-right:0}.x-tab-strip-bottom .x-tab-strip-inner{background-position:0 -78px;height:23px}.x-tab-strip-bottom .x-tab-strip-over .x-tab-right{background-position:right -278px}.x-tab-strip-bottom .x-tab-strip-over .x-tab-left{background-position:0 -178px}.x-tab-strip-bottom .x-tab-strip-over .x-tab-strip-inner{background-position:0 -228px}.x-tab-strip-bottom .x-tab-strip-active .x-tab-right{background-position:right -427px}.x-tab-strip-bottom .x-tab-strip-active .x-tab-left{background-position:0 -327px}.x-tab-strip-bottom .x-tab-strip-active .x-tab-strip-inner{background-position:0 -377px}.deactive-win .x-tool-minimize{background-position:0 -306px}.deactive-win .x-tool-maximize{background-position:0 -288px}.deactive-win .x-tool-close{background-position:0 -270px}.deactive-win .x-tool-restore{background-position:0 -324px}.deactive-win .x-tool-help{background-position:0 -342px}.x-tool-minimize{background-position:0 -108px;background-image:url(../images/bt_rt.png);width:18px;height:18px}.x-tool-minimize-over{background-position:0 -126px}.x-tool-maximize{background-position:0 -54px;background-image:url(../images/bt_rt.png);width:18px;height:18px}.x-tool-maximize-over{background-position:0 -72px}.x-tool-close{background-position:0 0;background-image:url(../images/bt_rt.png);width:18px;height:18px}.x-tool-close-over{background-position:0 -18px}.x-tool-restore{background-position:0 -162px;background-image:url(../images/bt_rt.png);width:18px;height:18px}.x-tool-restore-over{background-position:0 -180px;background-image:url(../images/bt_rt.png)}.x-tool-help{background-position:0 -216px;background-image:url(../images/bt_rt.png);width:18px;height:18px}.x-tool-help-over{background-position:0 -234px;background-image:url(../images/bt_rt.png)}.sds-window .x-btn .sds-window-tbar-help{background-position:0 0;background-image:url(../images/help_a.png);width:22px;height:22px;padding:0px}.sds-window .x-btn-over .sds-window-tbar-help{background-position:0 -22px}.sds-window .x-btn-click .sds-window-tbar-help{background-position:0 -44px}.active-win .x-window-tl{background-image:url("../images/title3_01.png");padding-left:8px}.active-win .x-window-tr{background-image:url("../images/title3_03.png");padding-right:8px}.active-win .x-window-tc{background-image:url("../images/title3_02.png")}.active-win .x-window-tbar .x-toolbar{background-image:url("../images/title3_02.png");background-position:0 -26px}.deactive-win .x-window-tl{background-image:url("../images/title3_01.png");padding-left:8px;background-position:0 -88px}.deactive-win .x-window-tr{background-image:url("../images/title3_03.png");padding-right:8px;background-position:right -88px}.deactive-win .x-window-tc{background-image:url("../images/title3_02.png");background-position:0 -88px}.deactive-win .x-window-tbar .x-toolbar{background-image:url("../images/title3_02.png");background-position:0 -114px}.active-win .x-window-bl{background-image:url("../images/bottom48_01.png")}.active-win .x-window-br{background-image:url("../images/bottom48_03_01.png");padding-right:8px}.active-win .x-window-bc{background-image:url("../images/bottom48_02_01.png")}.deactive-win .x-window-bl{background-image:url("../images/bottom48_01.png");background-position:-8px bottom}.deactive-win .x-window-br{background-image:url("../images/bottom48_03_02.png");padding-right:8px}.deactive-win .x-window-bc{background-image:url("../images/bottom48_02_02.png")}.pre-load-deactive-win-x-window-br{background-image:url("../images/bottom48_03_02.png");position:-9999px -99999px}.x-fieldset legend{color:#003C66}.sds-window .x-window-bc .x-window-footer{padding:0}body,.ext-el-mask-msg div,.x-tab-strip span.x-tab-strip-text,.x-form-field,.x-form-grow-sizer,.x-form-grow-sizer,.x-form-item,.x-form-invalid-msg,.x-fieldset legend,.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label,.x-grid-group-hd div.x-grid-group-title,.x-grid-empty,.x-tip .x-tip-mc,.x-tip .x-tip-header-text,.x-tip .x-tip-body,.x-window-mc,.x-window-dlg .ext-mb-textarea{font-family:verdana, tahoma, arial, helvetica, sans-serif}.x-small-editor .x-form-field,.ext-webkit .x-small-editor .x-form-field,.x-grid3-hd-row td,.x-grid3-row td,.x-grid3-summary-row td,.x-grid3-topbar,.x-grid3-bottombar,.x-tree-node,.x-date-inner th,.x-date-inner a,.x-date-mp td,.x-date-mp-btns button,.x-panel-fbar td,.x-panel-fbar span,.x-panel-fbar input,.x-panel-fbar div,.x-panel-fbar select,.x-panel-fbar label,.x-list-header-inner div em,.x-list-body dt em{font-family:verdana, arial, tahoma, helvetica, sans-serif}.x-btn{font-family:verdana, tahoma, helvetica}.x-btn button{font-family:verdana, arial, tahoma, helvetica}.x-dd-drag-ghost{font-family:verdana, arial, helvetica, sans-serif}.x-date-middle,.x-date-left,.x-date-right{font-family:verdana, "sans serif", tahoma, verdana, helvetica}.x-menu-list-item{font-family:verdana, arial, tahoma, sans-serif}.x-combo-list,.x-combo-list-hd,.x-combo-list-small,.x-panel-tl .x-panel-header,.x-panel-mc{font-family:verdana, tahoma, arial, helvetica, sans-serif}.x-btn button{font-family:verdana, arial,tahoma,verdana,helvetica}.x-ie-shadow{background-color:#333}.x-shadow .xsmc{background-image:url(../images/shadow-c.png)}.x-shadow .xsml,.x-shadow .xsmr{background-image:url(../images/shadow-lr.png)}.x-shadow .xstl,.x-shadow .xstc,.x-shadow .xstr,.x-shadow .xsbl,.x-shadow .xsbc,.x-shadow .xsbr{background-image:url(../images/shadow.png)}.without-dirty-red-grid .x-grid3-dirty-cell{background:none}.x-grid-group-hd{background-image:url(../images/grid_title_bg.png);padding-top:2px;border:none}.x-grid-group-hd div.x-grid-group-title{color:#003C66}.x-grid3-row{background-color:#FAFAFA}.x-grid3-row-alt{background-color:#F5F5F5}.x-grid3-row-over{background-image:none;background-color:#E6F0FA;border-color:#DCE6F0}.x-grid3-row-selected{background-color:#CEE0F3 !important}.x-grid-with-col-lines .x-grid3-row td.x-grid3-cell{border-right-color:#E1E6EB}.x-btn-icon .x-btn-small .x-btn-tl,.x-btn-icon .x-btn-small .x-btn-tr,.x-btn-icon .x-btn-small .x-btn-tc,.x-btn-icon .x-btn-small .x-btn-ml,.x-btn-icon .x-btn-small .x-btn-mr,.x-btn-icon .x-btn-small .x-btn-mc,.x-btn-icon .x-btn-small .x-btn-bl,.x-btn-icon .x-btn-small .x-btn-br,.x-btn-icon .x-btn-small .x-btn-bc{background-image:none}.x-btn-icon .x-btn-small .x-tbar-page-first{width:22px;height:18px;background-image:url(../images/bt_pagebar.png) !important;background-position:0 0}.x-btn-icon .x-btn-small .x-tbar-loading{width:22px;height:18px;background-image:url(../images/bt_pagebar.png) !important;background-position:0 -72px}.x-btn-icon .x-btn-small .x-tbar-page-last{width:22px;height:18px;background-image:url(../images/bt_pagebar.png) !important;background-position:0 -54px}.x-btn-icon .x-btn-small .x-tbar-page-next{width:22px;height:18px;background-image:url(../images/bt_pagebar.png) !important;background-position:0 -36px}.x-btn-icon .x-btn-small .x-tbar-page-prev{width:22px;height:18px;background-image:url(../images/bt_pagebar.png) !important;background-position:0 -18px}.x-btn-icon.x-item-disabled .x-tbar-loading,.x-btn-icon .x-btn-small .x-item-disabled .x-tbar-loading{width:22px;height:18px;background-image:url(../images/bt_pagebar.png) !important;background-position:0 -342px}.x-btn-icon.x-item-disabled .x-tbar-page-first,.x-btn-icon .x-btn-small .x-item-disabled .x-tbar-page-first{width:22px;height:18px;background-image:url(../images/bt_pagebar.png) !important;background-position:0 -270px}.x-btn-icon.x-item-disabled .x-tbar-page-last,.x-btn-icon .x-btn-small .x-item-disabled .x-tbar-page-last{width:22px;height:18px;background-image:url(../images/bt_pagebar.png) !important;background-position:0 -324px}.x-btn-icon.x-item-disabled .x-tbar-page-next,.x-btn-icon .x-btn-small .x-item-disabled .x-tbar-page-next{width:22px;height:18px;background-image:url(../images/bt_pagebar.png) !important;background-position:0 -306px}.x-btn-icon.x-item-disabled .x-tbar-page-prev,.x-btn-icon .x-btn-small .x-item-disabled .x-tbar-page-prev{width:22px;height:18px;background-image:url(../images/bt_pagebar.png) !important;background-position:0 -288px}.x-btn-over .x-btn-small .x-tbar-page-first{background-image:url(../images/bt_pagebar.png) !important;background-position:0 -90px}.x-btn-over .x-btn-small .x-tbar-loading{background-image:url(../images/bt_pagebar.png) !important;background-position:0 -162px}.x-btn-over .x-btn-small .x-tbar-page-last{background-image:url(../images/bt_pagebar.png) !important;background-position:0 -144px}.x-btn-over .x-btn-small .x-tbar-page-next{background-image:url(../images/bt_pagebar.png) !important;background-position:0 -126px}.x-btn-over .x-btn-small .x-tbar-page-prev{background-image:url(../images/bt_pagebar.png) !important;background-position:0 -108px}.x-btn-click .x-btn-small .x-tbar-page-first{background-image:url(../images/bt_pagebar.png) !important;background-position:0 -180px}.x-btn-click .x-btn-small .x-tbar-loading{background-image:url(../images/bt_pagebar.png) !important;background-position:0 -252px}.x-btn-click .x-btn-small .x-tbar-page-last{background-image:url(../images/bt_pagebar.png) !important;background-position:0 -234px}.x-btn-click .x-btn-small .x-tbar-page-next{background-image:url(../images/bt_pagebar.png) !important;background-position:0 -216px}.x-btn-click .x-btn-small .x-tbar-page-prev{background-image:url(../images/bt_pagebar.png) !important;background-position:0 -198px}.x-btn-tl,.x-btn-tr,.x-btn-tc,.x-btn-bl,.x-btn-br,.x-btn-bc{background-image:none;display:none}.x-btn-icon .x-btn-small .x-tbar-loading-process{background-image:url("../images/desktop/icon_loading.gif") !important;height:18px;width:22px}.x-btn-tl,.x-btn-tr,.x-btn-tc,.x-btn-bl,.x-btn-br,.x-btn-bc{background-image:none;display:none}.x-btn-ml,.x-btn-mr,.x-btn-mc{background-image:url("../images/bt_b.png");height:22px}.x-btn-ml{background-position:0 0 !important}.x-btn-mc{background-position:0 -22px !important}.x-btn-mr{background-position:right -44px !important}.x-btn-over .x-btn-ml{background-position:0 -66px !important}.x-btn-over .x-btn-mc{background-position:0 -88px !important}.x-btn-over .x-btn-mr{background-position:right -110px !important}.x-btn-click .x-btn-ml{background-position:0 -132px !important}.x-btn-click .x-btn-mc{background-position:0 -154px !important}.x-btn-click .x-btn-mr{background-position:right -176px !important}.x-item-disabled .x-btn-ml{background-position:0 -198px !important}.x-item-disabled .x-btn-mc{background-position:0 -220px !important}.x-item-disabled .x-btn-mr{background-position:right -242px !important}.x-btn-text{color:#3C3C3C}.x-btn-over .x-btn-text{color:#004A80}.x-btn-click .x-btn-text{color:#003C66}.x-item-disabled .x-btn-text{color:#8C8C8C}.x-form-field-wrap .x-form-trigger{background-image:url("../images/trigger.png");border-bottom-color:#6E7378}.x-form-field-wrap .x-form-date-trigger{background-image:url("../images/date-trigger.png");border-bottom-color:#6E7378}.x-form-field-wrap .x-form-trigger-over{border-bottom-color:#2E6C99}.x-trigger-wrap-focus .x-form-trigger{border-bottom-color:#2E6C99}.x-form-focus,textarea.x-form-focus{border-color:#2E6C99}.x-form-text,textarea.x-form-field{border-color:#6E7378}.active-win .x-window-tl .x-window-header{color:#3c3c3c}.deactive-win .x-window-tl .x-window-header{color:#787878}.x-window-dlg.sds-window .x-window-body{background:#D2D7DC;border-top:1px solid #AAAAAA !important}.x-window-dlg.sds-window .x-window-bc{padding-bottom:8px}.x-item-disabled{opacity:1 !important;-moz-opacity:1 !important;filter:none !important}input.x-item-disabled.x-form-text,.x-item-disabled input.x-form-text,input.x-item-disabled.x-form-file,.x-item-disabled input.x-form-file{background:#EEE;border:1px solid #AAA}.ext-webkit input.x-item-disabled.x-form-file,.ext-webkit .x-item-disabled input.x-form-file{background:none;border:none}.x-fieldset-header-text{line-height:1.5}#sds-apply-preview-form{position:absolute;background-image:url(../images/preview_bar_bg.png);width:100%;height:39px;color:#ddd;padding-top:5px;z-index:20001}#sds-apply-preview-form div.x-form-item{float:left;padding:2px 8px 0px}.ext-ie #sds-apply-preview-form div.x-form-item{padding:6px 8px 0px}#sds-apply-preview-form .x-btn{float:left;padding-left:10px}#sds-apply-preview-form td{background-image:none}#sds-apply-preview-form td.x-btn-ml,#sds-apply-preview-form td.x-btn-mc,#sds-apply-preview-form td.x-btn-mr{height:24px;background-image:url(../images/preview_bar_bt.png)}#sds-apply-preview-form .x-btn td.x-btn-ml,#sds-apply-preview-form .x-btn td.x-btn-mr{width:6px}#sds-apply-preview-form .x-btn td.x-btn-ml{background-position:0px 0px !important}#sds-apply-preview-form .x-btn td.x-btn-mc{background-position:0px -24px !important}#sds-apply-preview-form .x-btn td.x-btn-mr{background-position:0px -48px !important}#sds-apply-preview-form .x-btn-over td.x-btn-ml{background-position:0px -72px !important}#sds-apply-preview-form .x-btn-over td.x-btn-mc{background-position:0px -96px !important}#sds-apply-preview-form .x-btn-over td.x-btn-mr{background-position:0px -120px !important}#sds-apply-preview-form button{color:#fff}.x-tip .x-tip-body,.x-window-dlg .ext-mb-text,.x-window-dlg .ext-mb-content{word-wrap:break-word}.x-panel-ghost-simple{z-index:12000;position:absolute;border:2px solid #808080;cursor:move !important}.x-tree-node-collapsed .x-tree-node-icon{background-image:url("../images/folder.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .x-tree-node-collapsed .x-tree-node-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/folder.png");background-size:16px 16px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .x-tree-node-collapsed .x-tree-node-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/folder.png");background-size:16px 16px;outline:1px green dashed}}.x-tree-node-expanded .x-tree-node-icon{background-image:url("../images/folder.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .x-tree-node-expanded .x-tree-node-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/folder.png");background-size:16px 16px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .x-tree-node-expanded .x-tree-node-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/folder.png");background-size:16px 16px;outline:1px green dashed}}.ext-ie9 .x-btn button,.ext-ie8 .x-btn button{padding-top:0px}.ext-ie9.syno-cjk .x-form-check-wrap{line-height:15px}.ext-ie9.syno-cjk .x-btn .ux-pathbutton-center button{padding-top:4px;line-height:16px}.ext-ie9.syno-cjk .x-btn button,.ext-ie8.syno-cjk .x-btn button{padding-top:2px}.syno-webfm .file-drag-over .ext-el-mask{background-color:#75fa32;background-color:rgba(117,250,50,0.05)}.syno-webfm .file-drag-over .ext-el-mask-msg{background-color:transparent !important;background-image:url(../images/drop_files_texts_area.png);width:258px;height:48px;border:0 !important;padding:0;box-shadow:0px 0px 0px !important}.syno-webfm .file-drag-over .ext-el-mask-msg div{background-color:transparent !important;border-color:transparent;font-size:16px;width:258px;line-height:48px;text-align:center;border:0px !important;padding:0;color:#FFFFFF !important}.file-drag-over.file-drop-curved .ext-el-mask{background-color:#8ab8e6;-moz-opacity:0.75;opacity:0.75}.file-drag-over.file-drop-curved .ext-el-mask-msg{height:108px;width:236px;background-image:url(../images/drop_files_area_curved.png);background-color:transparent !important;border:0 !important;padding:0 !important}.file-drag-over.file-drop-curved .ext-el-mask-msg div{font-size:13px;color:#000;padding-top:50px;height:58px;text-align:center;line-height:58px;background-color:transparent !important;border:none;margin-right:auto;margin-left:auto}.ext-gecko4 .x-window-tc,.x-window-bc{background-color:gray}.ext-gecko4 .x-window-bl,.ext-gecko4 .x-window-br{border-bottom-right-radius:2px}.ext-gecko4 .x-window-bl{background-color:gray;border-bottom-left-radius:2px}.ext-gecko4 .x-window-tl,.ext-gecko4 .x-window-tr{background-color:gray;border-top-right-radius:2px}.ext-gecko4 .x-window-tl{border-top-left-radius:2px}.syno-input-non-border{background-color:#FAFAFA;background-image:none;border:1px solid transparent !important;padding:0;margin:0}.sds-expose-mask{position:absolute;left:0px;top:0px;width:100%;height:100%;background:#000;opacity:0;transition-delay:0s;transition-property:opacity;transition-duration:0.8s;-webkit-transition-delay:0s;-webkit-transition-property:opacity;-webkit-transition-duration:0.8s;-moz-transition-delay:0s;-moz-transition-property:opacity;-moz-transition-duration:0.8s}.sds-expose-win-mask{position:absolute;left:0px;top:0px;width:100%;height:100%;background:transparent;z-index:9999;box-shadow:0 0 10px 10px rgba(0,0,0,0.3);-moz-box-shadow:0 0 10px 10px rgba(0,0,0,0.3);border-radius:5px;-moz-border-radius:5px}.sds-expose-win-mask.sds-expose-win-over{box-shadow:0 0 10px 10px rgba(255,255,255,0.5);-moz-box-shadow:0 0 10px 10px rgba(255,255,255,0.5);border-radius:5px;-moz-border-radius:5px}.sds-expose-win-transform{-webkit-transform-origin:0% 0%;-moz-transform-origin:0% 0%;-o-transform-origin:0% 0%;transform-origin:0% 0%;-webkit-transition-delay:0.1s;-webkit-transition-property:-webkit-transform;-webkit-transition-duration:0.8s;-webkit-backface-visibility:hidden;-webkit-perspective:1000;-moz-transition-delay:0.1s;-moz-transition-property:-moz-transform;-moz-transition-duration:0.8s;transition-delay:0.1s;transition-property:transform;transition-duration:0.8s}.sds-expose-win-transform.sds-expose-win-transform-restore{transition-duration:0.3s;-webkit-transition-duration:0.3s;-moz-transition-duration:0.3s}.sds-expose-win-hidden{position:absolute !important;top:-10000px !important;left:-10000px !important}.sds-expose-desc-ct{position:absolute;text-align:center;z-index:12000;cursor:default}.sds-expose-desc-img{display:inline-block}.sds-expose-desc-text{display:inline-block;font-size:12pt;color:#FFFFFF;font-weight:bold;vertical-align:4px;margin-left:15px;text-shadow:0.1em 0.1em 0.1em #000000}.sds-grouping-show-big-preview .sds-grouping-preview-icon{visibility:hidden}.sds-grouping-show-big-preview .sds-grouping-big-preview-icon{visibility:visible}.x-dd-drag-ghost .sds-grouping-show-big-preview .sds-grouping-preview-icon{visibility:visible;position:relative !important;left:7px !important;top:6px !important;padding:0 1px}.x-dd-drag-ghost .sds-grouping-show-big-preview .sds-grouping-big-preview-icon{visibility:hidden}.sds-launch-icon-input{position:absolute;border-color:#3182c1;background-color:#FFF;color:#000;font-size:14px;padding:1px;width:86px;font-family:verdana, tahoma, arial, helvetica, sans-serif;border:2px solid transparent}.sds-ellipsis{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.ext-strict .ext-ie9 .x-date-menu{height:auto}.x-tree-node,.launch-icon,.x-grid3-cell,.x-menu-item{-webkit-touch-callout:none}input.x-form-text{border-radius:0}#sds-desktop.sds-is-gesture-switching .x-shadow{visibility:hidden}.sds-hidden-scrollpanel .x-list-body-inner{display:inline-block;width:100%;height:100%}.x-panel-ghost ul{background-color:#f2f2f2}.x-panel-ghost{background-color:transparent}.sds-user-about-mask{position:absolute;top:0;left:0;right:0;bottom:0;background-color:#000000;z-index:1000;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=20);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=20);opacity:0.2}a{text-decoration:none}.ext-ie9 #sds-desktop li.launch-icon .text,.ext-ie8m #sds-desktop li.launch-icon .text,.ext-ie9 #sds-desktop li.launch-icon .text a,.ext-ie8m #sds-desktop li.launch-icon .text a,.ext-ie9 #sds-login-dialog-title,.ext-ie8m #sds-login-dialog-title{filter:none !important}input[type=text]::-ms-clear{display:none}input[type=password]::-ms-reveal{display:none}div{-ms-touch-action:none;touch-action:none}.ext-ie11 .x-tree-node-indent img,.ext-ie11 .x-tree-node-icon,.ext-ie11 .x-tree-ec-icon{vertical-align:middle !important}.sds-switch-win-gesture-hide-to-left{-webkit-transform-origin:0% 0%;-moz-transform-origin:0% 0%;-ms-transform-origin:0% 0%;-o-transform-origin:0% 0%;transform-origin:0% 0%;-webkit-transition-delay:0.1s;-moz-transition-delay:0.1s;-o-transition-delay:0.1s;transition-delay:0.1s;-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;transition-property:transform;-webkit-transition-duration:0.8s;-moz-transition-duration:0.8s;-o-transition-duration:0.8s;transition-duration:0.8s;-webkit-transform:translate3d(-2000px, 0px, 0);-moz-transform:translate3d(-2000px, 0px, 0);-ms-transform:translate3d(-2000px, 0px, 0);-o-transform:translate3d(-2000px, 0px, 0);transform:translate3d(-2000px, 0px, 0);-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;-moz-perspective:1000;-ms-perspective:1000;-o-perspective:1000;perspective:1000}.sds-switch-win-gesture-hide-to-right{-webkit-transform-origin:0% 0%;-moz-transform-origin:0% 0%;-ms-transform-origin:0% 0%;-o-transform-origin:0% 0%;transform-origin:0% 0%;-webkit-transition-delay:0.1s;-moz-transition-delay:0.1s;-o-transition-delay:0.1s;transition-delay:0.1s;-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;transition-property:transform;-webkit-transition-duration:0.8s;-moz-transition-duration:0.8s;-o-transition-duration:0.8s;transition-duration:0.8s;-webkit-transform:translate3d(2000px, 0px, 0);-moz-transform:translate3d(2000px, 0px, 0);-ms-transform:translate3d(2000px, 0px, 0);-o-transform:translate3d(2000px, 0px, 0);transform:translate3d(2000px, 0px, 0);-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;-moz-perspective:1000;-ms-perspective:1000;-o-perspective:1000;perspective:1000}.sds-switch-win-gesture-show-from-left{-webkit-transform-origin:0% 0%;-moz-transform-origin:0% 0%;-ms-transform-origin:0% 0%;-o-transform-origin:0% 0%;transform-origin:0% 0%;-webkit-transform:translate3d(-2000px, 0px, 0);-moz-transform:translate3d(-2000px, 0px, 0);-ms-transform:translate3d(-2000px, 0px, 0);-o-transform:translate3d(-2000px, 0px, 0);transform:translate3d(-2000px, 0px, 0)}.sds-switch-win-gesture-show-from-right{-webkit-transform-origin:0% 0%;-moz-transform-origin:0% 0%;-ms-transform-origin:0% 0%;-o-transform-origin:0% 0%;transform-origin:0% 0%;-webkit-transform:translate3d(2000px, 0px, 0);-moz-transform:translate3d(2000px, 0px, 0);-ms-transform:translate3d(2000px, 0px, 0);-o-transform:translate3d(2000px, 0px, 0);transform:translate3d(2000px, 0px, 0)}.sds-switch-win-gesture-show-force-hidden{visibility:hidden !important}.sds-switch-win-gesture-show-transition{-webkit-transition-delay:0.1s;-moz-transition-delay:0.1s;-o-transition-delay:0.1s;transition-delay:0.1s;-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;transition-property:transform;-webkit-transition-duration:0.5s;-moz-transition-duration:0.5s;-o-transition-duration:0.5s;transition-duration:0.5s;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;-moz-perspective:1000;-ms-perspective:1000;-o-perspective:1000;perspective:1000}.sds-widget-window .x-window-tl .x-window-header .x-tool,.sds-widget-window .x-window-tl .x-window-header.sds-widget-over .x-tool{-webkit-transition-property:opacity;-moz-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity;-webkit-transition-timing-function:ease-in;-moz-transition-timing-function:ease-in;-o-transition-timing-function:ease-in;transition-timing-function:ease-in;-webkit-transition-duration:0.2s;-moz-transition-duration:0.2s;-o-transition-duration:0.2s;transition-duration:0.2s}.sds-window-v5 .ext-el-mask-msg div,.sds-widget-window .ext-el-mask-msg div{line-height:24px;font-size:16px;color:#505A64;border:0px}.sds-window-v5 .ext-el-mask-msg,.sds-widget-window .ext-el-mask-msg{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:0;border-color:#C8D2DC;overflow:hidden;box-shadow:0px 1px 4px rgba(0,0,0,0.25)}.sds-window-v5,.sds-widget-window{box-shadow:0px 2px 8px rgba(0,0,0,0.5)}.sds-window-v5 .x-panel-tbar .x-toolbar-layout-ct,.sds-widget-window .x-panel-tbar .x-toolbar-layout-ct{padding-bottom:8px}.ext-ie8 .sds-window-v5,.ext-ie8 .sds-widget-window{border:1px solid #999;border-top-style:none}.sds-window-v5.sds-window-v5-no-shadow,.sds-window-v5-no-shadow.sds-widget-window{box-shadow:none}.sds-window-v5.no-resize .x-resizable-handle,.no-resize.sds-widget-window .x-resizable-handle{width:0px !important;height:0px !important}.sds-window-v5 .ext-el-mask,.sds-widget-window .ext-el-mask{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=50);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=50);opacity:0.5;background-color:#FFFFFF}.sds-window-v5 .ext-el-mask-msg,.sds-widget-window .ext-el-mask-msg{background-color:#FFFFFF}.sds-window-v5 .ext-el-mask-msg div,.sds-widget-window .ext-el-mask-msg div{padding:7px 20px 7px 20px;background-color:#FFFFFF}.sds-window-v5 .x-window-tl,.sds-widget-window .x-window-tl,.sds-window-v5 .x-window-tc,.sds-widget-window .x-window-tc,.sds-window-v5 .x-window-tr,.sds-widget-window .x-window-tr{background-image:none}.sds-window-v5 .x-window-ml,.sds-widget-window .x-window-ml,.sds-window-v5 .x-window-mc,.sds-widget-window .x-window-mc,.sds-window-v5 .x-window-mr,.sds-widget-window .x-window-mr{background-image:none}.sds-window-v5 .x-window-bwrap .x-window-bl,.sds-widget-window .x-window-bwrap .x-window-bl,.sds-window-v5 .x-window-bwrap .x-window-bc,.sds-widget-window .x-window-bwrap .x-window-bc,.sds-window-v5 .x-window-bwrap .x-window-br,.sds-widget-window .x-window-bwrap .x-window-br{background-image:none;padding:0}.sds-window-v5 .x-window-mc,.sds-widget-window .x-window-mc{border:0 !important;background-color:#FFFFFF}.sds-window-v5 .x-window-tl,.sds-widget-window .x-window-tl{background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwODZlNSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #0086e5), color-stop(100%, #ffffff));background-image:-webkit-linear-gradient(#0086e5,#ffffff);background-image:-moz-linear-gradient(#0086e5,#ffffff);background-image:-o-linear-gradient(#0086e5,#ffffff);background-image:linear-gradient(#0086e5,#ffffff);background-color:#FFFFFF;border-top:3px solid #0086E5;padding-left:12px;padding-bottom:0}.sds-window-v5 .x-window-tr,.sds-widget-window .x-window-tr{padding-right:12px}.sds-window-v5 .x-window-header,.sds-widget-window .x-window-header{height:24px;padding:4px 0 5px 0;padding-left:0px !important;background-size:24px 24px}.sds-window-v5 .x-window-header-text,.sds-widget-window .x-window-header-text{line-height:24px;font-size:13px;font-weight:bold;text-align:center;color:#0086E5}.sds-window-v5 .x-tool,.sds-widget-window .x-tool{width:24px;height:24px;margin-left:8px;background-image:url("../images/rt_button.png");background-repeat:no-repeat}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-window-v5 .x-tool,.synohdpack .sds-widget-window .x-tool{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/rt_button.png");background-size:24px 768px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-window-v5 .x-tool,.synohdpackdebug .sds-widget-window .x-tool{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/rt_button.png");background-size:24px 768px;outline:1px green dashed}}.sds-window-v5 .x-tool-close,.sds-widget-window .x-tool-close{background-position:0 0px}.sds-window-v5 .x-tool-close-over,.sds-widget-window .x-tool-close-over{background-position:0 -24px}.sds-window-v5 .x-tool-maximize,.sds-widget-window .x-tool-maximize{background-position:0 -96px}.sds-window-v5 .x-tool-maximize-over,.sds-widget-window .x-tool-maximize-over{background-position:0 -120px}.sds-window-v5 .x-tool-restore,.sds-widget-window .x-tool-restore{background-position:0 -192px}.sds-window-v5 .x-tool-restore-over,.sds-widget-window .x-tool-restore-over{background-position:0 -216px}.sds-window-v5 .x-tool-minimize,.sds-widget-window .x-tool-minimize{background-position:0 -288px}.sds-window-v5 .x-tool-minimize-over,.sds-widget-window .x-tool-minimize-over{background-position:0 -312px}.sds-window-v5 .x-tool-help,.sds-widget-window .x-tool-help{background-position:0 -384px}.sds-window-v5 .x-tool-help-over,.sds-widget-window .x-tool-help-over{background-position:0 -408px}.sds-window-v5.deactive-win .x-window-tl,.deactive-win.sds-widget-window .x-window-tl{border-top-color:#8C96A0;background-image:linear-gradient(#e6ebf0,#ffffff);background-position:0 0}.sds-window-v5.deactive-win .x-window-header,.deactive-win.sds-widget-window .x-window-header{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=60);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=60);opacity:0.6}.sds-window-v5.deactive-win .x-window-header-text,.deactive-win.sds-widget-window .x-window-header-text{color:#8C96A0}.sds-window-v5.deactive-win .x-tool-close,.deactive-win.sds-widget-window .x-tool-close{background-position:0 -72px}.sds-window-v5.deactive-win .x-tool-maximize,.deactive-win.sds-widget-window .x-tool-maximize{background-position:0 -168px}.sds-window-v5.deactive-win .x-tool-restore,.deactive-win.sds-widget-window .x-tool-restore{background-position:0 -264px}.sds-window-v5.deactive-win .x-tool-minimize,.deactive-win.sds-widget-window .x-tool-minimize{background-position:0 -360px}.sds-window-v5.deactive-win .x-tool-help,.deactive-win.sds-widget-window .x-tool-help{background-position:0 -456px}.sds-window-v5.syno-window-hide .vscrollerbar.scrollgeneric,.syno-window-hide.sds-widget-window .vscrollerbar.scrollgeneric,.sds-window-v5.syno-window-hide .hscrollerbar.scrollgeneric,.syno-window-hide.sds-widget-window .hscrollerbar.scrollgeneric{visibility:hidden !important}.sds-window-v5.x-window-maximized .x-window-tc,.x-window-maximized.sds-widget-window .x-window-tc{background-color:transparent}.sds-window-v5 .x-window-tbar .x-toolbar,.sds-widget-window .x-window-tbar .x-toolbar{background-image:none;background-color:white;padding:0 12px;border:0}.sds-window-v5 .x-window-body,.sds-widget-window .x-window-body{border:none;background-color:#FFF}.sds-window-v5 .x-window-bl,.sds-widget-window .x-window-bl{background-color:#FFF}.sds-window-v5 .x-window-bc,.sds-widget-window .x-window-bc{background-color:transparent}.sds-window-v5 .x-window-br,.sds-widget-window .x-window-br{padding-right:6px}.sds-window-v5 .x-panel-body,.sds-widget-window .x-panel-body{background-color:transparent}.sds-window-v5 .x-window-bc .x-window-footer,.sds-widget-window .x-window-bc .x-window-footer{padding:0}.sds-window-v5 .x-mask-loading div,.sds-widget-window .x-mask-loading div{padding:7px 20px 7px 52px;background-position:20px;background-image:url("../../../scripts/ext-3.4/ux/images/Components/icon_loading.gif")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-window-v5 .x-mask-loading div,.synohdpack .sds-widget-window .x-mask-loading div{background-image:url("../img/synohdpack/images/Components/icon_loading.gif");background-size:24px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-window-v5 .x-mask-loading div,.synohdpackdebug .sds-widget-window .x-mask-loading div{background-image:url("../img/synohdpack/images/Components/icon_loading.gif");background-size:24px;outline:1px green dashed}}.sds-window-v5.x-window .x-toolbar-cell .x-btn,.x-window.sds-widget-window .x-toolbar-cell .x-btn{margin:0px 3px}.sds-window-v5 .x-toolbar,.sds-widget-window .x-toolbar{background-color:transparent;background-image:none}.sds-widget-window{width:322px;box-shadow:none;background:#f5faff;background:rgba(245,250,255,0.85);border:1px solid #AFB9C3}.ext-ie8 .sds-widget-window{border-top-style:solid}.sds-widget-window.x-window-maximized.scale-item.add-wdiget-effect{-webkit-transform:scale(0.8, 0.8);-moz-transform:scale(0.8, 0.8);-ms-transform:scale(0.8, 0.8);-o-transform:scale(0.8, 0.8);transform:scale(0.8, 0.8)}.sds-widget-window .x-window-mc{background-color:transparent}.sds-widget-window.sds-widget-window-medium .x-window-body{margin-bottom:1px}.sds-widget-window .x-window-body{-webkit-transition-property:height;-moz-transition-property:height;-o-transition-property:height;transition-property:height;-webkit-transition-timing-function:ease-in;-moz-transition-timing-function:ease-in;-o-transition-timing-function:ease-in;transition-timing-function:ease-in;-webkit-transition-duration:0.2s;-moz-transition-duration:0.2s;-o-transition-duration:0.2s;transition-duration:0.2s;margin-bottom:3px;background-color:transparent}.sds-widget-window.x-window-maximized .x-window-tl .x-window-tc{padding:0px}.sds-widget-window .x-window-tl{background-color:transparent !important;padding:1px 0 2px 4px;background-image:none !important;border-top:0px !important}.sds-widget-window .x-window-tl .x-window-header{background-repeat:no-repeat;padding:4px 0 4px 0;background-size:32px}.sds-widget-window .x-window-tl .x-window-header .icon-click{cursor:pointer;position:absolute;top:4px;width:32px;height:30px}.sds-widget-window .x-window-tl .x-window-header .x-window-header-text{text-align:left;color:#505A64;padding-left:34px;cursor:move}.sds-widget-window .x-window-tl .x-window-header .x-tool-add{background-position:0 -384px}.sds-widget-window .x-window-tl .x-window-header .x-tool-add.x-tool-disabled{background-position:0 -456px !important;cursor:move}.sds-widget-window .x-window-tl .x-window-header .x-tool-add-over{background-position:0 -408px}.sds-widget-window .x-window-tl .x-window-header .x-tool-pin{background-position:0 -480px}.sds-widget-window .x-window-tl .x-window-header .x-tool-pin.x-tool-disabled{background-position:0 -552px !important;cursor:move}.sds-widget-window .x-window-tl .x-window-header .x-tool-pin.x-tool-toggled{background-position:0 -528px}.sds-widget-window .x-window-tl .x-window-header .x-tool-pin-over{background-position:0 -504px}.sds-widget-window .x-window-tl .x-window-header .x-tool-close:active{background-position:0 -48px}.sds-widget-window .x-window-tl .x-window-header .x-tool-maximize:active{background-position:0 -144px}.sds-widget-window .x-window-tl .x-window-header .x-tool-restore:active{background-position:0 -240px}.sds-widget-window .x-window-tl .x-window-header .x-tool-minimize:active{background-position:0 -336px}.sds-widget-window .x-window-tl .x-window-header .x-tool-add:active{background-position:0 -432px}.sds-widget-window .x-window-tl .x-window-header .x-tool-pin:active{background-position:0 -528px}.sds-widget-window .x-window-tl .x-window-header .x-tool{opacity:0;visibility:hidden;background-image:url("../images/widget_window/widget_rt_button.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-widget-window .x-window-tl .x-window-header .x-tool{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/widget_window/widget_rt_button.png");background-size:24px 672px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-widget-window .x-window-tl .x-window-header .x-tool{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/widget_window/widget_rt_button.png");background-size:24px 672px;outline:1px green dashed}}.sds-widget-window .x-window-tl .x-window-header.sds-widget-over .x-tool{opacity:1;visibility:visible}.sds-widget-window .x-window-tr{padding-right:6px}.sds-widget-window.x-panel-ghost .x-tool{visibility:hidden}.sds-widget-window.x-window-maximized .x-window-draggable .x-window-header-text{cursor:move}.sds-widget-window.sds-widget-window-nodrop{cursor:no-drop}.sds-widget-window.sds-widget-window-nodrop .x-window-draggable .x-window-header-text{cursor:no-drop}.sds-widget-window .x-grid3-body,.sds-widget-window .x-grid3-row,.sds-widget-window .x-table-layout-ct{width:100% !important}.sds-widget-window .syno-sysinfo-system-health,.sds-widget-window .resource-monitor-widget,.sds-widget-window .sys-storage-grid{margin-top:-4px}.sds-window-v5.x-window-dlg,.x-window-dlg.sds-widget-window{color:#505a64}.ext-ie8 .sds-window-v5.x-window-dlg,.ext-ie8 .x-window-dlg.sds-widget-window{border-top-style:solid}.sds-window-v5.x-window-dlg input,.x-window-dlg.sds-widget-window input,.sds-window-v5.x-window-dlg textarea,.x-window-dlg.sds-widget-window textarea{color:#505a64}.sds-window-v5.x-window-dlg .x-window-tl,.x-window-dlg.sds-widget-window .x-window-tl{border-top:none;padding-bottom:0px}.sds-window-v5.x-window-dlg .ext-mb-icon,.x-window-dlg.sds-widget-window .ext-mb-icon{width:48px;height:48px}.sds-window-v5.x-window-dlg .ext-mb-question,.x-window-dlg.sds-widget-window .ext-mb-question{background-image:url("../images/icon_question.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-window-v5.x-window-dlg .ext-mb-question,.synohdpack .x-window-dlg.sds-widget-window .ext-mb-question{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/icon_question.png");background-size:48px 48px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-window-v5.x-window-dlg .ext-mb-question,.synohdpackdebug .x-window-dlg.sds-widget-window .ext-mb-question{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/icon_question.png");background-size:48px 48px;outline:1px green dashed}}.sds-window-v5.x-window-dlg .x-window-footer,.x-window-dlg.sds-widget-window .x-window-footer{padding:24px 20px 20px 20px;margin-left:0px}.sds-window-v5.x-window-dlg td.x-toolbar-cell,.x-window-dlg.sds-widget-window td.x-toolbar-cell{padding:0 0 0 10px}.sds-window-v5.x-window-dlg .x-toolbar-cell .x-btn,.x-window-dlg.sds-widget-window .x-toolbar-cell .x-btn{margin:0}.sds-window-v5.x-window-dlg .syno-mb-custom-btn,.x-window-dlg.sds-widget-window .syno-mb-custom-btn{position:absolute;bottom:20px;left:84px}.sds-window-v5.x-window-dlg .ext-mb-input,.x-window-dlg.sds-widget-window .ext-mb-input{height:24px}.sds-window-v5.x-window-dlg .ext-mb-content,.x-window-dlg.sds-widget-window .ext-mb-content{line-height:28px}.sds-window-v5.x-window-dlg .x-dlg-icon .ext-mb-content,.x-window-dlg.sds-widget-window .x-dlg-icon .ext-mb-content{margin-left:64px}.sds-window-v5.x-window-dlg .syno-mb-progress-status,.x-window-dlg.sds-widget-window .syno-mb-progress-status{position:absolute;right:20px;bottom:4px;line-height:16px}.sds-window-v5.x-window-dlg .syno-mb-progress .x-progress-text,.x-window-dlg.sds-widget-window .syno-mb-progress .x-progress-text{display:none}.sds-window-v5 .x-progress-wrap,.sds-widget-window .x-progress-wrap{border:none;margin-bottom:4px}.sds-window-v5 .x-progress-inner,.sds-widget-window .x-progress-inner{background:#D2DCE6;border-radius:3px;overflow:hidden;height:16px}.sds-window-v5 .x-progress-bar,.sds-widget-window .x-progress-bar{position:relative;background-color:#0086E5;background-image:none;border:none}.sds-window-v5 .x-progress-bar::before,.sds-widget-window .x-progress-bar::before{content:'';width:100%;height:100%;position:absolute;top:0;left:0;border-radius:3px;background-image:repeating-linear-gradient(-45deg, transparent, transparent 6.5px, rgba(255,255,255,0.15) 1px, rgba(255,255,255,0.15) 13px)}.sds-window-v5 .syno-ux-tab-panel .x-tab-panel-body,.sds-widget-window .syno-ux-tab-panel .x-tab-panel-body{padding-top:5px}.sds-window-v5 .syno-ux-tab-panel form.x-form,.sds-widget-window .syno-ux-tab-panel form.x-form{padding:0 10px}.sds-window-v5 .syno-ux-tab-panel form.x-form .syno-ux-fieldset,.sds-widget-window .syno-ux-tab-panel form.x-form .syno-ux-fieldset{margin:0 -10px 8px -10px}.sds-window-v5 .syno-ux-tab-panel .syno-ux-formpanel-has-fieldset form.x-form,.sds-widget-window .syno-ux-tab-panel .syno-ux-formpanel-has-fieldset form.x-form{padding-left:0;padding-right:0}.sds-window-v5 .syno-ux-tab-panel .syno-ux-formpanel-has-fieldset form.x-form .x-form-item,.sds-widget-window .syno-ux-tab-panel .syno-ux-formpanel-has-fieldset form.x-form .x-form-item{margin-left:10px;margin-right:10px}.sds-window-v5 .syno-ux-tab-panel .syno-ux-formpanel-has-fieldset form.x-form .syno-ux-fieldset,.sds-widget-window .syno-ux-tab-panel .syno-ux-formpanel-has-fieldset form.x-form .syno-ux-fieldset{margin-left:0;margin-right:0}.sds-window-v5 .syno-ux-tab-panel .syno-ux-formpanel-has-fieldset form.x-form .syno-ux-fieldset .x-form-item,.sds-widget-window .syno-ux-tab-panel .syno-ux-formpanel-has-fieldset form.x-form .syno-ux-fieldset .x-form-item{margin-left:0;margin-right:0}.sds-window .x-statusbar .x-window-bc{background-image:url(/scripts/ext-3/resources/images/gray/window/top-bottom.png)}.sds-window .x-statusbar .x-status-text{height:20px;line-height:20px;padding-left:25px !important;background-position:1px 2px}.sds-window .x-statusbar .x-toolbar-right{padding-right:16px}.sds-window .x-statusbar .x-toolbar-right .x-btn{padding-top:6px;padding-bottom:6px}.sds-window .x-window-body .x-statusbar .x-toolbar-right .x-btn{padding-top:0;padding-bottom:0}.sds-window .x-tab-panel-fbar.x-statusbar .x-status-text,.sds-window .x-panel-fbar.x-statusbar .x-status-text{white-space:normal;line-height:14px;background-position:1px 0px}.sds-window-v5 .x-window-footer .x-statusbar,.sds-widget-window .x-window-footer .x-statusbar{padding-left:20px;padding-right:20px}.sds-window-v5 .x-window-footer .x-statusbar .x-toolbar-ct,.sds-widget-window .x-window-footer .x-statusbar .x-toolbar-ct{background-image:url("../images/shadow_footbar.png");background-repeat:repeat-x;background-color:transparent;border:0px;padding-top:4px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-window-v5 .x-window-footer .x-statusbar .x-toolbar-ct,.synohdpack .sds-widget-window .x-window-footer .x-statusbar .x-toolbar-ct{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/shadow_footbar.png");background-size:8px 4px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-window-v5 .x-window-footer .x-statusbar .x-toolbar-ct,.synohdpackdebug .sds-widget-window .x-window-footer .x-statusbar .x-toolbar-ct{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/shadow_footbar.png");background-size:8px 4px;outline:1px green dashed}}.sds-window-v5 .x-window-footer .x-statusbar .x-toolbar-cell,.sds-widget-window .x-window-footer .x-statusbar .x-toolbar-cell{padding:0}.sds-window-v5 .x-window-footer .x-statusbar .x-toolbar-right .syno-ux-button,.sds-widget-window .x-window-footer .x-statusbar .x-toolbar-right .syno-ux-button{margin:8px 10px 8px 0px}.x-dd-drag-proxy .x-dd-drag-ghost{padding:0px}.x-dd-drag-proxy .x-dd-drop-icon{top:0px;left:0px}.x-dd-drop-ok,.x-dd-drop-ok-add,.x-tree-drop-ok-append,.x-tree-drop-ok-above,.x-tree-drop-ok-between,.x-tree-drop-ok-below,.x-dd-drop-nodrop{background-color:#FFFFFF;-webkit-box-shadow:0px 1px 4px #000;-moz-box-shadow:0px 1px 4px #000;box-shadow:0px 1px 4px #000;-webkit-box-shadow:0px 1px 4px rgba(0,0,0,0.25);-moz-box-shadow:0px 1px 4px rgba(0,0,0,0.25);box-shadow:0px 1px 4px rgba(0,0,0,0.25);border:1px;border-color:#C8D2DC;border-radius:3px;padding:7px 11px 7px 41px}.x-dd-drop-ok .x-dd-drop-icon,.x-dd-drop-ok-add .x-dd-drop-icon,.x-tree-drop-ok-append .x-dd-drop-icon,.x-tree-drop-ok-above .x-dd-drop-icon,.x-tree-drop-ok-between .x-dd-drop-icon,.x-tree-drop-ok-below .x-dd-drop-icon,.x-dd-drop-nodrop .x-dd-drop-icon{width:24px;height:24px;left:10px;top:7px;background-image:url("../images/item_drag_status.png");background-position:0 0}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .x-dd-drop-ok .x-dd-drop-icon,.synohdpack .x-dd-drop-ok-add .x-dd-drop-icon,.synohdpack .x-tree-drop-ok-append .x-dd-drop-icon,.synohdpack .x-tree-drop-ok-above .x-dd-drop-icon,.synohdpack .x-tree-drop-ok-between .x-dd-drop-icon,.synohdpack .x-tree-drop-ok-below .x-dd-drop-icon,.synohdpack .x-dd-drop-nodrop .x-dd-drop-icon{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/item_drag_status.png");background-size:72px 24px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .x-dd-drop-ok .x-dd-drop-icon,.synohdpackdebug .x-dd-drop-ok-add .x-dd-drop-icon,.synohdpackdebug .x-tree-drop-ok-append .x-dd-drop-icon,.synohdpackdebug .x-tree-drop-ok-above .x-dd-drop-icon,.synohdpackdebug .x-tree-drop-ok-between .x-dd-drop-icon,.synohdpackdebug .x-tree-drop-ok-below .x-dd-drop-icon,.synohdpackdebug .x-dd-drop-nodrop .x-dd-drop-icon{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/item_drag_status.png");background-size:72px 24px;outline:1px green dashed}}.x-dd-drop-ok .x-dd-drag-ghost,.x-dd-drop-ok-add .x-dd-drag-ghost,.x-tree-drop-ok-append .x-dd-drag-ghost,.x-tree-drop-ok-above .x-dd-drag-ghost,.x-tree-drop-ok-between .x-dd-drag-ghost,.x-tree-drop-ok-below .x-dd-drag-ghost,.x-dd-drop-nodrop .x-dd-drag-ghost{border:none;color:#505A64;font-size:16px;line-height:24px;height:24px}.x-dd-drop-ok .x-dd-drag-ghost .x-tree-node-icon,.x-dd-drop-ok-add .x-dd-drag-ghost .x-tree-node-icon,.x-tree-drop-ok-append .x-dd-drag-ghost .x-tree-node-icon,.x-tree-drop-ok-above .x-dd-drag-ghost .x-tree-node-icon,.x-tree-drop-ok-between .x-dd-drag-ghost .x-tree-node-icon,.x-tree-drop-ok-below .x-dd-drag-ghost .x-tree-node-icon,.x-dd-drop-nodrop .x-dd-drag-ghost .x-tree-node-icon{display:none}.x-dd-drop-ok .x-dd-drag-ghost .x-grid3-hd-inner,.x-dd-drop-ok .x-dd-drag-ghost span,.x-dd-drop-ok-add .x-dd-drag-ghost .x-grid3-hd-inner,.x-dd-drop-ok-add .x-dd-drag-ghost span,.x-tree-drop-ok-append .x-dd-drag-ghost .x-grid3-hd-inner,.x-tree-drop-ok-append .x-dd-drag-ghost span,.x-tree-drop-ok-above .x-dd-drag-ghost .x-grid3-hd-inner,.x-tree-drop-ok-above .x-dd-drag-ghost span,.x-tree-drop-ok-between .x-dd-drag-ghost .x-grid3-hd-inner,.x-tree-drop-ok-between .x-dd-drag-ghost span,.x-tree-drop-ok-below .x-dd-drag-ghost .x-grid3-hd-inner,.x-tree-drop-ok-below .x-dd-drag-ghost span,.x-dd-drop-nodrop .x-dd-drag-ghost .x-grid3-hd-inner,.x-dd-drop-nodrop .x-dd-drag-ghost span{padding:0px;color:#505A64;font-size:16px;line-height:24px}.x-dd-drop-ok .x-dd-drag-ghost .x-grid3-hd-inner,.x-dd-drop-ok-add .x-dd-drag-ghost .x-grid3-hd-inner,.x-tree-drop-ok-append .x-dd-drag-ghost .x-grid3-hd-inner,.x-tree-drop-ok-above .x-dd-drag-ghost .x-grid3-hd-inner,.x-tree-drop-ok-between .x-dd-drag-ghost .x-grid3-hd-inner,.x-tree-drop-ok-below .x-dd-drag-ghost .x-grid3-hd-inner,.x-dd-drop-nodrop .x-dd-drag-ghost .x-grid3-hd-inner{border:none;background-color:white;background-image:none}.x-dd-drop-ok .x-dd-drop-icon{background-position:-24px 0}.x-dd-drop-nodrop .x-dd-drop-icon{background-position:-48px 0}.x-dd-drop-nodrop.x-dd-drag-repair{display:none}.sds-launch-icon-dragging-proxy .sds-application-notify-badge-num{display:none}.sds-launch-icon-dragging-proxy .x-dd-drag-ghost{border:none !important;background-color:transparent !important;opacity:1 !important;filter:none !important}.sds-launch-icon-dragging-proxy.x-dd-drag-proxy.x-dd-reposition-ok,.sds-launch-icon-dragging-proxy.x-dd-drag-proxy.x-dd-drop-nodrop,.sds-launch-icon-dragging-proxy.x-dd-drag-proxy.x-dd-drop-ok-add,.sds-launch-icon-dragging-proxy.x-dd-drag-proxy.x-dd-drop-ok,.x-dd-drag-proxy.x-dd-drop-nodrop.x-dd-drag-repair{background-color:transparent;border:none;padding:0px;box-shadow:none}.sds-launch-icon-dragging-proxy.x-dd-drag-proxy.x-dd-reposition-ok .x-dd-drag-ghost,.sds-launch-icon-dragging-proxy.x-dd-drag-proxy.x-dd-drop-nodrop .x-dd-drag-ghost,.sds-launch-icon-dragging-proxy.x-dd-drag-proxy.x-dd-drop-ok-add .x-dd-drag-ghost,.sds-launch-icon-dragging-proxy.x-dd-drag-proxy.x-dd-drop-ok .x-dd-drag-ghost,.x-dd-drag-proxy.x-dd-drop-nodrop.x-dd-drag-repair .x-dd-drag-ghost{width:82px}.sds-launch-icon-dragging-proxy.x-dd-drag-proxy.x-dd-drop-ok-add .x-dd-drop-icon{width:36px;height:36px;top:40px;left:46px;background-image:url("../images/icon_drag_add.png");background-position:center}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-launch-icon-dragging-proxy.x-dd-drag-proxy.x-dd-drop-ok-add .x-dd-drop-icon{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/icon_drag_add.png");background-size:36px 36px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-launch-icon-dragging-proxy.x-dd-drag-proxy.x-dd-drop-ok-add .x-dd-drop-icon{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/icon_drag_add.png");background-size:36px 36px;outline:1px green dashed}}.sds-launch-icon-dragging-proxy.x-dd-drag-proxy.x-dd-drop-ok .x-dd-drop-icon,.sds-launch-icon-dragging-proxy.x-dd-drag-proxy.x-dd-drop-nodrop .x-dd-drop-icon{width:36px;height:36px;top:40px;left:46px;background-image:url("../images/icon_drag_ban.png");background-position:center}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-launch-icon-dragging-proxy.x-dd-drag-proxy.x-dd-drop-ok .x-dd-drop-icon,.synohdpack .sds-launch-icon-dragging-proxy.x-dd-drag-proxy.x-dd-drop-nodrop .x-dd-drop-icon{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/icon_drag_ban.png");background-size:36px 36px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-launch-icon-dragging-proxy.x-dd-drag-proxy.x-dd-drop-ok .x-dd-drop-icon,.synohdpackdebug .sds-launch-icon-dragging-proxy.x-dd-drag-proxy.x-dd-drop-nodrop .x-dd-drop-icon{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/icon_drag_ban.png");background-size:36px 36px;outline:1px green dashed}}.sds-launch-icon-dragging-proxy .x-dd-drag-ghost .text{visibility:hidden !important}.sds-launch-icon-dragging-proxy .image{white-space:normal}.sds-launch-icon-dragging-proxy li{list-style:none}.sds-launch-icon-dragging-proxy li.launch-icon .image{margin-left:6px;margin-top:6px}.sds-shim-for-iframe{position:absolute;top:0;width:100%;height:100%;zIndex:20;background-color:transparent}#sds-taskbar{z-index:5;position:relative;height:39px;background:repeat-x scroll 0 0 transparent;background-image:url("../images/taskbar/taskbar_bg.png")}#sds-taskbar .x-btn-tl,#sds-taskbar .x-btn-tc,#sds-taskbar .x-btn-tr,#sds-taskbar .x-btn-bl,#sds-taskbar .x-btn-bc,#sds-taskbar .x-btn-br{display:none}#sds-taskbar .x-btn tr:first-child,#sds-taskbar .x-btn tr:last-child{display:none}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-taskbar{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/taskbar_bg.png");background-size:4px 39px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-taskbar{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/taskbar_bg.png");background-size:4px 39px;outline:1px green dashed}}#sds-taskbar-shadow{z-index:4;position:absolute;width:100%;height:43px;background:repeat-x scroll 0 39px transparent;background-image:url("../images/taskbar/taskbar_shadow.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-taskbar-shadow{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/taskbar_shadow.png");background-size:4px 4px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-taskbar-shadow{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/taskbar_shadow.png");background-size:4px 4px;outline:1px green dashed}}#sds-taskbar li .x-btn-text{padding:0}#sds-taskbar-panel-wrap{background:transparent;height:39px}.sds-taskbar-overflow-menu-button.x-btn-noicon.x-box-item{padding:3px 25px 3px 15px;width:72px;background:no-repeat;background-image:url("../images/taskbar/taskbar_split.png");background-position:62px 5px !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-taskbar-overflow-menu-button.x-btn-noicon.x-box-item{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/taskbar_split.png");background-size:2px 28px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-taskbar-overflow-menu-button.x-btn-noicon.x-box-item{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/taskbar_split.png");background-size:2px 28px;outline:1px green dashed}}.sds-taskbar-overflow-menu-button .x-btn-ml,.sds-taskbar-overflow-menu-button .x-btn-mr,.sds-taskbar-overflow-menu-button .x-btn-tl,.sds-taskbar-overflow-menu-button .x-btn-tc,.sds-taskbar-overflow-menu-button .x-btn-tr,.sds-taskbar-overflow-menu-button .x-btn-bl,.sds-taskbar-overflow-menu-button .x-btn-bc,.sds-taskbar-overflow-menu-button .x-btn-br{display:none}.sds-taskbar-overflow-menu-button .x-btn-mc{background:no-repeat;background-image:url("../images/taskbar/more_apps.png");background-position:0px 0px !important;width:32px;height:32px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-taskbar-overflow-menu-button .x-btn-mc{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/more_apps.png");background-size:32px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-taskbar-overflow-menu-button .x-btn-mc{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/more_apps.png");background-size:32px 96px;outline:1px green dashed}}.sds-taskbar-overflow-menu-button.x-btn-over .x-btn-mc{background-position:0px -32px !important}.sds-taskbar-overflow-menu-button.x-btn-click .x-btn-mc{background-position:0px -64px !important}#sds-taskbar-right .x-btn-ml,#sds-taskbar-right .x-btn-mr,#sds-taskbar-right .x-btn-tl,#sds-taskbar-right .x-btn-tc,#sds-taskbar-right .x-btn-tr,#sds-taskbar-right .x-btn-bl,#sds-taskbar-right .x-btn-bc,#sds-taskbar-right .x-btn-br{display:none}#sds-taskbar-right .sds-taskbar-right-left,#sds-taskbar-right .sds-taskbar-right-center,#sds-taskbar-right .sds-taskbar-right-right{height:39px;float:left}#sds-taskbar-right .sds-taskbar-right-left{width:20px;background:no-repeat;background-image:url("../images//taskbar/taskbar_split.png");background-position:10px 6px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-taskbar-right .sds-taskbar-right-left{background-image:url("../img/synohdpack/images/dsm/resources/css/../images//taskbar/taskbar_split.png");background-size:2px 28px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-taskbar-right .sds-taskbar-right-left{background-image:url("../img/synohdpack/images/dsm/resources/css/../images//taskbar/taskbar_split.png");background-size:2px 28px;outline:1px green dashed}}#sds-taskbar-right .sds-taskbar-right-right{width:6px}#sds-taskbar-right table,#sds-taskbar-right table button{width:32px;height:32px}#sds-taskbar-right .x-btn-mc{width:202px;height:32px;background-image:none;background-color:transparent}.sds-tray-panel{box-shadow:0px 2px 6px rgba(0,0,0,0.5);background-color:#FFFFFF;border:0px none;padding:4px 10px;color:#505050}.sds-tray-panel .x-panel-body{background-color:#FFFFFF;border:none}.sds-tray-panel .x-panel-header{background:transparent;border:0;border-bottom:solid 1px #EBF0F5;text-align:center}.sds-tray-panel .x-panel-header .x-panel-header-text{font-size:13px;color:#505A64;font-weight:bold;line-height:23px}.sds-tray-panel .sds-tray-panel-arrow{background:transparent;width:24px;height:18px;position:absolute;overflow:hidden}.ext-ie8m .sds-tray-panel .sds-tray-panel-arrow{width:0px;height:0px;border:10px solid transparent;border-bottom-width:13px;border-bottom-color:#fff;border-top-width:0px}.sds-tray-panel .sds-tray-panel-arrow::after{background:#fff;background:#fff;content:'';position:absolute;bottom:0px;left:2px;width:14px;height:14px;-webkit-transform-origin:left bottom;-moz-transform-origin:left bottom;-ms-transform-origin:left bottom;-o-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg);box-shadow:2px 2px 6px rgba(0,0,0,0.5)}#sds-taskbar-notification-button,#sds-taskbar-user-button,#sds-taskbar-search-button,#sds-taskbar-widget-button,#sds-taskbar-preview-button{float:left;margin:0px 6px 0px 6px;padding-top:4px;cursor:pointer}#sds-taskbar-user-button .x-btn-mc{background-image:url("../images/taskbar/tray_icon_user_menu.png");background-position:0px 0px !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-taskbar-user-button .x-btn-mc{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/tray_icon_user_menu.png");background-size:32px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-taskbar-user-button .x-btn-mc{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/tray_icon_user_menu.png");background-size:32px 96px;outline:1px green dashed}}#sds-taskbar-user-button .x-btn-over .x-btn-mc{background-position:0px -32px !important}#sds-taskbar-user-button .x-btn-click .x-btn-mc,#sds-taskbar-user-button .x-btn-pressed .x-btn-mc{background-position:0px -64px !important}#sds-taskbar-search-button .x-btn-mc{background-image:url("../images/taskbar/tray_icon_search.png");background-position:0px 0px !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-taskbar-search-button .x-btn-mc{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/tray_icon_search.png");background-size:32px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-taskbar-search-button .x-btn-mc{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/tray_icon_search.png");background-size:32px 96px;outline:1px green dashed}}#sds-taskbar-search-button .x-btn-over .x-btn-mc{background-position:0px -32px !important}#sds-taskbar-search-button .x-btn-click .x-btn-mc,#sds-taskbar-search-button .x-btn-pressed .x-btn-mc{background-position:0px -64px !important}#sds-taskbar-notification-button .x-btn-mc{background-image:url("../images/taskbar/tray_icon_notification.png");background-position:0px 0px !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-taskbar-notification-button .x-btn-mc{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/tray_icon_notification.png");background-size:32px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-taskbar-notification-button .x-btn-mc{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/tray_icon_notification.png");background-size:32px 96px;outline:1px green dashed}}#sds-taskbar-notification-button .x-btn-over .x-btn-mc{background-position:0px -32px !important}#sds-taskbar-notification-button .x-btn-click .x-btn-mc,#sds-taskbar-notification-button .x-btn-pressed .x-btn-mc{background-position:0px -64px !important}#sds-taskbar-widget-button .x-btn-mc{background-image:url("../images/taskbar/tray_icon_widget.png");background-position:0px 0px !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-taskbar-widget-button .x-btn-mc{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/tray_icon_widget.png");background-size:32px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-taskbar-widget-button .x-btn-mc{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/tray_icon_widget.png");background-size:32px 96px;outline:1px green dashed}}#sds-taskbar-widget-button .x-btn-over .x-btn-mc{background-position:0px -32px !important}#sds-taskbar-widget-button .x-btn-click .x-btn-mc,#sds-taskbar-widget-button .x-btn-pressed .x-btn-mc{background-position:0px -64px !important}#sds-taskbar-preview-button .x-btn-mc{background-image:url("../images/taskbar/tray_icon_pilot_view.png");background-position:0px 0px !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-taskbar-preview-button .x-btn-mc{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/tray_icon_pilot_view.png");background-size:32px 128px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-taskbar-preview-button .x-btn-mc{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/tray_icon_pilot_view.png");background-size:32px 128px;outline:1px green dashed}}#sds-taskbar-preview-button .x-btn-over .x-btn-mc{background-position:0px -32px !important}#sds-taskbar-preview-button .x-btn-click .x-btn-mc,#sds-taskbar-preview-button .x-btn-pressed .x-btn-mc{background-position:0px -64px !important}#sds-taskbar-preview-button .x-item-disabled .x-btn-mc{background-position:0px -96px !important}#sds-taskbar-showall{float:left}#sds-taskbar-showall .x-btn-ml,#sds-taskbar-showall .x-btn-mr{display:none}#sds-taskbar-showall .x-btn-text{width:22px;height:39px}#sds-taskbar-showall .x-btn-mc{background:transparent no-repeat;background-image:url("../images/taskbar/showdesktop.png") !important;background-position:0px 0px !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-taskbar-showall .x-btn-mc{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/showdesktop.png") !important;background-size:22px 117px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-taskbar-showall .x-btn-mc{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/showdesktop.png") !important;background-size:22px 117px;outline:1px green dashed}}#sds-taskbar-showall .x-btn-over .x-btn-mc{background-position:0px -39px !important}#sds-taskbar-showall .x-btn-click .x-btn-mc{background-position:0px -78px !important}#sds-taskbar-startbutton{float:left}#sds-taskbar-startbutton .x-btn-ml{display:none}#sds-taskbar-startbutton .x-btn-text{width:89px;height:39px}#sds-taskbar-startbutton .x-btn-mc{background:transparent no-repeat;background-image:url("../images/taskbar/taskbar_bt_apps.png") !important;background-position:0px 0px !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-taskbar-startbutton .x-btn-mc{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/taskbar_bt_apps.png") !important;background-size:89px 117px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-taskbar-startbutton .x-btn-mc{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/taskbar_bt_apps.png") !important;background-size:89px 117px;outline:1px green dashed}}#sds-taskbar-startbutton .x-btn-over .x-btn-mc{background-position:0px -39px !important}#sds-taskbar-startbutton .x-btn-click .x-btn-mc{background-position:0px -78px !important}#sds-taskbar-startbutton .x-btn-pressed .x-btn-mc{background-position:0px -78px !important}#sds-taskbar-startbutton .x-btn-mr{background:transparent no-repeat;background-position:right 0px !important;background-image:url("../images/taskbar/taskbar_bt_widgets_shadow.png") !important;width:8px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-taskbar-startbutton .x-btn-mr{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/taskbar_bt_widgets_shadow.png") !important;background-size:8px 39px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-taskbar-startbutton .x-btn-mr{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/taskbar_bt_widgets_shadow.png") !important;background-size:8px 39px;outline:1px green dashed}}#sds-taskbar-startbutton .x-btn-pressed .x-btn-mr{visibility:hidden}#sds-tray-panel{right:0 !important;left:auto !important;padding:4px 0 3px 0}#sds-tray-panel .sds-tray-strip-wrap{width:100%;zoom:1}#sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-device{background-image:url("../../modules/ExternalDevices/images/tray_icon_device.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-device{background-image:url("../img/synohdpack/images/dsm/modules/ExternalDevices/images/tray_icon_device.png");background-size:32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-device{background-image:url("../img/synohdpack/images/dsm/modules/ExternalDevices/images/tray_icon_device.png");background-size:32px;outline:1px green dashed}}#sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-disk-port{background-image:url("../../modules/PollingTask/images/tray_icon_disk_port.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-disk-port{background-image:url("../img/synohdpack/images/dsm/modules/PollingTask/images/tray_icon_disk_port.png");background-size:32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-disk-port{background-image:url("../img/synohdpack/images/dsm/modules/PollingTask/images/tray_icon_disk_port.png");background-size:32px;outline:1px green dashed}}#sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-static-upload{background-image:url(../../modules/FileTaskMonitor/images/tray_icon_upload.png);background-position:0 0 !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-static-upload{background-image:url("../img/synohdpack/images/dsm/modules/FileTaskMonitor/images/tray_icon_upload.png");background-size:32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-static-upload{background-image:url("../img/synohdpack/images/dsm/modules/FileTaskMonitor/images/tray_icon_upload.png");background-size:32px;outline:1px green dashed}}#sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-ani-upload{background-image:url(../../modules/FileTaskMonitor/images/tray_icon_upload.gif);background-position:0 0 !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-ani-upload{background-image:url("../img/synohdpack/images/dsm/modules/FileTaskMonitor/images/tray_icon_upload.gif");background-size:32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-ani-upload{background-image:url("../img/synohdpack/images/dsm/modules/FileTaskMonitor/images/tray_icon_upload.gif");background-size:32px;outline:1px green dashed}}#sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-static-bgtask{background-image:url(../../modules/FileTaskMonitor/images/tray_icon_bgtask.png);background-position:0 0 !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-static-bgtask{background-image:url("../img/synohdpack/images/dsm/modules/FileTaskMonitor/images/tray_icon_bgtask.png");background-size:32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-static-bgtask{background-image:url("../img/synohdpack/images/dsm/modules/FileTaskMonitor/images/tray_icon_bgtask.png");background-size:32px;outline:1px green dashed}}#sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-ani-bgtask{background-image:url(../../modules/FileTaskMonitor/images/tray_icon_bgtask.gif);background-position:0 0 !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-ani-bgtask{background-image:url("../img/synohdpack/images/dsm/modules/FileTaskMonitor/images/tray_icon_bgtask.gif");background-size:32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-ani-bgtask{background-image:url("../img/synohdpack/images/dsm/modules/FileTaskMonitor/images/tray_icon_bgtask.gif");background-size:32px;outline:1px green dashed}}#sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-static-download{background-image:url(../../modules/FileTaskMonitor/images/tray_icon_download.png);background-position:0 0 !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-static-download{background-image:url("../img/synohdpack/images/dsm/modules/FileTaskMonitor/images/tray_icon_download.png");background-size:32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-static-download{background-image:url("../img/synohdpack/images/dsm/modules/FileTaskMonitor/images/tray_icon_download.png");background-size:32px;outline:1px green dashed}}#sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-ani-download{background-image:url(../../modules/FileTaskMonitor/images/tray_icon_download.gif);background-position:0 0 !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-ani-download{background-image:url("../img/synohdpack/images/dsm/modules/FileTaskMonitor/images/tray_icon_download.gif");background-size:32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-ani-download{background-image:url("../img/synohdpack/images/dsm/modules/FileTaskMonitor/images/tray_icon_download.gif");background-size:32px;outline:1px green dashed}}#sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-static-creating-thumbnail{background-image:url(../../modules/ThumbConvertProgress/images/tray_icon_creating_thumbnail.png);background-position:0 0 !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-static-creating-thumbnail{background-image:url("../img/synohdpack/images/dsm/modules/ThumbConvertProgress/images/tray_icon_creating_thumbnail.png");background-size:32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-static-creating-thumbnail{background-image:url("../img/synohdpack/images/dsm/modules/ThumbConvertProgress/images/tray_icon_creating_thumbnail.png");background-size:32px;outline:1px green dashed}}#sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-ani-creating-thumbnail{background-image:url(../../modules/ThumbConvertProgress/images/tray_icon_creating_thumbnail.gif);background-position:0 0 !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-ani-creating-thumbnail{background-image:url("../img/synohdpack/images/dsm/modules/ThumbConvertProgress/images/tray_icon_creating_thumbnail.gif");background-size:32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon .x-btn-mc .sds-tray-item-ani-creating-thumbnail{background-image:url("../img/synohdpack/images/dsm/modules/ThumbConvertProgress/images/tray_icon_creating_thumbnail.gif");background-size:32px;outline:1px green dashed}}#sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon button{background-position:0px 0px !important}#sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon.x-btn-over button{background-position:0px -32px !important}#sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon.x-btn-click button{background-position:0px -64px !important}#sds-tray-panel .sds-tray-strip-wrap .x-btn.x-btn-icon.x-btn-pressed button{background-position:0px -64px !important}#sds-tray-panel .sds-tray-strip{display:block;zoom:1}#sds-tray-panel .sds-widget-tray{cursor:pointer;margin:0px 6px 0px 6px}#sds-tray-panel li{float:right}#sds-tray-panel li .x-btn-text{height:32px;width:32px;margin:0px 6px 0px 6px}#sds-tray-panel .x-btn-ml,#sds-tray-panel .x-btn-mr{background:none transparent;display:none}#sds-tray-panel .x-btn-mc{background:none transparent}.sds-tray-item-notification{position:relative}#sds-taskbuttons-panel li{position:relative;float:left}#sds-taskbuttons-panel li .loading{position:absolute;left:0;top:0;width:62px;height:39px;background:no-repeat scroll center center transparent;background-image:url("../images/desktop/taskbar_spinner.gif")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-taskbuttons-panel li .loading{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/desktop/taskbar_spinner.gif");background-size:24px 24px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-taskbuttons-panel li .loading{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/desktop/taskbar_spinner.gif");background-size:24px 24px;outline:1px green dashed}}#sds-taskbuttons-panel li.sds-taskbuttons-edge{float:left;margin:0 !important;padding:0 !important;border:0 none !important;font-size:1px !important;line-height:1px !important;overflow:hidden;zoom:1;background:transparent !important;width:1px}#sds-taskbuttons-panel li .x-btn-text{width:62px;height:39px}#sds-taskbuttons-panel li .x-btn-ml,#sds-taskbuttons-panel li .x-btn-mr{display:none}#sds-taskbuttons-panel li .x-btn.x-btn-icon button{background-size:32px 32px}#sds-taskbuttons-panel li .x-btn.x-btn-icon.launched .x-btn-mc{background:transparent no-repeat;background-image:url("../images/taskbar/taskbar_bt.png") !important;background-position:0px 0px !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-taskbuttons-panel li .x-btn.x-btn-icon.launched .x-btn-mc{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/taskbar_bt.png") !important;background-size:186px 39px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-taskbuttons-panel li .x-btn.x-btn-icon.launched .x-btn-mc{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/taskbar_bt.png") !important;background-size:186px 39px;outline:1px green dashed}}#sds-taskbuttons-panel li .x-btn.x-btn-icon.x-btn-over .x-btn-mc{background:transparent no-repeat;background-image:url("../images/taskbar/taskbar_bt.png") !important;background-position:-62px 0px !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-taskbuttons-panel li .x-btn.x-btn-icon.x-btn-over .x-btn-mc{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/taskbar_bt.png") !important;background-size:186px 39px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-taskbuttons-panel li .x-btn.x-btn-icon.x-btn-over .x-btn-mc{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/taskbar_bt.png") !important;background-size:186px 39px;outline:1px green dashed}}#sds-taskbuttons-panel li .x-btn.x-btn-icon.x-btn-click .x-btn-mc,#sds-taskbuttons-panel li .x-btn.x-btn-icon.launched.active .x-btn-mc{background:transparent no-repeat;background-image:url("../images/taskbar/taskbar_bt.png") !important;background-position:-124px 0px !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-taskbuttons-panel li .x-btn.x-btn-icon.x-btn-click .x-btn-mc,.synohdpack #sds-taskbuttons-panel li .x-btn.x-btn-icon.launched.active .x-btn-mc{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/taskbar_bt.png") !important;background-size:186px 39px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-taskbuttons-panel li .x-btn.x-btn-icon.x-btn-click .x-btn-mc,.synohdpackdebug #sds-taskbuttons-panel li .x-btn.x-btn-icon.launched.active .x-btn-mc{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/taskbar_bt.png") !important;background-size:186px 39px;outline:1px green dashed}}.sds-user-menu{min-width:140px;padding:4px 10px 4px 10px;position:absolute;top:39px;right:0px;overflow:hidden;z-index:12000;background:#fff repeat-x;background-image:url("../images/taskbar/taskbar_shadow.png");box-shadow:-2px 5px 8px rgba(0,0,0,0.5);user-select:none;-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-user-menu{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/taskbar_shadow.png");background-size:4px 4px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-user-menu{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/taskbar_shadow.png");background-size:4px 4px;outline:1px green dashed}}.sds-user-menu .x-menu{background-color:transparent !important;background-image:none !important}.sds-user-menu .x-menu .x-menu-item-text{font-size:12px;line-height:32px;padding-left:6px}.sds-user-menu .x-menu .x-menu-item-icon{top:4px}.sds-user-menu .x-menu-item{padding-top:0;padding-bottom:0}.sds-user-menu .x-menu-sep-li{height:7px}.sds-user-menu .x-menu-sep-li .x-menu-sep{margin:0px;border-bottom-color:#EBF0F5;background-color:transparent}.sds-user-menu .x-menu-list-item{padding:0px}.sds-user-menu .x-menu-item-active,.sds-user-menu .x-menu-item-active .x-menu-item{background-image:none;background-color:transparent;border-color:transparent;border:0px}.sds-user-menu .sds-user-menu-username{display:inline-block;width:136px;font-weight:bold;color:#505A64;line-height:24px;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}.sds-user-menu .sds-user-menu-options{width:24px;height:24px;background-image:url("../images/taskbar/user_menu_options.png");background-position:0 0}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-user-menu .sds-user-menu-options{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/user_menu_options.png");background-size:24px 72px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-user-menu .sds-user-menu-options{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/user_menu_options.png");background-size:24px 72px;outline:1px green dashed}}.sds-user-menu .sds-user-menu-restart{width:24px;height:24px;background-image:url("../images/taskbar/user_menu_restart.png");background-position:0 0}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-user-menu .sds-user-menu-restart{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/user_menu_restart.png");background-size:24px 72px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-user-menu .sds-user-menu-restart{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/user_menu_restart.png");background-size:24px 72px;outline:1px green dashed}}.sds-user-menu .sds-user-menu-shutdown{width:24px;height:24px;background-image:url("../images/taskbar/user_menu_shutdown.png");background-position:0 0}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-user-menu .sds-user-menu-shutdown{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/user_menu_shutdown.png");background-size:24px 72px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-user-menu .sds-user-menu-shutdown{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/user_menu_shutdown.png");background-size:24px 72px;outline:1px green dashed}}.sds-user-menu .sds-user-menu-logout{width:24px;height:24px;background-image:url("../images/taskbar/user_menu_logout.png");background-position:0 0}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-user-menu .sds-user-menu-logout{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/user_menu_logout.png");background-size:24px 72px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-user-menu .sds-user-menu-logout{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/user_menu_logout.png");background-size:24px 72px;outline:1px green dashed}}.sds-user-menu .sds-user-menu-about{width:24px;height:24px;background-image:url("../images/taskbar/user_menu_about.png");background-position:0 0}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-user-menu .sds-user-menu-about{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/user_menu_about.png");background-size:24px 72px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-user-menu .sds-user-menu-about{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/user_menu_about.png");background-size:24px 72px;outline:1px green dashed}}.sds-user-menu .sds-user-menu-options-over img,.sds-user-menu .sds-user-menu-restart-over img,.sds-user-menu .sds-user-menu-about-over img,.sds-user-menu .sds-user-menu-shutdown-over img,.sds-user-menu .sds-user-menu-logout-over img{background-position:0px -24px !important}.sds-user-menu .sds-user-menu-options-over .x-menu-item-text,.sds-user-menu .sds-user-menu-restart-over .x-menu-item-text,.sds-user-menu .sds-user-menu-about-over .x-menu-item-text,.sds-user-menu .sds-user-menu-shutdown-over .x-menu-item-text,.sds-user-menu .sds-user-menu-logout-over .x-menu-item-text{color:#78828C}.sds-user-menu .sds-user-menu-options-click img,.sds-user-menu .sds-user-menu-restart-click img,.sds-user-menu .sds-user-menu-about-click img,.sds-user-menu .sds-user-menu-shutdown-click img,.sds-user-menu .sds-user-menu-logout-click img{background-position:0px -48px !important}.sds-user-menu .sds-user-menu-options-click .x-menu-item-text,.sds-user-menu .sds-user-menu-restart-click .x-menu-item-text,.sds-user-menu .sds-user-menu-about-click .x-menu-item-text,.sds-user-menu .sds-user-menu-shutdown-click .x-menu-item-text,.sds-user-menu .sds-user-menu-logout-click .x-menu-item-text{color:#0086E5}.sds-overflow-menu{min-width:240px;position:absolute;top:39px;overflow:hidden;z-index:12000;user-select:none;-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none}.sds-overflow-menu .x-menu{background-color:transparent !important;background-image:none !important}.sds-overflow-menu .x-menu .x-menu-item-text{font-size:13px;line-height:48px;padding-left:20px}.sds-overflow-menu .x-menu .x-menu-item-text:hover{height:100%}.sds-overflow-menu .x-menu .x-menu-item-icon{top:8px;left:8px;height:32px;width:32px}.sds-overflow-menu .x-menu-item{padding-top:0;padding-bottom:0}.sds-overflow-menu .x-menu-sep-li{height:7px}.sds-overflow-menu .x-menu-sep-li .x-menu-sep{margin:0px;border-bottom-color:#EBF0F5;background-color:transparent}.sds-overflow-menu .x-menu-list{padding:0px}.sds-overflow-menu .x-menu-list-item{padding:0px}.sds-overflow-menu .x-menu-item-active,.sds-overflow-menu .x-menu-item-active .x-menu-item{background-image:none;background-color:transparent;border-color:transparent;border:0px;color:#78828C}.sds-overflow-menu .sds-overflow-items-click .x-menu-item-text{color:#0086E5}.sds-taskbutton-overflowed{visibility:hidden !important}.sds-user-menu.sds-overflow-menu .x-menu .x-menu-item .x-menu-item-icon{left:4px;top:4px}.sds-previewbox{box-shadow:0px 2px 6px rgba(0,0,0,0.5);position:absolute;top:46px;left:0px;width:240px;height:180px;z-index:13000;user-select:none;-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;-webkit-transform:translate3d(0, 0, 0)}.sds-previewbox .sds-previewbox-mc{margin:0px 10px;height:160px}.sds-previewbox .sds-previewbox-background{z-index:-1;zoom:1;position:absolute;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=85);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=85);opacity:0.85;background:#f5faff;background:#f5faff;top:0px;left:0px;right:0px;bottom:0px}.sds-previewbox .sds-previewbox-win{position:absolute}.sds-previewbox .sds-previewbox-win-mask{position:absolute;background:transparent;z-index:9999;width:100%;height:100%;top:0px;box-shadow:0px 3px 6px rgba(0,0,0,0.5)}.sds-previewbox .sds-previewbox-arrow{position:absolute;top:-18px;left:108px;width:24px;height:18px;overflow:hidden}.ext-ie8m .sds-previewbox .sds-previewbox-arrow{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=85);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=85);opacity:0.85;width:0px;height:0px;border:10px solid transparent;border-bottom-width:13px;border-bottom-color:#f5faff;border-top-width:0px}.sds-previewbox .sds-previewbox-arrow::after{background:#f5faff;background:rgba(245,250,255,0.85);content:'';position:absolute;bottom:0px;left:2px;width:14px;height:14px;-webkit-transform-origin:left bottom;-moz-transform-origin:left bottom;-ms-transform-origin:left bottom;-o-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg);box-shadow:2px 2px 6px rgba(0,0,0,0.5)}.sds-previewbox-desc{color:#28323C;font-size:13px;font-weight:bold;padding:6px 0px;text-align:center;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;white-space:nowrap}.sds-previewbox-win-transform{transform-origin:0% 0%;-webkit-transform-origin:0% 0%;-moz-transform-origin:0% 0%;-o-transform-origin:0% 0%;-ms-transform-origin:0% 0%}.sds-previewbox-transition{transition-delay:0s;transition-property:top, left, opacity;transition-duration:0.8s;-webkit-transition-delay:0s;-webkit-transition-property:top, left, opacity;-webkit-transition-duration:0.8s;-moz-transition-delay:0s;-moz-transition-property:top, left, opacity;-moz-transition-duration:0.8s;-o-transition-delay:0s;-o-transition-property:top, left, opacity;-o-transition-duration:0.8s;-ms-transition-delay:0s;-ms-transition-property:top, left, opacity;-ms-transition-duration:0.8s}.sds-tray-msg-window{background-color:white;box-shadow:0px 2px 6px rgba(0,0,0,0.5);border-radius:3px}.sds-tray-msg-window .x-tool-close{position:absolute;right:2px;top:2px;background-image:url("../images/rt_button.png");width:24px;height:24px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-tray-msg-window .x-tool-close{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/rt_button.png");background-size:24px 768px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-tray-msg-window .x-tool-close{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/rt_button.png");background-size:24px 768px;outline:1px green dashed}}.sds-tray-msg-window .x-tool-close-over{background-position:0 -24px}.sds-tray-msg-window .x-plain-tl .x-plain-header{overflow:hidden;zoom:1;padding:5px 12px 5px 12px;font-size:15px;color:#0086E5;height:17px}.sds-tray-msg-window .x-plain-body{overflow:hidden;position:relative;padding:0px 12px 10px 12px;font-size:12px;color:#505A64;word-wrap:break-word}.sds-taskbar-no-display{display:none}.sds-appview-searchfiled{top:5px;left:-10px}.sds-searchbox{position:absolute;top:39px;right:0px;overflow:hidden;z-index:12000;width:340px;background:#fff repeat-x;background-image:url("../images/taskbar/taskbar_shadow.png");user-select:none;-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;box-shadow:-2px 5px 8px rgba(0,0,0,0.5)}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-searchbox{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/taskbar_shadow.png");background-size:4px 4px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-searchbox{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/taskbar/taskbar_shadow.png");background-size:4px 4px;outline:1px green dashed}}.sds-searchbox .sds-searchbox-input-wrap{right:-10px;top:10px}.sds-searchbox .sds-searchbox-header .x-small-editor .sds-searchbox-input{width:265px;height:26px !important;line-height:24px;background-color:transparent;background-image:none;padding:0 4px 0 0;padding-left:27px;padding-right:22px;border-color:#C8D2DC}.sds-searchbox .sds-searchbox-header .x-small-editor .sds-searchbox-input:hover{border-color:#B4BEC8}.sds-searchbox .sds-searchbox-header .x-small-editor .sds-searchbox-input.x-form-focus{border-color:#0086E6}.sds-searchbox .sds-searchbox-header .x-toolbar{background-image:none;background-color:transparent;background-repeat:no-repeat;padding:0;border:none;overflow:visible}.sds-searchbox .sds-searchbox-header .x-toolbar .x-toolbar-ct{height:42px}.sds-searchbox .sds-searchbox-header .x-toolbar .sds-searchbox-input-left{background-image:url(/scripts/ext-3/ux/images/Components/icon_search.png);width:24px;height:24px;margin:2px 0px 0px 4px;background-position:0 0}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-searchbox .sds-searchbox-header .x-toolbar .sds-searchbox-input-left{background-image:url("../img/synohdpack/images/Components/icon_search.png");background-size:24px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-searchbox .sds-searchbox-header .x-toolbar .sds-searchbox-input-left{background-image:url("../img/synohdpack/images/Components/icon_search.png");background-size:24px;outline:1px green dashed}}.sds-searchbox .sds-searchbox-header .x-toolbar .sds-searchbox-input-cancel{background-image:url(/scripts/ext-3.4/ux/images/Components/icon_search_clear.png);background-position:0 -0px;left:290px;width:24px;height:24px;margin-top:3px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-searchbox .sds-searchbox-header .x-toolbar .sds-searchbox-input-cancel{background-image:url("../img/synohdpack/images/Components/icon_search_clear.png");background-size:24px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-searchbox .sds-searchbox-header .x-toolbar .sds-searchbox-input-cancel{background-image:url("../img/synohdpack/images/Components/icon_search_clear.png");background-size:24px;outline:1px green dashed}}.sds-searchbox .sds-searchbox-header .x-toolbar .sds-searchbox-input-cancel.x-btn-over{background-position:0 -24px}.sds-searchbox .sds-searchbox-header .x-toolbar .sds-searchbox-input-cancel.x-btn-click{background-position:0 -48px}.sds-searchbox .sds-searchbox-header .x-toolbar .sds-searchbox-input-cancel .x-btn-ml,.sds-searchbox .sds-searchbox-header .x-toolbar .sds-searchbox-input-cancel .x-btn-mr{display:none}.sds-searchbox .sds-searchbox-header .x-toolbar .sds-searchbox-input-cancel .x-btn-mc{background-image:none !important}.sds-searchbox .sds-searchbox-header .x-toolbar .ext-chrome .sds-searchbox-input-cancel{left:290px}.sds-searchbox .x-toolbar td{vertical-align:baseline}.sds-searchbox.sds-searchbox-init-state .sds-searchbox-header .x-toolbar-ct{height:48px}.sds-searchbox.sds-searchbox-init-state .sds-searchbox-bwrap{display:none}.sds-searchbox .sds-search-result{overflow-x:hidden;overflow-y:hidden;font-size:12px;padding:0px 0px 10px 10px}.sds-searchbox .sds-search-result .section{padding:0px 0px 0px 8px;color:#0086E5;background:transparent;font-size:15px;line-height:32px}.sds-searchbox .sds-search-result .sds-searchbox-result-splitline{height:8px}.sds-searchbox .sds-search-result .sds-searchbox-result-item{padding:4px 0 4px 8px;line-height:16px;white-space:nowrap;width:322px;cursor:pointer}.sds-searchbox .sds-search-result .sds-searchbox-result-item:hover{background:#F5FaFF}.sds-searchbox .sds-search-result .sds-searchbox-result-item:active{background:#E6F5FF}.sds-searchbox .sds-search-result .sds-searchbox-result-item .topic{padding-left:8px;font-size:11px}.sds-searchbox .sds-search-result .sds-searchbox-result-item .topic div{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap;width:168px}.sds-searchbox .sds-search-result .sds-searchbox-result-item .module{color:#96A0AA;font-size:12px}.sds-searchbox .sds-search-result .sds-searchbox-result-item .module div{width:110px;right:0px;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap;text-align:right}.sds-searchbox.sds-searchbox-init-state .sds-searchbox-input-cancel{display:none}.ext-opera .sds-searchbox .x-toolbar-left{vertical-align:middle}.ext-opera .sds-searchbox .x-toolbar-right{vertical-align:top}.sds-user-about-window.x-window-dlg .sds-user-about-desc{line-height:20px;height:120px;margin-bottom:8px}.sds-user-about-window.x-window-dlg .sds-user-about-terms-and-cond{line-height:20px;font-weight:bold;margin-bottom:24px}.syno-sds-appview{outline:none}.syno-sds-appview:after{content:"";position:absolute;height:8px;width:100%;bottom:0px;z-index:10;background-repeat:no-repeat;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0icmdiYSgwLDAsMCwwKSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0icmdiYSgwLDAsMCwwLjQpIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(0,0,0,0)), color-stop(100%, rgba(0,0,0,0.4)));background-image:-webkit-linear-gradient(top, rgba(0,0,0,0),rgba(0,0,0,0.4));background-image:-moz-linear-gradient(top, rgba(0,0,0,0),rgba(0,0,0,0.4));background-image:-o-linear-gradient(top, rgba(0,0,0,0),rgba(0,0,0,0.4));background-image:linear-gradient(top, rgba(0,0,0,0),rgba(0,0,0,0.4))}.syno-sds-appview .crossbrowser-background{position:absolute;width:inherit;height:inherit;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=70);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=70);opacity:0.7}.syno-sds-appview .syno-sds-appview-container{outline:none;padding:16px 0px 0px 0px}.syno-sds-appview .syno-sds-appview-container.hide-scroll .vscrollerbar{visibility:hidden !important}.syno-sds-appview .app-panel-title{color:#FFFFFF;height:32px;line-height:32px;padding-left:32px;font-size:13px;font-weight:bold;text-shadow:0px 1px 3px #000000;margin-bottom:8px}.syno-sds-appview .system-app-panel-title{visibility:hidden}.syno-sds-appview .search-result-app-panel-title{background-image:url(../images/desktop/icon_app_category.png);background-position:0 -96px;background-repeat:no-repeat}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-sds-appview .search-result-app-panel-title{background-image:url("../img/synohdpack/images/dsm/resources/images/desktop/icon_app_category.png");background-size:32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-sds-appview .search-result-app-panel-title{background-image:url("../img/synohdpack/images/dsm/resources/images/desktop/icon_app_category.png");background-size:32px;outline:1px green dashed}}.syno-sds-appview .sds-app-items-panel{display:inline-block}.syno-sds-appview .sds-app-items-panel.frequently-used-panel{height:136px;overflow:hidden}.syno-sds-appview .sds-appview-app-item{width:136px;height:120px;padding:16px 8px 0px 8px;float:left;cursor:pointer}.syno-sds-appview .sds-appview-app-item.new-app{background-image:url(../images/desktop/spotlight.png);background-position:8px 0px;background-repeat:no-repeat;overflow:visible}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-sds-appview .sds-appview-app-item.new-app{background-image:url("../img/synohdpack/images/dsm/resources/images/desktop/spotlight.png");background-size:136px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-sds-appview .sds-appview-app-item.new-app{background-image:url("../img/synohdpack/images/dsm/resources/images/desktop/spotlight.png");background-size:136px;outline:1px green dashed}}.syno-sds-appview .sds-appview-app-item img{opacity:1;width:72px;margin-left:32px}.syno-sds-appview .sds-appview-app-item .sds-appview-app-item-title{color:#FFFFFF;font:12px verdana, tahoma, arial, helvetica, sans-serif;text-align:center;text-shadow:0.1em 0.1em 0.1em #000000;padding-top:8px}.syno-sds-appview .ux-float-layout-ct.sds-float-layout-ct-animate .x-box-item{-webkit-transition-property:top,left;-moz-transition-property:top,left;-o-transition-property:top,left;transition-property:top,left;-webkit-transition-timing-function:ease-in;-moz-transition-timing-function:ease-in;-o-transition-timing-function:ease-in;transition-timing-function:ease-in;-webkit-transition-duration:0.3s;-moz-transition-duration:0.3s;-o-transition-duration:0.3s;transition-duration:0.3s}.syno-sds-appview .on-mouse-out .sds-app-panel,.syno-sds-appview .on-instruction .sds-app-panel{opacity:0.5}.classical.syno-sds-appview{padding-left:22px;position:absolute}.classical.syno-sds-appview .crossbrowser-background{background-color:#F5FAFF;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=100);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);opacity:1;box-shadow:0 2px 6px rgba(0,0,0,0.5)}.classical.syno-sds-appview:after{background-image:none}.classical.syno-sds-appview .sds-appview-searchfiled{top:0;left:0;margin:12px 20px 12px 16px}.classical.syno-sds-appview .syno-sds-appview-container{padding:0}.classical.syno-sds-appview .sds-app-items-panel{display:block}.classical.syno-sds-appview .sds-app-items-panel.search-result-app-panel{overflow:hidden}.classical.syno-sds-appview .sds-appview-app-item{width:136px;height:100px;padding:0}.classical.syno-sds-appview .sds-appview-app-item img{display:block;opacity:1;width:48px;margin-left:44px}.classical.syno-sds-appview .sds-appview-app-item .sds-appview-app-item-title{color:#505a64;text-shadow:none;padding-top:4px}.classical.syno-sds-appview.x-hide-offsets .sds-appview-app-item,.classical.syno-sds-appview.x-hide-offsets .syno-ux-textfilter-trigger,.classical.syno-sds-appview.x-hide-offsets .vscrollerbar.scrollgeneric{visibility:hidden !important}.sds-search-result{background-image:none;color:#505A64}.sds-search-result.x-layer{border-color:#C8D2DC;background-color:#FFFFFF;padding:4px;box-shadow:0 2px 4px rgba(0,0,0,0.5)}.sds-search-result .x-combo-list-hd{border:none}.sds-search-result .x-combo-list-hd,.sds-search-result .section{height:32px;line-height:32px;background:#FFF;padding:0 0 0 16px;color:#0086E5;font-size:15px;font-weight:normal;cursor:default}.sds-search-result .section{padding-left:8px}.sds-search-result .x-combo-list-inner{background-color:#FFF;padding-left:8px}.sds-search-result .x-combo-list-item{white-space:no-wrap;width:100%;padding:0px;height:32px;line-height:32px}.sds-search-result .x-combo-list-item,.sds-search-result .x-combo-list-item.x-combo-selected{border:none !important}.sds-search-result .x-combo-list-item img{padding:8px}.sds-search-result .x-combo-list-item .topic{padding-left:0}.sds-search-result .x-combo-selected{background:#F5FAFF}.sds-search-result .x-combo-selected:active{background:#E6F5FF}.sds-search-result .loading-indicator{margin-top:0px}.sds-window-v5 .syno-textfilter .x-form-field-wrap .syno-textfilter-text,.sds-widget-window .syno-textfilter .x-form-field-wrap .syno-textfilter-text,.ext-webkit .sds-window-v5 .syno-textfilter .x-form-field-wrap .syno-textfilter-text{font-size:12px;color:#505A64;background-image:url(/scripts/ext-3/ux/images/Components/icon_search.png);background-position:4px 0px;padding-left:30px;padding-top:0px;height:24px !important;line-height:24px !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-window-v5 .syno-textfilter .x-form-field-wrap .syno-textfilter-text,.sds-window-v5 .syno-textfilter .x-form-field-wrap .synohdpack .syno-textfilter-text,.synohdpack .sds-widget-window .syno-textfilter .x-form-field-wrap .syno-textfilter-text,.sds-widget-window .syno-textfilter .x-form-field-wrap .synohdpack .syno-textfilter-text{background-image:url("../img/synohdpack/images/Components/icon_search.png");background-size:24px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-window-v5 .syno-textfilter .x-form-field-wrap .syno-textfilter-text,.sds-window-v5 .syno-textfilter .x-form-field-wrap .synohdpackdebug .syno-textfilter-text,.synohdpackdebug .sds-widget-window .syno-textfilter .x-form-field-wrap .syno-textfilter-text,.sds-widget-window .syno-textfilter .x-form-field-wrap .synohdpackdebug .syno-textfilter-text{background-image:url("../img/synohdpack/images/Components/icon_search.png");background-size:24px;outline:1px green dashed}}.sds-window-v5 .syno-textfilter .x-form-field-wrap .syno-textfilter-text,.sds-widget-window .syno-textfilter .x-form-field-wrap .syno-textfilter-text{margin-top:1px}.ext-ie .sds-window-v5 .syno-textfilter .x-form-field-wrap .syno-textfilter-text,.ext-ie .sds-widget-window .syno-textfilter .x-form-field-wrap .syno-textfilter-text{margin-top:1px !important}.sds-window-v5 .syno-textfilter .x-form-field-wrap .syno-textfilter-text.x-form-empty-field,.sds-widget-window .syno-textfilter .x-form-field-wrap .syno-textfilter-text.x-form-empty-field{color:#96A0AA}.sds-window-v5 .syno-textfilter .x-form-field-wrap .syno-textfilter-trigger,.sds-widget-window .syno-textfilter .x-form-field-wrap .syno-textfilter-trigger{background:url(/scripts/ext-3/ux/images/Components/icon_search_clear.png) 0px 0px no-repeat;border:none;width:24px;height:24px;right:0px;margin-top:1px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-window-v5 .syno-textfilter .x-form-field-wrap .syno-textfilter-trigger,.synohdpack .sds-widget-window .syno-textfilter .x-form-field-wrap .syno-textfilter-trigger{background-image:url("../img/synohdpack/images/Components/icon_search_clear.png");background-size:24px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-window-v5 .syno-textfilter .x-form-field-wrap .syno-textfilter-trigger,.synohdpackdebug .sds-widget-window .syno-textfilter .x-form-field-wrap .syno-textfilter-trigger{background-image:url("../img/synohdpack/images/Components/icon_search_clear.png");background-size:24px;outline:1px green dashed}}.sds-window-v5 .syno-textfilter .x-form-field-wrap .syno-textfilter-trigger.x-form-trigger-over,.sds-widget-window .syno-textfilter .x-form-field-wrap .syno-textfilter-trigger.x-form-trigger-over{background-position:0 -24px}.sds-window-v5 .syno-textfilter .x-form-field-wrap .syno-textfilter-trigger:active,.sds-widget-window .syno-textfilter .x-form-field-wrap .syno-textfilter-trigger:active{background-position:0 -48px}.sds-desktop-view-animate{position:absolute;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=40);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);opacity:0.4;-webkit-transition-property:opacity;-moz-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity;-webkit-transition-timing-function:ease-in;-moz-transition-timing-function:ease-in;-o-transition-timing-function:ease-in;transition-timing-function:ease-in;-webkit-transition-duration:0.15s;-moz-transition-duration:0.15s;-o-transition-duration:0.15s;transition-duration:0.15s}.sds-desktop-view-animate .scale-item{-o-transform:scale(0.95);-moz-transform:scale(0.95);-ms-transform:scale(0.95);-webkit-transform:scale(0.95);transform:scale(0.95);-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition-property:top,left,opacity,-webkit-transform;-moz-transition-property:top,left,opacity,-moz-transform;-o-transition-property:top,left,opacity,-o-transform;transition-property:top,left,opacity,transform;-webkit-transition-timing-function:ease-in;-moz-transition-timing-function:ease-in;-o-transition-timing-function:ease-in;transition-timing-function:ease-in;-webkit-transition-duration:0.2s;-moz-transition-duration:0.2s;-o-transition-duration:0.2s;transition-duration:0.2s}.sds-desktop-view-animate.sds-widgetview .scale-item{-webkit-transition-property:top,left,opacity,-webkit-transform;-moz-transition-property:top,left,opacity,-moz-transform;-o-transition-property:top,left,opacity,-o-transform;transition-property:top,left,opacity,transform;-webkit-transition-timing-function:ease-in;-moz-transition-timing-function:ease-in;-o-transition-timing-function:ease-in;transition-timing-function:ease-in;-webkit-transition-duration:0.2s;-moz-transition-duration:0.2s;-o-transition-duration:0.2s;transition-duration:0.2s}.sds-desktop-view-animate.sds-desktop-view-show{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=100);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);opacity:1}.sds-desktop-view-animate.sds-desktop-view-show .scale-item{-o-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1)}.sds-desktop-view-animate.no-transition{-webkit-transition-property:none;-moz-transition-property:none;-o-transition-property:none;transition-property:none;-webkit-transition-timing-function:ease-in;-moz-transition-timing-function:ease-in;-o-transition-timing-function:ease-in;transition-timing-function:ease-in;-webkit-transition-duration:0s;-moz-transition-duration:0s;-o-transition-duration:0s;transition-duration:0s}.sds-desktop-view-animate.no-transition .scale-item{-webkit-transition-property:none;-moz-transition-property:none;-o-transition-property:none;transition-property:none;-webkit-transition-timing-function:ease-in;-moz-transition-timing-function:ease-in;-o-transition-timing-function:ease-in;transition-timing-function:ease-in;-webkit-transition-duration:0s;-moz-transition-duration:0s;-o-transition-duration:0s;transition-duration:0s}.bounce-effect-fast{-webkit-animation:bounce 400ms ease-out;-moz-animation:bounce 400ms ease-out;-o-animation:bounce 400ms ease-out;animation:bounce 400ms ease-out}.sds-app-widget-instruction{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=0);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=0);opacity:0;position:absolute;z-index:3;top:0}.sds-app-widget-instruction.show{-webkit-transition-property:opacity, filter;-moz-transition-property:opacity, filter;-o-transition-property:opacity, filter;transition-property:opacity, filter;-webkit-transition-timing-function:ease-in;-moz-transition-timing-function:ease-in;-o-transition-timing-function:ease-in;transition-timing-function:ease-in;-webkit-transition-duration:0.2s;-moz-transition-duration:0.2s;-o-transition-duration:0.2s;transition-duration:0.2s;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=100);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);opacity:1}.sds-app-widget-instruction .message-arrow{position:absolute;overflow:hidden;width:22px;height:35px}.ext-ie8m .sds-app-widget-instruction .message-arrow{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=75);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=75);opacity:0.75;left:-12px;width:0px;height:0px;border:12px solid transparent;border-right-color:#fff;border-left-width:0px}.sds-app-widget-instruction .message-arrow::after{background:#282d32;background:#282d32;content:'';position:absolute;left:6px;width:16px;height:16px;-webkit-transform-origin:right top;-moz-transform-origin:right top;-ms-transform-origin:right top;-o-transform-origin:right top;transform-origin:right top;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg);box-shadow:0 2px 4px rgba(0,0,0,0.5);border-top:solid 1px white;border-left:solid 1px white}.sds-app-widget-instruction .message-container{visibility:visible;position:absolute;max-width:218px;height:auto;font-size:16px;line-height:22px;color:#FFFFFF;padding:10px 16px;box-shadow:0 1px 4px rgba(0,0,0,0.25);border:solid 1px;border-color:#fff;border-color:rgba(255,255,255,0.75);background:#000;background:rgba(0,0,0,0.75)}body,.ext-el-mask-msg div,.x-tab-strip span.x-tab-strip-text,.x-form-field,.x-form-grow-sizer,.x-form-item,.x-form-invalid-msg,.x-fieldset legend,.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label,.x-grid-group-hd div.x-grid-group-title,.x-grid-empty,.x-tip .x-tip-mc,.x-tip .x-tip-header-text,.x-tip .x-tip-body,.x-window-mc,.x-window-dlg .ext-mb-textarea,.x-small-editor .x-form-field,.ext-webkit .x-small-editor .x-form-field,.x-grid3-hd-row td,.x-grid3-row td,.x-grid3-summary-row td,.x-grid3-topbar,.x-grid3-bottombar,.x-tree-node,.x-date-inner th,.x-date-inner a,.x-date-mp td,.x-date-mp-btns button,.x-panel-fbar td,.x-panel-fbar span,.x-panel-fbar input,.x-panel-fbar div,.x-panel-fbar select,.x-panel-fbar label,.x-list-header-inner div em,.x-list-body dt em,.x-btn,.x-btn button,.x-dd-drag-ghost,.x-date-middle,.x-date-left,.x-date-right,.x-menu-list-item,.x-combo-list,.x-combo-list-hd,.x-combo-list-small,.x-panel-tl .x-panel-header,.x-panel .x-panel-header,.x-panel-mc,.x-window-tl .x-window-header{font-family:verdana,tahoma,arial,helvetica,sans-serif}.syno-ux-modulelist .x-tree-root-node{width:212px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .x-tree-node-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_general.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .x-tree-node-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_general.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-CMS{background-image:url("../images/module_list_icon/c_icon_CMS.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-CMS{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_CMS.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-CMS{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_CMS.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-backup{background-image:url("../images/module_list_icon/c_icon_backup.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-backup{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_backup.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-backup{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_backup.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-business{background-image:url("../images/module_list_icon/c_icon_business.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-business{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_business.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-business{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_business.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-contact{background-image:url("../images/module_list_icon/c_icon_contact.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-contact{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_contact.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-contact{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_contact.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-directory-service{background-image:url("../images/module_list_icon/c_icon_directory_service.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-directory-service{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_directory_service.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-directory-service{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_directory_service.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-dsm-apps{background-image:url("../images/module_list_icon/c_icon_dsm_apps.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-dsm-apps{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_dsm_apps.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-dsm-apps{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_dsm_apps.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-expansion{background-image:url("../images/module_list_icon/c_icon_expansion.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-expansion{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_expansion.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-expansion{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_expansion.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-external-devices{background-image:url("../images/module_list_icon/c_icon_external_devices.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-external-devices{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_external_devices.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-external-devices{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_external_devices.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-file-services{background-image:url("../images/module_list_icon/c_icon_file_services.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-file-services{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_file_services.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-file-services{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_file_services.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-groups{background-image:url("../images/module_list_icon/c_icon_groups.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-groups{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_groups.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-groups{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_groups.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-hardware-and-power{background-image:url("../images/module_list_icon/c_icon_hardware_and_power.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-hardware-and-power{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_hardware_and_power.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-hardware-and-power{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_hardware_and_power.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-purchases{background-image:url("../images/module_list_icon/c_icon_purchases.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-purchases{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_purchases.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-purchases{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_purchases.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-syslog{background-image:url("../images/module_list_icon/c_icon_syslog.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-syslog{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_syslog.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-syslog{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_syslog.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-hdd-management{background-image:url("../images/module_list_icon/c_icon_hdd_management.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-hdd-management{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_hdd_management.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-hdd-management{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_hdd_management.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-hot-spare{background-image:url("../images/module_list_icon/c_icon_hot_spare.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-hot-spare{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_hot_spare.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-hot-spare{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_hot_spare.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-info-center{background-image:url("../images/module_list_icon/c_icon_info_center.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-info-center{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_info_center.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-info-center{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_info_center.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-installed{background-image:url("../images/module_list_icon/c_icon_installed.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-installed{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_installed.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-installed{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_installed.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-iscsi-lun{background-image:url("../images/module_list_icon/c_icon_iscsi_lun.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-iscsi-lun{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_iscsi_lun.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-iscsi-lun{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_iscsi_lun.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-iscsi-target{background-image:url("../images/module_list_icon/c_icon_iscsi_target.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-iscsi-target{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_iscsi_target.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-iscsi-target{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_iscsi_target.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-login-style{background-image:url("../images/module_list_icon/c_icon_login_style.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-login-style{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_login_style.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-login-style{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_login_style.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-media-library{background-image:url("../images/module_list_icon/c_icon_media_library.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-media-library{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_media_library.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-media-library{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_media_library.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-network{background-image:url("../images/module_list_icon/c_icon_network.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-network{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_network.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-network{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_network.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-networkmap{background-image:url("../images/module_list_icon/c_icon_networkmap.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-networkmap{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_networkmap.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-networkmap{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_networkmap.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-notifications{background-image:url("../images/module_list_icon/c_icon_notifications.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-notifications{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_notifications.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-notifications{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_notifications.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-overview{background-image:url("../images/module_list_icon/c_icon_overview.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-overview{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_overview.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-overview{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_overview.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-portal{background-image:url("../images/module_list_icon/c_icon_portal.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-portal{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_portal.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-portal{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_portal.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-privilege{background-image:url("../images/module_list_icon/c_icon_privilege.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-privilege{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_privilege.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-privilege{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_privilege.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-public-access{background-image:url("../images/module_list_icon/c_icon_public_access.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-public-access{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_public_access.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-public-access{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_public_access.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-quickconnect{background-image:url("../images/module_list_icon/c_icon_quickconnect.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-quickconnect{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_quickconnect.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-quickconnect{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_quickconnect.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-raid-group{background-image:url("../images/module_list_icon/c_icon_raid_group.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-raid-group{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_raid_group.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-raid-group{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_raid_group.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-recommend{background-image:url("../images/module_list_icon/c_icon_recommend.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-recommend{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_recommend.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-recommend{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_recommend.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-region{background-image:url("../images/module_list_icon/c_icon_region.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-region{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_region.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-region{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_region.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-security{background-image:url("../images/module_list_icon/c_icon_security.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-security{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_security.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-security{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_security.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-shared-folders{background-image:url("../images/module_list_icon/c_icon_shared_folders.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-shared-folders{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_shared_folders.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-shared-folders{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_shared_folders.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-ssd-cache{background-image:url("../images/module_list_icon/c_icon_ssd_cache.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-ssd-cache{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_ssd_cache.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-ssd-cache{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_ssd_cache.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-task-scheduler{background-image:url("../images/module_list_icon/c_icon_task_scheduler.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-task-scheduler{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_task_scheduler.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-task-scheduler{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_task_scheduler.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-terminal-and-SNMP{background-image:url("../images/module_list_icon/c_icon_terminal_and_SNMP.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-terminal-and-SNMP{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_terminal_and_SNMP.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-terminal-and-SNMP{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_terminal_and_SNMP.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-update-and-reset{background-image:url("../images/module_list_icon/c_icon_update_and_reset.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-update-and-reset{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_update_and_reset.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-update-and-reset{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_update_and_reset.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-users{background-image:url("../images/module_list_icon/c_icon_users.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-users{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_users.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-users{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_users.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-utilities{background-image:url("../images/module_list_icon/c_icon_utilities.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-utilities{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_utilities.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-utilities{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_utilities.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-volume{background-image:url("../images/module_list_icon/c_icon_volume.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-volume{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_volume.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-volume{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_volume.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-web-server{background-image:url("../images/module_list_icon/c_icon_web_server.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-web-server{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_web_server.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-web-server{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_web_server.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-wireless{background-image:url("../images/module_list_icon/c_icon_wireless.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-wireless{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_wireless.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-wireless{background-image:url("../img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_wireless.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-performance{background-image:url("../images/module_list_icon/c_icon_performance.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-performance{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_performance.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-performance{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_performance.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-process{background-image:url("../images/module_list_icon/c_icon_process.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-process{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_process.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-process{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_process.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-connect{background-image:url("../images/module_list_icon/c_icon_connect.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-connect{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_connect.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-connect{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_connect.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-speed{background-image:url("../images/module_list_icon/c_icon_speed.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-speed{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_speed.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-speed{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_speed.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf .icon-community{background-image:url("../images/module_list_icon/c_icon_community.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .icon-community{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_community.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .icon-community{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/module_list_icon/c_icon_community.png");background-size:24px 96px;outline:1px green dashed}}.x-tip{box-shadow:0 1px 4px rgba(0,0,0,0.25);border:solid 1px;border-color:#fff;border-color:rgba(255,255,255,0.75);background:#000;background:rgba(0,0,0,0.75)}.x-tip .x-tip-ml,.x-tip .x-tip-mr,.x-tip .x-tip-mc,.x-tip .x-tip-tl,.x-tip .x-tip-tr,.x-tip .x-tip-tc,.x-tip .x-tip-bl,.x-tip .x-tip-br,.x-tip .x-tip-bc{padding:0px;background-image:none;background-color:transparent}.x-tip .x-tip-bwrap{padding:3px 10px}.x-tip .x-tip-body,.x-tip .x-tip-body span,.x-tip .x-tip-body div{font-size:12px !important;color:#FFFFFF !important}.sds-wizard-banner .x-panel-body{background-color:transparent}.ext-ie7 .sds-window-v5 .x-window-footer.sds-wizard-footer-welcome .x-panel-fbar.x-toolbar-layout-ct,.ext-ie7 .sds-widget-window .x-window-footer.sds-wizard-footer-welcome .x-panel-fbar.x-toolbar-layout-ct,.ext-ie7 .sds-window-v5 .x-window-footer.sds-wizard-footer .x-panel-fbar.x-toolbar-layout-ct,.ext-ie7 .sds-widget-window .x-window-footer.sds-wizard-footer .x-panel-fbar.x-toolbar-layout-ct,.ext-ie8 .sds-window-v5 .x-window-footer.sds-wizard-footer-welcome .x-panel-fbar.x-toolbar-layout-ct,.ext-ie8 .sds-widget-window .x-window-footer.sds-wizard-footer-welcome .x-panel-fbar.x-toolbar-layout-ct,.ext-ie8 .sds-window-v5 .x-window-footer.sds-wizard-footer .x-panel-fbar.x-toolbar-layout-ct,.ext-ie8 .sds-widget-window .x-window-footer.sds-wizard-footer .x-panel-fbar.x-toolbar-layout-ct,.ext-ie9 .sds-window-v5 .x-window-footer.sds-wizard-footer-welcome .x-panel-fbar.x-toolbar-layout-ct,.ext-ie9 .sds-widget-window .x-window-footer.sds-wizard-footer-welcome .x-panel-fbar.x-toolbar-layout-ct,.ext-ie9 .sds-window-v5 .x-window-footer.sds-wizard-footer .x-panel-fbar.x-toolbar-layout-ct,.ext-ie9 .sds-widget-window .x-window-footer.sds-wizard-footer .x-panel-fbar.x-toolbar-layout-ct{width:auto !important}.sds-window-v5 .sds-wizard-banner-wrap,.sds-widget-window .sds-wizard-banner-wrap{background-image:url("../images/wizard_bkg_h.png");background-repeat:no-repeat;background-position:top right;background-color:#008def;height:112px !important;display:table}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-window-v5 .sds-wizard-banner-wrap,.synohdpack .sds-widget-window .sds-wizard-banner-wrap{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/wizard_bkg_h.png");background-size:414px 112px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-window-v5 .sds-wizard-banner-wrap,.synohdpackdebug .sds-widget-window .sds-wizard-banner-wrap{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/wizard_bkg_h.png");background-size:414px 112px;outline:1px green dashed}}.sds-window-v5 .x-panel-body.sds-wizard-banner,.sds-widget-window .x-panel-body.sds-wizard-banner{background-image:none;background-color:transparent;border-bottom:0px;display:table-cell;vertical-align:middle}.sds-window-v5 .x-window-footer.sds-wizard-footer-welcome .x-panel-fbar.x-toolbar-layout-ct,.sds-widget-window .x-window-footer.sds-wizard-footer-welcome .x-panel-fbar.x-toolbar-layout-ct,.sds-window-v5 .x-window-footer.sds-wizard-footer .x-panel-fbar.x-toolbar-layout-ct,.sds-widget-window .x-window-footer.sds-wizard-footer .x-panel-fbar.x-toolbar-layout-ct{padding-right:20px;padding-left:20px;background-image:none}.sds-window-v5 .x-window-footer.sds-wizard-footer-welcome .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct,.sds-widget-window .x-window-footer.sds-wizard-footer-welcome .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct,.sds-window-v5 .x-window-footer.sds-wizard-footer .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct,.sds-widget-window .x-window-footer.sds-wizard-footer .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct{background-image:url("../images/shadow_footbar.png");background-repeat:repeat-x;background-color:transparent;border:0px;padding-top:4px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-window-v5 .x-window-footer.sds-wizard-footer-welcome .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct,.synohdpack .sds-widget-window .x-window-footer.sds-wizard-footer-welcome .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct,.synohdpack .sds-window-v5 .x-window-footer.sds-wizard-footer .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct,.synohdpack .sds-widget-window .x-window-footer.sds-wizard-footer .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/shadow_footbar.png");background-size:8px 4px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-window-v5 .x-window-footer.sds-wizard-footer-welcome .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct,.synohdpackdebug .sds-widget-window .x-window-footer.sds-wizard-footer-welcome .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct,.synohdpackdebug .sds-window-v5 .x-window-footer.sds-wizard-footer .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct,.synohdpackdebug .sds-widget-window .x-window-footer.sds-wizard-footer .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/shadow_footbar.png");background-size:8px 4px;outline:1px green dashed}}.sds-window-v5 .x-window-footer.sds-wizard-footer-welcome .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct .x-toolbar-left,.sds-widget-window .x-window-footer.sds-wizard-footer-welcome .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct .x-toolbar-left,.sds-window-v5 .x-window-footer.sds-wizard-footer .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct .x-toolbar-left,.sds-widget-window .x-window-footer.sds-wizard-footer .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct .x-toolbar-left{padding:0px 0px 0px 10px}.sds-window-v5 .x-window-footer.sds-wizard-footer-welcome .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct .x-toolbar-cell,.sds-widget-window .x-window-footer.sds-wizard-footer-welcome .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct .x-toolbar-cell,.sds-window-v5 .x-window-footer.sds-wizard-footer .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct .x-toolbar-cell,.sds-widget-window .x-window-footer.sds-wizard-footer .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct .x-toolbar-cell{padding:0}.sds-window-v5 .x-window-footer.sds-wizard-footer-welcome .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct .x-toolbar-cell .syno-ux-button,.sds-widget-window .x-window-footer.sds-wizard-footer-welcome .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct .x-toolbar-cell .syno-ux-button,.sds-window-v5 .x-window-footer.sds-wizard-footer .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct .x-toolbar-cell .syno-ux-button,.sds-widget-window .x-window-footer.sds-wizard-footer .x-panel-fbar.x-toolbar-layout-ct .x-toolbar-ct .x-toolbar-cell .syno-ux-button{margin:8px 10px 8px 0px}.sds-window-v5 .x-window-footer.sds-wizard-footer-welcome,.sds-widget-window .x-window-footer.sds-wizard-footer-welcome{background-image:url("../images/dsmv5_wizard_bkg_v_01.png");background-position:bottom left;background-repeat:no-repeat}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-window-v5 .x-window-footer.sds-wizard-footer-welcome,.synohdpack .sds-widget-window .x-window-footer.sds-wizard-footer-welcome{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/dsmv5_wizard_bkg_v_01.png");background-size:140px 48px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-window-v5 .x-window-footer.sds-wizard-footer-welcome,.synohdpackdebug .sds-widget-window .x-window-footer.sds-wizard-footer-welcome{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/dsmv5_wizard_bkg_v_01.png");background-size:140px 48px;outline:1px green dashed}}.sds-window-v5 .x-window-footer.sds-wizard-footer-welcome .x-toolbar-layout-ct,.sds-widget-window .x-window-footer.sds-wizard-footer-welcome .x-toolbar-layout-ct{margin-left:140px}.sds-window-v5 .sds-wizard-banner .wizard-headline,.sds-widget-window .sds-wizard-banner .wizard-headline{font-size:18px;line-height:24px;font-weight:bold;color:#FFFFFF;overflow:hidden;padding-top:0px}.sds-window-v5 .sds-wizard-banner .wizard-description,.sds-widget-window .sds-wizard-banner .wizard-description{font-size:14px;line-height:18px;color:#FFFFFF;overflow:hidden}.sds-window-v5 .sds-wizard-step .sds-wizard-step-bwrap,.sds-widget-window .sds-wizard-step .sds-wizard-step-bwrap{padding:12px 20px 8px 20px}.sds-window-v5 .sds-wizard-step .welcome-headline,.sds-widget-window .sds-wizard-step .welcome-headline{font-size:15px;font-weight:bold;color:#505a64;padding:12px 20px 12px 20px;border-bottom:0px}.sds-window-v5 .sds-wizard-step .welcome-text,.sds-widget-window .sds-wizard-step .welcome-text{color:#505a64;font-size:13px;padding-right:20px;padding-left:20px}.sds-window-v5 .sds-wizard-step .welcome-image,.sds-widget-window .sds-wizard-step .welcome-image{background-image:url("../images/dsmv5_wizard_bkg_v_02.png") !important;background-position:bottom left;background-repeat:no-repeat}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-window-v5 .sds-wizard-step .welcome-image,.synohdpack .sds-widget-window .sds-wizard-step .welcome-image{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/dsmv5_wizard_bkg_v_02.png") !important;background-size:140px 366px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-window-v5 .sds-wizard-step .welcome-image,.synohdpackdebug .sds-widget-window .sds-wizard-step .welcome-image{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/dsmv5_wizard_bkg_v_02.png") !important;background-size:140px 366px;outline:1px green dashed}}.sds-window-v5 .sds-wizard-step .welcome-image-text,.sds-widget-window .sds-wizard-step .welcome-image-text{position:relative;text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;left:17px;font-size:18px;font-weight:bold;line-height:24px;color:#FFFFFF;background-color:transparent;-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg);-webkit-transform-origin:left bottom;-moz-transform-origin:left bottom;-ms-transform-origin:left bottom;-o-transform-origin:left bottom;transform-origin:left bottom;filter:progid:DXImageTransform.Microsoft.Matrix(M11=0.00000000, M12=-1.00000000, M21=1.00000000, M22=0.00000000, SizingMethod='auto expand');-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(M11=0, M12=-1, M21=1, M22=0, SizingMethod='auto expand')"}.sds-wizard-banner{padding-left:20px;padding-right:20px;background:url(../images/wizard-banner.png) repeat top right;background-color:#FAFAFA;border-top:0px;border-right:0px;border-left:0px;border-bottom:1px solid #ddd}.sds-wizard-banner .wizard-headline{font-size:12px;font-weight:bold;color:#222;padding-top:10px}.sds-wizard-banner .wizard-description{font-size:11px}.sds-wizard-step .welcome-headline{font-size:12px;font-weight:bold;color:#222;padding:10px;padding-left:30px;border-bottom:1px solid #ddd}.sds-wizard-step .welcome-image{background:url(../images/wizard_welcome.png) left bottom no-repeat !important}.sds-wizard-step .welcome-text{font-size:12px;padding:10px;padding-left:30px}.sds-wizard-step .welcome-text li{list-style-image:none;list-style-position:inside;list-style-type:square;padding-top:5px}.sds-wizard-step .x-status-loading{background-image:url("../images/components/status_loading.gif");background-repeat:no-repeat;background-position:center center}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-wizard-step .x-status-loading{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/components/status_loading.gif");background-size:24px 24px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-wizard-step .x-status-loading{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/components/status_loading.gif");background-size:24px 24px;outline:1px green dashed}}.sds-wizard-step .x-status-success{background-image:url("../images/components/status_success.png");background-repeat:no-repeat;background-position:center center}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-wizard-step .x-status-success{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/components/status_success.png");background-size:24px 24px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-wizard-step .x-status-success{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/components/status_success.png");background-size:24px 24px;outline:1px green dashed}}.sds-wizard-step .x-status-fail{background-image:url("../images/components/status_fail.png");background-repeat:no-repeat;background-position:center center}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-wizard-step .x-status-fail{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/components/status_fail.png");background-size:24px 24px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-wizard-step .x-status-fail{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/components/status_fail.png");background-size:24px 24px;outline:1px green dashed}}.sds-wizard-step .x-status-warning{background-image:url("../images/components/icon_error.png");background-size:100% 100%;background-repeat:no-repeat;background-position:center center}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-wizard-step .x-status-warning{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/components/icon_error.png");background-size:24px 24px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-wizard-step .x-status-warning{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/components/icon_error.png");background-size:24px 24px;outline:1px green dashed}}.syno-sds-image-selector input.image-selector-upload-file{width:1px;height:1px}.ext-firefox3 .image-selector-upload-form form,.ext-ie .syno-sds-image-selector .image-selector-upload-form form{width:140px}.ext-firefox3 input.image-selector-upload-file,.ext-ie .syno-sds-image-selector input.image-selector-upload-file{opacity:0 !important;filter:alpha(opacity=0) !important;width:120px;height:20px;font-size:30px;cursor:pointer;margin-left:10px}.syno-sds-image-selector label.image-selector-fake-upload-button{position:absolute;left:10px;color:blue;width:120px;text-align:center}.syno-sds-image-selector table.x-btn-over button{text-decoration:underline}.syno-sds-image-selector label{color:#505A64}.syno-sds-image-selector .tree_myimage .x-tree-ec-icon.x-tree-elbow,.syno-sds-image-selector .tree_myimage .x-tree-ec-icon.x-tree-elbow-end{display:none}.syno-sds-image-selector .tree_myimage .x-tree-node-icon{margin:6px 8px 0 8px;height:16px}.syno-sds-image-selector .tree_myimage .icon_my_image{background-position:0 0;background-repeat:no-repeat;background-image:url("../images/components/icon_image_selector.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-sds-image-selector .tree_myimage .icon_my_image{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/components/icon_image_selector.png");background-size:16px 32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-sds-image-selector .tree_myimage .icon_my_image{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/components/icon_image_selector.png");background-size:16px 32px;outline:1px green dashed}}.syno-sds-image-selector .tree_myimage .icon_default_image{background-position:0 -16px;background-repeat:no-repeat;background-image:url("../images/components/icon_image_selector.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-sds-image-selector .tree_myimage .icon_default_image{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/components/icon_image_selector.png");background-size:16px 32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-sds-image-selector .tree_myimage .icon_default_image{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/components/icon_image_selector.png");background-size:16px 32px;outline:1px green dashed}}.syno-sds-image-selector .tree_filestation .x-tree-node-icon{display:none}.syno-sds-image-selector .x-layout-split{background-position:right 0;background-repeat:repeat-y;background-image:url("../../../scripts/ext-3.4/ux/images/Components/shadow_category.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-sds-image-selector .x-layout-split{background-image:url("../img/synohdpack/images/Components/shadow_category.png");background-size:4px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-sds-image-selector .x-layout-split{background-image:url("../img/synohdpack/images/Components/shadow_category.png");background-size:4px;outline:1px green dashed}}.syno-sds-image-selector .image-selector-upload-form .x-form-item{margin-bottom:0}.syno-sds-image-selector div.thumb-wrap{margin-bottom:4px;margin-right:8px;float:left;height:166px}.syno-sds-image-selector .x-view-selected .thumb{background:#E6F5FF;border:1px solid #A6DAFF}.syno-sds-image-selector .thumb{padding:8px 8px 4px 8px;height:150px;width:120px;border:1px solid;border-color:#fff;border-color:rgba(255,255,255,0);position:relative;display:table-cell;vertical-align:bottom}.syno-sds-image-selector .thumb img{box-shadow:0 1px 3px rgba(0,0,0,0.5);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.5);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.5);max-height:120px;max-width:120px;width:auto;height:auto}.syno-sds-image-selector .thumb .thumb-loading{background-repeat:no-repeat;background-position:center center;background-color:transparent;background-image:url("../../modules/PhotoViewer/images/loading.gif")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-sds-image-selector .thumb .thumb-loading{background-image:url("../img/synohdpack/images/dsm/resources/css/../../modules/PhotoViewer/images/loading.gif");background-size:16px 16px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-sds-image-selector .thumb .thumb-loading{background-image:url("../img/synohdpack/images/dsm/resources/css/../../modules/PhotoViewer/images/loading.gif");background-size:16px 16px;outline:1px green dashed}}.syno-sds-image-selector .thumb .thumb-hover{height:120px;width:120px;display:table-cell;text-align:center;vertical-align:bottom}.syno-sds-image-selector .thumb:hover{background-color:#E6F5FF}.syno-sds-image-selector .thumb span{display:block;overflow:hidden;text-align:center;text-overflow:ellipsis;white-space:nowrap;height:24px;margin-top:4px;line-height:24px;font-size:12px;max-width:120px}.sds-notify-badge-num{background-image:url("../images/dsm5_notification_num.png");width:19px;height:14px;overflow:hidden;cursor:pointer;pointer-events:none}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-notify-badge-num{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/dsm5_notification_num.png");background-size:19px 1400px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-notify-badge-num{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/dsm5_notification_num.png");background-size:19px 1400px;outline:1px green dashed}}.sds-application-notify-badge-num{background-image:url("../images/dsm5_badge_num.png");width:34px;height:24px;overflow:hidden;z-index:3}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-application-notify-badge-num{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/dsm5_badge_num.png");background-size:34px 2400px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-application-notify-badge-num{background-image:url("../img/synohdpack/images/dsm/resources/css/../images/dsm5_badge_num.png");background-size:34px 2400px;outline:1px green dashed}}.sds-notify-badge-num.badge-fix-position{top:15px !important;left:14px !important}.ext-ie9 .sds-notify-badge-num.badge-fix-position,.ext-ie10 .sds-notify-badge-num.badge-fix-position,.ext-ie11 .sds-notify-badge-num.badge-fix-position{top:7px !important;left:6px !important}.bounce-effect{-webkit-animation:bounce 800ms ease-out;-moz-animation:bounce 800ms ease-out;-o-animation:bounce 800ms ease-out;animation:bounce 800ms ease-out}@-webkit-keyframes bounce{0%,5%{-webkit-transform:translateY(-100%);-moz-transform:translateY(-100%);-ms-transform:translateY(-100%);-o-transform:translateY(-100%);transform:translateY(-100%);opacity:0}15%{-webkit-transform:translateY(-100%);-moz-transform:translateY(-100%);-ms-transform:translateY(-100%);-o-transform:translateY(-100%);transform:translateY(-100%)}30%{-webkit-transform:translateY(-80%);-moz-transform:translateY(-80%);-ms-transform:translateY(-80%);-o-transform:translateY(-80%);transform:translateY(-80%)}40%,80%,100%{-webkit-transform:translateY(0%);-moz-transform:translateY(0%);-ms-transform:translateY(0%);-o-transform:translateY(0%);transform:translateY(0%)}60%{-webkit-transform:translateY(-30%);-moz-transform:translateY(-30%);-ms-transform:translateY(-30%);-o-transform:translateY(-30%);transform:translateY(-30%)}90%{-webkit-transform:translateY(-10%);-moz-transform:translateY(-10%);-ms-transform:translateY(-10%);-o-transform:translateY(-10%);transform:translateY(-10%)}100%{opacity:1}}@-o-keyframes bounce{0%,5%{-webkit-transform:translateY(-100%);-moz-transform:translateY(-100%);-ms-transform:translateY(-100%);-o-transform:translateY(-100%);transform:translateY(-100%);opacity:0}15%{-webkit-transform:translateY(-100%);-moz-transform:translateY(-100%);-ms-transform:translateY(-100%);-o-transform:translateY(-100%);transform:translateY(-100%)}30%{-webkit-transform:translateY(-80%);-moz-transform:translateY(-80%);-ms-transform:translateY(-80%);-o-transform:translateY(-80%);transform:translateY(-80%)}40%,80%,100%{-webkit-transform:translateY(0%);-moz-transform:translateY(0%);-ms-transform:translateY(0%);-o-transform:translateY(0%);transform:translateY(0%)}60%{-webkit-transform:translateY(-30%);-moz-transform:translateY(-30%);-ms-transform:translateY(-30%);-o-transform:translateY(-30%);transform:translateY(-30%)}90%{-webkit-transform:translateY(-10%);-moz-transform:translateY(-10%);-ms-transform:translateY(-10%);-o-transform:translateY(-10%);transform:translateY(-10%)}100%{opacity:1}}@-moz-keyframes bounce{0%,5%{-webkit-transform:translateY(-100%);-moz-transform:translateY(-100%);-ms-transform:translateY(-100%);-o-transform:translateY(-100%);transform:translateY(-100%);opacity:0}15%{-webkit-transform:translateY(-100%);-moz-transform:translateY(-100%);-ms-transform:translateY(-100%);-o-transform:translateY(-100%);transform:translateY(-100%)}30%{-webkit-transform:translateY(-80%);-moz-transform:translateY(-80%);-ms-transform:translateY(-80%);-o-transform:translateY(-80%);transform:translateY(-80%)}40%,80%,100%{-webkit-transform:translateY(0%);-moz-transform:translateY(0%);-ms-transform:translateY(0%);-o-transform:translateY(0%);transform:translateY(0%)}60%{-webkit-transform:translateY(-30%);-moz-transform:translateY(-30%);-ms-transform:translateY(-30%);-o-transform:translateY(-30%);transform:translateY(-30%)}90%{-webkit-transform:translateY(-10%);-moz-transform:translateY(-10%);-ms-transform:translateY(-10%);-o-transform:translateY(-10%);transform:translateY(-10%)}100%{opacity:1}}@keyframes bounce{0%,5%{-webkit-transform:translateY(-100%);-moz-transform:translateY(-100%);-ms-transform:translateY(-100%);-o-transform:translateY(-100%);transform:translateY(-100%);opacity:0}15%{-webkit-transform:translateY(-100%);-moz-transform:translateY(-100%);-ms-transform:translateY(-100%);-o-transform:translateY(-100%);transform:translateY(-100%)}30%{-webkit-transform:translateY(-80%);-moz-transform:translateY(-80%);-ms-transform:translateY(-80%);-o-transform:translateY(-80%);transform:translateY(-80%)}40%,80%,100%{-webkit-transform:translateY(0%);-moz-transform:translateY(0%);-ms-transform:translateY(0%);-o-transform:translateY(0%);transform:translateY(0%)}60%{-webkit-transform:translateY(-30%);-moz-transform:translateY(-30%);-ms-transform:translateY(-30%);-o-transform:translateY(-30%);transform:translateY(-30%)}90%{-webkit-transform:translateY(-10%);-moz-transform:translateY(-10%);-ms-transform:translateY(-10%);-o-transform:translateY(-10%);transform:translateY(-10%)}100%{opacity:1}}#sds-weather-info{position:absolute;width:280px;height:330px;padding-left:20px;padding-top:8px;color:#FFFFFF;text-shadow:0px 1px 2px rgba(0,0,0,0.8)}#sds-weather-info .weather-temp{width:56px;height:24px;font-size:16px;font-weight:bold;font-family:"Roboto",verdana,tahoma,arial,helvetica,sans-serif;line-height:24px;padding-top:56px;padding-left:24px;float:left;cursor:pointer}#sds-weather-info .weather-icon{width:200px;height:200px;padding:0px;float:left}#sds-weather-info .weather-icon.thunder{background-image:url("../images/login/weather/login_icon_weather_thunder.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-weather-info .weather-icon.thunder{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_thunder.png");background-size:200px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-weather-info .weather-icon.thunder{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_thunder.png");background-size:200px;outline:1px green dashed}}#sds-weather-info .weather-icon.rain{background-image:url("../images/login/weather/login_icon_weather_rain.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-weather-info .weather-icon.rain{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_rain.png");background-size:200px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-weather-info .weather-icon.rain{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_rain.png");background-size:200px;outline:1px green dashed}}#sds-weather-info .weather-icon.snow{background-image:url("../images/login/weather/login_icon_weather_snow.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-weather-info .weather-icon.snow{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_snow.png");background-size:200px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-weather-info .weather-icon.snow{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_snow.png");background-size:200px;outline:1px green dashed}}#sds-weather-info .weather-icon.fog{background-image:url("../images/login/weather/login_icon_weather_fog.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-weather-info .weather-icon.fog{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_fog.png");background-size:200px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-weather-info .weather-icon.fog{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_fog.png");background-size:200px;outline:1px green dashed}}#sds-weather-info .weather-icon.sun{background-image:url("../images/login/weather/login_icon_weather_sun.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-weather-info .weather-icon.sun{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_sun.png");background-size:200px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-weather-info .weather-icon.sun{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_sun.png");background-size:200px;outline:1px green dashed}}#sds-weather-info .weather-icon.moon{background-image:url("../images/login/weather/login_icon_weather_moon.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-weather-info .weather-icon.moon{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_moon.png");background-size:200px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-weather-info .weather-icon.moon{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_moon.png");background-size:200px;outline:1px green dashed}}#sds-weather-info .weather-icon.sun_clouds{background-image:url("../images/login/weather/login_icon_weather_sun_clouds.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-weather-info .weather-icon.sun_clouds{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_sun_clouds.png");background-size:200px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-weather-info .weather-icon.sun_clouds{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_sun_clouds.png");background-size:200px;outline:1px green dashed}}#sds-weather-info .weather-icon.moon_clouds{background-image:url("../images/login/weather/login_icon_weather_moon_clouds.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-weather-info .weather-icon.moon_clouds{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_moon_clouds.png");background-size:200px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-weather-info .weather-icon.moon_clouds{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_moon_clouds.png");background-size:200px;outline:1px green dashed}}#sds-weather-info .weather-icon.cloudy{background-image:url("../images/login/weather/login_icon_weather_cloudy.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-weather-info .weather-icon.cloudy{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_cloudy.png");background-size:200px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-weather-info .weather-icon.cloudy{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_cloudy.png");background-size:200px;outline:1px green dashed}}#sds-weather-info .weather-icon.tornado{background-image:url("../images/login/weather/login_icon_weather_tornado.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-weather-info .weather-icon.tornado{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_tornado.png");background-size:200px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-weather-info .weather-icon.tornado{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_tornado.png");background-size:200px;outline:1px green dashed}}#sds-weather-info .weather-icon.cold{background-image:url("../images/login/weather/login_icon_weather_cold.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-weather-info .weather-icon.cold{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_cold.png");background-size:200px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-weather-info .weather-icon.cold{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_cold.png");background-size:200px;outline:1px green dashed}}#sds-weather-info .weather-icon.windy{background-image:url("../images/login/weather/login_icon_weather_windy.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-weather-info .weather-icon.windy{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_windy.png");background-size:200px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-weather-info .weather-icon.windy{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_windy.png");background-size:200px;outline:1px green dashed}}#sds-weather-info .weather-icon.hail{background-image:url("../images/login/weather/login_icon_weather_hail.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-weather-info .weather-icon.hail{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_hail.png");background-size:200px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-weather-info .weather-icon.hail{background-image:url("../img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_hail.png");background-size:200px;outline:1px green dashed}}#sds-weather-info .current-time{width:280px;height:80px;text-align:center;font-size:90px;line-height:70px;font-family:"Roboto",verdana,tahoma,arial,helvetica,sans-serif;padding-top:0px;padding-bottom:9px;float:left;border-bottom:solid 1px #FFFFFF;cursor:pointer}#sds-weather-info .current-time .time-tag{font-size:24px;padding-left:10px}#sds-weather-info .current-date{width:280px;height:21px;padding:9px 0px;font-size:15px;font-weight:bold;line-height:21px;font-family:verdana;text-align:center;float:left;border-top:solid 1px #000000}#sds-login{position:absolute;width:100%;height:100%;overflow:hidden;z-index:20000}#sds-login-bgimg{position:absolute;z-index:-1}#sds-login-cuslogo-wrapper{position:absolute;margin:20px 330px;overflow:hidden}#sds-login-background,#sds-steup-otp-background{position:absolute}#edit-otp-dialog,.enforce-wizard-err-message-dialog,.x-tip-invalid{z-index:2147483647 !important}#sds-login-dialog{position:absolute}#sds-login-dialog-form .x-form-text{height:24px;font-size:20px;line-height:20px;border-width:0px;color:#F3F3F3;background-image:none;background-color:transparent}.ext-ie8m .sds-login-light #sds-login-dialog-form .x-form-text{background-color:#FFFFFF;color:#000000}.ext-ie8m .sds-login-dark #sds-login-dialog-form .x-form-text{background-color:#000000;color:#FFFFFF}.sds-login-light #sds-login-dialog-form .x-form-text{text-shadow:0px 1px 1px rgba(0,0,0,0.7)}#sds-login-dialog-form div.x-panel-body{background-color:transparent;border-width:0px;padding:0px}#sds-login-icon{position:absolute;z-index:20001}#sds-login-dialog-form #login_rememberme{position:absolute;top:-1000000px;left:-1000000px}#x-form-el-login_rememberme{padding-top:8px}.sds-login-light #sds-login-dialog-form .syno-ux-checkbox-label{color:#F3F3F3;text-shadow:0px 1px 1px rgba(0,0,0,0.7)}.sds-login-light #sds-login-dialog-form .syno-ux-checkbox-label.syno-ux-cb-disabled{color:#F3F3F3 !important}.sds-login-dark #sds-login-dialog-form .syno-ux-checkbox-label{color:#888787;text-shadow:0px 1px 0px rgba(0,0,0,0.5)}.sds-login-dark #sds-login-dialog-form .syno-ux-checkbox-label.syno-ux-cb-disabled{color:#888787 !important}.sds-login-dark #sds-login-dialog-form .link,.sds-login-light #sds-login-dialog-form .link{font-size:14px;text-decoration:underline;text-align:right;padding-bottom:0px;padding-top:8px}.sds-login-dark #sds-login-dialog-form .link.appicon-ident,.sds-login-light #sds-login-dialog-form .link.appicon-ident{padding-right:52px}.sds-login-dark #sds-login-dialog-form .link:hover,.sds-login-light #sds-login-dialog-form .link:hover{cursor:pointer;color:#50ecff}.sds-login-dark #sds-login-dialog-form .link:active,.sds-login-light #sds-login-dialog-form .link:active{cursor:pointer;color:#00d6f0}.sds-login-dark #sds-login-dialog-form .link{color:#888787}.sds-login-light #sds-login-dialog-form .link{color:#F3F3F3}#sds-login-dialog-form #login-form{min-height:240px}#sds-login-dialog-form .x-form-item{margin:0px}#login-btn{min-width:120px}#login-btn.syno-ux-button.x-btn em button{font-size:20px;line-height:26px;margin-top:6px;padding-left:30px;padding-right:30px}#login-btn.x-btn.syno-ux-button{border-radius:2px;box-shadow:inset 0px 1px 0px rgba(255,255,255,0.3),0px 1px 0px rgba(0,0,0,0.2)}.sds-login-dark #login-btn.x-btn.syno-ux-button{border-color:#0b6fb6;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwODhlOSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzEzN2NjNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #0088e9), color-stop(100%, #137cc6));background-image:-webkit-linear-gradient(top, #0088e9,#137cc6);background-image:-moz-linear-gradient(top, #0088e9,#137cc6);background-image:-o-linear-gradient(top, #0088e9,#137cc6);background-image:linear-gradient(top, #0088e9,#137cc6)}.sds-login-dark #login-btn.x-btn.syno-ux-button:hover{border-color:#0b5e9a;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwOTBmNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzE3ODhkOCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #0090f7), color-stop(100%, #1788d8));background-image:-webkit-linear-gradient(top, #0090f7,#1788d8);background-image:-moz-linear-gradient(top, #0090f7,#1788d8);background-image:-o-linear-gradient(top, #0090f7,#1788d8);background-image:linear-gradient(top, #0090f7,#1788d8)}.sds-login-dark #login-btn.x-btn.syno-ux-button:active{border-color:#0b5e9a;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwN2NkNSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzExNmZiMyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #007cd5), color-stop(100%, #116fb3));background-image:-webkit-linear-gradient(top, #007cd5,#116fb3);background-image:-moz-linear-gradient(top, #007cd5,#116fb3);background-image:-o-linear-gradient(top, #007cd5,#116fb3);background-image:linear-gradient(top, #007cd5,#116fb3)}#sds-login-dialog #sds-login-bkg-highlight{width:336px;min-height:336px;position:absolute}#sds-login-dialog #sds-login-bkg-highlight .highlight-top{width:336px;height:120px;background-image:url("../img/synohdpack/images/dsm/resources/images/login/login_bkg_highlight_top.png");background-size:336px 120px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-login-dialog #sds-login-bkg-highlight .highlight-top{background-image:url("../img/synohdpack/images/dsm/resources/images/login/login_bkg_highlight_top.png");background-size:336px 120px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-login-dialog #sds-login-bkg-highlight .highlight-top{background-image:url("../img/synohdpack/images/dsm/resources/images/login/login_bkg_highlight_top.png");background-size:336px 120px;outline:1px green dashed}}#sds-login-dialog #sds-login-bkg-highlight .highlight-bottom{width:336px;height:94px;background-image:url("../img/synohdpack/images/dsm/resources/images/login/login_bkg_highlight_bottom.png");background-size:336px 94px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack #sds-login-dialog #sds-login-bkg-highlight .highlight-bottom{background-image:url("../img/synohdpack/images/dsm/resources/images/login/login_bkg_highlight_bottom.png");background-size:336px 94px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug #sds-login-dialog #sds-login-bkg-highlight .highlight-bottom{background-image:url("../img/synohdpack/images/dsm/resources/images/login/login_bkg_highlight_bottom.png");background-size:336px 94px;outline:1px green dashed}}#sds-login-dialog-form{width:567px}.sds-login-light .sds-login-dialog-form-table.x-panel{box-shadow:0px 1px 0px rgba(0,0,0,0.2)}.sds-login-dark .sds-login-dialog-form-table.x-panel{box-shadow:0px 1px 0px rgba(0,0,0,0.5)}.sds-login-light .sds-login-dialog-form-table td{height:58px;border-bottom:solid 1px;border-color:#fff;border-color:rgba(255,255,255,0.6);box-shadow:0px 1px 0px rgba(0,0,0,0.2)}.sds-login-dark .sds-login-dialog-form-table td{height:58px;border-bottom:solid 1px;border-color:#fff;border-color:rgba(255,255,255,0.3);box-shadow:0px 1px 0px rgba(0,0,0,0.5)}.sds-login-dialog-form-table td.prefix{width:200px;background-image:none}.sds-login-dialog-form-table td.username-icon,.sds-login-dialog-form-table td.passwd-icon,.sds-login-dialog-form-table td.otp-icon{width:32px;background-repeat:no-repeat;background-position:10px 13px}.sds-login-dialog-form-table td.username-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/login/icon_user.png");background-size:32px 32px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-login-dialog-form-table td.username-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/login/icon_user.png");background-size:32px 32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-login-dialog-form-table td.username-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/login/icon_user.png");background-size:32px 32px;outline:1px green dashed}}.sds-login-dialog-form-table td.passwd-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/login/icon_pw.png");background-size:32px 32px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-login-dialog-form-table td.passwd-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/login/icon_pw.png");background-size:32px 32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-login-dialog-form-table td.passwd-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/login/icon_pw.png");background-size:32px 32px;outline:1px green dashed}}.sds-login-dialog-form-table td.otp-icon{background-image:url(../images/login/icon_phone.png)}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-login-dialog-form-table td.otp-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/login/icon_phone.png");background-size:32px 32px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-login-dialog-form-table td.otp-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/login/icon_phone.png");background-size:32px 32px;outline:1px green dashed}}.sds-login-dialog-form-table td.center{width:240px}#sds-fp-dialog{width:345px;height:333px}#sds-login-dialog{width:336px;min-height:336px;border-radius:3px}.sds-login-light #sds-login-dialog{background-color:#fff;background-color:rgba(255,255,255,0.36);border:solid 1px;border-color:rgba(255,255,255,0.7);box-shadow:0px 2px 4px 1px rgba(0,0,0,0.2)}.sds-login-dark #sds-login-dialog{background-color:#000;background-color:rgba(0,0,0,0.7);border:solid 1px;border-color:#4b4b4b;box-shadow:0px 2px 4px rgba(0,0,0,0.4)}.ext-ie8 #sds-login-dialog,.ext-ie7 #sds-login-dialog{background-color:transparent !important;border:none !important}.ext-ie8 .sds-login-light #sds-login-bkg-highlight,.ext-ie7 .sds-login-light #sds-login-bkg-highlight{background-color:#FFFFFF;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=36);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=36);opacity:0.36;border:solid 1px #FFFFFF}.ext-ie8 .sds-login-dark #sds-login-bkg-highlight,.ext-ie7 .sds-login-dark #sds-login-bkg-highlight{background-color:#000000;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=70);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=70);opacity:0.7;border:solid 1px #4b4b4b}#sds-login-dialog-title{position:absolute;font-weight:bold;line-height:76px;height:76px;width:296px;left:20px;top:1px;color:#F3F3F3;font-size:30px;text-shadow:0px 1px 2px rgba(0,0,0,0.7);overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;white-space:nowrap;text-align:center}.sds-login-light #sds-login-dialog-title{border-bottom:solid 1px;border-color:#fff;border-color:rgba(255,255,255,0.6);box-shadow:0px 1px 0px rgba(0,0,0,0.2)}.sds-login-dark #sds-login-dialog-title{border-bottom:solid 1px;border-color:#fff;border-color:rgba(255,255,255,0.3);box-shadow:0px 1px 0px rgba(0,0,0,0.5)}#sds-login-dialog-status{font-size:14px;padding-top:12px;padding-bottom:0px;line-height:17px}.sds-login-light #sds-login-dialog-status{color:#F3F3F3}.sds-login-dark #sds-login-dialog-status{color:#888787}.sds-login-light #sds-login-dialog-form,.sds-login-dark #sds-login-dialog-form{width:296px;padding:76px 20px 20px 20px}.sds-standalone-main-window .x-window-tl .x-window-header{background-size:24px 24px}.sds-standalone-main-window .x-window-tc .x-panel-icon{height:28px;padding-left:24px !important;padding-top:0;margin-top:3px}.sds-window-v5.sds-standalone-main-window .x-window-tc .x-panel-icon,.sds-standalone-main-window.sds-widget-window .x-window-tc .x-panel-icon{background-position:0 3px}.sds-standalone-main-window .sds-standalone-main-window-header{position:absolute;top:8px;right:4px;height:30px;z-index:2}.sds-window-v5.sds-standalone-main-window .sds-standalone-main-window-header,.sds-standalone-main-window.sds-widget-window .sds-standalone-main-window-header{top:7px}.sds-standalone-main-window .sds-standalone-main-window-header-text{margin-top:7px;margin-left:7px;margin-right:31px;overflow:hidden}.sds-window-v5.sds-standalone-main-window .sds-standalone-main-window-header-text,.sds-standalone-main-window.sds-widget-window .sds-standalone-main-window-header-text{margin-top:3px}.sds-window-v5.sds-standalone-main-window .sds-standalone-main-window-header .sds-standalone-welcome-text,.sds-standalone-main-window.sds-widget-window .sds-standalone-main-window-header .sds-standalone-welcome-text{margin-right:16px}.sds-window-v5.sds-standalone-main-window .sds-standalone-main-window-header .sds-standalone-welcome-text:hover,.sds-standalone-main-window.sds-widget-window .sds-standalone-main-window-header .sds-standalone-welcome-text:hover{color:#0086e5}.sds-window-v5.sds-standalone-main-window .x-window-header-text,.sds-standalone-main-window.sds-widget-window .x-window-header-text{cursor:default;font-size:16px}.sds-standalone-main-window .sds-standalone-main-window-header .sds-standalone-welcome-text{margin-right:14px;font-size:12px;color:#282828}.sds-standalone-main-window .x-window-header-text{cursor:default;font-size:16px}.sds-window.sds-standalone-main-window .x-window-header-text{color:#282828}.sds-standalone-main-window .sds-standalone-logout.syno-ux-button,.sds-standalone-main-window .sds-standalone-help.syno-ux-button{border-color:transparent;background-color:transparent;background-image:none}.sds-standalone-main-window .sds-standalone-logout.syno-ux-button em button,.sds-standalone-main-window .sds-standalone-help.syno-ux-button em button{padding-left:16px;padding-right:7px;margin-left:7px;background-repeat:no-repeat;background-position-y:center;color:#282828}.sds-standalone-main-window .sds-standalone-logout.syno-ux-button.x-btn-over,.sds-standalone-main-window .sds-standalone-logout.syno-ux-button.x-btn-click,.sds-standalone-main-window .sds-standalone-help.syno-ux-button.x-btn-over,.sds-standalone-main-window .sds-standalone-help.syno-ux-button.x-btn-click{border-color:#969a9f;border-width:1px;color:#282828}.sds-standalone-main-window .sds-standalone-logout.syno-ux-button em button.sds-standalone-help-icon,.sds-standalone-main-window .sds-standalone-help.syno-ux-button em button.sds-standalone-help-icon{background-image:url(../images/ico_help.png) !important}.sds-standalone-main-window .sds-standalone-logout.syno-ux-button em button.sds-standalone-logout-icon,.sds-standalone-main-window .sds-standalone-help.syno-ux-button em button.sds-standalone-logout-icon{background-image:url(../images/ico_logout.png) !important}.sds-window-v5.sds-standalone-main-window .sds-standalone-help.syno-ux-button,.sds-standalone-main-window.sds-widget-window .sds-standalone-help.syno-ux-button{margin-right:12px !important;height:24px;width:24px;border:none;background-color:transparent;background-image:none}.sds-window-v5.sds-standalone-main-window .sds-standalone-help.syno-ux-button em button.sds-standalone-help-icon,.sds-standalone-main-window.sds-widget-window .sds-standalone-help.syno-ux-button em button.sds-standalone-help-icon{background-image:url("../images/rt_button.png") !important;background-position:0 -384px;width:auto;background-repeat:no-repeat;padding-left:24px}.sds-window-v5.sds-standalone-main-window .sds-standalone-help.syno-ux-button.x-btn-over em button,.sds-standalone-main-window.sds-widget-window .sds-standalone-help.syno-ux-button.x-btn-over em button{color:#1ca600}.sds-window-v5.sds-standalone-main-window .sds-standalone-help.syno-ux-button.x-btn-over em button.sds-standalone-help-icon,.sds-standalone-main-window.sds-widget-window .sds-standalone-help.syno-ux-button.x-btn-over em button.sds-standalone-help-icon{background-position:0 -408px}.sds-window-v5.sds-standalone-main-window .sds-standalone-help.syno-ux-button.x-btn-click em button,.sds-standalone-main-window.sds-widget-window .sds-standalone-help.syno-ux-button.x-btn-click em button{color:#1ca600}.sds-window-v5.sds-standalone-main-window .sds-standalone-help.syno-ux-button.x-btn-click em button.sds-standalone-help-icon,.sds-standalone-main-window.sds-widget-window .sds-standalone-help.syno-ux-button.x-btn-click em button.sds-standalone-help-icon{background-position:0 -432px}.sds-window-v5.sds-standalone-main-window .x-toolbar-cell .sds-standalone-logout.x-btn,.sds-standalone-main-window.sds-widget-window .x-toolbar-cell .sds-standalone-logout.x-btn{background-image:none;background-color:transparent;border:none;margin-right:0px !important}.sds-window-v5.sds-standalone-main-window .x-toolbar-cell .sds-standalone-logout.x-btn .sds-standalone-logout-icon,.sds-standalone-main-window.sds-widget-window .x-toolbar-cell .sds-standalone-logout.x-btn .sds-standalone-logout-icon{background-image:url("../images/rt_button.png") !important;padding-left:26px;background-position:0 -672px;background-repeat:no-repeat}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .sds-window-v5.sds-standalone-main-window .x-toolbar-cell .sds-standalone-logout.x-btn .sds-standalone-logout-icon,.synohdpack .sds-standalone-main-window.sds-widget-window .x-toolbar-cell .sds-standalone-logout.x-btn .sds-standalone-logout-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/rt_button.png");background-size:"24px" "24px"}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .sds-window-v5.sds-standalone-main-window .x-toolbar-cell .sds-standalone-logout.x-btn .sds-standalone-logout-icon,.synohdpackdebug .sds-standalone-main-window.sds-widget-window .x-toolbar-cell .sds-standalone-logout.x-btn .sds-standalone-logout-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/../images/rt_button.png");background-size:"24px" "24px";outline:1px green dashed}}.sds-window-v5.sds-standalone-main-window .x-toolbar-cell .sds-standalone-logout.x-btn.x-btn-over .sds-standalone-logout-icon,.sds-standalone-main-window.sds-widget-window .x-toolbar-cell .sds-standalone-logout.x-btn.x-btn-over .sds-standalone-logout-icon,.sds-window-v5.sds-standalone-main-window .x-toolbar-cell .sds-standalone-logout.x-btn.x-btn-click .sds-standalone-logout-icon,.sds-standalone-main-window.sds-widget-window .x-toolbar-cell .sds-standalone-logout.x-btn.x-btn-click .sds-standalone-logout-icon{background-position:0 -696px;color:#0086e5}.sds-window-v5.sds-standalone-main-window .x-toolbar-cell .sds-standalone-logout.x-btn.x-item-disabled .sds-standalone-logout-icon,.sds-standalone-main-window.sds-widget-window .x-toolbar-cell .sds-standalone-logout.x-btn.x-item-disabled .sds-standalone-logout-icon{background-position:0 -720px}.sds-window-v5.sds-standalone-main-window .sds-standalone-main-window-header-toolbar em button,.sds-standalone-main-window.sds-widget-window .sds-standalone-main-window-header-toolbar em button{height:24px;line-height:24px}.syno-sds-shortcut-zone-wrapper{position:absolute;overflow:visible;z-index:-1}.syno-sds-shortcut-zone-wrapper.on-instruction{background-color:#fff;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=$ieOpacity)";filter:alpha(opacity=25);filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=25);opacity:0.25;z-index:2 !important}.syno-sds-shortcut-zone-wrapper.on-dropped{z-index:2 !important}.syno-sds-appview.on-mouse-drag .syno-sds-shortcut-zone-wrapper{z-index:2 !important}.syno-sds-shortcut-zone .add-icon{visibility:hidden;position:absolute;width:80px;height:64px;background:url(../images/desktop/add_one.png) no-repeat}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-sds-shortcut-zone .add-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/desktop/add_one.png");background-size:80px 64px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-sds-shortcut-zone .add-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/desktop/add_one.png");background-size:80px 64px;outline:1px green dashed}}.classical .syno-sds-shortcut-zone-wrapper{left:0px}.classical.syno-sds-appview.on-mouse-drag .syno-sds-shortcut-zone-wrapper{z-index:0 !important}.appview-icon-dragging-proxy .sds-application-notify-badge-num{display:none}.appview-icon-dragging-proxy .x-dd-drag-ghost{border:none !important;background-color:transparent !important;opacity:1 !important;filter:none !important}.appview-icon-dragging-proxy .x-dd-drag-ghost .text{visibility:hidden !important}.appview-icon-dragging-proxy .image{white-space:normal}.appview-icon-dragging-proxy.x-dd-drag-proxy{background-color:transparent;border:none;padding:0px;box-shadow:none}.appview-icon-dragging-proxy .x-dd-drop-icon{width:36px;height:36px;top:40px;left:46px;background-position:center}.appview-icon-dragging-proxy.x-dd-drop-ok-add .x-dd-drop-icon{background-image:url(../images/icon_drag_add.png)}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .appview-icon-dragging-proxy.x-dd-drop-ok-add .x-dd-drop-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/icon_drag_add.png");background-size:36px 36px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .appview-icon-dragging-proxy.x-dd-drop-ok-add .x-dd-drop-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/icon_drag_add.png");background-size:36px 36px;outline:1px green dashed}}.appview-icon-dragging-proxy.x-dd-drop-nodrop .x-dd-drop-icon{background-image:url(../images/icon_drag_ban.png)}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .appview-icon-dragging-proxy.x-dd-drop-nodrop .x-dd-drop-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/icon_drag_ban.png");background-size:36px 36px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .appview-icon-dragging-proxy.x-dd-drop-nodrop .x-dd-drop-icon{background-image:url("../img/synohdpack/images/dsm/resources/images/icon_drag_ban.png");background-size:36px 36px;outline:1px green dashed}}.classical.appview-icon-dragging-proxy.x-dd-drop-ok-add .x-dd-drop-icon,.classical.appview-icon-dragging-proxy.x-dd-drop-nodrop .x-dd-drop-icon{width:48px;height:48px;top:16px;left:22px;background-position:center}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;src:local("Roboto Regular"),local("Roboto-Regular"),url(../fonts/roboto.woff) format("woff")}.sds-search-result .x-combo-list-hd,.sds-search-result .section{color:#0086e5}.sds-window-v5.sds-standalone-main-window .sds-standalone-main-window-header .sds-standalone-welcome-text,.sds-standalone-main-window.sds-widget-window .sds-standalone-main-window-header .sds-standalone-welcome-text{margin-right:16px}.sds-window-v5.sds-standalone-main-window .sds-standalone-main-window-header .sds-standalone-welcome-text:hover,.sds-standalone-main-window.sds-widget-window .sds-standalone-main-window-header .sds-standalone-welcome-text:hover{color:#0086e5}.sds-window-v5.sds-standalone-main-window .x-toolbar-cell .sds-standalone-logout.x-btn.x-btn-over .sds-standalone-logout-icon,.sds-standalone-main-window.sds-widget-window .x-toolbar-cell .sds-standalone-logout.x-btn.x-btn-over .sds-standalone-logout-icon,.sds-window-v5.sds-standalone-main-window .x-toolbar-cell .sds-standalone-logout.x-btn.x-btn-click .sds-standalone-logout-icon,.sds-standalone-main-window.sds-widget-window .x-toolbar-cell .sds-standalone-logout.x-btn.x-btn-click .sds-standalone-logout-icon{color:#0086e5}.sds-user-menu .sds-user-menu-options-click .x-menu-item-text,.sds-user-menu .sds-user-menu-restart-click .x-menu-item-text,.sds-user-menu .sds-user-menu-shutdown-click .x-menu-item-text,.sds-user-menu .sds-user-menu-logout-click .x-menu-item-text{color:#0086e5}.sds-overflow-menu .sds-overflow-items-click .x-menu-item-text{color:#0086e5}.sds-tray-msg-window .x-plain-tl .x-plain-header{color:#0086e5}.sds-searchbox .sds-search-result .section{color:#0086e5}.sds-window-v5 .x-window-mc,.sds-widget-window .x-window-mc{background-color:#fff}.sds-window-v5 .x-window-tl,.sds-widget-window .x-window-tl{background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Q4ZWNmYiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #d8ecfb), color-stop(100%, #ffffff));background-image:-webkit-linear-gradient(#d8ecfb,#ffffff);background-image:-moz-linear-gradient(#d8ecfb,#ffffff);background-image:-o-linear-gradient(#d8ecfb,#ffffff);background-image:linear-gradient(#d8ecfb,#ffffff);background-color:#fff;border-top:3px solid #0086e5}.sds-window-v5.deactive-win .x-window-tl,.deactive-win.sds-widget-window .x-window-tl{background-image:linear-gradient(#e6ebf0,#ffffff)}.sds-window-v5 .x-window-header-text,.sds-widget-window .x-window-header-text{color:#0086e5}.sds-window-v5 .x-window-body,.sds-widget-window .x-window-body{background-color:#fff}.sds-window-v5 .x-window-bl,.sds-widget-window .x-window-bl{background-color:#fff}.sds-window-v5 .x-window-tbar .x-toolbar,.sds-widget-window .x-window-tbar .x-toolbar{background-color:#fff}.sds-window-v5 .x-progress-bar,.sds-widget-window .x-progress-bar{background-color:#0086e5}.sds-window-v5 .ext-el-mask,.sds-widget-window .ext-el-mask{background-color:#fff}.sds-window-v5 .ext-el-mask-msg,.sds-widget-window .ext-el-mask-msg{background-color:#fff}.sds-window-v5 .ext-el-mask-msg div,.sds-widget-window .ext-el-mask-msg div{background-color:#fff}.syno-sds-fs-thumbnailsView .thumb-wrap{float:left;padding:0px;margin:0px 16px 8px 16px;-moz-transition-property:margin;-moz-transition-timing-function:ease-out;-moz-transition-duration:218ms;-webkit-transition-property:margin;-webkit-transition-timing-function:ease-out;-webkit-transition-duration:218ms;-o-transition-property:margin;-o-transition-timing-function:ease-out;-o-transition-duration:218ms;transition-timing-function:ease-out;transition-duration:218ms;transition-property:margin}#sds-desktop li.launch-icon .text,#sds-desktop li.launch-icon .text a{text-shadow:0.1em 0.1em 0.1em #000000;filter:Shadow(Color=#000, Direction=135, Strength=1)} diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/css/ext-all.css b/salt/idh/skins/http/opencanary/nasLogin/static/css/ext-all.css new file mode 100644 index 000000000..2fd3718f4 --- /dev/null +++ b/salt/idh/skins/http/opencanary/nasLogin/static/css/ext-all.css @@ -0,0 +1 @@ +html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}img,body,html{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';}.ext-forced-border-box,.ext-forced-border-box *{-moz-box-sizing:border-box;-ms-box-sizing:border-box;-webkit-box-sizing:border-box;}.ext-el-mask{z-index:100;position:absolute;top:0;left:0;-moz-opacity:.5;opacity:.50;filter:alpha(opacity=50);width:100%;height:100%;zoom:1;}.ext-el-mask-msg{z-index:20001;position:absolute;top:0;left:0;border:1px solid;background:repeat-x 0 -16px;padding:2px;}.ext-el-mask-msg div{padding:5px 10px 5px 10px;border:1px solid;cursor:wait;}.ext-shim{position:absolute;visibility:hidden;left:0;top:0;overflow:hidden;}.ext-ie .ext-shim{filter:alpha(opacity=0);}.ext-ie6 .ext-shim{margin-left:5px;margin-top:3px;}.x-mask-loading div{padding:5px 10px 5px 25px;background:no-repeat 5px 5px;line-height:16px;}.x-hidden,.x-hide-offsets{position:absolute!important;left:-10000px;top:-10000px;visibility:hidden;}.x-hide-display{display:none!important;}.x-hide-nosize,.x-hide-nosize *{height:0!important;width:0!important;visibility:hidden!important;border:none!important;zoom:1;}.x-hide-visibility{visibility:hidden!important;}.x-masked{overflow:hidden!important;}.x-masked-relative{position:relative!important;}.x-masked select,.x-masked object,.x-masked embed{visibility:hidden;}.x-layer{visibility:hidden;}.x-unselectable,.x-unselectable *{user-select:none;-o-user-select:none;-ms-user-select:none;-moz-user-select:-moz-none;-webkit-user-select:none;}.x-repaint{zoom:1;background-color:transparent;-moz-outline:0;outline:0;}.x-item-disabled{cursor:default;opacity:.6;-moz-opacity:.6;filter:alpha(opacity=60);}.x-item-disabled *{cursor:default!important;}.x-form-radio-group .x-item-disabled{filter:none;}.x-splitbar-proxy{position:absolute;visibility:hidden;z-index:20001;zoom:1;line-height:1px;font-size:1px;overflow:hidden;}.x-splitbar-h,.x-splitbar-proxy-h{cursor:e-resize;cursor:col-resize;}.x-splitbar-v,.x-splitbar-proxy-v{cursor:s-resize;cursor:row-resize;}.x-color-palette{width:150px;height:92px;cursor:pointer;}.x-color-palette a{border:1px solid;float:left;padding:2px;text-decoration:none;-moz-outline:0 none;outline:0 none;cursor:pointer;}.x-color-palette a:hover,.x-color-palette a.x-color-palette-sel{border:1px solid;}.x-color-palette em{display:block;border:1px solid;}.x-color-palette em span{cursor:pointer;display:block;height:10px;line-height:10px;width:10px;}.x-ie-shadow{display:none;position:absolute;overflow:hidden;left:0;top:0;zoom:1;}.x-shadow{display:none;position:absolute;overflow:hidden;left:0;top:0;}.x-shadow *{overflow:hidden;}.x-shadow *{padding:0;border:0;margin:0;clear:none;zoom:1;}.x-shadow .xstc,.x-shadow .xsbc{height:6px;float:left;}.x-shadow .xstl,.x-shadow .xstr,.x-shadow .xsbl,.x-shadow .xsbr{width:6px;height:6px;float:left;}.x-shadow .xsc{width:100%;}.x-shadow .xsml,.x-shadow .xsmr{width:6px;float:left;height:100%;}.x-shadow .xsmc{float:left;height:100%;background-color:transparent;}.x-shadow .xst,.x-shadow .xsb{height:6px;overflow:hidden;width:100%;}.x-shadow .xsml{background:transparent repeat-y 0 0;}.x-shadow .xsmr{background:transparent repeat-y -6px 0;}.x-shadow .xstl{background:transparent no-repeat 0 0;}.x-shadow .xstc{background:transparent repeat-x 0 -30px;}.x-shadow .xstr{background:transparent repeat-x 0 -18px;}.x-shadow .xsbl{background:transparent no-repeat 0 -12px;}.x-shadow .xsbc{background:transparent repeat-x 0 -36px;}.x-shadow .xsbr{background:transparent repeat-x 0 -6px;}.loading-indicator{background:no-repeat left;padding-left:20px;line-height:16px;margin:3px;}.x-text-resize{position:absolute;left:-1000px;top:-1000px;visibility:hidden;zoom:1;}.x-drag-overlay{width:100%;height:100%;display:none;position:absolute;left:0;top:0;background-image:url(../images/default/s.gif);z-index:20000;}.x-clear{clear:both;height:0;overflow:hidden;line-height:0;font-size:0;}.x-spotlight{z-index:8999;position:absolute;top:0;left:0;-moz-opacity:.5;opacity:.50;filter:alpha(opacity=50);width:0;height:0;zoom:1;}#x-history-frame{position:absolute;top:-1px;left:0;width:1px;height:1px;visibility:hidden;}#x-history-field{position:absolute;top:0;left:-1px;width:1px;height:1px;visibility:hidden;}.x-resizable-handle{position:absolute;z-index:100;font-size:1px;line-height:6px;overflow:hidden;filter:alpha(opacity=0);opacity:0;zoom:1;}.x-resizable-handle-east{width:6px;cursor:e-resize;right:0;top:0;height:100%;}.ext-ie .x-resizable-handle-east{margin-right:-1px;}.x-resizable-handle-south{width:100%;cursor:s-resize;left:0;bottom:0;height:6px;}.ext-ie .x-resizable-handle-south{margin-bottom:-1px;}.x-resizable-handle-west{width:6px;cursor:w-resize;left:0;top:0;height:100%;}.x-resizable-handle-north{width:100%;cursor:n-resize;left:0;top:0;height:6px;}.x-resizable-handle-southeast{width:6px;cursor:se-resize;right:0;bottom:0;height:6px;z-index:101;}.x-resizable-handle-northwest{width:6px;cursor:nw-resize;left:0;top:0;height:6px;z-index:101;}.x-resizable-handle-northeast{width:6px;cursor:ne-resize;right:0;top:0;height:6px;z-index:101;}.x-resizable-handle-southwest{width:6px;cursor:sw-resize;left:0;bottom:0;height:6px;z-index:101;}.x-resizable-over .x-resizable-handle,.x-resizable-pinned .x-resizable-handle{filter:alpha(opacity=100);opacity:1;}.x-resizable-over .x-resizable-handle-east,.x-resizable-pinned .x-resizable-handle-east,.x-resizable-over .x-resizable-handle-west,.x-resizable-pinned .x-resizable-handle-west{background-position:left;}.x-resizable-over .x-resizable-handle-south,.x-resizable-pinned .x-resizable-handle-south,.x-resizable-over .x-resizable-handle-north,.x-resizable-pinned .x-resizable-handle-north{background-position:top;}.x-resizable-over .x-resizable-handle-southeast,.x-resizable-pinned .x-resizable-handle-southeast{background-position:top left;}.x-resizable-over .x-resizable-handle-northwest,.x-resizable-pinned .x-resizable-handle-northwest{background-position:bottom right;}.x-resizable-over .x-resizable-handle-northeast,.x-resizable-pinned .x-resizable-handle-northeast{background-position:bottom left;}.x-resizable-over .x-resizable-handle-southwest,.x-resizable-pinned .x-resizable-handle-southwest{background-position:top right;}.x-resizable-proxy{border:1px dashed;position:absolute;overflow:hidden;display:none;left:0;top:0;z-index:50000;}.x-resizable-overlay{width:100%;height:100%;display:none;position:absolute;left:0;top:0;z-index:200000;-moz-opacity:0;opacity:0;filter:alpha(opacity=0);}.x-tab-panel{overflow:hidden;}.x-tab-panel-header,.x-tab-panel-footer{border:1px solid;overflow:hidden;zoom:1;}.x-tab-panel-header{border:1px solid;padding-bottom:2px;}.x-tab-panel-footer{border:1px solid;padding-top:2px;}.x-tab-strip-wrap{width:100%;overflow:hidden;position:relative;zoom:1;}ul.x-tab-strip{display:block;width:5000px;zoom:1;}ul.x-tab-strip-top{padding-top:1px;background:repeat-x bottom;border-bottom:1px solid;}ul.x-tab-strip-bottom{padding-bottom:1px;background:repeat-x top;border-top:1px solid;border-bottom:0 none;}.x-tab-panel-header-plain .x-tab-strip-top{background:transparent!important;padding-top:0!important;}.x-tab-panel-header-plain{background:transparent!important;border-width:0!important;padding-bottom:0!important;}.x-tab-panel-header-plain .x-tab-strip-spacer,.x-tab-panel-footer-plain .x-tab-strip-spacer{border:1px solid;height:2px;font-size:1px;line-height:1px;}.x-tab-panel-header-plain .x-tab-strip-spacer{border-top:0 none;}.x-tab-panel-footer-plain .x-tab-strip-spacer{border-bottom:0 none;}.x-tab-panel-footer-plain .x-tab-strip-bottom{background:transparent!important;padding-bottom:0!important;}.x-tab-panel-footer-plain{background:transparent!important;border-width:0!important;padding-top:0!important;}.ext-border-box .x-tab-panel-header-plain .x-tab-strip-spacer,.ext-border-box .x-tab-panel-footer-plain .x-tab-strip-spacer{height:3px;}ul.x-tab-strip li{float:left;margin-left:2px;}ul.x-tab-strip li.x-tab-edge{float:left;margin:0!important;padding:0!important;border:0 none!important;font-size:1px!important;line-height:1px!important;overflow:hidden;zoom:1;background:transparent!important;width:1px;}.x-tab-strip a,.x-tab-strip span,.x-tab-strip em{display:block;}.x-tab-strip a{text-decoration:none!important;-moz-outline:0;outline:0;cursor:pointer;}.x-tab-strip-inner{overflow:hidden;text-overflow:ellipsis;}.x-tab-strip span.x-tab-strip-text{white-space:nowrap;cursor:pointer;padding:4px 0;}.x-tab-strip-top .x-tab-with-icon .x-tab-right{padding-left:6px;}.x-tab-strip .x-tab-with-icon span.x-tab-strip-text{padding-left:20px;background-position:0 3px;background-repeat:no-repeat;}.x-tab-strip-active,.x-tab-strip-active a.x-tab-right{cursor:default;}.x-tab-strip-active span.x-tab-strip-text{cursor:default;}.x-tab-strip-disabled .x-tabs-text{cursor:default;}.x-tab-panel-body{overflow:hidden;}.x-tab-panel-bwrap{overflow:hidden;}.ext-ie .x-tab-strip .x-tab-right{position:relative;}.x-tab-strip-top .x-tab-strip-active .x-tab-right{margin-bottom:-1px;}.ext-ie8 .x-tab-strip li{position:relative;}.ext-border-box .ext-ie8 .x-tab-strip-top .x-tab-right,.ext-border-box .ext-ie9 .x-tab-strip-top .x-tab-right{top:1px;}.ext-ie8 .x-tab-strip-top,.ext-ie9 .x-tab-strip-top{padding-top:1px;}.ext-border-box .ext-ie8 .x-tab-strip-top,.ext-border-box .ext-ie9 .x-tab-strip-top{padding-top:0;}.ext-ie8 .x-tab-strip .x-tab-strip-closable a.x-tab-strip-close,.ext-ie9 .x-tab-strip .x-tab-strip-closable a.x-tab-strip-close{top:3px;}.ext-border-box .ext-ie8 .x-tab-strip .x-tab-strip-closable a.x-tab-strip-close,.ext-border-box .ext-ie9 .x-tab-strip .x-tab-strip-closable a.x-tab-strip-close{top:4px;}.ext-ie8 .x-tab-strip-bottom .x-tab-right,.ext-ie9 .x-tab-strip-bottom .x-tab-right{top:0;}.x-tab-strip-top .x-tab-strip-active .x-tab-right span.x-tab-strip-text{padding-bottom:5px;}.x-tab-strip-bottom .x-tab-strip-active .x-tab-right{margin-top:-1px;}.x-tab-strip-bottom .x-tab-strip-active .x-tab-right span.x-tab-strip-text{padding-top:5px;}.x-tab-strip-top .x-tab-right{background:transparent no-repeat 0 -51px;padding-left:10px;}.x-tab-strip-top .x-tab-left{background:transparent no-repeat right -351px;padding-right:10px;}.x-tab-strip-top .x-tab-strip-inner{background:transparent repeat-x 0 -201px;}.x-tab-strip-top .x-tab-strip-over .x-tab-right{background-position:0 -101px;}.x-tab-strip-top .x-tab-strip-over .x-tab-left{background-position:right -401px;}.x-tab-strip-top .x-tab-strip-over .x-tab-strip-inner{background-position:0 -251px;}.x-tab-strip-top .x-tab-strip-active .x-tab-right{background-position:0 0;}.x-tab-strip-top .x-tab-strip-active .x-tab-left{background-position:right -301px;}.x-tab-strip-top .x-tab-strip-active .x-tab-strip-inner{background-position:0 -151px;}.x-tab-strip-bottom .x-tab-right{background:no-repeat bottom right;}.x-tab-strip-bottom .x-tab-left{background:no-repeat bottom left;}.x-tab-strip-bottom .x-tab-strip-active .x-tab-right{background:no-repeat bottom right;}.x-tab-strip-bottom .x-tab-strip-active .x-tab-left{background:no-repeat bottom left;}.x-tab-strip-bottom .x-tab-left{margin-right:3px;padding:0 10px;}.x-tab-strip-bottom .x-tab-right{padding:0;}.x-tab-strip .x-tab-strip-close{display:none;}.x-tab-strip-closable{position:relative;}.x-tab-strip-closable .x-tab-left{padding-right:19px;}.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close{opacity:.6;-moz-opacity:.6;background-repeat:no-repeat;display:block;width:11px;height:11px;position:absolute;top:3px;right:3px;cursor:pointer;z-index:2;}.x-tab-strip .x-tab-strip-active a.x-tab-strip-close{opacity:.8;-moz-opacity:.8;}.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close:hover{opacity:1;-moz-opacity:1;}.x-tab-panel-body{border:1px solid;}.x-tab-panel-body-top{border-top:0 none;}.x-tab-panel-body-bottom{border-bottom:0 none;}.x-tab-scroller-left{background:transparent no-repeat -18px 0;border-bottom:1px solid;width:18px;position:absolute;left:0;top:0;z-index:10;cursor:pointer;}.x-tab-scroller-left-over{background-position:0 0;}.x-tab-scroller-left-disabled{background-position:-18px 0;opacity:.5;-moz-opacity:.5;filter:alpha(opacity=50);cursor:default;}.x-tab-scroller-right{background:transparent no-repeat 0 0;border-bottom:1px solid;width:18px;position:absolute;right:0;top:0;z-index:10;cursor:pointer;}.x-tab-scroller-right-over{background-position:-18px 0;}.x-tab-scroller-right-disabled{background-position:0 0;opacity:.5;-moz-opacity:.5;filter:alpha(opacity=50);cursor:default;}.x-tab-scrolling-bottom .x-tab-scroller-left,.x-tab-scrolling-bottom .x-tab-scroller-right{margin-top:1px;}.x-tab-scrolling .x-tab-strip-wrap{margin-left:18px;margin-right:18px;}.x-tab-scrolling{position:relative;}.x-tab-panel-bbar .x-toolbar{border:1px solid;border-top:0 none;overflow:hidden;padding:2px;}.x-tab-panel-tbar .x-toolbar{border:1px solid;border-top:0 none;overflow:hidden;padding:2px;}.x-form-field{margin:0;}.ext-webkit *:focus{outline:none!important;}.x-form-text,textarea.x-form-field{padding:1px 3px;background:repeat-x 0 0;border:1px solid;}textarea.x-form-field{padding:2px 3px;}.x-form-text,.ext-ie .x-form-file{height:22px;line-height:18px;vertical-align:middle;}.ext-ie6 .x-form-text,.ext-ie7 .x-form-text{margin:-1px 0;height:22px;line-height:18px;}.x-quirks .ext-ie9 .x-form-text{height:22px;padding-top:3px;padding-bottom:0;}.x-quirks .ext-ie9 .x-input-wrapper .x-form-text,.x-quirks .ext-ie9 .x-form-field-trigger-wrap .x-form-text{margin-top:-1px;margin-bottom:-1px;}.x-quirks .ext-ie9 .x-input-wrapper .x-form-element{margin-bottom:-1px;}.ext-ie6 .x-form-field-wrap .x-form-file-btn,.ext-ie7 .x-form-field-wrap .x-form-file-btn{top:-1px;}.ext-ie6 textarea.x-form-field,.ext-ie7 textarea.x-form-field{margin:-1px 0;}.ext-strict .x-form-text{height:18px;}.ext-safari.ext-mac textarea.x-form-field{margin-bottom:-2px;}.ext-gecko .x-form-text,.ext-ie8 .x-form-text{padding-top:2px;padding-bottom:0;}.ext-ie6 .x-form-composite .x-form-text.x-box-item,.ext-ie7 .x-form-composite .x-form-text.x-box-item{margin:0!important;}textarea{resize:none;}.x-form-select-one{height:20px;line-height:18px;vertical-align:middle;border:1px solid;}.x-form-check-wrap{line-height:18px;height:auto;}.ext-ie .x-form-check-wrap input{width:15px;height:15px;}.x-form-check-wrap input{vertical-align:bottom;}.x-editor .x-form-check-wrap{padding:3px;}.x-editor .x-form-checkbox{height:13px;}.x-form-check-group-label{border-bottom:1px solid;margin-bottom:5px;padding-left:3px!important;float:none!important;}.x-form-field-wrap .x-form-trigger{width:17px;height:21px;border:0;background:transparent no-repeat 0 0;cursor:pointer;border-bottom:1px solid;position:absolute;top:0;}.x-form-field-wrap .x-form-date-trigger,.x-form-field-wrap .x-form-clear-trigger,.x-form-field-wrap .x-form-search-trigger{cursor:pointer;}.x-form-field-wrap .x-form-twin-triggers .x-form-trigger{position:static;top:auto;vertical-align:top;}.x-form-field-wrap{position:relative;left:0;top:0;text-align:left;zoom:1;white-space:nowrap;}.ext-strict .ext-ie8 .x-toolbar-cell .x-form-field-trigger-wrap .x-form-trigger{right:0;}.x-form-field-wrap .x-form-trigger-over{background-position:-17px 0;}.x-form-field-wrap .x-form-trigger-click{background-position:-34px 0;}.x-trigger-wrap-focus .x-form-trigger{background-position:-51px 0;}.x-trigger-wrap-focus .x-form-trigger-over{background-position:-68px 0;}.x-trigger-wrap-focus .x-form-trigger-click{background-position:-85px 0;}.x-trigger-wrap-focus .x-form-trigger{border-bottom:1px solid;}.x-item-disabled .x-form-trigger-over{background-position:0 0!important;border-bottom:1px solid;}.x-item-disabled .x-form-trigger-click{background-position:0 0!important;border-bottom:1px solid;}.x-trigger-noedit{cursor:pointer;}.x-form-focus,textarea.x-form-focus{border:1px solid;}.x-form-invalid,textarea.x-form-invalid{background:repeat-x bottom;border:1px solid;}.x-form-inner-invalid,textarea.x-form-inner-invalid{background:repeat-x bottom;}.x-editor{visibility:hidden;padding:0;margin:0;}.x-form-grow-sizer{left:-10000px;padding:8px 3px;position:absolute;visibility:hidden;top:-10000px;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;zoom:1;}.x-form-grow-sizer p{margin:0!important;border:0 none!important;padding:0!important;}.x-form-item{display:block;margin-bottom:4px;zoom:1;}.x-form-item label.x-form-item-label{display:block;float:left;width:100px;padding:3px;padding-left:0;clear:left;z-index:2;position:relative;}.x-form-element{padding-left:105px;position:relative;}.x-form-invalid-msg{padding:2px;padding-left:18px;background:transparent no-repeat 0 2px;line-height:16px;width:200px;}.x-form-label-left label.x-form-item-label{text-align:left;}.x-form-label-right label.x-form-item-label{text-align:right;}.x-form-label-top .x-form-item label.x-form-item-label{width:auto;float:none;clear:none;display:inline;margin-bottom:4px;position:static;}.x-form-label-top .x-form-element{padding-left:0;padding-top:4px;}.x-form-label-top .x-form-item{padding-bottom:4px;}.x-small-editor .x-form-text{height:20px;line-height:16px;vertical-align:middle;}.ext-ie6 .x-small-editor .x-form-text,.ext-ie7 .x-small-editor .x-form-text{margin-top:-1px!important;margin-bottom:-1px!important;height:20px!important;line-height:16px!important;}.ext-strict .x-small-editor .x-form-text{height:16px!important;}.ext-ie6 .x-small-editor .x-form-text,.ext-ie7 .x-small-editor .x-form-text{height:20px;line-height:16px;}.ext-border-box .x-small-editor .x-form-text{height:20px;}.x-small-editor .x-form-select-one{height:20px;line-height:16px;vertical-align:middle;}.x-small-editor .x-form-num-field{text-align:right;}.x-small-editor .x-form-field-wrap .x-form-trigger{height:19px;}.ext-webkit .x-small-editor .x-form-text{padding-top:3px;font-size:100%;}.ext-strict .ext-webkit .x-small-editor .x-form-text{height:14px!important;}.x-form-clear{clear:both;height:0;overflow:hidden;line-height:0;font-size:0;}.x-form-clear-left{clear:left;height:0;overflow:hidden;line-height:0;font-size:0;}.ext-ie6 .x-form-check-wrap input,.ext-border-box .x-form-check-wrap input{margin-top:3px;}.x-form-cb-label{position:relative;margin-left:4px;top:2px;}.ext-ie .x-form-cb-label{top:1px;}.ext-ie6 .x-form-cb-label,.ext-border-box .x-form-cb-label{top:3px;}.x-form-display-field{padding-top:2px;}.ext-gecko .x-form-display-field,.ext-strict .ext-ie7 .x-form-display-field{padding-top:1px;}.ext-ie .x-form-display-field{padding-top:3px;}.ext-strict .ext-ie8 .x-form-display-field{padding-top:0;}.x-form-column{float:left;padding:0;margin:0;width:48%;overflow:hidden;zoom:1;}.x-form .x-form-btns-ct .x-btn{float:right;clear:none;}.x-form .x-form-btns-ct .x-form-btns td{border:0;padding:0;}.x-form .x-form-btns-ct .x-form-btns-right table{float:right;clear:none;}.x-form .x-form-btns-ct .x-form-btns-left table{float:left;clear:none;}.x-form .x-form-btns-ct .x-form-btns-center{text-align:center;}.x-form .x-form-btns-ct .x-form-btns-center table{margin:0 auto;}.x-form .x-form-btns-ct table td.x-form-btn-td{padding:3px;}.x-form .x-form-btns-ct .x-btn-focus .x-btn-left{background-position:0 -147px;}.x-form .x-form-btns-ct .x-btn-focus .x-btn-right{background-position:0 -168px;}.x-form .x-form-btns-ct .x-btn-focus .x-btn-center{background-position:0 -189px;}.x-form .x-form-btns-ct .x-btn-click .x-btn-center{background-position:0 -126px;}.x-form .x-form-btns-ct .x-btn-click .x-btn-right{background-position:0 -84px;}.x-form .x-form-btns-ct .x-btn-click .x-btn-left{background-position:0 -63px;}.x-form-invalid-icon{width:16px;height:18px;visibility:hidden;position:absolute;left:0;top:0;display:block;background:transparent no-repeat 0 2px;}.x-fieldset{border:1px solid;padding:10px;margin-bottom:10px;display:block;}.ext-webkit .x-fieldset-header{padding-top:1px;}.ext-ie .x-fieldset legend{margin-bottom:10px;}.ext-strict .ext-ie9 .x-fieldset legend.x-fieldset-header{padding-top:1px;}.ext-ie .x-fieldset{padding-top:0;padding-bottom:10px;}.x-fieldset legend .x-tool-toggle{margin-right:3px;margin-left:0;float:left!important;}.x-fieldset legend input{margin-right:3px;float:left!important;height:13px;width:13px;}fieldset.x-panel-collapsed{padding-bottom:0!important;border-width:1px 1px 0 1px!important;border-left-color:transparent;border-right-color:transparent;}.ext-ie6 fieldset.x-panel-collapsed{padding-bottom:0!important;border-width:1px 0 0 0!important;margin-left:1px;margin-right:1px;}fieldset.x-panel-collapsed .x-fieldset-bwrap{visibility:hidden;position:absolute;left:-1000px;top:-1000px;}.ext-ie .x-fieldset-bwrap{zoom:1;}.x-fieldset-noborder{border:0 none transparent;}.x-fieldset-noborder legend{margin-left:-3px;}.ext-ie .x-fieldset-noborder legend{position:relative;margin-bottom:23px;}.ext-ie .x-fieldset-noborder legend span{position:absolute;left:16px;}.ext-gecko .x-window-body .x-form-item{-moz-outline:0;outline:0;overflow:auto;}.ext-mac.ext-gecko .x-window-body .x-form-item{overflow:hidden;}.ext-gecko .x-form-item{-moz-outline:0;outline:0;}.x-hide-label label.x-form-item-label{display:none;}.x-hide-label .x-form-element{padding-left:0!important;}.x-form-label-top .x-hide-label label.x-form-item-label{display:none;}.x-fieldset{overflow:hidden;}.x-fieldset-bwrap{overflow:hidden;zoom:1;}.x-fieldset-body{overflow:hidden;}.x-btn{cursor:pointer;white-space:nowrap;}.x-btn button{border:0 none;background-color:transparent;padding-left:3px;padding-right:3px;cursor:pointer;margin:0;overflow:visible;width:auto;-moz-outline:0 none;outline:0 none;}* html .ext-ie .x-btn button{width:1px;}.ext-gecko .x-btn button,.ext-webkit .x-btn button{padding-left:0;padding-right:0;}.ext-gecko .x-btn button::-moz-focus-inner{padding:0;}.ext-ie .x-btn button{padding-top:2px;}.x-btn td{padding:0!important;}.x-btn-text{cursor:pointer;white-space:nowrap;padding:0;}.x-btn-noicon .x-btn-small .x-btn-text{height:16px;}.x-btn-noicon .x-btn-medium .x-btn-text{height:24px;}.x-btn-noicon .x-btn-large .x-btn-text{height:32px;}.x-btn-icon .x-btn-text{background-position:center;background-repeat:no-repeat;}.x-btn-icon .x-btn-small .x-btn-text{height:16px;width:16px;}.x-btn-icon .x-btn-medium .x-btn-text{height:24px;width:24px;}.x-btn-icon .x-btn-large .x-btn-text{height:32px;width:32px;}.x-btn-text-icon .x-btn-icon-small-left .x-btn-text{background-position:0 center;background-repeat:no-repeat;padding-left:18px;height:16px;}.x-btn-text-icon .x-btn-icon-medium-left .x-btn-text{background-position:0 center;background-repeat:no-repeat;padding-left:26px;height:24px;}.x-btn-text-icon .x-btn-icon-large-left .x-btn-text{background-position:0 center;background-repeat:no-repeat;padding-left:34px;height:32px;}.x-btn-text-icon .x-btn-icon-small-top .x-btn-text{background-position:center 0;background-repeat:no-repeat;padding-top:18px;}.x-btn-text-icon .x-btn-icon-medium-top .x-btn-text{background-position:center 0;background-repeat:no-repeat;padding-top:26px;}.x-btn-text-icon .x-btn-icon-large-top .x-btn-text{background-position:center 0;background-repeat:no-repeat;padding-top:34px;}.x-btn-text-icon .x-btn-icon-small-right .x-btn-text{background-position:right center;background-repeat:no-repeat;padding-right:18px;height:16px;}.x-btn-text-icon .x-btn-icon-medium-right .x-btn-text{background-position:right center;background-repeat:no-repeat;padding-right:26px;height:24px;}.x-btn-text-icon .x-btn-icon-large-right .x-btn-text{background-position:right center;background-repeat:no-repeat;padding-right:34px;height:32px;}.x-btn-text-icon .x-btn-icon-small-bottom .x-btn-text{background-position:center bottom;background-repeat:no-repeat;padding-bottom:18px;}.x-btn-text-icon .x-btn-icon-medium-bottom .x-btn-text{background-position:center bottom;background-repeat:no-repeat;padding-bottom:26px;}.x-btn-text-icon .x-btn-icon-large-bottom .x-btn-text{background-position:center bottom;background-repeat:no-repeat;padding-bottom:34px;}.x-btn-tr i,.x-btn-tl i,.x-btn-mr i,.x-btn-ml i,.x-btn-br i,.x-btn-bl i{font-size:1px;line-height:1px;width:3px;display:block;overflow:hidden;}.x-btn-tr i,.x-btn-tl i,.x-btn-br i,.x-btn-bl i{height:3px;}.x-btn-tl{width:3px;height:3px;background:no-repeat 0 0;}.x-btn-tr{width:3px;height:3px;background:no-repeat -3px 0;}.x-btn-tc{height:3px;background:repeat-x 0 -6px;}.x-btn-ml{width:3px;background:no-repeat 0 -24px;}.x-btn-mr{width:3px;background:no-repeat -3px -24px;}.x-btn-mc{background:repeat-x 0 -1096px;vertical-align:middle;text-align:center;padding:0 5px;cursor:pointer;white-space:nowrap;}.ext-strict .ext-ie6 .x-btn-mc,.ext-strict .ext-ie7 .x-btn-mc{height:100%;}.x-btn-bl{width:3px;height:3px;background:no-repeat 0 -3px;}.x-btn-br{width:3px;height:3px;background:no-repeat -3px -3px;}.x-btn-bc{height:3px;background:repeat-x 0 -15px;}.x-btn-over .x-btn-tl{background-position:-6px 0;}.x-btn-over .x-btn-tr{background-position:-9px 0;}.x-btn-over .x-btn-tc{background-position:0 -9px;}.x-btn-over .x-btn-ml{background-position:-6px -24px;}.x-btn-over .x-btn-mr{background-position:-9px -24px;}.x-btn-over .x-btn-mc{background-position:0 -2168px;}.x-btn-over .x-btn-bl{background-position:-6px -3px;}.x-btn-over .x-btn-br{background-position:-9px -3px;}.x-btn-over .x-btn-bc{background-position:0 -18px;}.x-btn-click .x-btn-tl,.x-btn-menu-active .x-btn-tl,.x-btn-pressed .x-btn-tl{background-position:-12px 0;}.x-btn-click .x-btn-tr,.x-btn-menu-active .x-btn-tr,.x-btn-pressed .x-btn-tr{background-position:-15px 0;}.x-btn-click .x-btn-tc,.x-btn-menu-active .x-btn-tc,.x-btn-pressed .x-btn-tc{background-position:0 -12px;}.x-btn-click .x-btn-ml,.x-btn-menu-active .x-btn-ml,.x-btn-pressed .x-btn-ml{background-position:-12px -24px;}.x-btn-click .x-btn-mr,.x-btn-menu-active .x-btn-mr,.x-btn-pressed .x-btn-mr{background-position:-15px -24px;}.x-btn-click .x-btn-mc,.x-btn-menu-active .x-btn-mc,.x-btn-pressed .x-btn-mc{background-position:0 -3240px;}.x-btn-click .x-btn-bl,.x-btn-menu-active .x-btn-bl,.x-btn-pressed .x-btn-bl{background-position:-12px -3px;}.x-btn-click .x-btn-br,.x-btn-menu-active .x-btn-br,.x-btn-pressed .x-btn-br{background-position:-15px -3px;}.x-btn-click .x-btn-bc,.x-btn-menu-active .x-btn-bc,.x-btn-pressed .x-btn-bc{background-position:0 -21px;}.x-btn-disabled *{cursor:default!important;}.x-btn-mc em.x-btn-arrow{display:block;background:transparent no-repeat right center;padding-right:10px;}.x-btn-mc em.x-btn-split{display:block;background:transparent no-repeat right center;padding-right:14px;}.x-btn-mc em.x-btn-arrow-bottom{display:block;background:transparent no-repeat center bottom;padding-bottom:14px;}.x-btn-mc em.x-btn-split-bottom{display:block;background:transparent no-repeat center bottom;padding-bottom:14px;}.x-btn-as-arrow .x-btn-mc em{display:block;background-color:transparent;padding-bottom:14px;}.x-btn-group{padding:1px;}.x-btn-group-header{padding:2px;text-align:center;}.x-btn-group-tc{background:transparent repeat-x 0 0;overflow:hidden;}.x-btn-group-tl{background:transparent no-repeat 0 0;padding-left:3px;zoom:1;}.x-btn-group-tr{background:transparent no-repeat right 0;zoom:1;padding-right:3px;}.x-btn-group-bc{background:transparent repeat-x 0 bottom;zoom:1;}.x-btn-group-bc .x-panel-footer{zoom:1;}.x-btn-group-bl{background:transparent no-repeat 0 bottom;padding-left:3px;zoom:1;}.x-btn-group-br{background:transparent no-repeat right bottom;padding-right:3px;zoom:1;}.x-btn-group-mc{border:0 none;padding:1px 0 0 0;margin:0;}.x-btn-group-mc .x-btn-group-body{background-color:transparent;border:0 none;}.x-btn-group-ml{background:transparent repeat-y 0 0;padding-left:3px;zoom:1;}.x-btn-group-mr{background:transparent repeat-y right 0;padding-right:3px;zoom:1;}.x-btn-group-bc .x-btn-group-footer{padding-bottom:6px;}.x-panel-nofooter .x-btn-group-bc{height:3px;font-size:0;line-height:0;}.x-btn-group-bwrap{overflow:hidden;zoom:1;}.x-btn-group-body{overflow:hidden;zoom:1;}.x-btn-group-notitle .x-btn-group-tc{background:transparent repeat-x 0 0;overflow:hidden;height:2px;}.x-toolbar{border-style:solid;border-width:0 0 1px 0;display:block;padding:2px;background:repeat-x top left;position:relative;left:0;top:0;zoom:1;overflow:hidden;}.x-toolbar-left{width:100%;}.x-toolbar .x-item-disabled .x-btn-icon{opacity:.35;-moz-opacity:.35;filter:alpha(opacity=35);}.x-toolbar td{vertical-align:middle;}.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{white-space:nowrap;}.x-toolbar .x-item-disabled{cursor:default;opacity:.6;-moz-opacity:.6;filter:alpha(opacity=60);}.x-toolbar .x-item-disabled *{cursor:default;}.x-toolbar .x-toolbar-cell{vertical-align:middle;}.x-toolbar .x-btn-tl,.x-toolbar .x-btn-tr,.x-toolbar .x-btn-tc,.x-toolbar .x-btn-ml,.x-toolbar .x-btn-mr,.x-toolbar .x-btn-mc,.x-toolbar .x-btn-bl,.x-toolbar .x-btn-br,.x-toolbar .x-btn-bc{background-position:500px 500px;}.x-toolbar .x-btn-over .x-btn-tl{background-position:-6px 0;}.x-toolbar .x-btn-over .x-btn-tr{background-position:-9px 0;}.x-toolbar .x-btn-over .x-btn-tc{background-position:0 -9px;}.x-toolbar .x-btn-over .x-btn-ml{background-position:-6px -24px;}.x-toolbar .x-btn-over .x-btn-mr{background-position:-9px -24px;}.x-toolbar .x-btn-over .x-btn-mc{background-position:0 -2168px;}.x-toolbar .x-btn-over .x-btn-bl{background-position:-6px -3px;}.x-toolbar .x-btn-over .x-btn-br{background-position:-9px -3px;}.x-toolbar .x-btn-over .x-btn-bc{background-position:0 -18px;}.x-toolbar .x-btn-click .x-btn-tl,.x-toolbar .x-btn-menu-active .x-btn-tl,.x-toolbar .x-btn-pressed .x-btn-tl{background-position:-12px 0;}.x-toolbar .x-btn-click .x-btn-tr,.x-toolbar .x-btn-menu-active .x-btn-tr,.x-toolbar .x-btn-pressed .x-btn-tr{background-position:-15px 0;}.x-toolbar .x-btn-click .x-btn-tc,.x-toolbar .x-btn-menu-active .x-btn-tc,.x-toolbar .x-btn-pressed .x-btn-tc{background-position:0 -12px;}.x-toolbar .x-btn-click .x-btn-ml,.x-toolbar .x-btn-menu-active .x-btn-ml,.x-toolbar .x-btn-pressed .x-btn-ml{background-position:-12px -24px;}.x-toolbar .x-btn-click .x-btn-mr,.x-toolbar .x-btn-menu-active .x-btn-mr,.x-toolbar .x-btn-pressed .x-btn-mr{background-position:-15px -24px;}.x-toolbar .x-btn-click .x-btn-mc,.x-toolbar .x-btn-menu-active .x-btn-mc,.x-toolbar .x-btn-pressed .x-btn-mc{background-position:0 -3240px;}.x-toolbar .x-btn-click .x-btn-bl,.x-toolbar .x-btn-menu-active .x-btn-bl,.x-toolbar .x-btn-pressed .x-btn-bl{background-position:-12px -3px;}.x-toolbar .x-btn-click .x-btn-br,.x-toolbar .x-btn-menu-active .x-btn-br,.x-toolbar .x-btn-pressed .x-btn-br{background-position:-15px -3px;}.x-toolbar .x-btn-click .x-btn-bc,.x-toolbar .x-btn-menu-active .x-btn-bc,.x-toolbar .x-btn-pressed .x-btn-bc{background-position:0 -21px;}.x-toolbar div.xtb-text{padding:2px 2px 0;line-height:16px;display:block;}.x-toolbar .xtb-sep{background-position:center;background-repeat:no-repeat;display:block;font-size:1px;height:16px;width:4px;overflow:hidden;cursor:default;margin:0 2px 0;border:0;}.x-toolbar .xtb-spacer{width:2px;}.x-tbar-page-number{width:30px;height:14px;}.ext-ie .x-tbar-page-number{margin-top:2px;}.x-paging-info{position:absolute;top:5px;right:8px;}.x-toolbar-ct{width:100%;}.x-toolbar-right td{text-align:center;}.x-panel-tbar,.x-panel-bbar,.x-window-tbar,.x-window-bbar,.x-tab-panel-tbar,.x-tab-panel-bbar,.x-plain-tbar,.x-plain-bbar{overflow:hidden;zoom:1;}.x-toolbar-more .x-btn-small .x-btn-text{height:16px;width:12px;}.x-toolbar-more em.x-btn-arrow{display:inline;background-color:transparent;padding-right:0;}.x-toolbar-more .x-btn-mc em.x-btn-arrow{background-image:none;}div.x-toolbar-no-items{color:gray!important;padding:5px 10px!important;}.ext-border-box .x-toolbar-cell .x-form-text{margin-bottom:-1px!important;}.ext-border-box .x-toolbar-cell .x-form-field-wrap .x-form-text{margin:0!important;}.ext-ie .x-toolbar-cell .x-form-field-wrap{height:21px;}.ext-ie .x-toolbar-cell .x-form-text{position:relative;top:-1px;}.ext-strict .ext-ie8 .x-toolbar-cell .x-form-field-trigger-wrap .x-form-text,.ext-strict .ext-ie .x-toolbar-cell .x-form-text{top:0;}.x-toolbar-right td .x-form-field-trigger-wrap{text-align:left;}.x-toolbar-cell .x-form-checkbox,.x-toolbar-cell .x-form-radio{margin-top:5px;}.x-toolbar-cell .x-form-cb-label{vertical-align:bottom;top:1px;}.ext-ie .x-toolbar-cell .x-form-checkbox,.ext-ie .x-toolbar-cell .x-form-radio{margin-top:4px;}.ext-ie .x-toolbar-cell .x-form-cb-label{top:0;}.x-grid3{position:relative;overflow:hidden;}.x-grid-panel .x-panel-body{overflow:hidden!important;}.x-grid-panel .x-panel-mc .x-panel-body{border:1px solid;}.x-grid3 table{table-layout:fixed;}.x-grid3-viewport{overflow:hidden;}.x-grid3-hd-row td,.x-grid3-row td,.x-grid3-summary-row td{-moz-outline:0;outline:0;-moz-user-focus:normal;}.x-grid3-row td,.x-grid3-summary-row td{line-height:13px;vertical-align:top;padding-left:1px;padding-right:1px;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:ignore;}.x-grid3-cell{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:ignore;}.x-grid3-hd-row td{line-height:15px;vertical-align:middle;border-left:1px solid;border-right:1px solid;}.x-grid3-hd-row .x-grid3-marker-hd{padding:3px;}.x-grid3-row .x-grid3-marker{padding:3px;}.x-grid3-cell-inner,.x-grid3-hd-inner{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;padding:3px 3px 3px 5px;white-space:nowrap;}.x-action-col-cell .x-grid3-cell-inner{padding-top:1px;padding-bottom:1px;}.x-action-col-icon{cursor:pointer;}.x-grid3-hd-inner{position:relative;cursor:inherit;padding:4px 3px 4px 5px;}.x-grid3-row-body{white-space:normal;}.x-grid3-body-cell{-moz-outline:0 none;outline:0 none;}.ext-ie .x-grid3-cell-inner,.ext-ie .x-grid3-hd-inner{width:100%;}.ext-strict .x-grid3-cell-inner,.ext-strict .x-grid3-hd-inner{width:auto;}.x-grid-row-loading{background:no-repeat center center;}.x-grid-page{overflow:hidden;}.x-grid3-row{cursor:default;border:1px solid;width:100%;}.x-grid3-row-over{border:1px solid;background:repeat-x left top;}.x-grid3-resize-proxy{width:1px;left:0;cursor:e-resize;cursor:col-resize;position:absolute;top:0;height:100px;overflow:hidden;visibility:hidden;border:0 none;z-index:7;}.x-grid3-resize-marker{width:1px;left:0;position:absolute;top:0;height:100px;overflow:hidden;visibility:hidden;border:0 none;z-index:7;}.x-grid3-focus{position:absolute;left:0;top:0;width:1px;height:1px;line-height:1px;font-size:1px;-moz-outline:0 none;outline:0 none;-moz-user-select:text;-khtml-user-select:text;-webkit-user-select:ignore;}.x-grid3-header{background:repeat-x 0 bottom;cursor:default;zoom:1;padding:1px 0 0 0;}.x-grid3-header-pop{border-left:1px solid;float:right;clear:none;}.x-grid3-header-pop-inner{border-left:1px solid;width:14px;height:19px;background:transparent no-repeat center center;}.ext-ie .x-grid3-header-pop-inner{width:15px;}.ext-strict .x-grid3-header-pop-inner{width:14px;}.x-grid3-header-inner{overflow:hidden;zoom:1;float:left;}.x-grid3-header-offset{padding-left:1px;text-align:left;}td.x-grid3-hd-over,td.sort-desc,td.sort-asc,td.x-grid3-hd-menu-open{border-left:1px solid;border-right:1px solid;}td.x-grid3-hd-over .x-grid3-hd-inner,td.sort-desc .x-grid3-hd-inner,td.sort-asc .x-grid3-hd-inner,td.x-grid3-hd-menu-open .x-grid3-hd-inner{background:repeat-x left bottom;}.x-grid3-sort-icon{background-repeat:no-repeat;display:none;height:4px;width:13px;margin-left:3px;vertical-align:middle;}.sort-asc .x-grid3-sort-icon,.sort-desc .x-grid3-sort-icon{display:inline;}.ext-strict .ext-ie .x-grid3-header-inner,.ext-strict .ext-ie6 .x-grid3-hd{position:relative;}.ext-strict .ext-ie6 .x-grid3-hd-inner{position:static;}.x-grid3-body{zoom:1;}.x-grid3-scroller{overflow:auto;zoom:1;position:relative;}.x-grid3-cell-text,.x-grid3-hd-text{display:block;padding:3px 5px 3px 5px;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:ignore;}.x-grid3-split{background-position:center;background-repeat:no-repeat;cursor:e-resize;cursor:col-resize;display:block;font-size:1px;height:16px;overflow:hidden;position:absolute;top:2px;width:6px;z-index:3;}.x-dd-drag-proxy .x-grid3-hd-inner{background:repeat-x left bottom;width:120px;padding:3px;border:1px solid;overflow:hidden;}.col-move-top,.col-move-bottom{width:9px;height:9px;position:absolute;top:0;line-height:1px;font-size:1px;overflow:hidden;visibility:hidden;z-index:20000;background:transparent no-repeat left top;}.x-grid3-row-selected{border:1px dotted;}.x-grid3-locked td.x-grid3-row-marker,.x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker{background:repeat-x 0 bottom!important;vertical-align:middle!important;padding:0;border-top:1px solid;border-bottom:none!important;border-right:1px solid!important;text-align:center;}.x-grid3-locked td.x-grid3-row-marker div,.x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker div{padding:0 4px;text-align:center;}.x-grid3-dirty-cell{background:transparent no-repeat 0 0;}.x-grid3-topbar,.x-grid3-bottombar{overflow:hidden;display:none;zoom:1;position:relative;}.x-grid3-topbar .x-toolbar{border-right:0 none;}.x-grid3-bottombar .x-toolbar{border-right:0 none;border-bottom:0 none;border-top:1px solid;}.x-props-grid .x-grid3-cell{padding:1px;}.x-props-grid .x-grid3-td-name .x-grid3-cell-inner{background:transparent repeat-y -16px!important;padding-left:12px;}.x-props-grid .x-grid3-body .x-grid3-td-name{padding:1px;padding-right:0;border:0 none;border-right:1px solid;}.x-grid3-col-dd{border:0 none;padding:0;background-color:transparent;}.x-dd-drag-ghost .x-grid3-dd-wrap{padding:1px 3px 3px 1px;}.x-grid3-hd{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:ignore;}.x-grid3-hd-btn{display:none;position:absolute;width:14px;background:no-repeat left center;right:0;top:0;z-index:2;cursor:pointer;}.x-grid3-hd-over .x-grid3-hd-btn,.x-grid3-hd-menu-open .x-grid3-hd-btn{display:block;}a.x-grid3-hd-btn:hover{background-position:-14px center;}.x-grid3-body .x-grid3-td-expander{background:transparent repeat-y right;}.x-grid3-body .x-grid3-td-expander .x-grid3-cell-inner{padding:0!important;height:100%;}.x-grid3-row-expander{width:100%;height:18px;background-position:4px 2px;background-repeat:no-repeat;background-color:transparent;}.x-grid3-row-collapsed .x-grid3-row-expander{background-position:4px 2px;}.x-grid3-row-expanded .x-grid3-row-expander{background-position:-21px 2px;}.x-grid3-row-collapsed .x-grid3-row-body{display:none!important;}.x-grid3-row-expanded .x-grid3-row-body{display:block!important;}.x-grid3-body .x-grid3-td-checker{background:transparent repeat-y right;}.x-grid3-body .x-grid3-td-checker .x-grid3-cell-inner,.x-grid3-header .x-grid3-td-checker .x-grid3-hd-inner{padding:0!important;height:100%;}.x-grid3-row-checker,.x-grid3-hd-checker{width:100%;height:18px;background-position:2px 2px;background-repeat:no-repeat;background-color:transparent;}.x-grid3-row .x-grid3-row-checker{background-position:2px 2px;}.x-grid3-row-selected .x-grid3-row-checker,.x-grid3-hd-checker-on .x-grid3-hd-checker,.x-grid3-row-checked .x-grid3-row-checker{background-position:-23px 2px;}.x-grid3-hd-checker{background-position:2px 1px;}.ext-border-box .x-grid3-hd-checker{background-position:2px 3px;}.x-grid3-hd-checker-on .x-grid3-hd-checker{background-position:-23px 1px;}.ext-border-box .x-grid3-hd-checker-on .x-grid3-hd-checker{background-position:-23px 3px;}.x-grid3-body .x-grid3-td-numberer{background:transparent repeat-y right;}.x-grid3-body .x-grid3-td-numberer .x-grid3-cell-inner{padding:3px 5px 0 0!important;text-align:right;}.x-grid3-body .x-grid3-td-row-icon{background:transparent repeat-y right;vertical-align:top;text-align:center;}.x-grid3-body .x-grid3-td-row-icon .x-grid3-cell-inner{padding:0!important;background-position:center center;background-repeat:no-repeat;width:16px;height:16px;margin-left:2px;margin-top:3px;}.x-grid3-body .x-grid3-row-selected .x-grid3-td-numberer,.x-grid3-body .x-grid3-row-selected .x-grid3-td-checker,.x-grid3-body .x-grid3-row-selected .x-grid3-td-expander{background:transparent repeat-y right;}.x-grid3-body .x-grid3-check-col-td .x-grid3-cell-inner{padding:1px 0 0 0!important;}.x-grid3-check-col{width:100%;height:16px;background-position:center center;background-repeat:no-repeat;background-color:transparent;}.x-grid3-check-col-on{width:100%;height:16px;background-position:center center;background-repeat:no-repeat;background-color:transparent;}.x-grid-group,.x-grid-group-body,.x-grid-group-hd{zoom:1;}.x-grid-group-hd{border-bottom:2px solid;cursor:pointer;padding-top:6px;}.x-grid-group-hd div.x-grid-group-title{background:transparent no-repeat 3px 3px;padding:4px 4px 4px 17px;}.x-grid-group-collapsed .x-grid-group-body{display:none;}.ext-ie6 .x-grid3 .x-editor .x-form-text,.ext-ie7 .x-grid3 .x-editor .x-form-text{position:relative;top:-1px;}.x-grid-editor .x-form-check-wrap{text-align:center;margin-top:-4px;}.ext-ie .x-props-grid .x-editor .x-form-text{position:static;top:0;}.x-grid-empty{padding:10px;}.ext-ie7 .x-grid-panel .x-panel-bbar{position:relative;}.ext-ie7 .x-grid-panel .x-panel-mc .x-panel-bbar{position:static;}.ext-ie6 .x-grid3-header{position:relative;}.ext-webkit .x-grid-panel .x-panel-bwrap{-webkit-user-select:none;}.ext-webkit .x-tbar-page-number{-webkit-user-select:ignore;}.x-grid-with-col-lines .x-grid3-row td.x-grid3-cell{padding-right:0;border-right:1px solid;}.x-pivotgrid .x-grid3-header-offset table{width:100%;border-collapse:collapse;}.x-pivotgrid .x-grid3-header-offset table td{padding:4px 3px 4px 5px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:11px;line-height:13px;font-family:tahoma;}.x-pivotgrid .x-grid3-row-headers{display:block;float:left;}.x-pivotgrid .x-grid3-row-headers table{height:100%;width:100%;border-collapse:collapse;}.x-pivotgrid .x-grid3-row-headers table td{height:18px;padding:2px 7px 0 0;text-align:right;text-overflow:ellipsis;font-size:11px;font-family:tahoma;}.ext-gecko .x-pivotgrid .x-grid3-row-headers table td{height:21px;}.x-grid3-header-title{top:0;left:0;position:absolute;text-align:center;vertical-align:middle;font-family:tahoma;font-size:11px;padding:auto 1px;display:table-cell;}.x-grid3-header-title span{position:absolute;top:50%;left:0;width:100%;margin-top:-6px;}.x-dd-drag-proxy{position:absolute;left:0;top:0;visibility:hidden;z-index:15000;}.x-dd-drag-ghost{-moz-opacity:.85;opacity:.85;filter:alpha(opacity=85);border:1px solid;padding:3px;padding-left:20px;white-space:nowrap;}.x-dd-drag-repair .x-dd-drag-ghost{-moz-opacity:.4;opacity:.4;filter:alpha(opacity=40);border:0 none;padding:0;background-color:transparent;}.x-dd-drag-repair .x-dd-drop-icon{visibility:hidden;}.x-dd-drop-icon{position:absolute;top:3px;left:3px;display:block;width:16px;height:16px;background-color:transparent;background-position:center;background-repeat:no-repeat;z-index:1;}.x-view-selector{position:absolute;left:0;top:0;width:0;border:1px dotted;opacity:.5;-moz-opacity:.5;filter:alpha(opacity=50);zoom:1;}.ext-strict .ext-ie .x-tree .x-panel-bwrap{position:relative;overflow:hidden;}.x-tree-icon,.x-tree-ec-icon,.x-tree-elbow-line,.x-tree-elbow,.x-tree-elbow-end,.x-tree-elbow-plus,.x-tree-elbow-minus,.x-tree-elbow-end-plus,.x-tree-elbow-end-minus{border:0 none;height:18px;margin:0;padding:0;vertical-align:top;width:16px;background-repeat:no-repeat;}.x-tree-node-collapsed .x-tree-node-icon,.x-tree-node-expanded .x-tree-node-icon,.x-tree-node-leaf .x-tree-node-icon{border:0 none;height:18px;margin:0;padding:0;vertical-align:top;width:16px;background-position:center;background-repeat:no-repeat;}.ext-ie .x-tree-node-indent img,.ext-ie .x-tree-node-icon,.ext-ie .x-tree-ec-icon{vertical-align:middle!important;}.ext-strict .ext-ie8 .x-tree-node-indent img,.ext-strict .ext-ie8 .x-tree-node-icon,.ext-strict .ext-ie8 .x-tree-ec-icon{vertical-align:top!important;}input.x-tree-node-cb{margin-left:1px;height:19px;vertical-align:bottom;}.ext-ie input.x-tree-node-cb{margin-left:0;margin-top:1px;width:16px;height:16px;vertical-align:middle;}.ext-strict .ext-ie8 input.x-tree-node-cb{margin:1px 1px;height:14px;vertical-align:bottom;}.ext-strict .ext-ie8 input.x-tree-node-cb+a{vertical-align:bottom;}.ext-opera input.x-tree-node-cb{height:14px;vertical-align:middle;}.x-tree-noicon .x-tree-node-icon{width:0;height:0;}.x-tree-no-lines .x-tree-elbow{background-color:transparent;}.x-tree-no-lines .x-tree-elbow-end{background-color:transparent;}.x-tree-no-lines .x-tree-elbow-line{background-color:transparent;}.x-tree-arrows .x-tree-elbow{background-color:transparent;}.x-tree-arrows .x-tree-elbow-plus{background:transparent no-repeat 0 0;}.x-tree-arrows .x-tree-elbow-minus{background:transparent no-repeat -16px 0;}.x-tree-arrows .x-tree-elbow-end{background-color:transparent;}.x-tree-arrows .x-tree-elbow-end-plus{background:transparent no-repeat 0 0;}.x-tree-arrows .x-tree-elbow-end-minus{background:transparent no-repeat -16px 0;}.x-tree-arrows .x-tree-elbow-line{background-color:transparent;}.x-tree-arrows .x-tree-ec-over .x-tree-elbow-plus{background-position:-32px 0;}.x-tree-arrows .x-tree-ec-over .x-tree-elbow-minus{background-position:-48px 0;}.x-tree-arrows .x-tree-ec-over .x-tree-elbow-end-plus{background-position:-32px 0;}.x-tree-arrows .x-tree-ec-over .x-tree-elbow-end-minus{background-position:-48px 0;}.x-tree-elbow-plus,.x-tree-elbow-minus,.x-tree-elbow-end-plus,.x-tree-elbow-end-minus{cursor:pointer;}.ext-ie ul.x-tree-node-ct{font-size:0;line-height:0;zoom:1;}.x-tree-node{white-space:nowrap;}.x-tree-node-el{line-height:18px;cursor:pointer;}.x-tree-node a,.x-dd-drag-ghost a{text-decoration:none;-khtml-user-select:none;-moz-user-select:none;-webkit-user-select:ignore;-kthml-user-focus:normal;-moz-user-focus:normal;-moz-outline:0 none;outline:0 none;}.x-tree-node a span,.x-dd-drag-ghost a span{text-decoration:none;padding:1px 3px 1px 2px;}.x-tree-node .x-tree-node-disabled .x-tree-node-icon{-moz-opacity:.5;opacity:.5;filter:alpha(opacity=50);}.x-tree-node .x-tree-node-inline-icon{background-color:transparent;}.x-tree-node a:hover,.x-dd-drag-ghost a:hover{text-decoration:none;}.x-tree-node div.x-tree-drag-insert-below{border-bottom:1px dotted;}.x-tree-node div.x-tree-drag-insert-above{border-top:1px dotted;}.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below{border-bottom:0 none;}.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above{border-top:0 none;}.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below a{border-bottom:2px solid;}.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above a{border-top:2px solid;}.x-tree-node .x-tree-drag-append a span{border:1px dotted;}.x-dd-drag-ghost .x-tree-node-indent,.x-dd-drag-ghost .x-tree-ec-icon{display:none!important;}.x-tree-root-ct{zoom:1;}.x-date-picker{border:1px solid;border-top:0 none;position:relative;}.x-date-picker a{-moz-outline:0 none;outline:0 none;}.x-date-inner,.x-date-inner td,.x-date-inner th{border-collapse:separate;}.x-date-middle,.x-date-left,.x-date-right{background:repeat-x 0 -83px;overflow:hidden;}.x-date-middle .x-btn-tc,.x-date-middle .x-btn-tl,.x-date-middle .x-btn-tr,.x-date-middle .x-btn-mc,.x-date-middle .x-btn-ml,.x-date-middle .x-btn-mr,.x-date-middle .x-btn-bc,.x-date-middle .x-btn-bl,.x-date-middle .x-btn-br{background:transparent!important;vertical-align:middle;}.x-date-middle .x-btn-mc em.x-btn-arrow{background:transparent no-repeat right 0;}.x-date-right,.x-date-left{width:18px;}.x-date-right{text-align:right;}.x-date-middle{padding-top:2px;padding-bottom:2px;width:130px;}.x-date-right a,.x-date-left a{display:block;width:16px;height:16px;background-position:center;background-repeat:no-repeat;cursor:pointer;-moz-opacity:.6;opacity:.6;filter:alpha(opacity=60);}.x-date-right a:hover,.x-date-left a:hover{-moz-opacity:1;opacity:1;filter:alpha(opacity=100);}.x-item-disabled .x-date-right a:hover,.x-item-disabled .x-date-left a:hover{-moz-opacity:.6;opacity:.6;filter:alpha(opacity=60);}.x-date-right a{margin-right:2px;text-decoration:none!important;}.x-date-left a{margin-left:2px;text-decoration:none!important;}table.x-date-inner{width:100%;table-layout:fixed;}.ext-webkit table.x-date-inner{width:175px;}.x-date-inner th{width:25px;}.x-date-inner th{background:repeat-x left top;text-align:right!important;border-bottom:1px solid;cursor:default;padding:0;border-collapse:separate;}.x-date-inner th span{display:block;padding:2px;padding-right:7px;}.x-date-inner td{border:1px solid;text-align:right;padding:0;}.x-date-inner a{padding:2px 5px;display:block;text-decoration:none;text-align:right;zoom:1;}.x-date-inner .x-date-active{cursor:pointer;color:black;}.x-date-inner .x-date-selected a{background:repeat-x left top;border:1px solid;padding:1px 4px;}.x-date-inner .x-date-today a{border:1px solid;padding:1px 4px;}.x-date-inner .x-date-prevday a,.x-date-inner .x-date-nextday a{text-decoration:none!important;}.x-date-bottom{padding:4px;border-top:1px solid;background:repeat-x left top;}.x-date-inner a:hover,.x-date-inner .x-date-disabled a:hover{text-decoration:none!important;}.x-item-disabled .x-date-inner a:hover{background:0;}.x-date-inner .x-date-disabled a{cursor:default;}.x-date-menu .x-menu-item{padding:1px 24px 1px 4px;white-space:nowrap;}.x-date-menu .x-menu-item .x-menu-item-icon{width:10px;height:10px;margin-right:5px;background-position:center -4px!important;}.x-date-mp{position:absolute;left:0;top:0;display:none;}.x-date-mp td{padding:2px;font:normal 11px arial,helvetica,tahoma,sans-serif;}td.x-date-mp-month,td.x-date-mp-year,td.x-date-mp-ybtn{border:0 none;text-align:center;vertical-align:middle;width:25%;}.x-date-mp-ok{margin-right:3px;}.x-date-mp-btns button{text-decoration:none;text-align:center;text-decoration:none!important;border:1px solid;padding:1px 3px 1px;cursor:pointer;}.x-date-mp-btns{background:repeat-x left top;}.x-date-mp-btns td{border-top:1px solid;text-align:center;}td.x-date-mp-month a,td.x-date-mp-year a{display:block;padding:2px 4px;text-decoration:none;text-align:center;}td.x-date-mp-month a:hover,td.x-date-mp-year a:hover{text-decoration:none;cursor:pointer;}td.x-date-mp-sel a{padding:1px 3px;background:repeat-x left top;border:1px solid;}.x-date-mp-ybtn a{overflow:hidden;width:15px;height:15px;cursor:pointer;background:transparent no-repeat;display:block;margin:0 auto;}.x-date-mp-ybtn a.x-date-mp-next{background-position:0 -120px;}.x-date-mp-ybtn a.x-date-mp-next:hover{background-position:-15px -120px;}.x-date-mp-ybtn a.x-date-mp-prev{background-position:0 -105px;}.x-date-mp-ybtn a.x-date-mp-prev:hover{background-position:-15px -105px;}.x-date-mp-ybtn{text-align:center;}td.x-date-mp-sep{border-right:1px solid;}.x-tip{position:absolute;top:0;left:0;visibility:hidden;z-index:20002;border:0 none;}.x-tip .x-tip-close{height:15px;float:right;width:15px;margin:0 0 2px 2px;cursor:pointer;display:none;}.x-tip .x-tip-tc{background:transparent no-repeat 0 -62px;padding-top:3px;overflow:hidden;zoom:1;}.x-tip .x-tip-tl{background:transparent no-repeat 0 0;padding-left:6px;overflow:hidden;zoom:1;}.x-tip .x-tip-tr{background:transparent no-repeat right 0;padding-right:6px;overflow:hidden;zoom:1;}.x-tip .x-tip-bc{background:transparent no-repeat 0 -121px;height:3px;overflow:hidden;}.x-tip .x-tip-bl{background:transparent no-repeat 0 -59px;padding-left:6px;zoom:1;}.x-tip .x-tip-br{background:transparent no-repeat right -59px;padding-right:6px;zoom:1;}.x-tip .x-tip-mc{border:0 none;}.x-tip .x-tip-ml{background:no-repeat 0 -124px;padding-left:6px;zoom:1;}.x-tip .x-tip-mr{background:transparent no-repeat right -124px;padding-right:6px;zoom:1;}.ext-ie .x-tip .x-tip-header,.ext-ie .x-tip .x-tip-tc{font-size:0;line-height:0;}.ext-border-box .x-tip .x-tip-header,.ext-border-box .x-tip .x-tip-tc{line-height:1px;}.x-tip .x-tip-header-text{padding:0;margin:0 0 2px 0;}.x-tip .x-tip-body{margin:0!important;line-height:14px;padding:0;}.x-tip .x-tip-body .loading-indicator{margin:0;}.x-tip-draggable .x-tip-header,.x-tip-draggable .x-tip-header-text{cursor:move;}.x-form-invalid-tip .x-tip-tc{background:repeat-x 0 -12px;padding-top:6px;}.x-form-invalid-tip .x-tip-bc{background:repeat-x 0 -18px;height:6px;}.x-form-invalid-tip .x-tip-bl{background:no-repeat 0 -6px;}.x-form-invalid-tip .x-tip-br{background:no-repeat right -6px;}.x-form-invalid-tip .x-tip-body{padding:2px;}.x-form-invalid-tip .x-tip-body{padding-left:24px;background:transparent no-repeat 2px 2px;}.x-tip-anchor{position:absolute;width:9px;height:10px;overflow:hidden;background:transparent no-repeat 0 0;zoom:1;}.x-tip-anchor-bottom{background-position:-9px 0;}.x-tip-anchor-right{background-position:-18px 0;width:10px;}.x-tip-anchor-left{background-position:-28px 0;width:10px;}.x-menu{z-index:15000;zoom:1;background:repeat-y;}.x-menu-floating{border:1px solid;}.x-menu a{text-decoration:none!important;}.ext-ie .x-menu{zoom:1;overflow:hidden;}.x-menu-list{padding:2px;background-color:transparent;border:0 none;overflow:hidden;overflow-y:hidden;}.ext-strict .ext-ie .x-menu-list{position:relative;}.x-menu li{line-height:100%;}.x-menu li.x-menu-sep-li{font-size:1px;line-height:1px;}.x-menu-list-item{white-space:nowrap;display:block;padding:1px;}.x-menu-item{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:ignore;}.x-menu-item-arrow{background:transparent no-repeat right;}.x-menu-sep{display:block;font-size:1px;line-height:1px;margin:2px 3px;border-bottom:1px solid;overflow:hidden;}.x-menu-focus{position:absolute;left:-1px;top:-1px;width:1px;height:1px;line-height:1px;font-size:1px;-moz-outline:0 none;outline:0 none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:ignore;overflow:hidden;display:block;}a.x-menu-item{cursor:pointer;display:block;line-height:16px;outline-color:-moz-use-text-color;outline-style:none;outline-width:0;padding:3px 21px 3px 27px;position:relative;text-decoration:none;white-space:nowrap;}.x-menu-item-active{background-repeat:repeat-x;background-position:left bottom;border-style:solid;border-width:1px 0;margin:0 1px;padding:0;}.x-menu-item-active a.x-menu-item{border-style:solid;border-width:0 1px;margin:0 -1px;}.x-menu-item-icon{border:0 none;height:16px;padding:0;vertical-align:top;width:16px;position:absolute;left:3px;top:3px;margin:0;background-position:center;}.ext-ie .x-menu-item-icon{left:-24px;}.ext-strict .x-menu-item-icon{left:3px;}.ext-ie6 .x-menu-item-icon{left:-24px;}.ext-ie .x-menu-item-icon{vertical-align:middle;}.x-menu-check-item .x-menu-item-icon{background:transparent no-repeat center;}.x-menu-group-item .x-menu-item-icon{background-color:transparent;}.x-menu-item-checked .x-menu-group-item .x-menu-item-icon{background:transparent no-repeat center;}.x-date-menu .x-menu-list{padding:0;}.x-menu-date-item{padding:0;}.x-menu .x-color-palette,.x-menu .x-date-picker{margin-left:26px;margin-right:4px;}.x-menu .x-date-picker{border:1px solid;margin-top:2px;margin-bottom:2px;}.x-menu-plain .x-color-palette,.x-menu-plain .x-date-picker{margin:0;border:0 none;}.x-date-menu{padding:0!important;}.ext-strict .ext-ie6 .x-menu-sep-li{padding:3px 4px;}.ext-strict .ext-ie6 .x-menu-sep{margin:0;height:1px;}.ext-webkit .x-menu-sep{height:1px;}.ext-ie .x-date-menu{height:199px;}.ext-strict .ext-ie .x-date-menu,.ext-border-box .ext-ie8 .x-date-menu{height:197px;}.ext-strict .ext-ie7 .x-date-menu{height:195px;}.ext-strict .ext-ie8 .x-date-menu{height:auto;}.x-cycle-menu .x-menu-item-checked{border:1px dotted!important;padding:0;}.x-menu .x-menu-scroller{width:100%;background-repeat:no-repeat;background-position:center;height:8px;line-height:8px;cursor:pointer;margin:0;padding:0;}.x-menu .x-menu-scroller-active{height:6px;line-height:6px;}.x-menu-list-item-indent{padding-left:27px;}.x-box-tl{background:transparent no-repeat 0 0;zoom:1;}.x-box-tc{height:8px;background:transparent repeat-x 0 0;overflow:hidden;}.x-box-tr{background:transparent no-repeat right -8px;}.x-box-ml{background:transparent repeat-y 0;padding-left:4px;overflow:hidden;zoom:1;}.x-box-mc{background:repeat-x 0 -16px;padding:4px 10px;}.x-box-mc h3{margin:0 0 4px 0;zoom:1;}.x-box-mr{background:transparent repeat-y right;padding-right:4px;overflow:hidden;}.x-box-bl{background:transparent no-repeat 0 -16px;zoom:1;}.x-box-bc{background:transparent repeat-x 0 -8px;height:8px;overflow:hidden;}.x-box-br{background:transparent no-repeat right -24px;}.x-box-tl,.x-box-bl{padding-left:8px;overflow:hidden;}.x-box-tr,.x-box-br{padding-right:8px;overflow:hidden;}.x-combo-list{border:1px solid;zoom:1;overflow:hidden;}.x-combo-list-inner{overflow:auto;position:relative;zoom:1;overflow-x:hidden;}.x-combo-list-hd{border-bottom:1px solid;padding:3px;}.x-resizable-pinned .x-combo-list-inner{border-bottom:1px solid;}.x-combo-list-item{padding:2px;border:1px solid;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.x-combo-list .x-combo-selected{border:1px dotted!important;cursor:pointer;}.x-combo-list .x-toolbar{border-top:1px solid;border-bottom:0 none;}.x-panel{border-style:solid;border-width:0;}.x-panel-header{overflow:hidden;zoom:1;padding:5px 3px 4px 5px;border:1px solid;line-height:15px;background:transparent repeat-x 0 -1px;}.x-panel-body{border:1px solid;border-top:0 none;overflow:hidden;position:relative;}.x-panel-bbar .x-toolbar,.x-panel-tbar .x-toolbar{border:1px solid;border-top:0 none;overflow:hidden;padding:2px;}.x-panel-tbar-noheader .x-toolbar,.x-panel-mc .x-panel-tbar .x-toolbar{border-top:1px solid;border-bottom:0 none;}.x-panel-body-noheader,.x-panel-mc .x-panel-body{border-top:1px solid;}.x-panel-header{overflow:hidden;zoom:1;}.x-panel-tl .x-panel-header{padding:5px 0 4px 0;border:0 none;background:transparent no-repeat;}.x-panel-tl .x-panel-icon,.x-window-tl .x-panel-icon{padding-left:20px!important;background-repeat:no-repeat;background-position:0 4px;zoom:1;}.x-panel-inline-icon{width:16px;height:16px;background-repeat:no-repeat;background-position:0 0;vertical-align:middle;margin-right:4px;margin-top:-1px;margin-bottom:-1px;}.x-panel-tc{background:transparent repeat-x 0 0;overflow:hidden;}.ext-strict .ext-ie7 .x-panel-tc{overflow:visible;}.x-panel-tl{background:transparent no-repeat 0 0;padding-left:6px;zoom:1;border-bottom:1px solid;}.x-panel-tr{background:transparent no-repeat right 0;zoom:1;padding-right:6px;}.x-panel-bc{background:transparent repeat-x 0 bottom;zoom:1;}.x-panel-bc .x-panel-footer{zoom:1;}.x-panel-bl{background:transparent no-repeat 0 bottom;padding-left:6px;zoom:1;}.x-panel-br{background:transparent no-repeat right bottom;padding-right:6px;zoom:1;}.x-panel-mc{border:0 none;padding:0;margin:0;padding-top:6px;}.x-panel-mc .x-panel-body{background-color:transparent;border:0 none;}.x-panel-ml{background:repeat-y 0 0;padding-left:6px;zoom:1;}.x-panel-mr{background:transparent repeat-y right 0;padding-right:6px;zoom:1;}.x-panel-bc .x-panel-footer{padding-bottom:6px;}.x-panel-nofooter .x-panel-bc,.x-panel-nofooter .x-window-bc{height:6px;font-size:0;line-height:0;}.x-panel-bwrap{overflow:hidden;zoom:1;left:0;top:0;}.x-panel-body{overflow:hidden;zoom:1;}.x-panel-collapsed .x-resizable-handle{display:none;}.ext-gecko .x-panel-animated div{overflow:hidden!important;}.x-plain-body{overflow:hidden;}.x-plain-bbar .x-toolbar{overflow:hidden;padding:2px;}.x-plain-tbar .x-toolbar{overflow:hidden;padding:2px;}.x-plain-bwrap{overflow:hidden;zoom:1;}.x-plain{overflow:hidden;}.x-tool{overflow:hidden;width:15px;height:15px;float:right;cursor:pointer;background:transparent no-repeat;margin-left:2px;}.x-tool-toggle{background-position:0 -60px;}.x-tool-toggle-over{background-position:-15px -60px;}.x-panel-collapsed .x-tool-toggle{background-position:0 -75px;}.x-panel-collapsed .x-tool-toggle-over{background-position:-15px -75px;}.x-tool-close{background-position:0 -0;}.x-tool-close-over{background-position:-15px 0;}.x-tool-minimize{background-position:0 -15px;}.x-tool-minimize-over{background-position:-15px -15px;}.x-tool-maximize{background-position:0 -30px;}.x-tool-maximize-over{background-position:-15px -30px;}.x-tool-restore{background-position:0 -45px;}.x-tool-restore-over{background-position:-15px -45px;}.x-tool-gear{background-position:0 -90px;}.x-tool-gear-over{background-position:-15px -90px;}.x-tool-prev{background-position:0 -105px;}.x-tool-prev-over{background-position:-15px -105px;}.x-tool-next{background-position:0 -120px;}.x-tool-next-over{background-position:-15px -120px;}.x-tool-pin{background-position:0 -135px;}.x-tool-pin-over{background-position:-15px -135px;}.x-tool-unpin{background-position:0 -150px;}.x-tool-unpin-over{background-position:-15px -150px;}.x-tool-right{background-position:0 -165px;}.x-tool-right-over{background-position:-15px -165px;}.x-tool-left{background-position:0 -180px;}.x-tool-left-over{background-position:-15px -180px;}.x-tool-down{background-position:0 -195px;}.x-tool-down-over{background-position:-15px -195px;}.x-tool-up{background-position:0 -210px;}.x-tool-up-over{background-position:-15px -210px;}.x-tool-refresh{background-position:0 -225px;}.x-tool-refresh-over{background-position:-15px -225px;}.x-tool-plus{background-position:0 -240px;}.x-tool-plus-over{background-position:-15px -240px;}.x-tool-minus{background-position:0 -255px;}.x-tool-minus-over{background-position:-15px -255px;}.x-tool-search{background-position:0 -270px;}.x-tool-search-over{background-position:-15px -270px;}.x-tool-save{background-position:0 -285px;}.x-tool-save-over{background-position:-15px -285px;}.x-tool-help{background-position:0 -300px;}.x-tool-help-over{background-position:-15px -300px;}.x-tool-print{background-position:0 -315px;}.x-tool-print-over{background-position:-15px -315px;}.x-tool-expand{background-position:0 -330px;}.x-tool-expand-over{background-position:-15px -330px;}.x-tool-collapse{background-position:0 -345px;}.x-tool-collapse-over{background-position:-15px -345px;}.x-tool-resize{background-position:0 -360px;}.x-tool-resize-over{background-position:-15px -360px;}.x-tool-move{background-position:0 -375px;}.x-tool-move-over{background-position:-15px -375px;}.x-panel-ghost{z-index:12000;overflow:hidden;position:absolute;left:0;top:0;opacity:.65;-moz-opacity:.65;filter:alpha(opacity=65);}.x-panel-ghost ul{margin:0;padding:0;overflow:hidden;font-size:0;line-height:0;border:1px solid;border-top:0 none;display:block;}.x-panel-ghost *{cursor:move!important;}.x-panel-dd-spacer{border:2px dashed;}.x-panel-btns{padding:5px;overflow:hidden;}.x-panel-btns td.x-toolbar-cell{padding:3px;}.x-panel-btns .x-btn-focus .x-btn-left{background-position:0 -147px;}.x-panel-btns .x-btn-focus .x-btn-right{background-position:0 -168px;}.x-panel-btns .x-btn-focus .x-btn-center{background-position:0 -189px;}.x-panel-btns .x-btn-over .x-btn-left{background-position:0 -63px;}.x-panel-btns .x-btn-over .x-btn-right{background-position:0 -84px;}.x-panel-btns .x-btn-over .x-btn-center{background-position:0 -105px;}.x-panel-btns .x-btn-click .x-btn-center{background-position:0 -126px;}.x-panel-btns .x-btn-click .x-btn-right{background-position:0 -84px;}.x-panel-btns .x-btn-click .x-btn-left{background-position:0 -63px;}.x-panel-fbar td,.x-panel-fbar span,.x-panel-fbar input,.x-panel-fbar div,.x-panel-fbar select,.x-panel-fbar label{white-space:nowrap;}.x-panel-reset .x-panel-body html,.x-panel-reset .x-panel-body address,.x-panel-reset .x-panel-body blockquote,.x-panel-reset .x-panel-body body,.x-panel-reset .x-panel-body dd,.x-panel-reset .x-panel-body div,.x-panel-reset .x-panel-body dl,.x-panel-reset .x-panel-body dt,.x-panel-reset .x-panel-body fieldset,.x-panel-reset .x-panel-body form,.x-panel-reset .x-panel-body frame,frameset,.x-panel-reset .x-panel-body h1,.x-panel-reset .x-panel-body h2,.x-panel-reset .x-panel-body h3,.x-panel-reset .x-panel-body h4,.x-panel-reset .x-panel-body h5,.x-panel-reset .x-panel-body h6,.x-panel-reset .x-panel-body noframes,.x-panel-reset .x-panel-body ol,.x-panel-reset .x-panel-body p,.x-panel-reset .x-panel-body ul,.x-panel-reset .x-panel-body center,.x-panel-reset .x-panel-body dir,.x-panel-reset .x-panel-body hr,.x-panel-reset .x-panel-body menu,.x-panel-reset .x-panel-body pre{display:block;}.x-panel-reset .x-panel-body li{display:list-item;}.x-panel-reset .x-panel-body head{display:none;}.x-panel-reset .x-panel-body table{display:table;}.x-panel-reset .x-panel-body tr{display:table-row;}.x-panel-reset .x-panel-body thead{display:table-header-group;}.x-panel-reset .x-panel-body tbody{display:table-row-group;}.x-panel-reset .x-panel-body tfoot{display:table-footer-group;}.x-panel-reset .x-panel-body col{display:table-column;}.x-panel-reset .x-panel-body colgroup{display:table-column-group;}.x-panel-reset .x-panel-body td,.x-panel-reset .x-panel-body th{display:table-cell;}.x-panel-reset .x-panel-body caption{display:table-caption;}.x-panel-reset .x-panel-body th{font-weight:bolder;text-align:center;}.x-panel-reset .x-panel-body caption{text-align:center;}.x-panel-reset .x-panel-body body{margin:8px;}.x-panel-reset .x-panel-body h1{font-size:2em;margin:.67em 0;}.x-panel-reset .x-panel-body h2{font-size:1.5em;margin:.75em 0;}.x-panel-reset .x-panel-body h3{font-size:1.17em;margin:.83em 0;}.x-panel-reset .x-panel-body h4,.x-panel-reset .x-panel-body p,.x-panel-reset .x-panel-body blockquote,.x-panel-reset .x-panel-body ul,.x-panel-reset .x-panel-body fieldset,.x-panel-reset .x-panel-body form,.x-panel-reset .x-panel-body ol,.x-panel-reset .x-panel-body dl,.x-panel-reset .x-panel-body dir,.x-panel-reset .x-panel-body menu{margin:1.12em 0;}.x-panel-reset .x-panel-body h5{font-size:.83em;margin:1.5em 0;}.x-panel-reset .x-panel-body h6{font-size:.75em;margin:1.67em 0;}.x-panel-reset .x-panel-body h1,.x-panel-reset .x-panel-body h2,.x-panel-reset .x-panel-body h3,.x-panel-reset .x-panel-body h4,.x-panel-reset .x-panel-body h5,.x-panel-reset .x-panel-body h6,.x-panel-reset .x-panel-body b,.x-panel-reset .x-panel-body strong{font-weight:bolder;}.x-panel-reset .x-panel-body blockquote{margin-left:40px;margin-right:40px;}.x-panel-reset .x-panel-body i,.x-panel-reset .x-panel-body cite,.x-panel-reset .x-panel-body em,.x-panel-reset .x-panel-body var,.x-panel-reset .x-panel-body address{font-style:italic;}.x-panel-reset .x-panel-body pre,.x-panel-reset .x-panel-body tt,.x-panel-reset .x-panel-body code,.x-panel-reset .x-panel-body kbd,.x-panel-reset .x-panel-body samp{font-family:monospace;}.x-panel-reset .x-panel-body pre{white-space:pre;}.x-panel-reset .x-panel-body button,.x-panel-reset .x-panel-body textarea,.x-panel-reset .x-panel-body input,.x-panel-reset .x-panel-body select{display:inline-block;}.x-panel-reset .x-panel-body big{font-size:1.17em;}.x-panel-reset .x-panel-body small,.x-panel-reset .x-panel-body sub,.x-panel-reset .x-panel-body sup{font-size:.83em;}.x-panel-reset .x-panel-body sub{vertical-align:sub;}.x-panel-reset .x-panel-body sup{vertical-align:super;}.x-panel-reset .x-panel-body table{border-spacing:2px;}.x-panel-reset .x-panel-body thead,.x-panel-reset .x-panel-body tbody,.x-panel-reset .x-panel-body tfoot{vertical-align:middle;}.x-panel-reset .x-panel-body td,.x-panel-reset .x-panel-body th{vertical-align:inherit;}.x-panel-reset .x-panel-body s,.x-panel-reset .x-panel-body strike,.x-panel-reset .x-panel-body del{text-decoration:line-through;}.x-panel-reset .x-panel-body hr{border:1px inset;}.x-panel-reset .x-panel-body ol,.x-panel-reset .x-panel-body ul,.x-panel-reset .x-panel-body dir,.x-panel-reset .x-panel-body menu,.x-panel-reset .x-panel-body dd{margin-left:40px;}.x-panel-reset .x-panel-body ul,.x-panel-reset .x-panel-body menu,.x-panel-reset .x-panel-body dir{list-style-type:disc;}.x-panel-reset .x-panel-body ol{list-style-type:decimal;}.x-panel-reset .x-panel-body ol ul,.x-panel-reset .x-panel-body ul ol,.x-panel-reset .x-panel-body ul ul,.x-panel-reset .x-panel-body ol ol{margin-top:0;margin-bottom:0;}.x-panel-reset .x-panel-body u,.x-panel-reset .x-panel-body ins{text-decoration:underline;}.x-panel-reset .x-panel-body br:before{content:"\A";}.x-panel-reset .x-panel-body :before,.x-panel-reset .x-panel-body :after{white-space:pre-line;}.x-panel-reset .x-panel-body center{text-align:center;}.x-panel-reset .x-panel-body :link,.x-panel-reset .x-panel-body :visited{text-decoration:underline;}.x-panel-reset .x-panel-body :focus{outline:invert dotted thin;}.x-panel-reset .x-panel-body BDO[DIR="ltr"]{direction:ltr;unicode-bidi:bidi-override;}.x-panel-reset .x-panel-body BDO[DIR="rtl"]{direction:rtl;unicode-bidi:bidi-override;}.x-window{zoom:1;}.x-window .x-window-handle{opacity:0;-moz-opacity:0;filter:alpha(opacity=0);}.x-window-proxy{border:1px solid;z-index:12000;overflow:hidden;position:absolute;left:0;top:0;display:none;opacity:.5;-moz-opacity:.5;filter:alpha(opacity=50);}.x-window-header{overflow:hidden;zoom:1;}.x-window-bwrap{z-index:1;position:relative;zoom:1;left:0;top:0;}.x-window-tl .x-window-header{padding:5px 0 4px 0;}.x-window-header-text{cursor:pointer;}.x-window-tc{background:transparent repeat-x 0 0;overflow:hidden;zoom:1;}.x-window-tl{background:transparent no-repeat 0 0;padding-left:6px;zoom:1;z-index:1;position:relative;}.x-window-tr{background:transparent no-repeat right 0;padding-right:6px;}.x-window-bc{background:transparent repeat-x 0 bottom;zoom:1;}.x-window-bc .x-window-footer{padding-bottom:6px;zoom:1;font-size:0;line-height:0;}.x-window-bl{background:transparent no-repeat 0 bottom;padding-left:6px;zoom:1;}.x-window-br{background:transparent no-repeat right bottom;padding-right:6px;zoom:1;}.x-window-mc{border:1px solid;padding:0;margin:0;}.x-window-ml{background:transparent repeat-y 0 0;padding-left:6px;zoom:1;}.x-window-mr{background:transparent repeat-y right 0;padding-right:6px;zoom:1;}.x-window-body{overflow:hidden;}.x-window-bwrap{overflow:hidden;}.x-window-maximized .x-window-bl,.x-window-maximized .x-window-br,.x-window-maximized .x-window-ml,.x-window-maximized .x-window-mr,.x-window-maximized .x-window-tl,.x-window-maximized .x-window-tr{padding:0;}.x-window-maximized .x-window-footer{padding-bottom:0;}.x-window-maximized .x-window-tc{padding-left:3px;padding-right:3px;}.x-window-maximized .x-window-mc{border-left:0 none;border-right:0 none;}.x-window-tbar .x-toolbar,.x-window-bbar .x-toolbar{border-left:0 none;border-right:0 none;}.x-window-bbar .x-toolbar{border-top:1px solid;border-bottom:0 none;}.x-window-draggable,.x-window-draggable .x-window-header-text{cursor:move;}.x-window-maximized .x-window-draggable,.x-window-maximized .x-window-draggable .x-window-header-text{cursor:default;}.x-window-body{background-color:transparent;}.x-panel-ghost .x-window-tl{border-bottom:1px solid;}.x-panel-collapsed .x-window-tl{border-bottom:1px solid;}.x-window-maximized-ct{overflow:hidden;}.x-window-maximized .x-window-handle{display:none;}.x-window-sizing-ghost ul{border:0 none!important;}.x-dlg-focus{-moz-outline:0 none;outline:0 none;width:0;height:0;overflow:hidden;position:absolute;top:0;left:0;}.ext-webkit .x-dlg-focus{width:1px;height:1px;}.x-dlg-mask{z-index:10000;display:none;position:absolute;top:0;left:0;-moz-opacity:.5;opacity:.50;filter:alpha(opacity=50);}body.ext-ie6.x-body-masked select{visibility:hidden;}body.ext-ie6.x-body-masked .x-window select{visibility:visible;}.x-window-plain .x-window-mc{border:1px solid;}.x-window-plain .x-window-body{border:1px solid;background:transparent!important;}.x-html-editor-wrap{border:1px solid;}.x-html-editor-tb .x-btn-text{background:transparent no-repeat;}.x-html-editor-tb .x-edit-bold,.x-menu-item img.x-edit-bold{background-position:0 0;background-image:url(../images/default/editor/tb-sprite.gif);}.x-html-editor-tb .x-edit-italic,.x-menu-item img.x-edit-italic{background-position:-16px 0;background-image:url(../images/default/editor/tb-sprite.gif);}.x-html-editor-tb .x-edit-underline,.x-menu-item img.x-edit-underline{background-position:-32px 0;background-image:url(../images/default/editor/tb-sprite.gif);}.x-html-editor-tb .x-edit-forecolor,.x-menu-item img.x-edit-forecolor{background-position:-160px 0;background-image:url(../images/default/editor/tb-sprite.gif);}.x-html-editor-tb .x-edit-backcolor,.x-menu-item img.x-edit-backcolor{background-position:-176px 0;background-image:url(../images/default/editor/tb-sprite.gif);}.x-html-editor-tb .x-edit-justifyleft,.x-menu-item img.x-edit-justifyleft{background-position:-112px 0;background-image:url(../images/default/editor/tb-sprite.gif);}.x-html-editor-tb .x-edit-justifycenter,.x-menu-item img.x-edit-justifycenter{background-position:-128px 0;background-image:url(../images/default/editor/tb-sprite.gif);}.x-html-editor-tb .x-edit-justifyright,.x-menu-item img.x-edit-justifyright{background-position:-144px 0;background-image:url(../images/default/editor/tb-sprite.gif);}.x-html-editor-tb .x-edit-insertorderedlist,.x-menu-item img.x-edit-insertorderedlist{background-position:-80px 0;background-image:url(../images/default/editor/tb-sprite.gif);}.x-html-editor-tb .x-edit-insertunorderedlist,.x-menu-item img.x-edit-insertunorderedlist{background-position:-96px 0;background-image:url(../images/default/editor/tb-sprite.gif);}.x-html-editor-tb .x-edit-increasefontsize,.x-menu-item img.x-edit-increasefontsize{background-position:-48px 0;background-image:url(../images/default/editor/tb-sprite.gif);}.x-html-editor-tb .x-edit-decreasefontsize,.x-menu-item img.x-edit-decreasefontsize{background-position:-64px 0;background-image:url(../images/default/editor/tb-sprite.gif);}.x-html-editor-tb .x-edit-sourceedit,.x-menu-item img.x-edit-sourceedit{background-position:-192px 0;background-image:url(../images/default/editor/tb-sprite.gif);}.x-html-editor-tb .x-edit-createlink,.x-menu-item img.x-edit-createlink{background-position:-208px 0;background-image:url(../images/default/editor/tb-sprite.gif);}.x-html-editor-tip .x-tip-bd .x-tip-bd-inner{padding:5px;padding-bottom:1px;}.x-html-editor-tb .x-toolbar{position:static!important;}.x-panel-noborder .x-panel-body-noborder{border-width:0;}.x-panel-noborder .x-panel-header-noborder{border-width:0 0 1px;border-style:solid;}.x-panel-noborder .x-panel-tbar-noborder .x-toolbar{border-width:0 0 1px;border-style:solid;}.x-panel-noborder .x-panel-bbar-noborder .x-toolbar{border-width:1px 0 0 0;border-style:solid;}.x-window-noborder .x-window-mc{border-width:0;}.x-window-plain .x-window-body-noborder{border-width:0;}.x-tab-panel-noborder .x-tab-panel-body-noborder{border-width:0;}.x-tab-panel-noborder .x-tab-panel-header-noborder{border-width:0 0 1px 0;}.x-tab-panel-noborder .x-tab-panel-footer-noborder{border-width:1px 0 0 0;}.x-tab-panel-bbar-noborder .x-toolbar{border-width:1px 0 0 0;border-style:solid;}.x-tab-panel-tbar-noborder .x-toolbar{border-width:0 0 1px;border-style:solid;}.x-border-layout-ct{position:relative;}.x-border-panel{position:absolute;left:0;top:0;}.x-tool-collapse-south{background-position:0 -195px;}.x-tool-collapse-south-over{background-position:-15px -195px;}.x-tool-collapse-north{background-position:0 -210px;}.x-tool-collapse-north-over{background-position:-15px -210px;}.x-tool-collapse-west{background-position:0 -180px;}.x-tool-collapse-west-over{background-position:-15px -180px;}.x-tool-collapse-east{background-position:0 -165px;}.x-tool-collapse-east-over{background-position:-15px -165px;}.x-tool-expand-south{background-position:0 -210px;}.x-tool-expand-south-over{background-position:-15px -210px;}.x-tool-expand-north{background-position:0 -195px;}.x-tool-expand-north-over{background-position:-15px -195px;}.x-tool-expand-west{background-position:0 -165px;}.x-tool-expand-west-over{background-position:-15px -165px;}.x-tool-expand-east{background-position:0 -180px;}.x-tool-expand-east-over{background-position:-15px -180px;}.x-tool-expand-north,.x-tool-expand-south{float:right;margin:3px;}.x-tool-expand-east,.x-tool-expand-west{float:none;margin:3px 2px;}.x-accordion-hd .x-tool-toggle{background-position:0 -255px;}.x-accordion-hd .x-tool-toggle-over{background-position:-15px -255px;}.x-panel-collapsed .x-accordion-hd .x-tool-toggle{background-position:0 -240px;}.x-panel-collapsed .x-accordion-hd .x-tool-toggle-over{background-position:-15px -240px;}.x-accordion-hd{padding-top:4px;padding-bottom:3px;border-top:0 none;background:transparent repeat-x 0 -9px;}.x-layout-collapsed{position:absolute;left:-10000px;top:-10000px;visibility:hidden;width:20px;height:20px;overflow:hidden;border:1px solid;z-index:20;}.ext-border-box .x-layout-collapsed{width:22px;height:22px;}.x-layout-collapsed-over{cursor:pointer;}.x-layout-collapsed-west .x-layout-collapsed-tools,.x-layout-collapsed-east .x-layout-collapsed-tools{position:absolute;top:0;left:0;width:20px;height:20px;}.x-layout-split{position:absolute;height:5px;width:5px;line-height:1px;font-size:1px;z-index:3;background-color:transparent;}.ext-strict .ext-ie6 .x-layout-split{background-color:#fff!important;filter:alpha(opacity=1);}.x-layout-split-h{background-image:url(../images/default/s.gif);background-position:left;}.x-layout-split-v{background-image:url(../images/default/s.gif);background-position:top;}.x-column-layout-ct{overflow:hidden;zoom:1;}.x-column{float:left;padding:0;margin:0;overflow:hidden;zoom:1;}.x-column-inner{overflow:hidden;zoom:1;}.x-layout-mini{position:absolute;top:0;left:0;display:block;width:5px;height:35px;cursor:pointer;opacity:.5;-moz-opacity:.5;filter:alpha(opacity=50);}.x-layout-mini-over,.x-layout-collapsed-over .x-layout-mini{opacity:1;-moz-opacity:1;filter:none;}.x-layout-split-west .x-layout-mini{top:48%;}.x-layout-split-east .x-layout-mini{top:48%;}.x-layout-split-north .x-layout-mini{left:48%;height:5px;width:35px;}.x-layout-split-south .x-layout-mini{left:48%;height:5px;width:35px;}.x-layout-cmini-west .x-layout-mini{top:48%;}.x-layout-cmini-east .x-layout-mini{top:48%;}.x-layout-cmini-north .x-layout-mini{left:48%;height:5px;width:35px;}.x-layout-cmini-south .x-layout-mini{left:48%;height:5px;width:35px;}.x-layout-cmini-west,.x-layout-cmini-east{border:0 none;width:5px!important;padding:0;background-color:transparent;}.x-layout-cmini-north,.x-layout-cmini-south{border:0 none;height:5px!important;padding:0;background-color:transparent;}.x-viewport,.x-viewport body{margin:0;padding:0;border:0 none;overflow:hidden;height:100%;}.x-abs-layout-item{position:absolute;left:0;top:0;}.ext-ie input.x-abs-layout-item,.ext-ie textarea.x-abs-layout-item{margin:0;}.x-box-layout-ct{overflow:hidden;zoom:1;}.x-box-inner{overflow:hidden;zoom:1;position:relative;left:0;top:0;}.x-box-item{position:absolute;left:0;top:0;}.x-progress-wrap{border:1px solid;overflow:hidden;}.x-progress-inner{height:18px;background:repeat-x;position:relative;}.x-progress-bar{height:18px;float:left;width:0;background:repeat-x left center;border-top:1px solid;border-bottom:1px solid;border-right:1px solid;}.x-progress-text{padding:1px 5px;overflow:hidden;position:absolute;left:0;text-align:center;}.x-progress-text-back{line-height:16px;}.ext-ie .x-progress-text-back{line-height:15px;}.ext-strict .ext-ie7 .x-progress-text-back{width:100%;}.x-list-header{background:repeat-x 0 bottom;cursor:default;zoom:1;height:22px;}.x-list-header-inner div{display:block;float:left;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap;}.x-list-header-inner div em{display:block;border-left:1px solid;padding:4px 4px;overflow:hidden;-moz-user-select:none;-khtml-user-select:none;line-height:14px;}.x-list-body{overflow:auto;overflow-x:hidden;overflow-y:auto;zoom:1;float:left;width:100%;}.x-list-body dl{zoom:1;}.x-list-body dt{display:block;float:left;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;zoom:1;}.x-list-body dt em{display:block;padding:3px 4px;overflow:hidden;-moz-user-select:none;-khtml-user-select:none;}.x-list-resizer{border-left:1px solid;border-right:1px solid;position:absolute;left:0;top:0;}.x-list-header-inner em.sort-asc{background:transparent no-repeat center 0;border-style:solid;border-width:0 1px 1px;padding-bottom:3px;}.x-list-header-inner em.sort-desc{background:transparent no-repeat center -23px;border-style:solid;border-width:0 1px 1px;padding-bottom:3px;}.x-slider{zoom:1;}.x-slider-inner{position:relative;left:0;top:0;overflow:visible;zoom:1;}.x-slider-focus{position:absolute;left:0;top:0;width:1px;height:1px;line-height:1px;font-size:1px;-moz-outline:0 none;outline:0 none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:ignore;display:block;overflow:hidden;}.x-slider-horz{padding-left:7px;background:transparent no-repeat 0 -22px;}.x-slider-horz .x-slider-end{padding-right:7px;zoom:1;background:transparent no-repeat right -44px;}.x-slider-horz .x-slider-inner{background:transparent repeat-x 0 0;height:22px;}.x-slider-horz .x-slider-thumb{width:14px;height:15px;position:absolute;left:0;top:3px;background:transparent no-repeat 0 0;}.x-slider-horz .x-slider-thumb-over{background-position:-14px -15px;}.x-slider-horz .x-slider-thumb-drag{background-position:-28px -30px;}.x-slider-vert{padding-top:7px;background:transparent no-repeat -44px 0;width:22px;}.x-slider-vert .x-slider-end{padding-bottom:7px;zoom:1;background:transparent no-repeat -22px bottom;}.x-slider-vert .x-slider-inner{background:transparent repeat-y 0 0;}.x-slider-vert .x-slider-thumb{width:15px;height:14px;position:absolute;left:3px;bottom:0;background:transparent no-repeat 0 0;}.x-slider-vert .x-slider-thumb-over{background-position:-15px -14px;}.x-slider-vert .x-slider-thumb-drag{background-position:-30px -28px;}.x-window-dlg .x-window-body{border:0 none!important;padding:5px 10px;overflow:hidden!important;}.x-window-dlg .x-window-mc{border:0 none!important;}.x-window-dlg .ext-mb-input{margin-top:4px;width:95%;}.x-window-dlg .ext-mb-textarea{margin-top:4px;}.x-window-dlg .x-progress-wrap{margin-top:4px;}.ext-ie .x-window-dlg .x-progress-wrap{margin-top:6px;}.x-window-dlg .x-msg-box-wait{background:transparent no-repeat left;display:block;width:300px;padding-left:18px;line-height:18px;}.x-window-dlg .ext-mb-icon{float:left;width:47px;height:32px;}.x-window-dlg .x-dlg-icon .ext-mb-content{zoom:1;margin-left:47px;}.x-window-dlg .ext-mb-info,.x-window-dlg .ext-mb-warning,.x-window-dlg .ext-mb-question,.x-window-dlg .ext-mb-error{background:transparent no-repeat top left;}.ext-gecko2 .ext-mb-fix-cursor{overflow:auto;}.ext-el-mask{background-color:#ccc;}.ext-el-mask-msg{border-color:#6593cf;background-color:#c3daf9;background-image:url(../images/default/box/tb-blue.gif);}.ext-el-mask-msg div{background-color:#eee;border-color:#a3bad9;color:#222;font:normal 11px tahoma,arial,helvetica,sans-serif;}.x-mask-loading div{background-color:#fbfbfb;background-image:url(../images/default/grid/loading.gif);}.x-item-disabled{color:gray;}.x-item-disabled *{color:gray!important;}.x-splitbar-proxy{background-color:#aaa;}.x-color-palette a{border-color:#fff;}.x-color-palette a:hover,.x-color-palette a.x-color-palette-sel{border-color:#8bb8f3;background-color:#deecfd;}.x-color-palette em{border-color:#aca899;}.x-ie-shadow{background-color:#777;}.x-shadow .xsmc{background-image:url(../images/default/shadow-c.png);}.x-shadow .xsml,.x-shadow .xsmr{background-image:url(../images/default/shadow-lr.png);}.x-shadow .xstl,.x-shadow .xstc,.x-shadow .xstr,.x-shadow .xsbl,.x-shadow .xsbc,.x-shadow .xsbr{background-image:url(../images/default/shadow.png);}.loading-indicator{font-size:11px;background-image:url(../images/default/grid/loading.gif);}.x-spotlight{background-color:#ccc;}.x-tab-panel-header,.x-tab-panel-footer{background-color:#deecfd;border-color:#8db2e3;overflow:hidden;zoom:1;}.x-tab-panel-header,.x-tab-panel-footer{border-color:#8db2e3;}ul.x-tab-strip-top{background-color:#cedff5;background-image:url(../images/default/tabs/tab-strip-bg.gif);border-bottom-color:#8db2e3;}ul.x-tab-strip-bottom{background-color:#cedff5;background-image:url(../images/default/tabs/tab-strip-btm-bg.gif);border-top-color:#8db2e3;}.x-tab-panel-header-plain .x-tab-strip-spacer,.x-tab-panel-footer-plain .x-tab-strip-spacer{border-color:#8db2e3;background-color:#deecfd;}.x-tab-strip span.x-tab-strip-text{font:normal 11px tahoma,arial,helvetica;color:#416aa3;}.x-tab-strip-over span.x-tab-strip-text{color:#15428b;}.x-tab-strip-active span.x-tab-strip-text{color:#15428b;font-weight:bold;}.x-tab-strip-disabled .x-tabs-text{color:#aaa;}.x-tab-strip-top .x-tab-right,.x-tab-strip-top .x-tab-left,.x-tab-strip-top .x-tab-strip-inner{background-image:url(../images/default/tabs/tabs-sprite.gif);}.x-tab-strip-bottom .x-tab-right{background-image:url(../images/default/tabs/tab-btm-inactive-right-bg.gif);}.x-tab-strip-bottom .x-tab-left{background-image:url(../images/default/tabs/tab-btm-inactive-left-bg.gif);}.x-tab-strip-bottom .x-tab-strip-over .x-tab-right{background-image:url(../images/default/tabs/tab-btm-over-right-bg.gif);}.x-tab-strip-bottom .x-tab-strip-over .x-tab-left{background-image:url(../images/default/tabs/tab-btm-over-left-bg.gif);}.x-tab-strip-bottom .x-tab-strip-active .x-tab-right{background-image:url(../images/default/tabs/tab-btm-right-bg.gif);}.x-tab-strip-bottom .x-tab-strip-active .x-tab-left{background-image:url(../images/default/tabs/tab-btm-left-bg.gif);}.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close{background-image:url(../images/default/tabs/tab-close.gif);}.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close:hover{background-image:url(../images/default/tabs/tab-close.gif);}.x-tab-panel-body{border-color:#8db2e3;background-color:#fff;}.x-tab-panel-body-top{border-top:0 none;}.x-tab-panel-body-bottom{border-bottom:0 none;}.x-tab-scroller-left{background-image:url(../images/default/tabs/scroll-left.gif);border-bottom-color:#8db2e3;}.x-tab-scroller-left-over{background-position:0 0;}.x-tab-scroller-left-disabled{background-position:-18px 0;opacity:.5;-moz-opacity:.5;filter:alpha(opacity=50);cursor:default;}.x-tab-scroller-right{background-image:url(../images/default/tabs/scroll-right.gif);border-bottom-color:#8db2e3;}.x-tab-panel-bbar .x-toolbar,.x-tab-panel-tbar .x-toolbar{border-color:#99bbe8;}.x-form-field{font:normal 12px tahoma,arial,helvetica,sans-serif;}.x-form-text,textarea.x-form-field{background-color:#fff;background-image:url(../images/default/form/text-bg.gif);border-color:#b5b8c8;}.x-form-select-one{background-color:#fff;border-color:#b5b8c8;}.x-form-check-group-label{border-bottom:1px solid #99bbe8;color:#15428b;}.x-editor .x-form-check-wrap{background-color:#fff;}.x-form-field-wrap .x-form-trigger{background-image:url(../images/default/form/trigger.gif);border-bottom-color:#b5b8c8;}.x-form-field-wrap .x-form-date-trigger{background-image:url(../images/default/form/date-trigger.gif);}.x-form-field-wrap .x-form-clear-trigger{background-image:url(../images/default/form/clear-trigger.gif);}.x-form-field-wrap .x-form-search-trigger{background-image:url(../images/default/form/search-trigger.gif);}.x-trigger-wrap-focus .x-form-trigger{border-bottom-color:#7eadd9;}.x-item-disabled .x-form-trigger-over{border-bottom-color:#b5b8c8;}.x-item-disabled .x-form-trigger-click{border-bottom-color:#b5b8c8;}.x-form-focus,textarea.x-form-focus{border-color:#7eadd9;}.x-form-invalid,textarea.x-form-invalid{background-color:#fff;background-image:url(../images/default/grid/invalid_line.gif);border-color:#c30;}.x-form-invalid.x-form-composite{border:0;background-image:none;}.x-form-invalid.x-form-composite .x-form-invalid{background-color:#fff;background-image:url(../images/default/grid/invalid_line.gif);border-color:#c30;}.x-form-inner-invalid,textarea.x-form-inner-invalid{background-color:#fff;background-image:url(../images/default/grid/invalid_line.gif);}.x-form-grow-sizer{font:normal 12px tahoma,arial,helvetica,sans-serif;}.x-form-item{font:normal 12px tahoma,arial,helvetica,sans-serif;}.x-form-invalid-msg{color:#c0272b;font:normal 11px tahoma,arial,helvetica,sans-serif;background-image:url(../images/default/shared/warning.gif);}.x-form-empty-field{color:gray;}.x-small-editor .x-form-field{font:normal 11px arial,tahoma,helvetica,sans-serif;}.ext-webkit .x-small-editor .x-form-field{font:normal 11px arial,tahoma,helvetica,sans-serif;}.x-form-invalid-icon{background-image:url(../images/default/form/exclamation.gif);}.x-fieldset{border-color:#b5b8c8;}.x-fieldset legend{font:bold 11px tahoma,arial,helvetica,sans-serif;color:#15428b;}.x-btn{font:normal 11px tahoma,verdana,helvetica;}.x-btn button{font:normal 11px arial,tahoma,verdana,helvetica;color:#333;}.x-btn em{font-style:normal;font-weight:normal;}.x-btn-tl,.x-btn-tr,.x-btn-tc,.x-btn-ml,.x-btn-mr,.x-btn-mc,.x-btn-bl,.x-btn-br,.x-btn-bc{background-image:url(../images/default/button/btn.gif);}.x-btn-click .x-btn-text,.x-btn-menu-active .x-btn-text,.x-btn-pressed .x-btn-text{color:#000;}.x-btn-disabled *{color:gray!important;}.x-btn-mc em.x-btn-arrow{background-image:url(../images/default/button/arrow.gif);}.x-btn-mc em.x-btn-split{background-image:url(../images/default/button/s-arrow.gif);}.x-btn-over .x-btn-mc em.x-btn-split,.x-btn-click .x-btn-mc em.x-btn-split,.x-btn-menu-active .x-btn-mc em.x-btn-split,.x-btn-pressed .x-btn-mc em.x-btn-split{background-image:url(../images/default/button/s-arrow-o.gif);}.x-btn-mc em.x-btn-arrow-bottom{background-image:url(../images/default/button/s-arrow-b-noline.gif);}.x-btn-mc em.x-btn-split-bottom{background-image:url(../images/default/button/s-arrow-b.gif);}.x-btn-over .x-btn-mc em.x-btn-split-bottom,.x-btn-click .x-btn-mc em.x-btn-split-bottom,.x-btn-menu-active .x-btn-mc em.x-btn-split-bottom,.x-btn-pressed .x-btn-mc em.x-btn-split-bottom{background-image:url(../images/default/button/s-arrow-bo.gif);}.x-btn-group-header{color:#3e6aaa;}.x-btn-group-tc{background-image:url(../images/default/button/group-tb.gif);}.x-btn-group-tl{background-image:url(../images/default/button/group-cs.gif);}.x-btn-group-tr{background-image:url(../images/default/button/group-cs.gif);}.x-btn-group-bc{background-image:url(../images/default/button/group-tb.gif);}.x-btn-group-bl{background-image:url(../images/default/button/group-cs.gif);}.x-btn-group-br{background-image:url(../images/default/button/group-cs.gif);}.x-btn-group-ml{background-image:url(../images/default/button/group-lr.gif);}.x-btn-group-mr{background-image:url(../images/default/button/group-lr.gif);}.x-btn-group-notitle .x-btn-group-tc{background-image:url(../images/default/button/group-tb.gif);}.x-toolbar{border-color:#a9bfd3;background-color:#d0def0;background-image:url(../images/default/toolbar/bg.gif);}.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{font:normal 11px arial,tahoma,helvetica,sans-serif;}.x-toolbar .x-item-disabled{color:gray;}.x-toolbar .x-item-disabled *{color:gray;}.x-toolbar .x-btn-mc em.x-btn-split{background-image:url(../images/default/button/s-arrow-noline.gif);}.x-toolbar .x-btn-over .x-btn-mc em.x-btn-split,.x-toolbar .x-btn-click .x-btn-mc em.x-btn-split,.x-toolbar .x-btn-menu-active .x-btn-mc em.x-btn-split,.x-toolbar .x-btn-pressed .x-btn-mc em.x-btn-split{background-image:url(../images/default/button/s-arrow-o.gif);}.x-toolbar .x-btn-mc em.x-btn-split-bottom{background-image:url(../images/default/button/s-arrow-b-noline.gif);}.x-toolbar .x-btn-over .x-btn-mc em.x-btn-split-bottom,.x-toolbar .x-btn-click .x-btn-mc em.x-btn-split-bottom,.x-toolbar .x-btn-menu-active .x-btn-mc em.x-btn-split-bottom,.x-toolbar .x-btn-pressed .x-btn-mc em.x-btn-split-bottom{background-image:url(../images/default/button/s-arrow-bo.gif);}.x-toolbar .xtb-sep{background-image:url(../images/default/grid/grid-blue-split.gif);}.x-tbar-page-first{background-image:url(../images/default/grid/page-first.gif)!important;}.x-tbar-loading{background-image:url(../images/default/grid/refresh.gif)!important;}.x-tbar-page-last{background-image:url(../images/default/grid/page-last.gif)!important;}.x-tbar-page-next{background-image:url(../images/default/grid/page-next.gif)!important;}.x-tbar-page-prev{background-image:url(../images/default/grid/page-prev.gif)!important;}.x-item-disabled .x-tbar-loading{background-image:url(../images/default/grid/refresh-disabled.gif)!important;}.x-item-disabled .x-tbar-page-first{background-image:url(../images/default/grid/page-first-disabled.gif)!important;}.x-item-disabled .x-tbar-page-last{background-image:url(../images/default/grid/page-last-disabled.gif)!important;}.x-item-disabled .x-tbar-page-next{background-image:url(../images/default/grid/page-next-disabled.gif)!important;}.x-item-disabled .x-tbar-page-prev{background-image:url(../images/default/grid/page-prev-disabled.gif)!important;}.x-paging-info{color:#444;}.x-toolbar-more-icon{background-image:url(../images/default/toolbar/more.gif)!important;}.x-resizable-handle{background-color:#fff;}.x-resizable-over .x-resizable-handle-east,.x-resizable-pinned .x-resizable-handle-east,.x-resizable-over .x-resizable-handle-west,.x-resizable-pinned .x-resizable-handle-west{background-image:url(../images/default/sizer/e-handle.gif);}.x-resizable-over .x-resizable-handle-south,.x-resizable-pinned .x-resizable-handle-south,.x-resizable-over .x-resizable-handle-north,.x-resizable-pinned .x-resizable-handle-north{background-image:url(../images/default/sizer/s-handle.gif);}.x-resizable-over .x-resizable-handle-north,.x-resizable-pinned .x-resizable-handle-north{background-image:url(../images/default/sizer/s-handle.gif);}.x-resizable-over .x-resizable-handle-southeast,.x-resizable-pinned .x-resizable-handle-southeast{background-image:url(../images/default/sizer/se-handle.gif);}.x-resizable-over .x-resizable-handle-northwest,.x-resizable-pinned .x-resizable-handle-northwest{background-image:url(../images/default/sizer/nw-handle.gif);}.x-resizable-over .x-resizable-handle-northeast,.x-resizable-pinned .x-resizable-handle-northeast{background-image:url(../images/default/sizer/ne-handle.gif);}.x-resizable-over .x-resizable-handle-southwest,.x-resizable-pinned .x-resizable-handle-southwest{background-image:url(../images/default/sizer/sw-handle.gif);}.x-resizable-proxy{border-color:#3b5a82;}.x-resizable-overlay{background-color:#fff;}.x-grid3{background-color:#fff;}.x-grid-panel .x-panel-mc .x-panel-body{border-color:#99bbe8;}.x-grid3-row td,.x-grid3-summary-row td{font:normal 11px/13px arial,tahoma,helvetica,sans-serif;}.x-grid3-hd-row td{font:normal 11px/15px arial,tahoma,helvetica,sans-serif;}.x-grid3-hd-row td{border-left-color:#eee;border-right-color:#d0d0d0;}.x-grid-row-loading{background-color:#fff;background-image:url(../images/default/shared/loading-balls.gif);}.x-grid3-row{border-color:#ededed;border-top-color:#fff;}.x-grid3-row-alt{background-color:#fafafa;}.x-grid3-row-over{border-color:#ddd;background-color:#efefef;background-image:url(../images/default/grid/row-over.gif);}.x-grid3-resize-proxy{background-color:#777;}.x-grid3-resize-marker{background-color:#777;}.x-grid3-header{background-color:#f9f9f9;background-image:url(../images/default/grid/grid3-hrow.gif);}.x-grid3-header-pop{border-left-color:#d0d0d0;}.x-grid3-header-pop-inner{border-left-color:#eee;background-image:url(../images/default/grid/hd-pop.gif);}td.x-grid3-hd-over,td.sort-desc,td.sort-asc,td.x-grid3-hd-menu-open{border-left-color:#aaccf6;border-right-color:#aaccf6;}td.x-grid3-hd-over .x-grid3-hd-inner,td.sort-desc .x-grid3-hd-inner,td.sort-asc .x-grid3-hd-inner,td.x-grid3-hd-menu-open .x-grid3-hd-inner{background-color:#ebf3fd;background-image:url(../images/default/grid/grid3-hrow-over.gif);}.sort-asc .x-grid3-sort-icon{background-image:url(../images/default/grid/sort_asc.gif);}.sort-desc .x-grid3-sort-icon{background-image:url(../images/default/grid/sort_desc.gif);}.x-grid3-cell-text,.x-grid3-hd-text{color:#000;}.x-grid3-split{background-image:url(../images/default/grid/grid-split.gif);}.x-grid3-hd-text{color:#15428b;}.x-dd-drag-proxy .x-grid3-hd-inner{background-color:#ebf3fd;background-image:url(../images/default/grid/grid3-hrow-over.gif);border-color:#aaccf6;}.col-move-top{background-image:url(../images/default/grid/col-move-top.gif);}.col-move-bottom{background-image:url(../images/default/grid/col-move-bottom.gif);}td.grid-hd-group-cell{background:url(../images/default/grid/grid3-hrow.gif) repeat-x bottom;}.x-grid3-row-selected{background-color:#dfe8f6!important;background-image:none;border-color:#a3bae9;}.x-grid3-cell-selected{background-color:#b8cfee!important;color:#000;}.x-grid3-cell-selected span{color:#000!important;}.x-grid3-cell-selected .x-grid3-cell-text{color:#000;}.x-grid3-locked td.x-grid3-row-marker,.x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker{background-color:#ebeadb!important;background-image:url(../images/default/grid/grid-hrow.gif)!important;color:#000;border-top-color:#fff;border-right-color:#6fa0df!important;}.x-grid3-locked td.x-grid3-row-marker div,.x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker div{color:#15428b!important;}.x-grid3-dirty-cell{background-image:url(../images/default/grid/dirty.gif);}.x-grid3-topbar,.x-grid3-bottombar{font:normal 11px arial,tahoma,helvetica,sans-serif;}.x-grid3-bottombar .x-toolbar{border-top-color:#a9bfd3;}.x-props-grid .x-grid3-td-name .x-grid3-cell-inner{background-image:url(../images/default/grid/grid3-special-col-bg.gif)!important;color:#000!important;}.x-props-grid .x-grid3-body .x-grid3-td-name{background-color:#fff!important;border-right-color:#eee;}.xg-hmenu-sort-asc .x-menu-item-icon{background-image:url(../images/default/grid/hmenu-asc.gif);}.xg-hmenu-sort-desc .x-menu-item-icon{background-image:url(../images/default/grid/hmenu-desc.gif);}.xg-hmenu-lock .x-menu-item-icon{background-image:url(../images/default/grid/hmenu-lock.gif);}.xg-hmenu-unlock .x-menu-item-icon{background-image:url(../images/default/grid/hmenu-unlock.gif);}.x-grid3-hd-btn{background-color:#c3daf9;background-image:url(../images/default/grid/grid3-hd-btn.gif);}.x-grid3-body .x-grid3-td-expander{background-image:url(../images/default/grid/grid3-special-col-bg.gif);}.x-grid3-row-expander{background-image:url(../images/default/grid/row-expand-sprite.gif);}.x-grid3-body .x-grid3-td-checker{background-image:url(../images/default/grid/grid3-special-col-bg.gif);}.x-grid3-row-checker,.x-grid3-hd-checker{background-image:url(../images/default/grid/row-check-sprite.gif);}.x-grid3-body .x-grid3-td-numberer{background-image:url(../images/default/grid/grid3-special-col-bg.gif);}.x-grid3-body .x-grid3-td-numberer .x-grid3-cell-inner{color:#444;}.x-grid3-body .x-grid3-td-row-icon{background-image:url(../images/default/grid/grid3-special-col-bg.gif);}.x-grid3-body .x-grid3-row-selected .x-grid3-td-numberer,.x-grid3-body .x-grid3-row-selected .x-grid3-td-checker,.x-grid3-body .x-grid3-row-selected .x-grid3-td-expander{background-image:url(../images/default/grid/grid3-special-col-sel-bg.gif);}.x-grid3-check-col{background-image:url(../images/default/menu/unchecked.gif);}.x-grid3-check-col-on{background-image:url(../images/default/menu/checked.gif);}.x-grid-group,.x-grid-group-body,.x-grid-group-hd{zoom:1;}.x-grid-group-hd{border-bottom-color:#99bbe8;}.x-grid-group-hd div.x-grid-group-title{background-image:url(../images/default/grid/group-collapse.gif);color:#3764a0;font:bold 11px tahoma,arial,helvetica,sans-serif;}.x-grid-group-collapsed .x-grid-group-hd div.x-grid-group-title{background-image:url(../images/default/grid/group-expand.gif);}.x-group-by-icon{background-image:url(../images/default/grid/group-by.gif);}.x-cols-icon{background-image:url(../images/default/grid/columns.gif);}.x-show-groups-icon{background-image:url(../images/default/grid/group-by.gif);}.x-grid-empty{color:gray;font:normal 11px tahoma,arial,helvetica,sans-serif;}.x-grid-with-col-lines .x-grid3-row td.x-grid3-cell{border-right-color:#ededed;}.x-grid-with-col-lines .x-grid3-row-selected{border-top-color:#a3bae9;}.x-pivotgrid .x-grid3-header-offset table td{background:url(../images/default/grid/grid3-hrow.gif) repeat-x 50% 100%;border-left:1px solid;border-right:1px solid;border-left-color:#EEE;border-right-color:#d0d0d0;}.x-pivotgrid .x-grid3-row-headers{background-color:#f9f9f9;}.x-pivotgrid .x-grid3-row-headers table td{background:#EEE url(../images/default/grid/grid3-rowheader.gif) repeat-x left top;border-left:1px solid;border-right:1px solid;border-left-color:#EEE;border-right-color:#d0d0d0;border-bottom:1px solid;border-bottom-color:#d0d0d0;height:18px;}.x-dd-drag-ghost{color:#000;font:normal 11px arial,helvetica,sans-serif;border-color:#ddd #bbb #bbb #ddd;background-color:#fff;}.x-dd-drop-nodrop .x-dd-drop-icon{background-image:url(../images/default/dd/drop-no.gif);}.x-dd-drop-ok .x-dd-drop-icon{background-image:url(../images/default/dd/drop-yes.gif);}.x-dd-drop-ok-add .x-dd-drop-icon{background-image:url(../images/default/dd/drop-add.gif);}.x-view-selector{background-color:#c3daf9;border-color:#39b;}.x-tree-node-expanded .x-tree-node-icon{background-image:url(../images/default/tree/folder-open.gif);}.x-tree-node-leaf .x-tree-node-icon{background-image:url(../images/default/tree/leaf.gif);}.x-tree-node-collapsed .x-tree-node-icon{background-image:url(../images/default/tree/folder.gif);}.x-tree-node-loading .x-tree-node-icon{background-image:url(../images/default/tree/loading.gif)!important;}.x-tree-node .x-tree-node-inline-icon{background-image:none;}.x-tree-node-loading a span{font-style:italic;color:#444;}.x-tree-lines .x-tree-elbow{background-image:url(../images/default/tree/elbow.gif);}.x-tree-lines .x-tree-elbow-plus{background-image:url(../images/default/tree/elbow-plus.gif);}.x-tree-lines .x-tree-elbow-minus{background-image:url(../images/default/tree/elbow-minus.gif);}.x-tree-lines .x-tree-elbow-end{background-image:url(../images/default/tree/elbow-end.gif);}.x-tree-lines .x-tree-elbow-end-plus{background-image:url(../images/default/tree/elbow-end-plus.gif);}.x-tree-lines .x-tree-elbow-end-minus{background-image:url(../images/default/tree/elbow-end-minus.gif);}.x-tree-lines .x-tree-elbow-line{background-image:url(../images/default/tree/elbow-line.gif);}.x-tree-no-lines .x-tree-elbow-plus{background-image:url(../images/default/tree/elbow-plus-nl.gif);}.x-tree-no-lines .x-tree-elbow-minus{background-image:url(../images/default/tree/elbow-minus-nl.gif);}.x-tree-no-lines .x-tree-elbow-end-plus{background-image:url(../images/default/tree/elbow-end-plus-nl.gif);}.x-tree-no-lines .x-tree-elbow-end-minus{background-image:url(../images/default/tree/elbow-end-minus-nl.gif);}.x-tree-arrows .x-tree-elbow-plus{background-image:url(../images/default/tree/arrows.gif);}.x-tree-arrows .x-tree-elbow-minus{background-image:url(../images/default/tree/arrows.gif);}.x-tree-arrows .x-tree-elbow-end-plus{background-image:url(../images/default/tree/arrows.gif);}.x-tree-arrows .x-tree-elbow-end-minus{background-image:url(../images/default/tree/arrows.gif);}.x-tree-node{color:#000;font:normal 11px arial,tahoma,helvetica,sans-serif;}.x-tree-node a,.x-dd-drag-ghost a{color:#000;}.x-tree-node a span,.x-dd-drag-ghost a span{color:#000;}.x-tree-node .x-tree-node-disabled a span{color:gray!important;}.x-tree-node div.x-tree-drag-insert-below{border-bottom-color:#36c;}.x-tree-node div.x-tree-drag-insert-above{border-top-color:#36c;}.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below a{border-bottom-color:#36c;}.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above a{border-top-color:#36c;}.x-tree-node .x-tree-drag-append a span{background-color:#ddd;border-color:gray;}.x-tree-node .x-tree-node-over{background-color:#eee;}.x-tree-node .x-tree-selected{background-color:#d9e8fb;}.x-tree-drop-ok-append .x-dd-drop-icon{background-image:url(../images/default/tree/drop-add.gif);}.x-tree-drop-ok-above .x-dd-drop-icon{background-image:url(../images/default/tree/drop-over.gif);}.x-tree-drop-ok-below .x-dd-drop-icon{background-image:url(../images/default/tree/drop-under.gif);}.x-tree-drop-ok-between .x-dd-drop-icon{background-image:url(../images/default/tree/drop-between.gif);}.x-date-picker{border-color:#1b376c;background-color:#fff;}.x-date-middle,.x-date-left,.x-date-right{background-image:url(../images/default/shared/hd-sprite.gif);color:#fff;font:bold 11px "sans serif",tahoma,verdana,helvetica;}.x-date-middle .x-btn .x-btn-text{color:#fff;}.x-date-middle .x-btn-mc em.x-btn-arrow{background-image:url(../images/default/toolbar/btn-arrow-light.gif);}.x-date-right a{background-image:url(../images/default/shared/right-btn.gif);}.x-date-left a{background-image:url(../images/default/shared/left-btn.gif);}.x-date-inner th{background-color:#dfecfb;background-image:url(../images/default/shared/glass-bg.gif);border-bottom-color:#a3bad9;font:normal 10px arial,helvetica,tahoma,sans-serif;color:#233d6d;}.x-date-inner td{border-color:#fff;}.x-date-inner a{font:normal 11px arial,helvetica,tahoma,sans-serif;color:#000;}.x-date-inner .x-date-active{color:#000;}.x-date-inner .x-date-selected a{background-color:#dfecfb;background-image:url(../images/default/shared/glass-bg.gif);border-color:#8db2e3;}.x-date-inner .x-date-today a{border-color:darkred;}.x-date-inner .x-date-selected span{font-weight:bold;}.x-date-inner .x-date-prevday a,.x-date-inner .x-date-nextday a{color:#aaa;}.x-date-bottom{border-top-color:#a3bad9;background-color:#dfecfb;background-image:url(../images/default/shared/glass-bg.gif);}.x-date-inner a:hover,.x-date-inner .x-date-disabled a:hover{color:#000;background-color:#ddecfe;}.x-date-inner .x-date-disabled a{background-color:#eee;color:#bbb;}.x-date-mmenu{background-color:#eee!important;}.x-date-mmenu .x-menu-item{font-size:10px;color:#000;}.x-date-mp{background-color:#fff;}.x-date-mp td{font:normal 11px arial,helvetica,tahoma,sans-serif;}.x-date-mp-btns button{background-color:#083772;color:#fff;border-color:#36c #005 #005 #36c;font:normal 11px arial,helvetica,tahoma,sans-serif;}.x-date-mp-btns{background-color:#dfecfb;background-image:url(../images/default/shared/glass-bg.gif);}.x-date-mp-btns td{border-top-color:#c5d2df;}td.x-date-mp-month a,td.x-date-mp-year a{color:#15428b;}td.x-date-mp-month a:hover,td.x-date-mp-year a:hover{color:#15428b;background-color:#ddecfe;}td.x-date-mp-sel a{background-color:#dfecfb;background-image:url(../images/default/shared/glass-bg.gif);border-color:#8db2e3;}.x-date-mp-ybtn a{background-image:url(../images/default/panel/tool-sprites.gif);}td.x-date-mp-sep{border-right-color:#c5d2df;}.x-tip .x-tip-close{background-image:url(../images/default/qtip/close.gif);}.x-tip .x-tip-tc,.x-tip .x-tip-tl,.x-tip .x-tip-tr,.x-tip .x-tip-bc,.x-tip .x-tip-bl,.x-tip .x-tip-br,.x-tip .x-tip-ml,.x-tip .x-tip-mr{background-image:url(../images/default/qtip/tip-sprite.gif);}.x-tip .x-tip-mc{font:normal 11px tahoma,arial,helvetica,sans-serif;}.x-tip .x-tip-ml{background-color:#fff;}.x-tip .x-tip-header-text{font:bold 11px tahoma,arial,helvetica,sans-serif;color:#444;}.x-tip .x-tip-body{font:normal 11px tahoma,arial,helvetica,sans-serif;color:#444;}.x-form-invalid-tip .x-tip-tc,.x-form-invalid-tip .x-tip-tl,.x-form-invalid-tip .x-tip-tr,.x-form-invalid-tip .x-tip-bc,.x-form-invalid-tip .x-tip-bl,.x-form-invalid-tip .x-tip-br,.x-form-invalid-tip .x-tip-ml,.x-form-invalid-tip .x-tip-mr{background-image:url(../images/default/form/error-tip-corners.gif);}.x-form-invalid-tip .x-tip-body{background-image:url(../images/default/form/exclamation.gif);}.x-tip-anchor{background-image:url(../images/default/qtip/tip-anchor-sprite.gif);}.x-menu{background-color:#f0f0f0;background-image:url(../images/default/menu/menu.gif);}.x-menu-floating{border-color:#718bb7;}.x-menu-nosep{background-image:none;}.x-menu-list-item{font:normal 11px arial,tahoma,sans-serif;}.x-menu-item-arrow{background-image:url(../images/default/menu/menu-parent.gif);}.x-menu-sep{background-color:#e0e0e0;border-bottom-color:#fff;}a.x-menu-item{color:#222;}.x-menu-item-active{background-image:url(../images/default/menu/item-over.gif);background-color:#dbecf4;border-color:#aaccf6;}.x-menu-item-active a.x-menu-item{border-color:#aaccf6;}.x-menu-check-item .x-menu-item-icon{background-image:url(../images/default/menu/unchecked.gif);}.x-menu-item-checked .x-menu-item-icon{background-image:url(../images/default/menu/checked.gif);}.x-menu-item-checked .x-menu-group-item .x-menu-item-icon{background-image:url(../images/default/menu/group-checked.gif);}.x-menu-group-item .x-menu-item-icon{background-image:none;}.x-menu-plain{background-color:#f0f0f0!important;background-image:none;}.x-date-menu,.x-color-menu{background-color:#fff!important;}.x-menu .x-date-picker{border-color:#a3bad9;}.x-cycle-menu .x-menu-item-checked{border-color:#a3bae9!important;background-color:#def8f6;}.x-menu-scroller-top{background-image:url(../images/default/layout/mini-top.gif);}.x-menu-scroller-bottom{background-image:url(../images/default/layout/mini-bottom.gif);}.x-box-tl{background-image:url(../images/default/box/corners.gif);}.x-box-tc{background-image:url(../images/default/box/tb.gif);}.x-box-tr{background-image:url(../images/default/box/corners.gif);}.x-box-ml{background-image:url(../images/default/box/l.gif);}.x-box-mc{background-color:#eee;background-image:url(../images/default/box/tb.gif);font-family:"Myriad Pro","Myriad Web","Tahoma","Helvetica","Arial",sans-serif;color:#393939;font-size:12px;}.x-box-mc h3{font-size:14px;font-weight:bold;}.x-box-mr{background-image:url(../images/default/box/r.gif);}.x-box-bl{background-image:url(../images/default/box/corners.gif);}.x-box-bc{background-image:url(../images/default/box/tb.gif);}.x-box-br{background-image:url(../images/default/box/corners.gif);}.x-box-blue .x-box-bl,.x-box-blue .x-box-br,.x-box-blue .x-box-tl,.x-box-blue .x-box-tr{background-image:url(../images/default/box/corners-blue.gif);}.x-box-blue .x-box-bc,.x-box-blue .x-box-mc,.x-box-blue .x-box-tc{background-image:url(../images/default/box/tb-blue.gif);}.x-box-blue .x-box-mc{background-color:#c3daf9;}.x-box-blue .x-box-mc h3{color:#17385b;}.x-box-blue .x-box-ml{background-image:url(../images/default/box/l-blue.gif);}.x-box-blue .x-box-mr{background-image:url(../images/default/box/r-blue.gif);}.x-combo-list{border-color:#98c0f4;background-color:#ddecfe;font:normal 12px tahoma,arial,helvetica,sans-serif;}.x-combo-list-inner{background-color:#fff;}.x-combo-list-hd{font:bold 11px tahoma,arial,helvetica,sans-serif;color:#15428b;background-image:url(../images/default/layout/panel-title-light-bg.gif);border-bottom-color:#98c0f4;}.x-resizable-pinned .x-combo-list-inner{border-bottom-color:#98c0f4;}.x-combo-list-item{border-color:#fff;}.x-combo-list .x-combo-selected{border-color:#a3bae9!important;background-color:#dfe8f6;}.x-combo-list .x-toolbar{border-top-color:#98c0f4;}.x-combo-list-small{font:normal 11px tahoma,arial,helvetica,sans-serif;}.x-panel{border-color:#99bbe8;}.x-panel-header{color:#15428b;font-weight:bold;font-size:11px;font-family:tahoma,arial,verdana,sans-serif;border-color:#99bbe8;background-image:url(../images/default/panel/white-top-bottom.gif);}.x-panel-body{border-color:#99bbe8;background-color:#fff;}.x-panel-bbar .x-toolbar,.x-panel-tbar .x-toolbar{border-color:#99bbe8;}.x-panel-tbar-noheader .x-toolbar,.x-panel-mc .x-panel-tbar .x-toolbar{border-top-color:#99bbe8;}.x-panel-body-noheader,.x-panel-mc .x-panel-body{border-top-color:#99bbe8;}.x-panel-tl .x-panel-header{color:#15428b;font:bold 11px tahoma,arial,verdana,sans-serif;}.x-panel-tc{background-image:url(../images/default/panel/top-bottom.gif);}.x-panel-tl,.x-panel-tr,.x-panel-bl,.x-panel-br{background-image:url(../images/default/panel/corners-sprite.gif);border-bottom-color:#99bbe8;}.x-panel-bc{background-image:url(../images/default/panel/top-bottom.gif);}.x-panel-mc{font:normal 11px tahoma,arial,helvetica,sans-serif;background-color:#dfe8f6;}.x-panel-ml{background-color:#fff;background-image:url(../images/default/panel/left-right.gif);}.x-panel-mr{background-image:url(../images/default/panel/left-right.gif);}.x-tool{background-image:url(../images/default/panel/tool-sprites.gif);}.x-panel-ghost{background-color:#cbddf3;}.x-panel-ghost ul{border-color:#99bbe8;}.x-panel-dd-spacer{border-color:#99bbe8;}.x-panel-fbar td,.x-panel-fbar span,.x-panel-fbar input,.x-panel-fbar div,.x-panel-fbar select,.x-panel-fbar label{font:normal 11px arial,tahoma,helvetica,sans-serif;}.x-window-proxy{background-color:#c7dffc;border-color:#99bbe8;}.x-window-tl .x-window-header{color:#15428b;font:bold 11px tahoma,arial,verdana,sans-serif;}.x-window-tc{background-image:url(../images/default/window/top-bottom.png);}.x-window-tl{background-image:url(../images/default/window/left-corners.png);}.x-window-tr{background-image:url(../images/default/window/right-corners.png);}.x-window-bc{background-image:url(../images/default/window/top-bottom.png);}.x-window-bl{background-image:url(../images/default/window/left-corners.png);}.x-window-br{background-image:url(../images/default/window/right-corners.png);}.x-window-mc{border-color:#99bbe8;font:normal 11px tahoma,arial,helvetica,sans-serif;background-color:#dfe8f6;}.x-window-ml{background-image:url(../images/default/window/left-right.png);}.x-window-mr{background-image:url(../images/default/window/left-right.png);}.x-window-maximized .x-window-tc{background-color:#fff;}.x-window-bbar .x-toolbar{border-top-color:#99bbe8;}.x-panel-ghost .x-window-tl{border-bottom-color:#99bbe8;}.x-panel-collapsed .x-window-tl{border-bottom-color:#84a0c4;}.x-dlg-mask{background-color:#ccc;}.x-window-plain .x-window-mc{background-color:#ccd9e8;border-color:#a3bae9 #dfe8f6 #dfe8f6 #a3bae9;}.x-window-plain .x-window-body{border-color:#dfe8f6 #a3bae9 #a3bae9 #dfe8f6;}body.x-body-masked .x-window-plain .x-window-mc{background-color:#ccd9e8;}.x-html-editor-wrap{border-color:#a9bfd3;background-color:#fff;}.x-html-editor-tb .x-btn-text{background-image:url(../images/default/editor/tb-sprite.gif);}.x-panel-noborder .x-panel-header-noborder{border-bottom-color:#99bbe8;}.x-panel-noborder .x-panel-tbar-noborder .x-toolbar{border-bottom-color:#99bbe8;}.x-panel-noborder .x-panel-bbar-noborder .x-toolbar{border-top-color:#99bbe8;}.x-tab-panel-bbar-noborder .x-toolbar{border-top-color:#99bbe8;}.x-tab-panel-tbar-noborder .x-toolbar{border-bottom-color:#99bbe8;}.x-border-layout-ct{background-color:#dfe8f6;}.x-accordion-hd{color:#222;font-weight:normal;background-image:url(../images/default/panel/light-hd.gif);}.x-layout-collapsed{background-color:#d2e0f2;border-color:#98c0f4;}.x-layout-collapsed-over{background-color:#d9e8fb;}.x-layout-split-west .x-layout-mini{background-image:url(../images/default/layout/mini-left.gif);}.x-layout-split-east .x-layout-mini{background-image:url(../images/default/layout/mini-right.gif);}.x-layout-split-north .x-layout-mini{background-image:url(../images/default/layout/mini-top.gif);}.x-layout-split-south .x-layout-mini{background-image:url(../images/default/layout/mini-bottom.gif);}.x-layout-cmini-west .x-layout-mini{background-image:url(../images/default/layout/mini-right.gif);}.x-layout-cmini-east .x-layout-mini{background-image:url(../images/default/layout/mini-left.gif);}.x-layout-cmini-north .x-layout-mini{background-image:url(../images/default/layout/mini-bottom.gif);}.x-layout-cmini-south .x-layout-mini{background-image:url(../images/default/layout/mini-top.gif);}.x-progress-wrap{border-color:#6593cf;}.x-progress-inner{background-color:#e0e8f3;background-image:url(../images/default/qtip/bg.gif);}.x-progress-bar{background-color:#9cbfee;background-image:url(../images/default/progress/progress-bg.gif);border-top-color:#d1e4fd;border-bottom-color:#7fa9e4;border-right-color:#7fa9e4;}.x-progress-text{font-size:11px;font-weight:bold;color:#fff;}.x-progress-text-back{color:#396095;}.x-list-header{background-color:#f9f9f9;background-image:url(../images/default/grid/grid3-hrow.gif);}.x-list-header-inner div em{border-left-color:#ddd;font:normal 11px arial,tahoma,helvetica,sans-serif;}.x-list-body dt em{font:normal 11px arial,tahoma,helvetica,sans-serif;}.x-list-over{background-color:#eee;}.x-list-selected{background-color:#dfe8f6;}.x-list-resizer{border-left-color:#555;border-right-color:#555;}.x-list-header-inner em.sort-asc,.x-list-header-inner em.sort-desc{background-image:url(../images/default/grid/sort-hd.gif);border-color:#99bbe8;}.x-slider-horz,.x-slider-horz .x-slider-end,.x-slider-horz .x-slider-inner{background-image:url(../images/default/slider/slider-bg.png);}.x-slider-horz .x-slider-thumb{background-image:url(../images/default/slider/slider-thumb.png);}.x-slider-vert,.x-slider-vert .x-slider-end,.x-slider-vert .x-slider-inner{background-image:url(../images/default/slider/slider-v-bg.png);}.x-slider-vert .x-slider-thumb{background-image:url(../images/default/slider/slider-v-thumb.png);}.x-window-dlg .ext-mb-text,.x-window-dlg .x-window-header-text{font-size:12px;}.x-window-dlg .ext-mb-textarea{font:normal 12px tahoma,arial,helvetica,sans-serif;}.x-window-dlg .x-msg-box-wait{background-image:url(../images/default/grid/loading.gif);}.x-window-dlg .ext-mb-info{background-image:url(../images/default/window/icon-info.gif);}.x-window-dlg .ext-mb-warning{background-image:url(../images/default/window/icon-warning.gif);}.x-window-dlg .ext-mb-question{background-image:url(../images/default/window/icon-question.gif);}.x-window-dlg .ext-mb-error{background-image:url(../images/default/window/icon-error.gif);}.ext-mac.ext-webkit .x-form-check-wrap{padding-left:1px;}.ext-strict .ext-webkit .x-small-editor .x-form-text{padding-top:1px;}.x-window-body{overflow:hidden;position:relative;} diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/css/style.css b/salt/idh/skins/http/opencanary/nasLogin/static/css/style.css new file mode 100644 index 000000000..b6f74eadb --- /dev/null +++ b/salt/idh/skins/http/opencanary/nasLogin/static/css/style.css @@ -0,0 +1 @@ +.syno-backup-repo-cloud-azure_blob{background-image:url("/webman/3rdparty/addon-azure_blob/images/icon.png") !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-backup-repo-cloud-azure_blob{background-image:url("/webman/3rdparty/addon-azure_blob/images/icon@2x.png") !important;background-size:32px 32px !important}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-backup-repo-cloud-azure_blob{background-image:url("/webman/3rdparty/addon-azure_blob/images/icon@2x.png") !important;background-size:32px 32px !important;outline:1px red dashed}}.syno-backup-task-cloud-azure_blob{background-image:url("/webman/3rdparty/addon-azure_blob/images/icon.png") !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-backup-task-cloud-azure_blob{background-image:url("/webman/3rdparty/addon-azure_blob/images/icon@2x.png") !important;background-size:32px 32px !important}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-backup-task-cloud-azure_blob{background-image:url("/webman/3rdparty/addon-azure_blob/images/icon@2x.png") !important;background-size:32px 32px !important;outline:1px red dashed}} diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/css/ux-all.css b/salt/idh/skins/http/opencanary/nasLogin/static/css/ux-all.css new file mode 100644 index 000000000..efd7a572a --- /dev/null +++ b/salt/idh/skins/http/opencanary/nasLogin/static/css/ux-all.css @@ -0,0 +1,11 @@ +.syno-ux-gridpanel div,.syno-ux-editorgridpanel div,.syno-ux-grid-hd-menu li.x-menu-list-item span,.syno-ux-editorgrid-hd-menu li.x-menu-list-item span,.syno-ux-groupcheck-menu li.x-menu-list-item span,.syno-ux-searchfield-menu li.x-menu-list-item span,.syno-ux-menu li.x-menu-list-item span,.syno-ux-schedule-menu li.x-menu-list-item span,.syno-ux-button-menu li.x-menu-list-item span,.syno-ux-textfield,.syno-ux-numberfield,.x-form-item .x-form-item-label.syno-ux-item-label,.syno-ux-triggerfield,.syno-ux-combobox,.syno-ux-colorfield,.syno-ux-schedulefield,.syno-ux-datefield,.syno-ux-timefield,.syno-ux-superboxselect,.syno-ux-checkbox-label,.syno-ux-displayfield.x-form-display-field,.syno-ux-button-grey.x-btn button,.syno-ux-button-grey.x-btn-over.x-btn button,.syno-ux-button-grey:hover.x-btn button,.syno-ux-button-grey.x-btn-click.x-btn button,.syno-ux-button-grey:active.x-btn button,.syno-ux-button-default.x-btn button,.syno-ux-button-default.x-btn-over.x-btn button,.syno-ux-button-default:hover.x-btn button,.syno-ux-button-default.x-btn-click.x-btn button,.syno-ux-button-default:active.x-btn button,.syno-ux-button.syno-ux-statebuttongroup-right.x-btn button,.syno-ux-button.syno-ux-statebuttongroup-left.x-btn button,.syno-ux-button.syno-ux-statebuttongroup-middle.x-btn button,.syno-ux-modulelist .x-tree-node-leaf a span,.syno-ux-modulelist .syno-textfilter .x-form-field-wrap .syno-textfilter-text,.syno-ux-datefield-menu table.x-date-inner tbody tr td span,.syno-ux-datefield-menu .x-date-bottom .x-btn-noicon .x-btn-small button,.syno-ux-datefield-menu .x-date-bottom .x-btn-over.x-btn-noicon .x-btn-small button,.syno-ux-datefield-menu .x-date-bottom .x-btn-click.x-btn-noicon .x-btn-small button,.syno-ux-datefield-menu .x-date-mp tr td a,.syno-ux-datefield-menu .x-date-mp-btns button.x-date-mp-cancel,.syno-ux-datefield-menu .x-date-mp-btns button.x-date-mp-cancel:hover,.syno-ux-textfilter .x-form-field-wrap .syno-ux-textfilter-text.x-form-text,.syno-ux-tab-panel .x-tab-strip-top li .x-tab-strip-text,.syno-ux-expandable-listview .item-summary .item-title,.syno-ux-treepanel .x-tree-node a span,.syno-ux-superboxselect-item,.syno-ux-combobox-list .x-combo-list-item,.syno-ux-textarea{color:#505a64}.x-item-disabled.x-form-text.syno-ux-textfield,.x-item-disabled.x-form-text.syno-ux-numberfield,.x-item-disabled .x-form-text.syno-ux-triggerfield,.x-item-disabled .x-form-text.syno-ux-combobox,.x-item-disabled .x-form-text.syno-ux-colorfield,.x-item-disabled .x-form-text.syno-ux-schedulefield,.x-item-disabled .x-form-text.syno-ux-datefield,.x-item-disabled .x-form-text.syno-ux-timefield,.x-item-disabled .x-form-text.syno-ux-superboxselect,.syno-ux-displayfield.x-form-display-field.x-item-disabled,.syno-ux-modulelist .syno-textfilter .x-form-field-wrap .syno-textfilter-text.x-form-empty-field,.syno-ux-textfilter .x-form-field-wrap .syno-ux-textfilter-text.x-form-text.x-form-empty-field,.syno-ux-textfilter .x-form-field-wrap.x-item-disabled,.syno-ux-superboxselect-item.x-item-disabled,.syno-ux-datefield-menu table.x-date-inner tbody tr td.x-date-disabled span,.syno-ux-datefield-menu table.x-date-inner tbody tr td.x-date-prevday span,.syno-ux-datefield-menu table.x-date-inner tbody tr td.x-date-nextday span,.syno-ux-textarea.x-item-disabled.x-form-field{color:#96a0aa}.syno-ux-grid-hd-menu li.x-menu-list-item.x-item-disabled span,.syno-ux-editorgrid-hd-menu li.x-menu-list-item.x-item-disabled span,.syno-ux-groupcheck-menu li.x-menu-list-item.x-item-disabled span,.syno-ux-searchfield-menu li.x-menu-list-item.x-item-disabled span,.syno-ux-menu li.x-menu-list-item.x-item-disabled span,.syno-ux-schedule-menu li.x-menu-list-item.x-item-disabled span,.syno-ux-button-menu li.x-menu-list-item.x-item-disabled span,.syno-ux-cb-disabled.syno-ux-checkbox-label,.syno-ux-button-grey.x-item-disabled.x-btn button,.syno-ux-button-default.x-item-disabled.x-btn button,.syno-ux-button.syno-ux-statebuttongroup-right.x-item-disabled.x-btn button,.syno-ux-button.syno-ux-statebuttongroup-left.x-item-disabled.x-btn button,.syno-ux-button.syno-ux-statebuttongroup-middle.x-item-disabled.x-btn button,.syno-ux-modulelist .x-tree-node-leaf.x-tree-node-disabled a span,.syno-ux-tab-panel .x-tab-strip-top li.x-item-disabled .x-tab-strip-text{color:#96a0aa !important}.syno-ux-displayfield.x-form-display-field .syno-ux-note{color:#00a66e}.x-statusbar .syno-ux-statusbar-success{color:#1ca600}.x-statusbar .syno-ux-statusbar-error{color:#fa4b4b}.syno-ux-grid-mask-info,.x-panel .ext-el-mask-msg.syno-ux-mask-info,.x-panel .ext-el-mask-msg.syno-ux-grid-mask-info{margin:24px;padding:10px 20px 10px 80px;max-width:400px;min-height:48px;border:1px solid #BEC8D2;border-radius:6px;box-shadow:0px 1px 4px rgba(0,0,0,0.25);background-image:url("./images/Components/icon_information.png");background-position:20px 10px;background-repeat:no-repeat;cursor:default}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-grid-mask-info,.synohdpack .x-panel .ext-el-mask-msg.syno-ux-mask-info,.x-panel .synohdpack .ext-el-mask-msg.syno-ux-mask-info,.synohdpack .x-panel .ext-el-mask-msg.syno-ux-grid-mask-info,.x-panel .synohdpack .ext-el-mask-msg.syno-ux-grid-mask-info{background-image:url("../img/synohdpack/./images/Components/icon_information.png");background-size:48px 48px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-grid-mask-info,.synohdpackdebug .x-panel .ext-el-mask-msg.syno-ux-mask-info,.x-panel .synohdpackdebug .ext-el-mask-msg.syno-ux-mask-info,.synohdpackdebug .x-panel .ext-el-mask-msg.syno-ux-grid-mask-info,.x-panel .synohdpackdebug .ext-el-mask-msg.syno-ux-grid-mask-info{background-image:url("../img/synohdpack/./images/Components/icon_information.png");background-size:48px 48px;outline:1px green dashed}}.syno-ux-grid-mask-info div,.x-panel .ext-el-mask-msg.syno-ux-mask-info div,.x-panel .ext-el-mask-msg.syno-ux-grid-mask-info div{padding:0px;height:48px;display:table-cell;vertical-align:middle;word-wrap:break-word;cursor:default;font-size:13px}.syno-ux-grid-mask-info div a,.x-panel .ext-el-mask-msg.syno-ux-mask-info div a,.x-panel .ext-el-mask-msg.syno-ux-grid-mask-info div a{color:#0086e5;font-weight:bold}.syno-ux-gridpanel div,.syno-ux-editorgridpanel div{font-size:12px}.syno-ux-gridpanel .x-panel-ml,.syno-ux-editorgridpanel .x-panel-ml,.syno-ux-gridpanel .x-panel-mr,.syno-ux-editorgridpanel .x-panel-mr{background-image:none;padding:0px}.syno-ux-gridpanel .x-panel-mc,.syno-ux-editorgridpanel .x-panel-mc{padding:0px}.syno-ux-gridpanel .x-panel-tl,.syno-ux-editorgridpanel .x-panel-tl{border:0px}.syno-ux-gridpanel .x-panel-header,.syno-ux-editorgridpanel .x-panel-header{border-bottom:0px dashed transparent !important;margin-bottom:0px !important}.syno-ux-gridpanel .x-panel-tbar .x-toolbar-layout-ct,.syno-ux-editorgridpanel .x-panel-tbar .x-toolbar-layout-ct,.syno-ux-gridpanel .x-panel-tbar-noheader .x-toolbar-layout-ct,.syno-ux-editorgridpanel .x-panel-tbar-noheader .x-toolbar-layout-ct,.syno-ux-gridpanel .x-panel-tbar-noborder .x-toolbar-layout-ct,.syno-ux-editorgridpanel .x-panel-tbar-noborder .x-toolbar-layout-ct{padding:0px 0px 8px 0px;padding-bottom:8px;background-image:none;background-color:transparent;border:0px}.x-grid-panel.syno-ux-gridpanel .x-panel-bwrap,.x-grid-panel.syno-ux-editorgridpanel .x-panel-bwrap{padding-bottom:12px}.x-grid-panel.syno-ux-gridpanel .x-panel-bwrap .x-panel-body,.x-grid-panel.syno-ux-editorgridpanel .x-panel-bwrap .x-panel-body{border:0px}.x-grid-panel.syno-ux-gridpanel .x-panel-bwrap .x-panel-body .x-grid3-scroller,.x-grid-panel.syno-ux-editorgridpanel .x-panel-bwrap .x-panel-body .x-grid3-scroller{padding-right:10px}.x-grid-panel.syno-ux-gridpanel .x-panel-bwrap .x-panel-body .x-grid3,.x-grid-panel.syno-ux-editorgridpanel .x-panel-bwrap .x-panel-body .x-grid3{background-color:transparent;border-top:solid 1px #D7E1EB}.syno-ux-gridpanel .x-grid3-header,.syno-ux-editorgridpanel .x-grid3-header{background-image:none;background-color:transparent;border-bottom:solid 1px #EBF0F5;padding-top:0px;height:26px}.syno-ux-gridpanel .x-grid3-hd,.syno-ux-editorgridpanel .x-grid3-hd{height:26px;border-left:0px;border-right:solid 1px #E1EBF5}.syno-ux-gridpanel .x-grid3-hd .x-grid3-hd-inner,.syno-ux-editorgridpanel .x-grid3-hd .x-grid3-hd-inner{height:26px;line-height:26px;color:#0086e5;background-color:transparent;padding:0 8px}.syno-ux-gridpanel .x-grid3-hd.x-grid3-hd-over .x-grid3-hd-inner,.syno-ux-editorgridpanel .x-grid3-hd.x-grid3-hd-over .x-grid3-hd-inner,.syno-ux-gridpanel .x-grid3-hd.x-grid3-hd-menu-open .x-grid3-hd-inner,.syno-ux-editorgridpanel .x-grid3-hd.x-grid3-hd-menu-open .x-grid3-hd-inner{background-image:none;background-color:transparent}.syno-ux-gridpanel .x-grid3-hd.x-grid3-hd-over .x-grid3-hd-inner .x-grid3-hd-btn,.syno-ux-editorgridpanel .x-grid3-hd.x-grid3-hd-over .x-grid3-hd-inner .x-grid3-hd-btn,.syno-ux-gridpanel .x-grid3-hd.x-grid3-hd-menu-open .x-grid3-hd-inner .x-grid3-hd-btn,.syno-ux-editorgridpanel .x-grid3-hd.x-grid3-hd-menu-open .x-grid3-hd-inner .x-grid3-hd-btn{background-color:transparent;background-image:url("images/Components/trigger.png");background-repeat:no-repeat;background-position:-26px 0px;width:26px;height:26px !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-gridpanel .x-grid3-hd.x-grid3-hd-over .x-grid3-hd-inner .x-grid3-hd-btn,.synohdpack .syno-ux-editorgridpanel .x-grid3-hd.x-grid3-hd-over .x-grid3-hd-inner .x-grid3-hd-btn,.synohdpack .syno-ux-gridpanel .x-grid3-hd.x-grid3-hd-menu-open .x-grid3-hd-inner .x-grid3-hd-btn,.synohdpack .syno-ux-editorgridpanel .x-grid3-hd.x-grid3-hd-menu-open .x-grid3-hd-inner .x-grid3-hd-btn{background-image:url("../img/synohdpack/images/Components/trigger.png");background-size:104px 28px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-gridpanel .x-grid3-hd.x-grid3-hd-over .x-grid3-hd-inner .x-grid3-hd-btn,.synohdpackdebug .syno-ux-editorgridpanel .x-grid3-hd.x-grid3-hd-over .x-grid3-hd-inner .x-grid3-hd-btn,.synohdpackdebug .syno-ux-gridpanel .x-grid3-hd.x-grid3-hd-menu-open .x-grid3-hd-inner .x-grid3-hd-btn,.synohdpackdebug .syno-ux-editorgridpanel .x-grid3-hd.x-grid3-hd-menu-open .x-grid3-hd-inner .x-grid3-hd-btn{background-image:url("../img/synohdpack/images/Components/trigger.png");background-size:104px 28px;outline:1px green dashed}}.syno-ux-gridpanel .x-grid3-hd.sort-desc .x-grid3-hd-inner,.syno-ux-editorgridpanel .x-grid3-hd.sort-desc .x-grid3-hd-inner,.syno-ux-gridpanel .x-grid3-hd.sort-asc .x-grid3-hd-inner,.syno-ux-editorgridpanel .x-grid3-hd.sort-asc .x-grid3-hd-inner{background-image:none;background-color:transparent}.syno-ux-gridpanel .x-grid3-hd.sort-desc .x-grid3-hd-inner .x-grid3-sort-icon,.syno-ux-editorgridpanel .x-grid3-hd.sort-desc .x-grid3-hd-inner .x-grid3-sort-icon,.syno-ux-gridpanel .x-grid3-hd.sort-asc .x-grid3-hd-inner .x-grid3-sort-icon,.syno-ux-editorgridpanel .x-grid3-hd.sort-asc .x-grid3-hd-inner .x-grid3-sort-icon{background-color:transparent;background-image:url("images/Components/bt_grid_dropdown.png");background-repeat:no-repeat;margin-left:4px;width:6px;height:26px;vertical-align:top}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-gridpanel .x-grid3-hd.sort-desc .x-grid3-hd-inner .x-grid3-sort-icon,.synohdpack .syno-ux-editorgridpanel .x-grid3-hd.sort-desc .x-grid3-hd-inner .x-grid3-sort-icon,.synohdpack .syno-ux-gridpanel .x-grid3-hd.sort-asc .x-grid3-hd-inner .x-grid3-sort-icon,.synohdpack .syno-ux-editorgridpanel .x-grid3-hd.sort-asc .x-grid3-hd-inner .x-grid3-sort-icon{background-image:url("../img/synohdpack/images/Components/bt_grid_dropdown.png");background-size:6px 168px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-gridpanel .x-grid3-hd.sort-desc .x-grid3-hd-inner .x-grid3-sort-icon,.synohdpackdebug .syno-ux-editorgridpanel .x-grid3-hd.sort-desc .x-grid3-hd-inner .x-grid3-sort-icon,.synohdpackdebug .syno-ux-gridpanel .x-grid3-hd.sort-asc .x-grid3-hd-inner .x-grid3-sort-icon,.synohdpackdebug .syno-ux-editorgridpanel .x-grid3-hd.sort-asc .x-grid3-hd-inner .x-grid3-sort-icon{background-image:url("../img/synohdpack/images/Components/bt_grid_dropdown.png");background-size:6px 168px;outline:1px green dashed}}.syno-ux-gridpanel .x-grid3-hd.sort-desc .x-grid3-hd-inner .x-grid3-sort-icon,.syno-ux-editorgridpanel .x-grid3-hd.sort-desc .x-grid3-hd-inner .x-grid3-sort-icon{background-position:0px 0px}.syno-ux-gridpanel .x-grid3-hd.sort-desc.x-grid3-hd-over .x-grid3-hd-inner .x-grid3-sort-icon,.syno-ux-editorgridpanel .x-grid3-hd.sort-desc.x-grid3-hd-over .x-grid3-hd-inner .x-grid3-sort-icon{background-position:0px -28px}.syno-ux-gridpanel .x-grid3-hd.sort-asc .x-grid3-hd-inner .x-grid3-sort-icon,.syno-ux-editorgridpanel .x-grid3-hd.sort-asc .x-grid3-hd-inner .x-grid3-sort-icon{background-position:0px -84px}.syno-ux-gridpanel .x-grid3-hd.sort-asc.x-grid3-hd-over .x-grid3-hd-inner .x-grid3-sort-icon,.syno-ux-editorgridpanel .x-grid3-hd.sort-asc.x-grid3-hd-over .x-grid3-hd-inner .x-grid3-sort-icon{background-position:0px -112px}.syno-ux-gridpanel .x-grid3-row,.syno-ux-editorgridpanel .x-grid3-row{background-color:transparent;border-bottom:1px solid #EBF0F5;border-width:0 0 1px 0;padding-top:0px}.syno-ux-gridpanel .x-grid3-row.x-grid3-row-over,.syno-ux-editorgridpanel .x-grid3-row.x-grid3-row-over{background-color:#f5faff;border-width:0 0 1px 0}.syno-ux-gridpanel .x-grid3-row.x-grid3-row-selected,.syno-ux-editorgridpanel .x-grid3-row.x-grid3-row-selected{background-color:#e6f5ff !important;border-width:0 0 1px 0}.syno-ux-gridpanel .x-grid3-row .x-grid3-cell,.syno-ux-editorgridpanel .x-grid3-row .x-grid3-cell{height:27px}.syno-ux-gridpanel .x-grid3-row .x-grid3-cell .x-grid3-cell-inner,.syno-ux-editorgridpanel .x-grid3-row .x-grid3-cell .x-grid3-cell-inner{line-height:27px;padding:0 0 0 8px}.syno-ux-gridpanel .x-grid-group .x-grid-group-body .x-grid3-cell-first .x-grid3-cell-inner,.syno-ux-editorgridpanel .x-grid-group .x-grid-group-body .x-grid3-cell-first .x-grid3-cell-inner{padding-left:28px}.syno-ux-gridpanel .x-grid-group .x-grid-group-hd,.syno-ux-editorgridpanel .x-grid-group .x-grid-group-hd{background-image:none;height:27px;border-bottom:1px solid #EBF0F5;padding-top:0px}.syno-ux-gridpanel .x-grid-group .x-grid-group-hd div.x-grid-group-title,.syno-ux-editorgridpanel .x-grid-group .x-grid-group-hd div.x-grid-group-title{background-image:url("./images/Components/category_expand.png");background-position:2px -72px;padding:0 0 0 28px;font-size:12px;color:#6B95B2;height:28px;line-height:28px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-gridpanel .x-grid-group .x-grid-group-hd div.x-grid-group-title,.synohdpack .syno-ux-editorgridpanel .x-grid-group .x-grid-group-hd div.x-grid-group-title{background-image:url("../img/synohdpack/./images/Components/category_expand.png");background-size:24px 144px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-gridpanel .x-grid-group .x-grid-group-hd div.x-grid-group-title,.synohdpackdebug .syno-ux-editorgridpanel .x-grid-group .x-grid-group-hd div.x-grid-group-title{background-image:url("../img/synohdpack/./images/Components/category_expand.png");background-size:24px 144px;outline:1px green dashed}}.syno-ux-gridpanel .x-grid-group .syno-ux-grid-group-hd-over div.x-grid-group-title,.syno-ux-editorgridpanel .x-grid-group .syno-ux-grid-group-hd-over div.x-grid-group-title{color:#5C9DCC;background-position:2px -96px}.syno-ux-gridpanel .x-grid-group .syno-ux-grid-group-hd-click div.x-grid-group-title,.syno-ux-editorgridpanel .x-grid-group .syno-ux-grid-group-hd-click div.x-grid-group-title{color:#5383A6;background-position:2px -120px}.syno-ux-gridpanel .x-grid-group.x-grid-group-collapsed .x-grid-group-hd div.x-grid-group-title,.syno-ux-editorgridpanel .x-grid-group.x-grid-group-collapsed .x-grid-group-hd div.x-grid-group-title{background-image:url("./images/Components/category_expand.png");background-position:2px 0px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-gridpanel .x-grid-group.x-grid-group-collapsed .x-grid-group-hd div.x-grid-group-title,.synohdpack .syno-ux-editorgridpanel .x-grid-group.x-grid-group-collapsed .x-grid-group-hd div.x-grid-group-title{background-image:url("../img/synohdpack/./images/Components/category_expand.png");background-size:24px 144px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-gridpanel .x-grid-group.x-grid-group-collapsed .x-grid-group-hd div.x-grid-group-title,.synohdpackdebug .syno-ux-editorgridpanel .x-grid-group.x-grid-group-collapsed .x-grid-group-hd div.x-grid-group-title{background-image:url("../img/synohdpack/./images/Components/category_expand.png");background-size:24px 144px;outline:1px green dashed}}.syno-ux-gridpanel .x-grid-group.x-grid-group-collapsed .syno-ux-grid-group-hd-over div.x-grid-group-title,.syno-ux-editorgridpanel .x-grid-group.x-grid-group-collapsed .syno-ux-grid-group-hd-over div.x-grid-group-title{background-position:2px -24px}.syno-ux-gridpanel .x-grid-group.x-grid-group-collapsed .syno-ux-grid-group-hd-click div.x-grid-group-title,.syno-ux-editorgridpanel .x-grid-group.x-grid-group-collapsed .syno-ux-grid-group-hd-click div.x-grid-group-title{background-position:2px -48px}.syno-ux-gridpanel .x-grid-group .x-grid-group-body.x-grid3-row-over,.syno-ux-editorgridpanel .x-grid-group .x-grid-group-body.x-grid3-row-over{border:none}.col-move-top{background-image:url("images/Components/col-move-bottom.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .col-move-top{background-image:url("../img/synohdpack/images/Components/col-move-bottom.png");background-size:9px 9px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .col-move-top{background-image:url("../img/synohdpack/images/Components/col-move-bottom.png");background-size:9px 9px;outline:1px green dashed}}.col-move-bottom{background-image:url("images/Components/col-move-bottom.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .col-move-bottom{background-image:url("../img/synohdpack/images/Components/col-move-bottom.png");background-size:9px 9px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .col-move-bottom{background-image:url("../img/synohdpack/images/Components/col-move-bottom.png");background-size:9px 9px;outline:1px green dashed}}.syno-ux-grid-hd-menu,.syno-ux-editorgrid-hd-menu,.syno-ux-groupcheck-menu,.syno-ux-searchfield-menu,.syno-ux-menu,.syno-ux-schedule-menu,.syno-ux-button-menu{background-image:none}.x-layer.syno-ux-grid-hd-menu,.x-layer.syno-ux-editorgrid-hd-menu,.x-layer.syno-ux-groupcheck-menu,.x-layer.syno-ux-searchfield-menu,.x-layer.syno-ux-menu,.x-layer.syno-ux-schedule-menu,.x-layer.syno-ux-button-menu{border-color:#C8D2DC;background-color:#FFFFFF;padding:4px;box-shadow:0 2px 4px rgba(0,0,0,0.5)}.syno-ux-grid-hd-menu ul,.syno-ux-editorgrid-hd-menu ul,.syno-ux-groupcheck-menu ul,.syno-ux-searchfield-menu ul,.syno-ux-menu ul,.syno-ux-schedule-menu ul,.syno-ux-button-menu ul{padding:0px}.syno-ux-grid-hd-menu .x-menu-sep,.syno-ux-editorgrid-hd-menu .x-menu-sep,.syno-ux-groupcheck-menu .x-menu-sep,.syno-ux-searchfield-menu .x-menu-sep,.syno-ux-menu .x-menu-sep,.syno-ux-schedule-menu .x-menu-sep,.syno-ux-button-menu .x-menu-sep{height:1px;background-color:#EBF0F5}.syno-ux-grid-hd-menu li.x-menu-list-item,.syno-ux-editorgrid-hd-menu li.x-menu-list-item,.syno-ux-groupcheck-menu li.x-menu-list-item,.syno-ux-searchfield-menu li.x-menu-list-item,.syno-ux-menu li.x-menu-list-item,.syno-ux-schedule-menu li.x-menu-list-item,.syno-ux-button-menu li.x-menu-list-item{background-image:none;background-color:#FFFFFF;border:none;padding:0px}.syno-ux-grid-hd-menu li.x-menu-list-item span,.syno-ux-editorgrid-hd-menu li.x-menu-list-item span,.syno-ux-groupcheck-menu li.x-menu-list-item span,.syno-ux-searchfield-menu li.x-menu-list-item span,.syno-ux-menu li.x-menu-list-item span,.syno-ux-schedule-menu li.x-menu-list-item span,.syno-ux-button-menu li.x-menu-list-item span{padding-left:4px}.syno-ux-grid-hd-menu li.x-menu-list-item a,.syno-ux-editorgrid-hd-menu li.x-menu-list-item a,.syno-ux-groupcheck-menu li.x-menu-list-item a,.syno-ux-searchfield-menu li.x-menu-list-item a,.syno-ux-menu li.x-menu-list-item a,.syno-ux-schedule-menu li.x-menu-list-item a,.syno-ux-button-menu li.x-menu-list-item a{line-height:28px;height:28px;padding-top:0px;padding-bottom:0px;border:0px;font-size:12px}.syno-ux-grid-hd-menu li.x-menu-list-item a.x-menu-item-arrow,.syno-ux-editorgrid-hd-menu li.x-menu-list-item a.x-menu-item-arrow,.syno-ux-groupcheck-menu li.x-menu-list-item a.x-menu-item-arrow,.syno-ux-searchfield-menu li.x-menu-list-item a.x-menu-item-arrow,.syno-ux-menu li.x-menu-list-item a.x-menu-item-arrow,.syno-ux-schedule-menu li.x-menu-list-item a.x-menu-item-arrow,.syno-ux-button-menu li.x-menu-list-item a.x-menu-item-arrow{background-image:url("./images/Components/dropdown_menu_parent.png");background-position:right 0px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-grid-hd-menu li.x-menu-list-item a.x-menu-item-arrow,.synohdpack .syno-ux-editorgrid-hd-menu li.x-menu-list-item a.x-menu-item-arrow,.synohdpack .syno-ux-groupcheck-menu li.x-menu-list-item a.x-menu-item-arrow,.synohdpack .syno-ux-searchfield-menu li.x-menu-list-item a.x-menu-item-arrow,.synohdpack .syno-ux-menu li.x-menu-list-item a.x-menu-item-arrow,.synohdpack .syno-ux-schedule-menu li.x-menu-list-item a.x-menu-item-arrow,.synohdpack .syno-ux-button-menu li.x-menu-list-item a.x-menu-item-arrow{background-image:url("../img/synohdpack/./images/Components/dropdown_menu_parent.png");background-size:16px 56px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-grid-hd-menu li.x-menu-list-item a.x-menu-item-arrow,.synohdpackdebug .syno-ux-editorgrid-hd-menu li.x-menu-list-item a.x-menu-item-arrow,.synohdpackdebug .syno-ux-groupcheck-menu li.x-menu-list-item a.x-menu-item-arrow,.synohdpackdebug .syno-ux-searchfield-menu li.x-menu-list-item a.x-menu-item-arrow,.synohdpackdebug .syno-ux-menu li.x-menu-list-item a.x-menu-item-arrow,.synohdpackdebug .syno-ux-schedule-menu li.x-menu-list-item a.x-menu-item-arrow,.synohdpackdebug .syno-ux-button-menu li.x-menu-list-item a.x-menu-item-arrow{background-image:url("../img/synohdpack/./images/Components/dropdown_menu_parent.png");background-size:16px 56px;outline:1px green dashed}}.syno-ux-grid-hd-menu li.x-menu-list-item.x-menu-item-active,.syno-ux-editorgrid-hd-menu li.x-menu-list-item.x-menu-item-active,.syno-ux-groupcheck-menu li.x-menu-list-item.x-menu-item-active,.syno-ux-searchfield-menu li.x-menu-list-item.x-menu-item-active,.syno-ux-menu li.x-menu-list-item.x-menu-item-active,.syno-ux-schedule-menu li.x-menu-list-item.x-menu-item-active,.syno-ux-button-menu li.x-menu-list-item.x-menu-item-active{background-color:#0086e5}.syno-ux-grid-hd-menu li.x-menu-list-item.x-menu-item-active span,.syno-ux-editorgrid-hd-menu li.x-menu-list-item.x-menu-item-active span,.syno-ux-groupcheck-menu li.x-menu-list-item.x-menu-item-active span,.syno-ux-searchfield-menu li.x-menu-list-item.x-menu-item-active span,.syno-ux-menu li.x-menu-list-item.x-menu-item-active span,.syno-ux-schedule-menu li.x-menu-list-item.x-menu-item-active span,.syno-ux-button-menu li.x-menu-list-item.x-menu-item-active span{color:#FFFFFF}.syno-ux-grid-hd-menu li.x-menu-list-item.x-menu-item-active a.x-menu-item-arrow,.syno-ux-editorgrid-hd-menu li.x-menu-list-item.x-menu-item-active a.x-menu-item-arrow,.syno-ux-groupcheck-menu li.x-menu-list-item.x-menu-item-active a.x-menu-item-arrow,.syno-ux-searchfield-menu li.x-menu-list-item.x-menu-item-active a.x-menu-item-arrow,.syno-ux-menu li.x-menu-list-item.x-menu-item-active a.x-menu-item-arrow,.syno-ux-schedule-menu li.x-menu-list-item.x-menu-item-active a.x-menu-item-arrow,.syno-ux-button-menu li.x-menu-list-item.x-menu-item-active a.x-menu-item-arrow{background-position:right -28px}.syno-ux-grid-hd-menu li.x-menu-list-item .x-menu-check-item .x-menu-item-icon,.syno-ux-editorgrid-hd-menu li.x-menu-list-item .x-menu-check-item .x-menu-item-icon,.syno-ux-groupcheck-menu li.x-menu-list-item .x-menu-check-item .x-menu-item-icon,.syno-ux-searchfield-menu li.x-menu-list-item .x-menu-check-item .x-menu-item-icon,.syno-ux-menu li.x-menu-list-item .x-menu-check-item .x-menu-item-icon,.syno-ux-schedule-menu li.x-menu-list-item .x-menu-check-item .x-menu-item-icon,.syno-ux-button-menu li.x-menu-list-item .x-menu-check-item .x-menu-item-icon{background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px;background-position:0px 0px;width:22px;height:22px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-grid-hd-menu li.x-menu-list-item .x-menu-check-item .x-menu-item-icon,.synohdpack .syno-ux-editorgrid-hd-menu li.x-menu-list-item .x-menu-check-item .x-menu-item-icon,.synohdpack .syno-ux-groupcheck-menu li.x-menu-list-item .x-menu-check-item .x-menu-item-icon,.synohdpack .syno-ux-searchfield-menu li.x-menu-list-item .x-menu-check-item .x-menu-item-icon,.synohdpack .syno-ux-menu li.x-menu-list-item .x-menu-check-item .x-menu-item-icon,.synohdpack .syno-ux-schedule-menu li.x-menu-list-item .x-menu-check-item .x-menu-item-icon,.synohdpack .syno-ux-button-menu li.x-menu-list-item .x-menu-check-item .x-menu-item-icon{background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-grid-hd-menu li.x-menu-list-item .x-menu-check-item .x-menu-item-icon,.synohdpackdebug .syno-ux-editorgrid-hd-menu li.x-menu-list-item .x-menu-check-item .x-menu-item-icon,.synohdpackdebug .syno-ux-groupcheck-menu li.x-menu-list-item .x-menu-check-item .x-menu-item-icon,.synohdpackdebug .syno-ux-searchfield-menu li.x-menu-list-item .x-menu-check-item .x-menu-item-icon,.synohdpackdebug .syno-ux-menu li.x-menu-list-item .x-menu-check-item .x-menu-item-icon,.synohdpackdebug .syno-ux-schedule-menu li.x-menu-list-item .x-menu-check-item .x-menu-item-icon,.synohdpackdebug .syno-ux-button-menu li.x-menu-list-item .x-menu-check-item .x-menu-item-icon{background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px;outline:1px green dashed}}.syno-ux-grid-hd-menu li.x-menu-list-item.x-menu-item-checked .x-menu-item-icon,.syno-ux-editorgrid-hd-menu li.x-menu-list-item.x-menu-item-checked .x-menu-item-icon,.syno-ux-groupcheck-menu li.x-menu-list-item.x-menu-item-checked .x-menu-item-icon,.syno-ux-searchfield-menu li.x-menu-list-item.x-menu-item-checked .x-menu-item-icon,.syno-ux-menu li.x-menu-list-item.x-menu-item-checked .x-menu-item-icon,.syno-ux-schedule-menu li.x-menu-list-item.x-menu-item-checked .x-menu-item-icon,.syno-ux-button-menu li.x-menu-list-item.x-menu-item-checked .x-menu-item-icon{background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px;background-position:0px -66px;width:22px;height:22px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-grid-hd-menu li.x-menu-list-item.x-menu-item-checked .x-menu-item-icon,.synohdpack .syno-ux-editorgrid-hd-menu li.x-menu-list-item.x-menu-item-checked .x-menu-item-icon,.synohdpack .syno-ux-groupcheck-menu li.x-menu-list-item.x-menu-item-checked .x-menu-item-icon,.synohdpack .syno-ux-searchfield-menu li.x-menu-list-item.x-menu-item-checked .x-menu-item-icon,.synohdpack .syno-ux-menu li.x-menu-list-item.x-menu-item-checked .x-menu-item-icon,.synohdpack .syno-ux-schedule-menu li.x-menu-list-item.x-menu-item-checked .x-menu-item-icon,.synohdpack .syno-ux-button-menu li.x-menu-list-item.x-menu-item-checked .x-menu-item-icon{background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-grid-hd-menu li.x-menu-list-item.x-menu-item-checked .x-menu-item-icon,.synohdpackdebug .syno-ux-editorgrid-hd-menu li.x-menu-list-item.x-menu-item-checked .x-menu-item-icon,.synohdpackdebug .syno-ux-groupcheck-menu li.x-menu-list-item.x-menu-item-checked .x-menu-item-icon,.synohdpackdebug .syno-ux-searchfield-menu li.x-menu-list-item.x-menu-item-checked .x-menu-item-icon,.synohdpackdebug .syno-ux-menu li.x-menu-list-item.x-menu-item-checked .x-menu-item-icon,.synohdpackdebug .syno-ux-schedule-menu li.x-menu-list-item.x-menu-item-checked .x-menu-item-icon,.synohdpackdebug .syno-ux-button-menu li.x-menu-list-item.x-menu-item-checked .x-menu-item-icon{background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px;outline:1px green dashed}}.syno-ux-groupcheck-menu li.x-menu-list-item .x-menu-check-item img.x-menu-item-icon,.syno-ux-searchfield-menu li.x-menu-list-item .x-menu-check-item img.x-menu-item-icon{background-image:none}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-groupcheck-menu li.x-menu-list-item .x-menu-check-item img.x-menu-item-icon,.synohdpack .syno-ux-searchfield-menu li.x-menu-list-item .x-menu-check-item img.x-menu-item-icon{background-image:none}}.syno-ux-groupcheck-menu li.x-menu-list-item.x-menu-item-checked img.x-menu-item-icon,.syno-ux-searchfield-menu li.x-menu-list-item.x-menu-item-checked img.x-menu-item-icon{background-image:url("images/Components/dropdown_menu_tick.png");background-position:0px 0px;background-repeat:no-repeat;width:28px;height:28px;left:0px;top:0px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-groupcheck-menu li.x-menu-list-item.x-menu-item-checked img.x-menu-item-icon,.synohdpack .syno-ux-searchfield-menu li.x-menu-list-item.x-menu-item-checked img.x-menu-item-icon{background-image:url("../img/synohdpack/images/Components/dropdown_menu_tick.png");background-size:28px 56px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-groupcheck-menu li.x-menu-list-item.x-menu-item-checked img.x-menu-item-icon,.synohdpackdebug .syno-ux-searchfield-menu li.x-menu-list-item.x-menu-item-checked img.x-menu-item-icon{background-image:url("../img/synohdpack/images/Components/dropdown_menu_tick.png");background-size:28px 56px;outline:1px green dashed}}.syno-ux-groupcheck-menu li.x-menu-list-item.x-menu-item-checked.x-menu-item-active img.x-menu-item-icon,.syno-ux-searchfield-menu li.x-menu-list-item.x-menu-item-checked.x-menu-item-active img.x-menu-item-icon{background-image:url("images/Components/dropdown_menu_tick.png");background-position:0px -28px;background-repeat:no-repeat;width:28px;height:28px;left:0px;top:0px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-groupcheck-menu li.x-menu-list-item.x-menu-item-checked.x-menu-item-active img.x-menu-item-icon,.synohdpack .syno-ux-searchfield-menu li.x-menu-list-item.x-menu-item-checked.x-menu-item-active img.x-menu-item-icon{background-image:url("../img/synohdpack/images/Components/dropdown_menu_tick.png");background-size:28px 56px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-groupcheck-menu li.x-menu-list-item.x-menu-item-checked.x-menu-item-active img.x-menu-item-icon,.synohdpackdebug .syno-ux-searchfield-menu li.x-menu-list-item.x-menu-item-checked.x-menu-item-active img.x-menu-item-icon{background-image:url("../img/synohdpack/images/Components/dropdown_menu_tick.png");background-size:28px 56px;outline:1px green dashed}}.syno-ux-textfield,.ext-strict .x-small-editor .syno-ux-textfield.x-form-text,.syno-ux-numberfield{font-size:12px;background-color:#FFFFFF;box-shadow:inset 0px 1px 0px rgba(80,90,100,0.08);background-image:none;padding-left:8px}.x-form-text.syno-ux-textfield,.ext-strict .x-small-editor .x-form-text.syno-ux-textfield,.x-form-text.syno-ux-numberfield{border-color:#C8D2DC;height:24px}.syno-ux-textfield.syno-ux-textfield-hover,.syno-ux-textfield.syno-ux-numberfield-hover,.syno-ux-textfield-hover.syno-ux-numberfield,.syno-ux-numberfield.syno-ux-numberfield-hover{border-color:#B4BEC8}.x-form-focus.syno-ux-textfield,.ext-strict .x-small-editor .x-form-focus.syno-ux-textfield.x-form-text,.x-form-focus.syno-ux-numberfield{border-color:#0086e5}.x-form-invalid.syno-ux-textfield,.ext-strict .x-small-editor .x-form-invalid.syno-ux-textfield.x-form-text,.x-form-invalid.syno-ux-numberfield{border-color:#FF8C8C;background-color:#FFF0F0;background-image:none}.x-item-disabled.x-form-text.syno-ux-textfield,.ext-strict .x-small-editor .x-item-disabled.x-form-text.syno-ux-textfield,.x-item-disabled.x-form-text.syno-ux-numberfield{border-color:#C8D2DC;background-color:#F6F8FA}.ext-strict .x-small-editor .x-form-text.syno-ux-textfield,.ext-strict .x-small-editor .x-form-text.syno-ux-numberfield{height:24px !important}.x-form-item .x-form-item-label.syno-ux-item-label{font-size:12px;line-height:28px;padding:0px}.syno-ux-triggerfield,.syno-ux-combobox,.syno-ux-colorfield,.syno-ux-schedulefield,.syno-ux-datefield,.syno-ux-timefield,.syno-ux-superboxselect{font-size:12px;background-color:#FFFFFF;box-shadow:inset 0px 1px 0px rgba(80,90,100,0.08);background-image:none;padding-left:8px;border-right:0px}.ext-gecko .syno-ux-triggerfield,.ext-gecko .syno-ux-combobox,.ext-gecko .syno-ux-colorfield,.ext-gecko .syno-ux-schedulefield,.ext-gecko .syno-ux-datefield,.ext-gecko .syno-ux-timefield,.ext-gecko .syno-ux-superboxselect{padding-top:1px;padding-bottom:1px}.syno-ux-triggerfield-readonly.syno-ux-triggerfield,.syno-ux-triggerfield-readonly.syno-ux-combobox,.syno-ux-triggerfield-readonly.syno-ux-colorfield,.syno-ux-triggerfield-readonly.syno-ux-schedulefield,.syno-ux-triggerfield-readonly.syno-ux-datefield,.syno-ux-triggerfield-readonly.syno-ux-timefield,.syno-ux-triggerfield-readonly.syno-ux-superboxselect,.syno-ux-triggerfield-no-trigger.syno-ux-triggerfield,.syno-ux-triggerfield-no-trigger.syno-ux-combobox,.syno-ux-triggerfield-no-trigger.syno-ux-colorfield,.syno-ux-triggerfield-no-trigger.syno-ux-schedulefield,.syno-ux-triggerfield-no-trigger.syno-ux-datefield,.syno-ux-triggerfield-no-trigger.syno-ux-timefield,.syno-ux-triggerfield-no-trigger.syno-ux-superboxselect{border-right:1px solid #C8D2DC}.x-form-text.syno-ux-triggerfield,.x-form-text.syno-ux-combobox,.x-form-text.syno-ux-colorfield,.x-form-text.syno-ux-schedulefield,.x-form-text.syno-ux-datefield,.x-form-text.syno-ux-timefield,.x-form-text.syno-ux-superboxselect{border-color:#C8D2DC;height:24px;line-height:24px}.syno-ux-triggerfield.syno-ux-triggerfield-hover,.syno-ux-triggerfield.syno-ux-combobox-hover,.syno-ux-triggerfield.syno-ux-colorfield-hover,.syno-ux-triggerfield.syno-ux-schedulefield-hover,.syno-ux-triggerfield.syno-ux-datefield-hover,.syno-ux-triggerfield.syno-ux-timefield-hover,.syno-ux-triggerfield-hover.syno-ux-combobox,.syno-ux-triggerfield-hover.syno-ux-colorfield,.syno-ux-triggerfield-hover.syno-ux-schedulefield,.syno-ux-triggerfield-hover.syno-ux-datefield,.syno-ux-triggerfield-hover.syno-ux-timefield,.syno-ux-triggerfield-hover.syno-ux-superboxselect,.syno-ux-combobox.syno-ux-combobox-hover,.syno-ux-combobox.syno-ux-colorfield-hover,.syno-ux-combobox.syno-ux-schedulefield-hover,.syno-ux-combobox.syno-ux-datefield-hover,.syno-ux-combobox.syno-ux-timefield-hover,.syno-ux-combobox-hover.syno-ux-colorfield,.syno-ux-combobox-hover.syno-ux-schedulefield,.syno-ux-combobox-hover.syno-ux-datefield,.syno-ux-combobox-hover.syno-ux-timefield,.syno-ux-combobox-hover.syno-ux-superboxselect,.syno-ux-colorfield.syno-ux-colorfield-hover,.syno-ux-colorfield.syno-ux-schedulefield-hover,.syno-ux-colorfield.syno-ux-datefield-hover,.syno-ux-colorfield.syno-ux-timefield-hover,.syno-ux-colorfield-hover.syno-ux-schedulefield,.syno-ux-colorfield-hover.syno-ux-datefield,.syno-ux-colorfield-hover.syno-ux-timefield,.syno-ux-colorfield-hover.syno-ux-superboxselect,.syno-ux-schedulefield.syno-ux-schedulefield-hover,.syno-ux-schedulefield.syno-ux-datefield-hover,.syno-ux-schedulefield.syno-ux-timefield-hover,.syno-ux-schedulefield-hover.syno-ux-datefield,.syno-ux-schedulefield-hover.syno-ux-timefield,.syno-ux-schedulefield-hover.syno-ux-superboxselect,.syno-ux-datefield.syno-ux-datefield-hover,.syno-ux-datefield.syno-ux-timefield-hover,.syno-ux-datefield-hover.syno-ux-timefield,.syno-ux-datefield-hover.syno-ux-superboxselect,.syno-ux-timefield.syno-ux-timefield-hover,.syno-ux-timefield-hover.syno-ux-superboxselect{border-color:#B4BEC8}.x-form-focus.syno-ux-triggerfield,.x-form-focus.syno-ux-combobox,.x-form-focus.syno-ux-colorfield,.x-form-focus.syno-ux-schedulefield,.x-form-focus.syno-ux-datefield,.x-form-focus.syno-ux-timefield,.x-form-focus.syno-ux-superboxselect{border-color:#0086e5}.x-form-invalid.syno-ux-triggerfield,.x-form-invalid.syno-ux-combobox,.x-form-invalid.syno-ux-colorfield,.x-form-invalid.syno-ux-schedulefield,.x-form-invalid.syno-ux-datefield,.x-form-invalid.syno-ux-timefield,.x-form-invalid.syno-ux-superboxselect{border-color:#FF8C8C;background-color:#FFF0F0;background-image:none}.x-item-disabled .x-form-text.syno-ux-triggerfield,.x-item-disabled .x-form-text.syno-ux-combobox,.x-item-disabled .x-form-text.syno-ux-colorfield,.x-item-disabled .x-form-text.syno-ux-schedulefield,.x-item-disabled .x-form-text.syno-ux-datefield,.x-item-disabled .x-form-text.syno-ux-timefield,.x-item-disabled .x-form-text.syno-ux-superboxselect{border-color:#C8D2DC;background-color:#F6F8FA;background-image:none;border-right:0px}.x-item-disabled .x-form-text.syno-ux-triggerfield-readonly.syno-ux-triggerfield,.x-item-disabled .x-form-text.syno-ux-triggerfield-readonly.syno-ux-combobox,.x-item-disabled .x-form-text.syno-ux-triggerfield-readonly.syno-ux-colorfield,.x-item-disabled .x-form-text.syno-ux-triggerfield-readonly.syno-ux-schedulefield,.x-item-disabled .x-form-text.syno-ux-triggerfield-readonly.syno-ux-datefield,.x-item-disabled .x-form-text.syno-ux-triggerfield-readonly.syno-ux-timefield,.x-item-disabled .x-form-text.syno-ux-triggerfield-readonly.syno-ux-superboxselect,.x-item-disabled .x-form-text.syno-ux-triggerfield-no-trigger.syno-ux-triggerfield,.x-item-disabled .x-form-text.syno-ux-triggerfield-no-trigger.syno-ux-combobox,.x-item-disabled .x-form-text.syno-ux-triggerfield-no-trigger.syno-ux-colorfield,.x-item-disabled .x-form-text.syno-ux-triggerfield-no-trigger.syno-ux-schedulefield,.x-item-disabled .x-form-text.syno-ux-triggerfield-no-trigger.syno-ux-datefield,.x-item-disabled .x-form-text.syno-ux-triggerfield-no-trigger.syno-ux-timefield,.x-item-disabled .x-form-text.syno-ux-triggerfield-no-trigger.syno-ux-superboxselect{border-right:1px solid #C8D2DC}.x-form-field-trigger-wrap .x-form-trigger.syno-ux-triggerfield-trigger,.x-form-field-trigger-wrap .x-form-trigger.syno-ux-combobox-trigger,.x-form-field-trigger-wrap .x-form-trigger.syno-ux-colorfield-trigger,.x-form-field-trigger-wrap .x-form-trigger.syno-ux-schedulefield-trigger,.x-form-field-trigger-wrap .x-form-trigger.syno-ux-datefield-trigger,.x-form-field-trigger-wrap .x-form-trigger.syno-ux-timefield-trigger{background-image:url("images/Components/trigger.png");background-position:0px -1px;background-color:#FFFFFF;border:1px solid #C8D2DC;border-left:0px;width:26px;height:26px;box-shadow:inset 0px 1px 0px rgba(80,90,100,0.08)}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .x-form-field-trigger-wrap .x-form-trigger.syno-ux-triggerfield-trigger,.synohdpack .x-form-field-trigger-wrap .x-form-trigger.syno-ux-combobox-trigger,.synohdpack .x-form-field-trigger-wrap .x-form-trigger.syno-ux-colorfield-trigger,.synohdpack .x-form-field-trigger-wrap .x-form-trigger.syno-ux-schedulefield-trigger,.synohdpack .x-form-field-trigger-wrap .x-form-trigger.syno-ux-datefield-trigger,.synohdpack .x-form-field-trigger-wrap .x-form-trigger.syno-ux-timefield-trigger{background-image:url("../img/synohdpack/images/Components/trigger.png");background-size:104px 28px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .x-form-field-trigger-wrap .x-form-trigger.syno-ux-triggerfield-trigger,.synohdpackdebug .x-form-field-trigger-wrap .x-form-trigger.syno-ux-combobox-trigger,.synohdpackdebug .x-form-field-trigger-wrap .x-form-trigger.syno-ux-colorfield-trigger,.synohdpackdebug .x-form-field-trigger-wrap .x-form-trigger.syno-ux-schedulefield-trigger,.synohdpackdebug .x-form-field-trigger-wrap .x-form-trigger.syno-ux-datefield-trigger,.synohdpackdebug .x-form-field-trigger-wrap .x-form-trigger.syno-ux-timefield-trigger{background-image:url("../img/synohdpack/images/Components/trigger.png");background-size:104px 28px;outline:1px green dashed}}.x-form-field-trigger-wrap .x-form-trigger.x-form-trigger-over.syno-ux-triggerfield-trigger,.x-form-field-trigger-wrap .x-form-trigger.x-form-trigger-over.syno-ux-combobox-trigger,.x-form-field-trigger-wrap .x-form-trigger.x-form-trigger-over.syno-ux-colorfield-trigger,.x-form-field-trigger-wrap .x-form-trigger.x-form-trigger-over.syno-ux-schedulefield-trigger,.x-form-field-trigger-wrap .x-form-trigger.x-form-trigger-over.syno-ux-datefield-trigger,.x-form-field-trigger-wrap .x-form-trigger.x-form-trigger-over.syno-ux-timefield-trigger{background-position:-26px -1px;border-color:#B4BECB}.x-form-field-trigger-wrap .x-form-trigger.x-form-trigger-over.syno-ux-trigger-invalid.syno-ux-triggerfield-trigger,.x-form-field-trigger-wrap .x-form-trigger.x-form-trigger-over.syno-ux-trigger-invalid.syno-ux-combobox-trigger,.x-form-field-trigger-wrap .x-form-trigger.x-form-trigger-over.syno-ux-trigger-invalid.syno-ux-colorfield-trigger,.x-form-field-trigger-wrap .x-form-trigger.x-form-trigger-over.syno-ux-trigger-invalid.syno-ux-schedulefield-trigger,.x-form-field-trigger-wrap .x-form-trigger.x-form-trigger-over.syno-ux-trigger-invalid.syno-ux-datefield-trigger,.x-form-field-trigger-wrap .x-form-trigger.x-form-trigger-over.syno-ux-trigger-invalid.syno-ux-timefield-trigger{border-color:#FF8C8C;background-color:#FFF0F0}.x-form-field-trigger-wrap .x-form-trigger.x-form-trigger-click.syno-ux-triggerfield-trigger,.x-form-field-trigger-wrap .x-form-trigger.x-form-trigger-click.syno-ux-combobox-trigger,.x-form-field-trigger-wrap .x-form-trigger.x-form-trigger-click.syno-ux-colorfield-trigger,.x-form-field-trigger-wrap .x-form-trigger.x-form-trigger-click.syno-ux-schedulefield-trigger,.x-form-field-trigger-wrap .x-form-trigger.x-form-trigger-click.syno-ux-datefield-trigger,.x-form-field-trigger-wrap .x-form-trigger.x-form-trigger-click.syno-ux-timefield-trigger{background-position:-52px -1px}.x-form-field-trigger-wrap .x-form-trigger.syno-ux-trigger-invalid.syno-ux-triggerfield-trigger,.x-form-field-trigger-wrap .x-form-trigger.syno-ux-trigger-invalid.syno-ux-combobox-trigger,.x-form-field-trigger-wrap .x-form-trigger.syno-ux-trigger-invalid.syno-ux-colorfield-trigger,.x-form-field-trigger-wrap .x-form-trigger.syno-ux-trigger-invalid.syno-ux-schedulefield-trigger,.x-form-field-trigger-wrap .x-form-trigger.syno-ux-trigger-invalid.syno-ux-datefield-trigger,.x-form-field-trigger-wrap .x-form-trigger.syno-ux-trigger-invalid.syno-ux-timefield-trigger{border-color:#FF8C8C;background-color:#FFF0F0}.x-form-field-trigger-wrap.x-trigger-wrap-focus .x-form-trigger.syno-ux-triggerfield-trigger,.x-form-field-trigger-wrap.x-trigger-wrap-focus .x-form-trigger.syno-ux-combobox-trigger,.x-form-field-trigger-wrap.x-trigger-wrap-focus .x-form-trigger.syno-ux-colorfield-trigger,.x-form-field-trigger-wrap.x-trigger-wrap-focus .x-form-trigger.syno-ux-schedulefield-trigger,.x-form-field-trigger-wrap.x-trigger-wrap-focus .x-form-trigger.syno-ux-datefield-trigger,.x-form-field-trigger-wrap.x-trigger-wrap-focus .x-form-trigger.syno-ux-timefield-trigger{border-color:#0086e5}.x-form-field-trigger-wrap.x-trigger-wrap-focus .x-form-trigger.syno-ux-trigger-invalid.syno-ux-triggerfield-trigger,.x-form-field-trigger-wrap.x-trigger-wrap-focus .x-form-trigger.syno-ux-trigger-invalid.syno-ux-combobox-trigger,.x-form-field-trigger-wrap.x-trigger-wrap-focus .x-form-trigger.syno-ux-trigger-invalid.syno-ux-colorfield-trigger,.x-form-field-trigger-wrap.x-trigger-wrap-focus .x-form-trigger.syno-ux-trigger-invalid.syno-ux-schedulefield-trigger,.x-form-field-trigger-wrap.x-trigger-wrap-focus .x-form-trigger.syno-ux-trigger-invalid.syno-ux-datefield-trigger,.x-form-field-trigger-wrap.x-trigger-wrap-focus .x-form-trigger.syno-ux-trigger-invalid.syno-ux-timefield-trigger{border-color:#FF8C8C}.x-form-field-trigger-wrap.x-item-disabled .x-form-trigger.syno-ux-triggerfield-trigger,.x-form-field-trigger-wrap.x-item-disabled .x-form-trigger.syno-ux-combobox-trigger,.x-form-field-trigger-wrap.x-item-disabled .x-form-trigger.syno-ux-colorfield-trigger,.x-form-field-trigger-wrap.x-item-disabled .x-form-trigger.syno-ux-schedulefield-trigger,.x-form-field-trigger-wrap.x-item-disabled .x-form-trigger.syno-ux-datefield-trigger,.x-form-field-trigger-wrap.x-item-disabled .x-form-trigger.syno-ux-timefield-trigger{background-position:-78px -1px;background-color:#F6F8FA;border-color:#C8D2DC}.x-form-field-trigger-wrap.x-item-disabled .x-form-trigger.x-form-trigger-over.syno-ux-triggerfield-trigger,.x-form-field-trigger-wrap.x-item-disabled .x-form-trigger.x-form-trigger-over.syno-ux-combobox-trigger,.x-form-field-trigger-wrap.x-item-disabled .x-form-trigger.x-form-trigger-over.syno-ux-colorfield-trigger,.x-form-field-trigger-wrap.x-item-disabled .x-form-trigger.x-form-trigger-over.syno-ux-schedulefield-trigger,.x-form-field-trigger-wrap.x-item-disabled .x-form-trigger.x-form-trigger-over.syno-ux-datefield-trigger,.x-form-field-trigger-wrap.x-item-disabled .x-form-trigger.x-form-trigger-over.syno-ux-timefield-trigger,.x-form-field-trigger-wrap.x-item-disabled .x-form-trigger.x-form-trigger-click.syno-ux-triggerfield-trigger,.x-form-field-trigger-wrap.x-item-disabled .x-form-trigger.x-form-trigger-click.syno-ux-combobox-trigger,.x-form-field-trigger-wrap.x-item-disabled .x-form-trigger.x-form-trigger-click.syno-ux-colorfield-trigger,.x-form-field-trigger-wrap.x-item-disabled .x-form-trigger.x-form-trigger-click.syno-ux-schedulefield-trigger,.x-form-field-trigger-wrap.x-item-disabled .x-form-trigger.x-form-trigger-click.syno-ux-datefield-trigger,.x-form-field-trigger-wrap.x-item-disabled .x-form-trigger.x-form-trigger-click.syno-ux-timefield-trigger{background-position:-78px -1px !important;border-color:#C8D2DC}/*! + * Ext JS Library 3.2.1 + * Copyright(c) 2006-2010 Ext JS, Inc. + * licensing@extjs.com + * http://www.extjs.com/license + */#images-view .x-panel-body{background:white;font:11px Arial, Helvetica, sans-serif}#images-view .thumb{background:#dddddd;padding:3px}#images-view .thumb img{height:60px;width:80px}#images-view .thumb-wrap{float:left;margin:4px;margin-right:0;padding:5px}#images-view .thumb-wrap span{display:block;overflow:hidden;text-align:center}#images-view .x-view-over{border:1px solid #dddddd;background:#efefef url(../resources/images/default/grid/row-over.gif) repeat-x left top;padding:4px}#images-view .x-view-selected{background:#eff5fb url(images/data-view/selected.gif) no-repeat right bottom;border:1px solid #99bbe8;padding:4px}#images-view .x-view-selected .thumb{background:transparent}#images-view .loading-indicator{font-size:11px;background-image:url("../resources/images/default/grid/loading.gif");background-repeat:no-repeat;background-position:left;padding-left:20px;margin:10px}/*! + * Ext JS Library 3.2.1 + * Copyright(c) 2006-2010 Ext JS, Inc. + * licensing@extjs.com + * http://www.extjs.com/license + */.x-statusbar .x-status-text{cursor:default}.x-statusbar .x-status-busy{padding-left:25px !important;background:transparent no-repeat 3px 2px}.x-statusbar .x-status-error{padding-left:25px !important;background:transparent no-repeat 3px 2px}.x-statusbar .x-status-valid{padding-left:25px !important;background:transparent no-repeat 3px 2px}.x-statusbar .x-status-busy{background-image:url(images/statusbar/loading.gif)}.x-statusbar .x-status-error{color:#C33;background-image:url(images/statusbar/exclamation.gif)}.x-statusbar .x-status-valid{background-image:url(images/statusbar/accept.png)}.ext-strict .x-form-checkbox,.x-form-radio{margin-right:2px}.ext-strict .ext-ie .x-form-checkbox,.ext-ie .x-form-radio{margin-right:0px}.syno-textfilter .x-form-field-wrap{border:1px solid #B5B8C8;background-color:#FFF}.ext-strict .ext-webkit .syno-textfilter .x-form-field-wrap .syno-textfilter-text,.syno-textfilter .x-form-field-wrap .syno-textfilter-text{font-size:11px;line-height:18px;height:18px !important;padding-left:18px;background-color:transparent;background-image:url(images/TextFilter/search-icon.png);background-position:0 0;background-repeat:no-repeat;border:none}.syno-textfilter .x-form-field-trigger-wrap .syno-textfilter-trigger{height:20px;background-color:transparent;background-image:url(images/TextFilter/search-cancel.png);background-position:0 0;background-repeat:no-repeat;right:0px;border:none}.syno-textfilter .x-form-field-trigger-wrap.x-item-disabled .syno-textfilter-trigger{background-image:url(images/TextFilter/search_icon_cancel.png) !important;background-position:0 -20px !important}.syno-search-field .x-form-field-wrap-right{padding-right:6px;background-image:url(images/TextFilter/search_box.png);background-repeat:no-repeat;height:24px;background-position:right -48px}.syno-search-field .x-form-field-wrap-center{background-image:url(images/TextFilter/search_box.png);background-position:0 -24px;background-repeat:repeat-x;height:24px}.syno-search-field .x-form-field-wrap .syno-textfilter-text{line-height:16px !important;height:16px !important;font-size:12px;background-position:0 0;background-color:transparent;padding-bottom:0 !important}.ext-gecko .syno-search-field .x-form-field-wrap .syno-textfilter-text,.ext-ie9 .syno-search-field .x-form-field-wrap .syno-textfilter-text,.ext-ie8 .syno-search-field .x-form-field-wrap .syno-textfilter-text{padding-top:0 !important}.ext-trident6 .syno-search-field .x-form-field-wrap .syno-textfilter-text{margin-top:2px !important}.syno-search-field .x-form-field-wrap-left{background-image:url(images/TextFilter/search_box.png);background-position:0 0;background-repeat:no-repeat;height:24px !important;border:0;padding-left:6px;background-color:transparent}.syno-search-field .x-form-field-trigger-wrap .syno-textfilter-trigger{top:2px;padding-right:3px}.x-form-field-wrap-center-img{background-image:url(images/TextFilter/search-icon.png);width:16px;height:16px;line-height:16px;display:table-cell;padding-right:2px;background-repeat:no-repeat;background-position:0 2px}.ext-ie9 .x-form-field-wrap-center-img,.ext-ie8 .x-form-field-wrap-center-img{background-position:0 1px}.ext-trident6 .x-form-field-wrap-center-img{background-position:0 2px}.syno-grid-enable-column-checked{height:16px;background-repeat:no-repeat;background-position:center center;background-image:url(images/EnableColumn/checked.gif)}.syno-grid-enable-column-unchecked{height:16px;background-repeat:no-repeat;background-position:center center;background-image:url(images/EnableColumn/unchecked.gif)}.syno-grid-enable-column-grayed{height:16px;background-repeat:no-repeat;background-position:center center;background-image:url(images/EnableColumn/grayed.gif)}.x-checkbox{height:13px;width:13px;background:url(images/TriCheckbox/checkbox.gif) no-repeat -13px 0;vertical-align:bottom}.x-form-focus .x-checkbox,.x-checkbox-over .x-checkbox{background-position:-13px 0}.x-checkbox-down .x-checkbox{background-position:-26px 0}.x-item-disabled .x-checkbox{background-position:-39px 0}.x-checkbox-checked .x-checkbox{background-position:-13px -13px}.x-checkbox-checked .x-form-focus .x-checkbox,.x-checkbox-checked .x-checkbox-over .x-checkbox{background-position:-13px -13px}.x-checkbox-checked .x-checkbox-down .x-checkbox{background-position:-26px -13px}.x-checkbox-checked .x-item-disabled .x-checkbox{background-position:-39px -13px}.ext-ie9.syno-cjk .x-form-check-wrap{line-height:15px}.x-checkbox-grayed .x-checkbox{background-position:-13px -26px}.x-checkbox-grayed .x-form-focus .x-checkbox,.x-checkbox-grayed .x-checkbox-over .x-checkbox{background-position:-13px -26px}.x-checkbox-grayed .x-checkbox-down .x-checkbox{background-position:-26px -26px}.x-checkbox-grayed .x-item-disabled .x-checkbox{background-position:-39px -26px}.ux-cell-value{position:relative;zoom:1}.ux-cell-actions{position:absolute;right:0;top:-2px}.ux-cell-actions-left{left:0;top:-2px}.ux-cell-action{width:16px;height:16px;float:left;cursor:pointer;margin:0 0 0 4px}.ux-cell-actions-left .ux-cell-action{margin:0 4px 0 0}.syno-radiobox .x-form-check-wrap .x-form-radio+label.x-form-cb-label{padding-left:22px;padding-bottom:2px;background-repeat:no-repeat;background-image:url(images/CustRadio/radio_button.png)}.ext-gecko .syno-radiobox .x-form-check-wrap .x-form-radio+label.x-form-cb-label{padding-bottom:1px}.syno-radiobox .x-form-check-wrap.x-item-disabled .x-form-radio+label.x-form-cb-label{background-image:url(images/CustRadio/radio_button.png)}.syno-radiobox .x-form-check-wrap input.x-form-radio{width:0px}.ext-gecko .syno-radiobox .x-form-check-wrap input.x-form-radio,.ext-opera .syno-radiobox .x-form-check-wrap input.x-form-radio,.ext-webkit .syno-radiobox .x-form-check-wrap input.x-form-radio{display:none}.syno-radiobox .x-form-cb-label{margin-left:0px}.syno-radiobox .x-form-check-wrap label{background-position:0px 0px}.syno-radiobox.x-checkbox-over .x-form-check-wrap label{background-position:0px -16px}.syno-radiobox .x-form-check-wrap label.x-checkbox-checked{background-position:0px -32px}.syno-radiobox.x-checkbox-over .x-form-check-wrap label.x-checkbox-checked{background-position:0px -48px}.syno-rounded-menu{background:transparent none;border:0px none}.syno-rounded-menu .x-menu-list{padding:0}.syno-rounded-menu .x-menu-item-active{background-color:#b6def2;background-image:none;border-color:#b6def2}.syno-rounded-menu .x-menu-item-active a.x-menu-item{border-color:#b6def2}.syno-rounded-menu-tl{background:transparent url(images/RoundedMenu/dropdown_menu_bg_a.png) no-repeat 0 0;padding-left:10px;zoom:1;z-index:1;position:relative}.syno-rounded-menu-tc{background:transparent url(images/RoundedMenu/dropdown_menu_bg_a.png) repeat-x 0 -10px;overflow:hidden;zoom:1;height:10px}.syno-rounded-menu-tr{background:transparent url(images/RoundedMenu/dropdown_menu_bg_a.png) no-repeat right -20px;padding-right:10px}.syno-rounded-menu-ml{background:transparent url(images/RoundedMenu/dropdown_menu_bg_bl.png) repeat-y 0 0;padding-left:10px;zoom:1}.syno-rounded-menu-mc{background:transparent url(images/RoundedMenu/dropdown_menu_bg_c.png) repeat 0 0;margin-left:-5px;margin-right:-5px}.syno-rounded-menu-mr{background:transparent url(images/RoundedMenu/dropdown_menu_bg_br.png) repeat-y right 0;padding-right:10px;zoom:1}.syno-rounded-menu-bl{background:transparent url(images/RoundedMenu/dropdown_menu_bg_a.png) no-repeat 0 -30px;padding-left:10px;zoom:1}.syno-rounded-menu-bc{background:transparent url(images/RoundedMenu/dropdown_menu_bg_a.png) repeat-x 0 -40px;zoom:1;height:10px}.syno-rounded-menu-br{background:transparent url(images/RoundedMenu/dropdown_menu_bg_a.png) no-repeat right -50px;padding-right:10px;zoom:1}.syno-rounded-menu-bwrap{background:transparent none;border:0px none}.syno-ux-gridpanel .x-panel-tbar .x-toolbar,.syno-ux-editorgridpanel .x-panel-tbar .x-toolbar,.syno-ux-panel .x-panel-tbar .x-toolbar,.syno-ux-formpanel .x-panel-tbar .x-toolbar,.syno-ux-tab-panel .x-panel-tbar .x-toolbar{border-bottom-color:#D7E1EB;padding:0px 0px 8px 0px}.syno-ux-gridpanel .x-panel-bbar .x-toolbar,.syno-ux-editorgridpanel .x-panel-bbar .x-toolbar,.syno-ux-panel .x-panel-bbar .x-toolbar,.syno-ux-formpanel .x-panel-bbar .x-toolbar,.syno-ux-tab-panel .x-panel-bbar .x-toolbar{border-top-color:#EBF0F5;height:23px}.syno-ux-gridpanel .x-panel-bbar .x-toolbar .xtb-text,.syno-ux-editorgridpanel .x-panel-bbar .x-toolbar .xtb-text,.syno-ux-panel .x-panel-bbar .x-toolbar .xtb-text,.syno-ux-formpanel .x-panel-bbar .x-toolbar .xtb-text,.syno-ux-tab-panel .x-panel-bbar .x-toolbar .xtb-text{line-height:23px;padding-top:0px}.syno-ux-gridpanel .x-panel-ml,.syno-ux-editorgridpanel .x-panel-ml,.syno-ux-panel .x-panel-ml,.syno-ux-formpanel .x-panel-ml,.syno-ux-tab-panel .x-panel-ml,.syno-ux-gridpanel .x-panel-mc,.syno-ux-editorgridpanel .x-panel-mc,.syno-ux-panel .x-panel-mc,.syno-ux-formpanel .x-panel-mc,.syno-ux-tab-panel .x-panel-mc{background-color:transparent}.syno-ux-gridpanel .x-panel-header,.syno-ux-editorgridpanel .x-panel-header,.syno-ux-panel .x-panel-header,.syno-ux-formpanel .x-panel-header,.syno-ux-tab-panel .x-panel-header{background-image:none;border-bottom:1px dashed #D7E1EB;font-size:15px;font-weight:normal;padding:0px 0px 0px 8px}.syno-ux-gridpanel .x-panel-header .x-panel-header-text,.syno-ux-editorgridpanel .x-panel-header .x-panel-header-text,.syno-ux-panel .x-panel-header .x-panel-header-text,.syno-ux-formpanel .x-panel-header .x-panel-header-text,.syno-ux-tab-panel .x-panel-header .x-panel-header-text{color:#0086e5;line-height:28px}.syno-ux-checkbox-icon,.syno-ux-radio-icon{background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px;background-position:0 0;background-color:transparent;width:22px;height:22px;border:0px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-checkbox-icon,.synohdpack .syno-ux-radio-icon{background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-checkbox-icon,.synohdpackdebug .syno-ux-radio-icon{background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px;outline:1px green dashed}}.ext-ie .x-form-check-wrap .syno-ux-checkbox-icon,.ext-ie .x-form-check-wrap .syno-ux-radio-icon{width:22px;height:22px}.syno-ux-cb-focus.syno-ux-checkbox-icon,.syno-ux-cb-focus.syno-ux-radio-icon,.syno-ux-cb-hover.syno-ux-checkbox-icon,.syno-ux-cb-hover.syno-ux-radio-icon{background-position:0 -22px}.syno-ux-cb-disabled.syno-ux-checkbox-icon,.syno-ux-cb-disabled.syno-ux-radio-icon{background-position:0 -44px}.syno-ux-cb-disabled.syno-ux-cb-checked.syno-ux-checkbox-icon,.syno-ux-cb-disabled.syno-ux-cb-checked.syno-ux-radio-icon{background-position:0 -110px}.syno-ux-cb-disabled.syno-ux-cb-checked.syno-ux-cb-focus.syno-ux-checkbox-icon,.syno-ux-cb-disabled.syno-ux-cb-checked.syno-ux-cb-focus.syno-ux-radio-icon,.syno-ux-cb-disabled.syno-ux-cb-checked.syno-ux-cb-hover.syno-ux-checkbox-icon,.syno-ux-cb-disabled.syno-ux-cb-checked.syno-ux-cb-hover.syno-ux-radio-icon{background-position:0 -110px}.syno-ux-cb-disabled.syno-ux-cb-grayed.syno-ux-checkbox-icon,.syno-ux-cb-disabled.syno-ux-cb-grayed.syno-ux-radio-icon{background-position:0 -176px}.syno-ux-cb-disabled.syno-ux-cb-grayed.syno-ux-cb-grayed.syno-ux-checkbox-icon,.syno-ux-cb-disabled.syno-ux-cb-grayed.syno-ux-cb-grayed.syno-ux-radio-icon{background-position:0 -176px}.syno-ux-cb-checked.syno-ux-checkbox-icon,.syno-ux-cb-checked.syno-ux-radio-icon{background-position:0 -66px}.syno-ux-cb-checked.syno-ux-cb-focus.syno-ux-checkbox-icon,.syno-ux-cb-checked.syno-ux-cb-focus.syno-ux-radio-icon,.syno-ux-cb-checked.syno-ux-cb-hover.syno-ux-checkbox-icon,.syno-ux-cb-checked.syno-ux-cb-hover.syno-ux-radio-icon{background-position:0 -88px}.syno-ux-cb-grayed.syno-ux-checkbox-icon,.syno-ux-cb-grayed.syno-ux-radio-icon{background-position:0 -132px}.syno-ux-cb-grayed.syno-ux-cb-focus.syno-ux-checkbox-icon,.syno-ux-cb-grayed.syno-ux-cb-focus.syno-ux-radio-icon,.syno-ux-cb-grayed.syno-ux-cb-hover.syno-ux-checkbox-icon,.syno-ux-cb-grayed.syno-ux-cb-hover.syno-ux-radio-icon{background-position:0 -154px}.x-form-element .x-form-check-wrap .syno-ux-checkbox-icon,.x-form-element .x-form-check-wrap .syno-ux-radio-icon{position:absolute}.syno-ux-checkbox-label{font-size:12px;line-height:22px !important;padding-left:8px}.x-form-element .x-form-check-wrap .syno-ux-checkbox-label{display:inline-block;padding-left:30px}.syno-ux-fieldset{border:0px;padding:0px;margin-bottom:8px}.syno-ux-fieldset .x-fieldset-bwrap{padding:8px}.syno-ux-fieldset .x-fieldset-header{font-size:15px;font-weight:normal;height:28px;border-bottom:1px dashed #D7E1EB;padding:0}.syno-ux-fieldset .x-fieldset-header .x-fieldset-header-text{line-height:28px}.syno-ux-fieldset legend,.syno-ux-fieldset legend span{cursor:pointer}.syno-ux-fieldset.syno-ux-fieldset-default .x-fieldset-header-text{padding-left:8px}.syno-ux-fieldset.syno-ux-fieldset-default legend,.syno-ux-fieldset.syno-ux-fieldset-default legend span{cursor:default}.syno-ux-fieldset .x-tool.x-tool-toggle{background-image:url("images/Components/fieldset_expand.png");margin-top:2px;background-position:0px -72px;width:24px;height:24px;margin-left:4px;margin-right:4px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-fieldset .x-tool.x-tool-toggle{background-image:url("../img/synohdpack/images/Components/fieldset_expand.png");background-size:24px 288px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-fieldset .x-tool.x-tool-toggle{background-image:url("../img/synohdpack/images/Components/fieldset_expand.png");background-size:24px 288px;outline:1px green dashed}}.syno-ux-fieldset .syno-ux-fieldset-legend-hover{color:#0095FF;border-color:#C3CDD7}.syno-ux-fieldset .syno-ux-fieldset-legend-hover .x-tool.x-tool-toggle{background-position:0px -96px}.syno-ux-fieldset .syno-ux-fieldset-legend-click{color:#0077CC;border-color:#C3CDD7}.syno-ux-fieldset .syno-ux-fieldset-legend-click .x-tool.x-tool-toggle{background-position:0px -120px}.syno-ux-fieldset.x-panel-collapsed .x-tool.x-tool-toggle{background-position:0px 0px}.syno-ux-fieldset.x-panel-collapsed .syno-ux-fieldset-legend-hover .x-tool.x-tool-toggle{background-position:0px -24px}.syno-ux-fieldset.x-panel-collapsed .syno-ux-fieldset-legend-click .x-tool.x-tool-toggle{background-position:0px -48px}.ext-ie .x-fieldset.syno-ux-fieldset{padding-bottom:0px}.ext-ie .x-fieldset.syno-ux-fieldset legend{margin-bottom:0px}.syno-ux-displayfield.x-form-display-field{font-size:12px;padding-top:4px;padding-bottom:4px;line-height:20px}.syno-ux-displayfield.x-form-display-field a{font-weight:bold}.syno-ux-combobox-list.x-layer.x-combo-list{border-color:#C8D2DC;background-color:#FFFFFF;padding:4px;box-shadow:0 2px 4px rgba(0,0,0,0.5)}.syno-ux-combobox-list .x-combo-list-item{height:26px;line-height:26px;background-color:#FFFFFF;font-size:12px;color:#505A64;padding:0px;padding-left:8px}.syno-ux-combobox-list .x-combo-list-item.x-combo-selected{color:#FFFFFF}.syno-ux-combobox-list .x-combo-list-inner{margin-bottom:0px}.syno-ux-combobox-list .syno-ux-pagingtoolbar{border-top:1px solid #EBF0F5;border-bottom:1px solid #D7E1EB;padding:0px}.ext-strict .x-small-editor .x-form-field-wrap .x-form-text.syno-ux-combobox{height:24px !important}.syno-ux-colormenu{background-image:none}.syno-ux-colormenu.x-layer{border-color:#C8D2DC;background-color:#FFFFFF;padding:4px;box-shadow:0 2px 4px rgba(0,0,0,0.5)}.x-form-item .x-form-item-label.syno-ux-item-label{font-size:12px;line-height:28px;padding:0px}.syno-ux-button{height:26px;line-height:26px;border-radius:3px;display:inline-block;text-align:center}.syno-ux-button.x-btn em button{height:26px;font-size:12px;padding-left:14px;padding-right:14px;background-repeat:no-repeat}.syno-ux-button.syno-ux-button-dropdown{padding-right:14px}.syno-ux-button.syno-ux-button-dropdown.syno-ux-button-split{padding-right:6px}.syno-ux-button em{cursor:pointer}.syno-ux-button em.x-btn-arrow{display:block;padding-right:6px;background-image:url("./images/Components/bt_dropdown.png");background-repeat:no-repeat;background-position:top right}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-button em.x-btn-arrow{background-image:url("../img/synohdpack/./images/Components/bt_dropdown.png");background-size:6px 112px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-button em.x-btn-arrow{background-image:url("../img/synohdpack/./images/Components/bt_dropdown.png");background-size:6px 112px;outline:1px green dashed}}.syno-ux-button em.x-btn-arrow button{padding-right:6px}.syno-ux-button em.x-btn-split{display:block;padding-right:12px;background-image:url("./images/Components/bt_dropdown.png");background-repeat:no-repeat;background-position:top right}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-button em.x-btn-split{background-image:url("../img/synohdpack/./images/Components/bt_dropdown.png");background-size:6px 112px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-button em.x-btn-split{background-image:url("../img/synohdpack/./images/Components/bt_dropdown.png");background-size:6px 112px;outline:1px green dashed}}.syno-ux-button em.x-btn-split button{border-right:1px solid #C8D2DC;padding-right:8px}.syno-ux-button.x-item-disabled{cursor:default}.syno-ux-button.x-item-disabled em.x-btn-arrow{background-position-y:-28px}.syno-ux-button.x-item-disabled em.x-btn-split{background-position-y:-28px}.syno-ux-button.syno-ux-button-blue em.x-btn-arrow,.syno-ux-button.syno-ux-button-blue em.x-btn-split,.syno-ux-button.syno-ux-button-red em.x-btn-arrow,.syno-ux-button.syno-ux-button-red em.x-btn-split,.syno-ux-button.syno-ux-button-green em.x-btn-arrow,.syno-ux-button.syno-ux-button-green em.x-btn-split,.syno-ux-button.syno-ux-button-orange em.x-btn-arrow,.syno-ux-button.syno-ux-button-orange em.x-btn-split{background-position-y:-56px}.syno-ux-button.syno-ux-button-blue.x-item-disabled em.x-btn-arrow,.syno-ux-button.syno-ux-button-blue.x-item-disabled em.x-btn-split,.syno-ux-button.syno-ux-button-red.x-item-disabled em.x-btn-arrow,.syno-ux-button.syno-ux-button-red.x-item-disabled em.x-btn-split,.syno-ux-button.syno-ux-button-green.x-item-disabled em.x-btn-arrow,.syno-ux-button.syno-ux-button-green.x-item-disabled em.x-btn-split,.syno-ux-button.syno-ux-button-orange.x-item-disabled em.x-btn-arrow,.syno-ux-button.syno-ux-button-orange.x-item-disabled em.x-btn-split{background-position-y:-84px}.syno-ux-button-blue,.syno-ux-button-red,.syno-ux-button-grey,.syno-ux-button-green,.syno-ux-button-orange{min-width:80px;text-align:center}.syno-ux-button-blue.syno-ux-button-dropdown,.syno-ux-button-blue.syno-ux-button-split,.syno-ux-button-red.syno-ux-button-dropdown,.syno-ux-button-red.syno-ux-button-split,.syno-ux-button-grey.syno-ux-button-dropdown,.syno-ux-button-grey.syno-ux-button-split,.syno-ux-button-green.syno-ux-button-dropdown,.syno-ux-button-green.syno-ux-button-split,.syno-ux-button-orange.syno-ux-button-dropdown,.syno-ux-button-orange.syno-ux-button-split{min-width:0px}.syno-ux-button-grey{border:solid 1px #C8D2DC;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y1ZmFmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ViZjBmNSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f5faff), color-stop(100%, #ebf0f5));background-image:-webkit-linear-gradient(#f5faff,#ebf0f5);background-image:-moz-linear-gradient(#f5faff,#ebf0f5);background-image:-o-linear-gradient(#f5faff,#ebf0f5);background-image:linear-gradient(#f5faff,#ebf0f5);background-color:#ebf0f5}.syno-ux-button-grey.x-btn-over,.syno-ux-button-grey:hover{border:solid 1px #B4BEC8;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y1ZmFmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U3ZWNmMSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f5faff), color-stop(100%, #e7ecf1));background-image:-webkit-linear-gradient(#f5faff,#e7ecf1);background-image:-moz-linear-gradient(#f5faff,#e7ecf1);background-image:-o-linear-gradient(#f5faff,#e7ecf1);background-image:linear-gradient(#f5faff,#e7ecf1);background-color:#e7ecf1}.syno-ux-button-grey.x-btn-click,.syno-ux-button-grey:active{border:solid 1px #B4BEC8;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ViZjBmNSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2UxZTZlYiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ebf0f5), color-stop(100%, #e1e6eb));background-image:-webkit-linear-gradient(#ebf0f5,#e1e6eb);background-image:-moz-linear-gradient(#ebf0f5,#e1e6eb);background-image:-o-linear-gradient(#ebf0f5,#e1e6eb);background-image:linear-gradient(#ebf0f5,#e1e6eb);background-color:#e1e6eb}.syno-ux-button-grey.x-item-disabled{border:solid 1px #C8D2DC;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y1ZmFmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ViZjBmNSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f5faff), color-stop(100%, #ebf0f5));background-image:-webkit-linear-gradient(#f5faff,#ebf0f5);background-image:-moz-linear-gradient(#f5faff,#ebf0f5);background-image:-o-linear-gradient(#f5faff,#ebf0f5);background-image:linear-gradient(#f5faff,#ebf0f5);background-color:#ebf0f5}.syno-ux-button-default{border:solid 1px #C8D2DC;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y1ZmFmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2YwZjVmYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f5faff), color-stop(100%, #f0f5fa));background-image:-webkit-linear-gradient(#f5faff,#f0f5fa);background-image:-moz-linear-gradient(#f5faff,#f0f5fa);background-image:-o-linear-gradient(#f5faff,#f0f5fa);background-image:linear-gradient(#f5faff,#f0f5fa);background-color:#f0f5fa;margin-right:6px !important}.syno-ux-button-default.x-btn-over,.syno-ux-button-default:hover{border:solid 1px #B4BEC8;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y1ZmFmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ViZjBmNSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f5faff), color-stop(100%, #ebf0f5));background-image:-webkit-linear-gradient(#f5faff,#ebf0f5);background-image:-moz-linear-gradient(#f5faff,#ebf0f5);background-image:-o-linear-gradient(#f5faff,#ebf0f5);background-image:linear-gradient(#f5faff,#ebf0f5);background-color:#ebf0f5}.syno-ux-button-default.x-btn-click,.syno-ux-button-default:active{border:solid 1px #B4BEC8;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ViZjBmNSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U2ZWJmMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ebf0f5), color-stop(100%, #e6ebf0));background-image:-webkit-linear-gradient(#ebf0f5,#e6ebf0);background-image:-moz-linear-gradient(#ebf0f5,#e6ebf0);background-image:-o-linear-gradient(#ebf0f5,#e6ebf0);background-image:linear-gradient(#ebf0f5,#e6ebf0);background-color:#e6ebf0}.syno-ux-button-default.x-item-disabled{border:solid 1px #C8D2DC;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y1ZmFmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2YwZjVmYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f5faff), color-stop(100%, #f0f5fa));background-image:-webkit-linear-gradient(#f5faff,#f0f5fa);background-image:-moz-linear-gradient(#f5faff,#f0f5fa);background-image:-o-linear-gradient(#f5faff,#f0f5fa);background-image:linear-gradient(#f5faff,#f0f5fa);background-color:#f0f5fa}.syno-ux-button-blue{border:solid 1px #1687D9;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMyYWFmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzE5OTRlYiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #32aaff), color-stop(100%, #1994eb));background-image:-webkit-linear-gradient(#32aaff,#1994eb);background-image:-moz-linear-gradient(#32aaff,#1994eb);background-image:-o-linear-gradient(#32aaff,#1994eb);background-image:linear-gradient(#32aaff,#1994eb);background-color:#1994EB}.syno-ux-button-blue.x-btn button{color:#FFFFFF}.syno-ux-button-blue.x-btn-over,.syno-ux-button-blue:hover{border:solid 1px #0077CC;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzI1YTRmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAyOGFlYiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #25a4ff), color-stop(100%, #028aeb));background-image:-webkit-linear-gradient(#25a4ff,#028aeb);background-image:-moz-linear-gradient(#25a4ff,#028aeb);background-image:-o-linear-gradient(#25a4ff,#028aeb);background-image:linear-gradient(#25a4ff,#028aeb);background-color:#028AEB}.syno-ux-button-blue.x-btn-over.x-btn button,.syno-ux-button-blue:hover.x-btn button{color:#FFFFFF}.syno-ux-button-blue.x-btn-click,.syno-ux-button-blue:active{border:solid 1px #0077CC;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzE4OTdmMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAxODJkZiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #1897f2), color-stop(100%, #0182df));background-image:-webkit-linear-gradient(#1897f2,#0182df);background-image:-moz-linear-gradient(#1897f2,#0182df);background-image:-o-linear-gradient(#1897f2,#0182df);background-image:linear-gradient(#1897f2,#0182df);background-color:#0182DF}.syno-ux-button-blue.x-btn-click.x-btn button,.syno-ux-button-blue:active.x-btn button{color:#FFFFFF}.syno-ux-button-blue.x-item-disabled{border:solid 1px #1687D9;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMyYWFmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzE5OTRlYiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #32aaff), color-stop(100%, #1994eb));background-image:-webkit-linear-gradient(#32aaff,#1994eb);background-image:-moz-linear-gradient(#32aaff,#1994eb);background-image:-o-linear-gradient(#32aaff,#1994eb);background-image:linear-gradient(#32aaff,#1994eb);background-color:#1994EB}.syno-ux-button-blue.x-item-disabled.x-btn button{color:#99D4FF !important}.syno-ux-button-blue.syno-ux-button-dropdown.syno-ux-button-split button{border-right-color:#1687D9}.syno-ux-button-blue.syno-ux-button-dropdown.syno-ux-button-split.x-btn-over button{border-right-color:#0077CC}.syno-ux-button-blue.syno-ux-button-dropdown.syno-ux-button-split.x-btn-click button{border-right-color:#0077CC}.syno-ux-button-blue.syno-ux-button-dropdown.syno-ux-button-split.x-item-disabled button{border-right-color:#1687D9}.syno-ux-button-red{border:solid 1px #D14949;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZhNzA3MCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ViNWY1ZiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fa7070), color-stop(100%, #eb5f5f));background-image:-webkit-linear-gradient(#fa7070,#eb5f5f);background-image:-moz-linear-gradient(#fa7070,#eb5f5f);background-image:-o-linear-gradient(#fa7070,#eb5f5f);background-image:linear-gradient(#fa7070,#eb5f5f);background-color:#EB5F5F}.syno-ux-button-red.x-btn button{color:#FFFFFF}.syno-ux-button-red.x-btn-over,.syno-ux-button-red:hover{border:solid 1px #C43B38;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y5Njg2OCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2RmNDg0OCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f96868), color-stop(100%, #df4848));background-image:-webkit-linear-gradient(#f96868,#df4848);background-image:-moz-linear-gradient(#f96868,#df4848);background-image:-o-linear-gradient(#f96868,#df4848);background-image:linear-gradient(#f96868,#df4848);background-color:#DF4848}.syno-ux-button-red.x-btn-over.x-btn button,.syno-ux-button-red:hover.x-btn button{color:#FFFFFF}.syno-ux-button-red.x-btn-click,.syno-ux-button-red:active{border:solid 1px #C43B38;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2U4NTY1NiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5NDY0NiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e85656), color-stop(100%, #d94646));background-image:-webkit-linear-gradient(#e85656,#d94646);background-image:-moz-linear-gradient(#e85656,#d94646);background-image:-o-linear-gradient(#e85656,#d94646);background-image:linear-gradient(#e85656,#d94646);background-color:#D94646}.syno-ux-button-red.x-btn-click.x-btn button,.syno-ux-button-red:active.x-btn button{color:#FFFFFF}.syno-ux-button-red.x-item-disabled{border:solid 1px #D14949;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZhNzA3MCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ViNWY1ZiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fa7070), color-stop(100%, #eb5f5f));background-image:-webkit-linear-gradient(#fa7070,#eb5f5f);background-image:-moz-linear-gradient(#fa7070,#eb5f5f);background-image:-o-linear-gradient(#fa7070,#eb5f5f);background-image:linear-gradient(#fa7070,#eb5f5f);background-color:#EB5F5F}.syno-ux-button-red.x-item-disabled.x-btn button{color:#FFB2B2 !important}.syno-ux-button-red.syno-ux-button-dropdown.syno-ux-button-split button{border-right-color:#D14949}.syno-ux-button-red.syno-ux-button-dropdown.syno-ux-button-split.x-btn-over button{border-right-color:#C43B38}.syno-ux-button-red.syno-ux-button-dropdown.syno-ux-button-split.x-btn-click button{border-right-color:#C43B38}.syno-ux-button-red.syno-ux-button-dropdown.syno-ux-button-split.x-item-disabled button{border-right-color:#D14949}.syno-ux-button-green{border:solid 1px #7db012;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzlhY2YyOSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzg4YmYxNCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #9acf29), color-stop(100%, #88bf14));background-image:-webkit-linear-gradient(#9acf29,#88bf14);background-image:-moz-linear-gradient(#9acf29,#88bf14);background-image:-o-linear-gradient(#9acf29,#88bf14);background-image:linear-gradient(#9acf29,#88bf14);background-color:#88bf14}.syno-ux-button-green.x-btn button{color:#FFFFFF}.syno-ux-button-green.x-btn-over,.syno-ux-button-green:hover{border:solid 1px #63a100;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzg4YzUyNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzc4YjcxNCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #88c527), color-stop(100%, #78b714));background-image:-webkit-linear-gradient(#88c527,#78b714);background-image:-moz-linear-gradient(#88c527,#78b714);background-image:-o-linear-gradient(#88c527,#78b714);background-image:linear-gradient(#88c527,#78b714);background-color:#78b714}.syno-ux-button-green.x-btn-over.x-btn button,.syno-ux-button-green:hover.x-btn button{color:#FFFFFF}.syno-ux-button-green.x-btn-click,.syno-ux-button-green:active{border:solid 1px #63a100;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzc2YmIyNSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzY3YWQxMyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #76bb25), color-stop(100%, #67ad13));background-image:-webkit-linear-gradient(#76bb25,#67ad13);background-image:-moz-linear-gradient(#76bb25,#67ad13);background-image:-o-linear-gradient(#76bb25,#67ad13);background-image:linear-gradient(#76bb25,#67ad13);background-color:#67ad13}.syno-ux-button-green.x-btn-click.x-btn button,.syno-ux-button-green:active.x-btn button{color:#FFFFFF}.syno-ux-button-green.x-item-disabled{border:solid 1px #7db012;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzdkYjAxMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzg4YmYxNCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #7db012), color-stop(100%, #88bf14));background-image:-webkit-linear-gradient(#7db012,#88bf14);background-image:-moz-linear-gradient(#7db012,#88bf14);background-image:-o-linear-gradient(#7db012,#88bf14);background-image:linear-gradient(#7db012,#88bf14);background-color:#88bf14}.syno-ux-button-green.x-item-disabled.x-btn button{color:#cde894 !important}.syno-ux-button-green.syno-ux-button-dropdown.syno-ux-button-split button{border-right-color:#7db012}.syno-ux-button-green.syno-ux-button-dropdown.syno-ux-button-split.x-btn-over button{border-right-color:#63a100}.syno-ux-button-green.syno-ux-button-dropdown.syno-ux-button-split.x-btn-click button{border-right-color:#63a100}.syno-ux-button-green.syno-ux-button-dropdown.syno-ux-button-split.x-item-disabled button{border-right-color:#7db012}.syno-ux-button-orange{border:solid 1px #ef8202;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZhYTI0NiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Y0OTgyZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #faa246), color-stop(100%, #f4982d));background-image:-webkit-linear-gradient(#faa246,#f4982d);background-image:-moz-linear-gradient(#faa246,#f4982d);background-image:-o-linear-gradient(#faa246,#f4982d);background-image:linear-gradient(#faa246,#f4982d);background-color:#faa246}.syno-ux-button-orange.x-btn button{color:#FFFFFF}.syno-ux-button-orange.x-btn-over,.syno-ux-button-orange:hover{border:solid 1px #ea7702;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZhYTI0NiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2VmOGUyYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #faa246), color-stop(100%, #ef8e2c));background-image:-webkit-linear-gradient(#faa246,#ef8e2c);background-image:-moz-linear-gradient(#faa246,#ef8e2c);background-image:-o-linear-gradient(#faa246,#ef8e2c);background-image:linear-gradient(#faa246,#ef8e2c);background-color:#faa246}.syno-ux-button-orange.x-btn-over.x-btn button,.syno-ux-button-orange:hover.x-btn button{color:#FFFFFF}.syno-ux-button-orange.x-btn-click,.syno-ux-button-orange:active{border:solid 1px #ea7702;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZhOTk0NiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2VmODQyYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fa9946), color-stop(100%, #ef842c));background-image:-webkit-linear-gradient(#fa9946,#ef842c);background-image:-moz-linear-gradient(#fa9946,#ef842c);background-image:-o-linear-gradient(#fa9946,#ef842c);background-image:linear-gradient(#fa9946,#ef842c);background-color:#fa9946}.syno-ux-button-orange.x-btn-click.x-btn button,.syno-ux-button-orange:active.x-btn button{color:#FFFFFF}.syno-ux-button-orange.x-item-disabled{border:solid 1px #ef8202;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZhYTI0NiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Y0OTgyZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #faa246), color-stop(100%, #f4982d));background-image:-webkit-linear-gradient(#faa246,#f4982d);background-image:-moz-linear-gradient(#faa246,#f4982d);background-image:-o-linear-gradient(#faa246,#f4982d);background-image:linear-gradient(#faa246,#f4982d);background-color:#faa246}.syno-ux-button-orange.x-item-disabled.x-btn button{color:#ffe1be !important}.syno-ux-button-orange.syno-ux-button-dropdown.syno-ux-button-split button{border-right-color:#ef8202}.syno-ux-button-orange.syno-ux-button-dropdown.syno-ux-button-split.x-btn-over button{border-right-color:#ea7702}.syno-ux-button-orange.syno-ux-button-dropdown.syno-ux-button-split.x-btn-click button{border-right-color:#ea7702}.syno-ux-button-orange.syno-ux-button-dropdown.syno-ux-button-split.x-item-disabled button{border-right-color:#ef8202}.syno-ux-button.syno-ux-statebuttongroup-right,.syno-ux-button.syno-ux-statebuttongroup-left,.syno-ux-button.syno-ux-statebuttongroup-middle{margin-right:0px !important;border-color:#C8D2DC;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y1ZmFmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2YwZjVmYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f5faff), color-stop(100%, #f0f5fa));background-image:-webkit-linear-gradient(#f5faff,#f0f5fa);background-image:-moz-linear-gradient(#f5faff,#f0f5fa);background-image:-o-linear-gradient(#f5faff,#f0f5fa);background-image:linear-gradient(#f5faff,#f0f5fa);background-color:#C8D2DC}.syno-ux-button.syno-ux-statebuttongroup-right.x-btn em button,.syno-ux-button.syno-ux-statebuttongroup-left.x-btn em button,.syno-ux-button.syno-ux-statebuttongroup-middle.x-btn em button{padding-right:18px;padding-left:18px}.syno-ux-button.syno-ux-statebuttongroup-right.x-btn-over,.syno-ux-button.syno-ux-statebuttongroup-right:hover,.syno-ux-button.syno-ux-statebuttongroup-left.x-btn-over,.syno-ux-button.syno-ux-statebuttongroup-left:hover,.syno-ux-button.syno-ux-statebuttongroup-middle.x-btn-over,.syno-ux-button.syno-ux-statebuttongroup-middle:hover{border-color:#C8D2DC;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y1ZmFmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ViZjBmNSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f5faff), color-stop(100%, #ebf0f5));background-image:-webkit-linear-gradient(#f5faff,#ebf0f5);background-image:-moz-linear-gradient(#f5faff,#ebf0f5);background-image:-o-linear-gradient(#f5faff,#ebf0f5);background-image:linear-gradient(#f5faff,#ebf0f5);background-color:#EBF0F5}.syno-ux-button.syno-ux-statebuttongroup-right.x-btn-click,.syno-ux-button.syno-ux-statebuttongroup-right.syno-ux-statebuttongroup-pressed,.syno-ux-button.syno-ux-statebuttongroup-left.x-btn-click,.syno-ux-button.syno-ux-statebuttongroup-left.syno-ux-statebuttongroup-pressed,.syno-ux-button.syno-ux-statebuttongroup-middle.x-btn-click,.syno-ux-button.syno-ux-statebuttongroup-middle.syno-ux-statebuttongroup-pressed{border-color:#0970CB;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzE3OTNlYiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzNiYTZmMyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #1793eb), color-stop(100%, #3ba6f3));background-image:-webkit-linear-gradient(#1793eb,#3ba6f3);background-image:-moz-linear-gradient(#1793eb,#3ba6f3);background-image:-o-linear-gradient(#1793eb,#3ba6f3);background-image:linear-gradient(#1793eb,#3ba6f3);background-color:#3BA6F3;box-shadow:inset 0px 1px 2px #007bd3}.syno-ux-button.syno-ux-statebuttongroup-right.x-btn-click.x-btn button,.syno-ux-button.syno-ux-statebuttongroup-right.syno-ux-statebuttongroup-pressed.x-btn button,.syno-ux-button.syno-ux-statebuttongroup-left.x-btn-click.x-btn button,.syno-ux-button.syno-ux-statebuttongroup-left.syno-ux-statebuttongroup-pressed.x-btn button,.syno-ux-button.syno-ux-statebuttongroup-middle.x-btn-click.x-btn button,.syno-ux-button.syno-ux-statebuttongroup-middle.syno-ux-statebuttongroup-pressed.x-btn button{color:#FFFFFF;text-shadow:0px 1px 0px rgba(0,0,0,0.15)}.syno-ux-button.syno-ux-statebuttongroup-right.x-item-disabled,.syno-ux-button.syno-ux-statebuttongroup-left.x-item-disabled,.syno-ux-button.syno-ux-statebuttongroup-middle.x-item-disabled{border-color:#C8D2DC;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y1ZmFmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2YwZjVmYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f5faff), color-stop(100%, #f0f5fa));background-image:-webkit-linear-gradient(#f5faff,#f0f5fa);background-image:-moz-linear-gradient(#f5faff,#f0f5fa);background-image:-o-linear-gradient(#f5faff,#f0f5fa);background-image:linear-gradient(#f5faff,#f0f5fa);background-color:#F0F5FA}.syno-ux-button.syno-ux-statebuttongroup-right,.syno-ux-button.syno-ux-statebuttongroup-middle{border-top-left-radius:0px;border-bottom-left-radius:0px}.syno-ux-button.syno-ux-statebuttongroup-left,.syno-ux-button.syno-ux-statebuttongroup-middle{border-right:0px;border-top-right-radius:0px;border-bottom-right-radius:0px}.syno-ux-modulelist{padding-right:6px;background-position:right 0;background-repeat:repeat-y;background-image:url("./images/Components/shadow_category.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist{background-image:url("../img/synohdpack/./images/Components/shadow_category.png");background-size:4px 8px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist{background-image:url("../img/synohdpack/./images/Components/shadow_category.png");background-size:4px 8px;outline:1px green dashed}}.syno-ux-modulelist .x-panel-body{overflow-y:hidden}.syno-ux-modulelist .x-panel-body:before,.syno-ux-modulelist .x-panel-body:after{position:absolute;display:block;height:6px;content:"";width:94%}.syno-ux-modulelist .x-panel-body:before{top:0px;z-index:99;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0icmdiYSgyNTUsMjU1LDI1NSwwKSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, rgba(255,255,255,0)));background-image:-webkit-linear-gradient(#ffffff,rgba(255,255,255,0));background-image:-moz-linear-gradient(#ffffff,rgba(255,255,255,0));background-image:-o-linear-gradient(#ffffff,rgba(255,255,255,0));background-image:linear-gradient(#ffffff,rgba(255,255,255,0))}.syno-ux-modulelist .x-panel-body:after{bottom:0;z-index:99;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0icmdiYSgyNTUsMjU1LDI1NSwwKSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255,255,255,0)), color-stop(100%, #ffffff));background-image:-webkit-linear-gradient(rgba(255,255,255,0),#ffffff);background-image:-moz-linear-gradient(rgba(255,255,255,0),#ffffff);background-image:-o-linear-gradient(rgba(255,255,255,0),#ffffff);background-image:linear-gradient(rgba(255,255,255,0),#ffffff)}.syno-ux-modulelist.scroll-at-top .x-panel-body:before{display:none}.syno-ux-modulelist.scroll-at-bottom .x-panel-body:after{display:none}.syno-ux-modulelist .x-tree-root-ct{width:auto !important}.syno-ux-modulelist .x-tree-root-node{padding-bottom:8px}.syno-ux-modulelist .x-tree-elbow,.syno-ux-modulelist .x-tree-elbow-end{display:none}.syno-ux-modulelist .x-tree-node,.syno-ux-modulelist .x-tree-node *{cursor:pointer}.syno-ux-modulelist .x-tree-node .x-tree-selected,.syno-ux-modulelist .x-tree-node .x-tree-node-over{background-color:transparent}.syno-ux-modulelist .x-tree-node-icon{width:24px;height:24px;margin:13px 6px 0 8px}.syno-ux-modulelist .syno-modulelist-toggle,.syno-ux-modulelist .x-tree-node-collapsed .x-tree-elbow-minus,.syno-ux-modulelist .x-tree-node-collapsed .x-tree-elbow-end-minus,.syno-ux-modulelist .x-tree-node-expanded .x-tree-elbow-minus,.syno-ux-modulelist .x-tree-node-expanded .x-tree-elbow-end-minus,.syno-ux-modulelist .x-tree-node-collapsed .x-tree-elbow-plus,.syno-ux-modulelist .x-tree-node-collapsed .x-tree-elbow-end-plus,.syno-ux-modulelist .x-tree-node-expanded .x-tree-elbow-plus,.syno-ux-modulelist .x-tree-node-expanded .x-tree-elbow-end-plus{width:24px;height:24px;margin:2px}.syno-ux-modulelist .x-tree-node-collapsed,.syno-ux-modulelist .x-tree-node-expanded{height:27px;margin:4px 0;font-size:12px;font-weight:bold;border-bottom:1px solid #EBF0F5}.syno-ux-modulelist .x-tree-node-collapsed .x-tree-node-icon,.syno-ux-modulelist .x-tree-node-expanded .x-tree-node-icon{display:none}.syno-ux-modulelist .x-tree-node-collapsed a,.syno-ux-modulelist .x-tree-node-expanded a{display:inline-block;width:100%;position:absolute;left:0;color:#6B95B2;overflow:hidden;text-overflow:ellipsis;line-height:27px}.syno-ux-modulelist .x-tree-node-collapsed a span,.syno-ux-modulelist .x-tree-node-expanded a span{color:#6B95B2;margin-left:28px}.syno-ux-modulelist .x-tree-node-collapsed .x-tree-elbow-minus,.syno-ux-modulelist .x-tree-node-collapsed .x-tree-elbow-end-minus,.syno-ux-modulelist .x-tree-node-expanded .x-tree-elbow-minus,.syno-ux-modulelist .x-tree-node-expanded .x-tree-elbow-end-minus{background-image:url("./images/Components/category_expand.png");background-position:0 -72px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-collapsed .x-tree-elbow-minus,.synohdpack .syno-ux-modulelist .x-tree-node-collapsed .x-tree-elbow-end-minus,.synohdpack .syno-ux-modulelist .x-tree-node-expanded .x-tree-elbow-minus,.synohdpack .syno-ux-modulelist .x-tree-node-expanded .x-tree-elbow-end-minus{background-image:url("../img/synohdpack/./images/Components/category_expand.png");background-size:24px 144px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-collapsed .x-tree-elbow-minus,.synohdpackdebug .syno-ux-modulelist .x-tree-node-collapsed .x-tree-elbow-end-minus,.synohdpackdebug .syno-ux-modulelist .x-tree-node-expanded .x-tree-elbow-minus,.synohdpackdebug .syno-ux-modulelist .x-tree-node-expanded .x-tree-elbow-end-minus{background-image:url("../img/synohdpack/./images/Components/category_expand.png");background-size:24px 144px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-collapsed .x-tree-elbow-plus,.syno-ux-modulelist .x-tree-node-collapsed .x-tree-elbow-end-plus,.syno-ux-modulelist .x-tree-node-expanded .x-tree-elbow-plus,.syno-ux-modulelist .x-tree-node-expanded .x-tree-elbow-end-plus{background-image:url("./images/Components/category_expand.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-collapsed .x-tree-elbow-plus,.synohdpack .syno-ux-modulelist .x-tree-node-collapsed .x-tree-elbow-end-plus,.synohdpack .syno-ux-modulelist .x-tree-node-expanded .x-tree-elbow-plus,.synohdpack .syno-ux-modulelist .x-tree-node-expanded .x-tree-elbow-end-plus{background-image:url("../img/synohdpack/./images/Components/category_expand.png");background-size:24px 144px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-collapsed .x-tree-elbow-plus,.synohdpackdebug .syno-ux-modulelist .x-tree-node-collapsed .x-tree-elbow-end-plus,.synohdpackdebug .syno-ux-modulelist .x-tree-node-expanded .x-tree-elbow-plus,.synohdpackdebug .syno-ux-modulelist .x-tree-node-expanded .x-tree-elbow-end-plus{background-image:url("../img/synohdpack/./images/Components/category_expand.png");background-size:24px 144px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-collapsed:hover,.syno-ux-modulelist .x-tree-node-expanded:hover{border-bottom:1px solid #D7E1EB}.syno-ux-modulelist .x-tree-node-collapsed:hover a span,.syno-ux-modulelist .x-tree-node-expanded:hover a span{color:#5C9DCC}.syno-ux-modulelist .x-tree-node-collapsed:hover .x-tree-elbow-minus,.syno-ux-modulelist .x-tree-node-expanded:hover .x-tree-elbow-minus{background-position:0 -96px}.syno-ux-modulelist .x-tree-node-collapsed:hover .x-tree-elbow-plus,.syno-ux-modulelist .x-tree-node-expanded:hover .x-tree-elbow-plus{background-position:0 -24px}.syno-ux-modulelist .x-tree-node-collapsed:active a span,.syno-ux-modulelist .x-tree-node-expanded:active a span{color:#5383A6}.syno-ux-modulelist .x-tree-node-collapsed:active .x-tree-elbow-minus,.syno-ux-modulelist .x-tree-node-expanded:active .x-tree-elbow-minus{background-position:0 -120px}.syno-ux-modulelist .x-tree-node-collapsed:active .x-tree-elbow-plus,.syno-ux-modulelist .x-tree-node-expanded:active .x-tree-elbow-plus{background-position:0 -48px}.syno-ux-modulelist .x-tree-node-leaf{height:50px;font-size:14px}.syno-ux-modulelist .x-tree-node-leaf a{display:inline-block;width:100%;position:absolute;left:0}.syno-ux-modulelist .x-tree-node-leaf a span{padding:0 0 0 38px;display:table-cell;line-height:20px;height:50px;white-space:normal;vertical-align:middle}.syno-ux-modulelist .x-tree-node-leaf .x-tree-node-icon{position:absolute;background-position:0 0;background-image:url("images/Components/c_icon_general.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .x-tree-node-leaf .x-tree-node-icon{background-image:url("../img/synohdpack/images/Components/c_icon_general.png");background-size:24px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .x-tree-node-leaf .x-tree-node-icon{background-image:url("../img/synohdpack/images/Components/c_icon_general.png");background-size:24px 96px;outline:1px green dashed}}.syno-ux-modulelist .x-tree-node-leaf.x-tree-node-over .x-tree-node-icon{background-position:0 -24px}.syno-ux-modulelist .x-tree-node-leaf.x-tree-selected{border-radius:3px}.syno-ux-modulelist .x-tree-node-leaf.x-tree-selected a span{color:#FFFFFF;text-shadow:0 1px 0 rgba(0,0,0,0.15)}.syno-ux-modulelist .x-tree-node-leaf.x-tree-selected .x-tree-node-icon{background-position:0 -48px}.syno-ux-modulelist .x-tree-node-leaf.x-tree-node-disabled .x-tree-node-icon{background-position:0 -72px;opacity:1}.syno-ux-modulelist .x-toolbar{border:none !important;background:none;padding:0 12px}.syno-ux-modulelist .x-panel-bwrap .x-panel-tbar .x-toolbar{padding-bottom:0}.syno-ux-modulelist .syno-textfilter .x-form-field-wrap{border-color:#C8D2DC;background-color:transparent;box-shadow:inset 0px 1px 0px rgba(80,90,100,0.08);background-image:none}.syno-ux-modulelist .syno-textfilter .x-form-field-wrap:hover{border-color:#B4BEC8}.syno-ux-modulelist .syno-textfilter .x-form-field-wrap .syno-textfilter-trigger{width:24px;margin-top:2px;visibility:hidden;background-image:url("./images/Components/icon_search_clear.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .syno-textfilter .x-form-field-wrap .syno-textfilter-trigger{background-image:url("../img/synohdpack/./images/Components/icon_search_clear.png");background-size:24px 144px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .syno-textfilter .x-form-field-wrap .syno-textfilter-trigger{background-image:url("../img/synohdpack/./images/Components/icon_search_clear.png");background-size:24px 144px;outline:1px green dashed}}.syno-ux-modulelist .syno-textfilter .x-form-field-wrap .syno-textfilter-trigger:hover{background-position:0 -24px}.syno-ux-modulelist .syno-textfilter .x-form-field-wrap .syno-textfilter-trigger:active{background-position:0 -48px}.syno-ux-modulelist .syno-textfilter .x-form-field-wrap .syno-textfilter-text{font-size:12px;height:24px !important;padding-left:30px;background-position:4px 1px;background-repeat:no-repeat;background-image:url("./images/Components/icon_search.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-modulelist .syno-textfilter .x-form-field-wrap .syno-textfilter-text{background-image:url("../img/synohdpack/./images/Components/icon_search.png");background-size:24px 24px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-modulelist .syno-textfilter .x-form-field-wrap .syno-textfilter-text{background-image:url("../img/synohdpack/./images/Components/icon_search.png");background-size:24px 24px;outline:1px green dashed}}.syno-ux-radio-icon{background-image:url("images/Components/radio_button.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-radio-icon{background-image:url("../img/synohdpack/images/Components/radio_button.png");background-size:22px 132px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-radio-icon{background-image:url("../img/synohdpack/images/Components/radio_button.png");background-size:22px 132px;outline:1px green dashed}}.x-form-field-trigger-wrap.x-form-field-wrap .syno-ux-datefield-trigger.x-form-trigger{background-image:url("images/Components/trigger_date.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .x-form-field-trigger-wrap.x-form-field-wrap .syno-ux-datefield-trigger.x-form-trigger{background-image:url("../img/synohdpack/images/Components/trigger_date.png");background-size:104px 28px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .x-form-field-trigger-wrap.x-form-field-wrap .syno-ux-datefield-trigger.x-form-trigger{background-image:url("../img/synohdpack/images/Components/trigger_date.png");background-size:104px 28px;outline:1px green dashed}}.syno-ux-datefield-menu{border-color:#C8D2DC}.syno-ux-datefield-menu .x-menu-list-item.x-menu-date-item{padding-top:6px;padding-right:6px;padding-left:6px}.syno-ux-datefield-menu .x-date-right,.syno-ux-datefield-menu .x-date-middle,.syno-ux-datefield-menu .x-date-left{background-image:none;height:28px}.syno-ux-datefield-menu .x-date-right a,.syno-ux-datefield-menu .x-date-left a{width:24px;height:24px;background-image:url("images/Components/date_prev_next.png");opacity:1}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-datefield-menu .x-date-right a,.synohdpack .syno-ux-datefield-menu .x-date-left a{background-image:url("../img/synohdpack/images/Components/date_prev_next.png");background-size:24px 192px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-datefield-menu .x-date-right a,.synohdpackdebug .syno-ux-datefield-menu .x-date-left a{background-image:url("../img/synohdpack/images/Components/date_prev_next.png");background-size:24px 192px;outline:1px green dashed}}.syno-ux-datefield-menu .x-date-left a{background-position:0px 0px}.syno-ux-datefield-menu .x-date-right a{background-position:0px -96px}.syno-ux-datefield-menu .x-date-middle{padding:0px}.syno-ux-datefield-menu .x-date-middle .x-btn button{height:28px;font-size:12px}.syno-ux-datefield-menu .x-date-middle .x-btn-mc em.x-btn-arrow{background-image:url("images/Components/date_dropdown.png");background-position:right 0px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-datefield-menu .x-date-middle .x-btn-mc em.x-btn-arrow{background-image:url("../img/synohdpack/images/Components/date_dropdown.png");background-size:6px 112px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-datefield-menu .x-date-middle .x-btn-mc em.x-btn-arrow{background-image:url("../img/synohdpack/images/Components/date_dropdown.png");background-size:6px 112px;outline:1px green dashed}}.syno-ux-datefield-menu .x-date-middle .x-btn-over em.x-btn-arrow{background-position:right -28px}.syno-ux-datefield-menu .x-date-middle .x-btn-click em.x-btn-arrow{background-position:right -56px}.syno-ux-datefield-menu table.x-date-inner{padding-bottom:4px;width:223px}.syno-ux-datefield-menu table.x-date-inner thead th{background-image:none;background-color:white;border:0px}.syno-ux-datefield-menu table.x-date-inner thead th span{height:28px;line-height:28px;padding:0px;margin-bottom:3px;text-align:center;border-bottom:1px solid #D7E1EB}.syno-ux-datefield-menu table.x-date-inner tbody tr td{height:24px;width:32px;border:0px}.syno-ux-datefield-menu table.x-date-inner tbody tr td a{background-color:transparent;border:0px;padding:0px;text-align:center;width:28px;height:24px;line-height:24px;margin-left:2px;margin-right:2px}.syno-ux-datefield-menu table.x-date-inner tbody tr td span{font-size:12px}.syno-ux-datefield-menu table.x-date-inner tbody tr td.x-date-disabled span,.syno-ux-datefield-menu table.x-date-inner tbody tr td.x-date-prevday span,.syno-ux-datefield-menu table.x-date-inner tbody tr td.x-date-nextday span{color:#96A0AA}.syno-ux-datefield-menu table.x-date-inner tbody tr td.x-date-disabled a{background-color:transparent}.syno-ux-datefield-menu table.x-date-inner tbody tr td.x-date-selected a span{color:white;font-weight:bold}.syno-ux-datefield-menu table.x-date-inner tbody tr td.x-date-today a{border-bottom:2px solid #FA4B4B;height:22px}.syno-ux-datefield-menu table.x-date-inner tbody tr td.x-date-today a span{color:#FA4B4B;font-weight:bold}.syno-ux-datefield-menu table.x-date-inner tbody tr td.x-date-selected.x-date-active:hover span{color:white}.syno-ux-datefield-menu table.x-date-inner tbody tr td.x-date-today.x-date-active:hover span{color:#FA4B4B}.syno-ux-datefield-menu table.x-date-inner tbody tr td.x-date-today.x-date-selected.x-date-active:hover span{color:white}.syno-ux-datefield-menu table.x-date-inner tbody tr td.x-date-selected.x-date-today a{border:0px;background-color:#FA4B4B;height:24px}.syno-ux-datefield-menu table.x-date-inner tbody tr td.x-date-selected.x-date-today a span{color:white;font-weight:bold}.syno-ux-datefield-menu .x-date-bottom{margin-top:4px;background-image:none;background-color:white;border-top:1px solid #D7E1EB;padding:0px;height:37px}.syno-ux-datefield-menu .x-date-bottom .x-btn-ml,.syno-ux-datefield-menu .x-date-bottom .x-btn-mc,.syno-ux-datefield-menu .x-date-bottom .x-btn-mr{background-image:none}.syno-ux-datefield-menu .x-date-bottom .x-btn-noicon .x-btn-small button{width:70px;height:24px;border-radius:3px;border:solid 1px #C8D2DC;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y1ZmFmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ViZjBmNSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f5faff), color-stop(100%, #ebf0f5));background-image:-webkit-linear-gradient(#f5faff,#ebf0f5);background-image:-moz-linear-gradient(#f5faff,#ebf0f5);background-image:-o-linear-gradient(#f5faff,#ebf0f5);background-image:linear-gradient(#f5faff,#ebf0f5);background-color:#EBF0F5}.syno-ux-datefield-menu .x-date-bottom .x-btn-over.x-btn-noicon .x-btn-small button{border:solid 1px #B4BEC8;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y1ZmFmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U3ZWNmMSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f5faff), color-stop(100%, #e7ecf1));background-image:-webkit-linear-gradient(#f5faff,#e7ecf1);background-image:-moz-linear-gradient(#f5faff,#e7ecf1);background-image:-o-linear-gradient(#f5faff,#e7ecf1);background-image:linear-gradient(#f5faff,#e7ecf1);background-color:#E7ECF1}.syno-ux-datefield-menu .x-date-bottom .x-btn-click.x-btn-noicon .x-btn-small button{border:solid 1px #B4BEC8;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ViZjBmNSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2UxZTZlYiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ebf0f5), color-stop(100%, #e1e6eb));background-image:-webkit-linear-gradient(#ebf0f5,#e1e6eb);background-image:-moz-linear-gradient(#ebf0f5,#e1e6eb);background-image:-o-linear-gradient(#ebf0f5,#e1e6eb);background-image:linear-gradient(#ebf0f5,#e1e6eb);background-color:#E1E6EB}.ext-ie9 .syno-ux-datefield-menu .x-date-picker,.ext-ie8 .syno-ux-datefield-menu .x-date-picker{width:auto !important}.ext-ie9 .syno-ux-datefield-menu .x-date-picker .x-date-mp,.ext-ie8 .syno-ux-datefield-menu .x-date-picker .x-date-mp{width:auto !important}.syno-ux-datefield-menu .x-date-mp tr td a{width:50px;height:24px;line-height:24px;padding:0px;font-size:12px;border:0px}.syno-ux-datefield-menu .x-date-mp tr td.x-date-mp-sel a{color:white;font-weight:bold;background-image:none}.syno-ux-datefield-menu .x-date-mp-year{padding-left:6px;padding-right:0px}.syno-ux-datefield-menu .x-date-mp-month{padding-right:6px;padding-left:0px}.syno-ux-datefield-menu .x-date-mp-ybtn .x-date-mp-prev,.syno-ux-datefield-menu .x-date-mp-ybtn .x-date-mp-next{background-image:url("images/Components/date_prev_next.png");width:24px;height:24px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-datefield-menu .x-date-mp-ybtn .x-date-mp-prev,.synohdpack .syno-ux-datefield-menu .x-date-mp-ybtn .x-date-mp-next{background-image:url("../img/synohdpack/images/Components/date_prev_next.png");background-size:24px 192px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-datefield-menu .x-date-mp-ybtn .x-date-mp-prev,.synohdpackdebug .syno-ux-datefield-menu .x-date-mp-ybtn .x-date-mp-next{background-image:url("../img/synohdpack/images/Components/date_prev_next.png");background-size:24px 192px;outline:1px green dashed}}.syno-ux-datefield-menu .x-date-mp-ybtn .x-date-mp-prev{background-position:0px 0px}.syno-ux-datefield-menu .x-date-mp-ybtn .x-date-mp-prev:hover{background-position:0px -24px}.syno-ux-datefield-menu .x-date-mp-ybtn .x-date-mp-next{background-position:0px -96px}.syno-ux-datefield-menu .x-date-mp-ybtn .x-date-mp-next:hover{background-position:0px -120px}.syno-ux-datefield-menu .x-date-mp-btns{background-image:none;background-color:white}.syno-ux-datefield-menu .x-date-mp-btns td{border-top:1px solid #D7E1EB;padding:0px;height:37px}.syno-ux-datefield-menu .x-date-mp-btns button{width:70px;height:24px;border-radius:3px}.syno-ux-datefield-menu .x-date-mp-btns button.x-date-mp-ok{margin-right:10px;border:solid 1px #1687D9;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMyYWFmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzE5OTRlYiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #32aaff), color-stop(100%, #1994eb));background-image:-webkit-linear-gradient(#32aaff,#1994eb);background-image:-moz-linear-gradient(#32aaff,#1994eb);background-image:-o-linear-gradient(#32aaff,#1994eb);background-image:linear-gradient(#32aaff,#1994eb);background-color:#1994EB;color:#FFFFFF}.syno-ux-datefield-menu .x-date-mp-btns button.x-date-mp-ok:hover{border:solid 1px #0077CC;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzI1YTRmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAyOGFlYiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #25a4ff), color-stop(100%, #028aeb));background-image:-webkit-linear-gradient(#25a4ff,#028aeb);background-image:-moz-linear-gradient(#25a4ff,#028aeb);background-image:-o-linear-gradient(#25a4ff,#028aeb);background-image:linear-gradient(#25a4ff,#028aeb);background-color:#028AEB}.syno-ux-datefield-menu .x-date-mp-btns button.x-date-mp-cancel{border:solid 1px #C8D2DC;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y1ZmFmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ViZjBmNSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f5faff), color-stop(100%, #ebf0f5));background-image:-webkit-linear-gradient(#f5faff,#ebf0f5);background-image:-moz-linear-gradient(#f5faff,#ebf0f5);background-image:-o-linear-gradient(#f5faff,#ebf0f5);background-image:linear-gradient(#f5faff,#ebf0f5);background-color:#EBF0F5}.syno-ux-datefield-menu .x-date-mp-btns button.x-date-mp-cancel:hover{border:solid 1px #B4BEC8;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y1ZmFmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U3ZWNmMSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f5faff), color-stop(100%, #e7ecf1));background-image:-webkit-linear-gradient(#f5faff,#e7ecf1);background-image:-moz-linear-gradient(#f5faff,#e7ecf1);background-image:-o-linear-gradient(#f5faff,#e7ecf1);background-image:linear-gradient(#f5faff,#e7ecf1);background-color:#E7ECF1}.x-form-item .x-form-item-label.syno-ux-item-label{font-size:12px;line-height:28px;padding:0px}.syno-ux-textarea{font-size:12px;color:#505A64;background-color:#FFFFFF;box-shadow:inset 0px 1px 0px rgba(80,90,100,0.08)}.syno-ux-textarea.x-form-field{padding-left:8px;background-image:none;border-color:#C8D2DC;height:24px}.syno-ux-textarea.syno-ux-textarea-hover{border-color:#B4BEC8}.syno-ux-textarea.x-form-invalid{border-color:#FF8C8C;background-color:#FFF0F0;background-image:none}.syno-ux-textarea.x-item-disabled.x-form-field{color:#96A0AA;border-color:#C8D2DC;background-color:#F6F8FA}.x-form-item .x-form-item-label.syno-ux-item-label{font-size:12px;color:#505A64;line-height:28px;padding:0px}.syno-ux-form-fleXcroll-wrap{position:relative;display:inline-block}.syno-ux-form-fleXcroll-wrap .syno-ux-form-fleXcroll-element{position:absolute;right:0px;top:0px;width:10px}.syno-ux-form-fleXcroll-wrap .syno-ux-form-fleXcroll-element .syno-ux-form-fleXcroll-inner-element{width:10px}.syno-ux-textfilter .x-form-field-wrap{border:1px solid #C8D2DC;background-color:#FFFFFF;box-shadow:inset 0px 1px 0px rgba(80,90,100,0.08);background-image:none}.syno-ux-textfilter .x-form-field-wrap div{background-color:transparent}.syno-ux-textfilter .x-form-field-wrap .syno-ux-textfilter-text.x-form-text{font-size:12px;height:24px !important;padding-left:30px;border:0px;background-position:4px 1px;background-repeat:no-repeat;background-color:transparent;background-image:url("./images/Components/icon_search.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-textfilter .x-form-field-wrap .syno-ux-textfilter-text.x-form-text{background-image:url("../img/synohdpack/./images/Components/icon_search.png");background-size:24px 24px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-textfilter .x-form-field-wrap .syno-ux-textfilter-text.x-form-text{background-image:url("../img/synohdpack/./images/Components/icon_search.png");background-size:24px 24px;outline:1px green dashed}}.syno-ux-textfilter .x-form-field-wrap .syno-ux-textfilter-text.x-form-text.syno-ux-textfilter-filter-icon{background-position:4px 1px;background-repeat:no-repeat;background-image:url("./images/Components/icon_filter.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-textfilter .x-form-field-wrap .syno-ux-textfilter-text.x-form-text.syno-ux-textfilter-filter-icon{background-image:url("../img/synohdpack/./images/Components/icon_filter.png");background-size:24px 24px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-textfilter .x-form-field-wrap .syno-ux-textfilter-text.x-form-text.syno-ux-textfilter-filter-icon{background-image:url("../img/synohdpack/./images/Components/icon_filter.png");background-size:24px 24px;outline:1px green dashed}}.syno-ux-textfilter .x-form-field-wrap .syno-ux-textfilter-trigger{background-position:0px 0px;background-repeat:no-repeat;background-image:url("./images/Components/icon_search_clear.png");border:none;width:24px;height:24px;right:0px;margin-top:1px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-textfilter .x-form-field-wrap .syno-ux-textfilter-trigger{background-image:url("../img/synohdpack/./images/Components/icon_search_clear.png");background-size:24px 144px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-textfilter .x-form-field-wrap .syno-ux-textfilter-trigger{background-image:url("../img/synohdpack/./images/Components/icon_search_clear.png");background-size:24px 144px;outline:1px green dashed}}.syno-ux-textfilter .x-form-field-wrap .syno-ux-textfilter-trigger.x-form-trigger-over{background-position:0px -24px}.syno-ux-textfilter .x-form-field-wrap .syno-ux-textfilter-trigger.x-form-trigger-click{background-position:0px -48px}.syno-ux-textfilter .x-form-field-wrap:hover{border-color:#B4BEC8}.syno-ux-textfilter .x-form-field-wrap.x-form-field-wrap{background-image:none}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-textfilter .x-form-field-wrap.x-form-field-wrap{background-image:none}}.syno-ux-textfilter .x-form-field-wrap.x-form-field-wrap .x-form-field-wrap-center-img{width:34px;height:24px;background-position:0px 1px;background-repeat:no-repeat;background-image:url("images/Components/icon_advanced_search.png");padding-top:1px;padding-bottom:1px;display:table-cell;cursor:pointer}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-textfilter .x-form-field-wrap.x-form-field-wrap .x-form-field-wrap-center-img{background-image:url("../img/synohdpack/images/Components/icon_advanced_search.png");background-size:34px 96px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-textfilter .x-form-field-wrap.x-form-field-wrap .x-form-field-wrap-center-img{background-image:url("../img/synohdpack/images/Components/icon_advanced_search.png");background-size:34px 96px;outline:1px green dashed}}.syno-ux-textfilter .x-form-field-wrap.x-form-field-wrap .x-form-field-wrap-center-img:hover{background-position:0px -23px}.syno-ux-textfilter .x-form-field-wrap.x-item-disabled{border-color:#C8D2DC;background-color:#F6F8FA}.syno-ux-textfilter .x-form-field-wrap.x-item-disabled .x-form-field-wrap-center-img{background-position:0 -71px}.syno-ux-textfilter .x-form-field-wrap.x-item-disabled .x-form-field-wrap-center-img:hover{background-position:0 -71px}.syno-ux-textfilter.syno-ux-searchfield .x-form-field-wrap .syno-ux-textfilter-text.x-form-text{background-image:none;padding-left:0;display:block;vertical-align:inherit}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-textfilter.syno-ux-searchfield .x-form-field-wrap .syno-ux-textfilter-text.x-form-text{background-image:none}}input[type="file"]::-webkit-file-upload-button{cursor:pointer}.syno-ux-filebutton{filter:Alpha(opacity=0);opacity:0;position:absolute !important;padding:0px;border:none;cursor:pointer;z-index:1}.ext-ie .syno-ux-filebutton{font-size:1000px}.syno-ux-filebutton.x-item-disabled{filter:Alpha(opacity=0) !important;opacity:0 !important}.syno-ux-filebutton-btn-wrap{display:inline-block}.syno-ux-filebutton-txt{vertical-align:top}.syno-ux-formpanel .x-panel-body{padding-top:3px;padding-right:10px}.syno-ux-formpanel.syno-ux-formpanel-gradient.syno-ux-formpanel-no-tbar:before{position:absolute;display:block;height:6px;content:"";width:90%;z-index:99;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0icmdiYSgyNTUsMjU1LDI1NSwwKSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, rgba(255,255,255,0)));background-image:-webkit-linear-gradient(#ffffff,rgba(255,255,255,0));background-image:-moz-linear-gradient(#ffffff,rgba(255,255,255,0));background-image:-o-linear-gradient(#ffffff,rgba(255,255,255,0));background-image:linear-gradient(#ffffff,rgba(255,255,255,0))}.syno-ux-formpanel.syno-ux-formpanel-gradient.syno-ux-formpanel-no-tbar.scroll-at-top:before{display:none}.syno-ux-formpanel.syno-ux-formpanel-gradient .x-panel-tbar:after{position:absolute;display:block;height:6px;content:"";width:90%;z-index:99;margin-top:0px;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0icmdiYSgyNTUsMjU1LDI1NSwwKSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, rgba(255,255,255,0)));background-image:-webkit-linear-gradient(#ffffff,rgba(255,255,255,0));background-image:-moz-linear-gradient(#ffffff,rgba(255,255,255,0));background-image:-o-linear-gradient(#ffffff,rgba(255,255,255,0));background-image:linear-gradient(#ffffff,rgba(255,255,255,0))}.syno-ux-formpanel.syno-ux-formpanel-gradient.scroll-at-bottom .x-panel-tbar:after{display:none}.syno-ux-formpanel.syno-ux-formpanel-gradient.syno-ux-formpanel-no-fbar:after{position:absolute;display:block;height:6px;content:"";width:90%;z-index:99;margin-top:-6px;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0icmdiYSgyNTUsMjU1LDI1NSwwKSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255,255,255,0)), color-stop(100%, #ffffff));background-image:-webkit-linear-gradient(rgba(255,255,255,0),#ffffff);background-image:-moz-linear-gradient(rgba(255,255,255,0),#ffffff);background-image:-o-linear-gradient(rgba(255,255,255,0),#ffffff);background-image:linear-gradient(rgba(255,255,255,0),#ffffff)}.syno-ux-formpanel.syno-ux-formpanel-gradient.syno-ux-formpanel-no-fbar.scroll-at-bottom:after{display:none}.syno-ux-formpanel.syno-ux-formpanel-gradient .x-panel-footer:before{position:absolute;display:block;height:6px;content:"";width:90%;z-index:99;margin-top:-10px;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0icmdiYSgyNTUsMjU1LDI1NSwwKSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255,255,255,0)), color-stop(100%, #ffffff));background-image:-webkit-linear-gradient(rgba(255,255,255,0),#ffffff);background-image:-moz-linear-gradient(rgba(255,255,255,0),#ffffff);background-image:-o-linear-gradient(rgba(255,255,255,0),#ffffff);background-image:linear-gradient(rgba(255,255,255,0),#ffffff)}.syno-ux-formpanel.syno-ux-formpanel-gradient.scroll-at-bottom .x-panel-footer:before{display:none}.syno-ux-formpanel .x-panel-footer{background-image:url("./images/Components/shadow_footbar.png");background-repeat:repeat-x;padding:4px 0 0 0}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-formpanel .x-panel-footer{background-image:url("../img/synohdpack/./images/Components/shadow_footbar.png");background-size:8px 4px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-formpanel .x-panel-footer{background-image:url("../img/synohdpack/./images/Components/shadow_footbar.png");background-size:8px 4px;outline:1px green dashed}}.syno-ux-formpanel .x-panel-footer .x-toolbar-ct{height:44px}.syno-ux-formpanel .x-panel-tbar .x-toolbar{background-image:none;background-color:transparent;border-bottom:1px solid #D7E1EB}.syno-ux-formpanel .x-panel-btns td.x-toolbar-cell{padding-right:7px;padding-left:0px}.syno-ux-tab-panel .x-tab-strip-top .x-tab-strip-active .x-tab-right span.x-tab-strip-text{padding-bottom:0}.syno-ux-tab-panel .x-tab-strip-top{border:none;background-repeat:repeat-x !important;background-position:0 24px !important;background-size:16px 10px !important;background-image:url("./images/Components/tab_shadow.png") !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-tab-panel .x-tab-strip-top{background-image:url("../img/synohdpack/./images/Components/tab_shadow.png") !important;background-size:16px 10px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-tab-panel .x-tab-strip-top{background-image:url("../img/synohdpack/./images/Components/tab_shadow.png") !important;background-size:16px 10px;outline:1px green dashed}}.syno-ux-tab-panel .x-tab-strip-top .x-tab-left{padding:0}.syno-ux-tab-panel .x-tab-strip-top .x-tab-right{padding:0}.syno-ux-tab-panel .x-tab-strip-top .x-tab-strip-text{height:24px;line-height:24px;padding:0 16px;border-left:1px solid #D7E1EB}.syno-ux-tab-panel .x-tab-strip-top li{height:34px;margin:0}.syno-ux-tab-panel .x-tab-strip-top li.x-tab-strip-over .x-tab-strip-text{color:#78828C}.syno-ux-tab-panel .x-tab-strip-top li.x-tab-strip-active{font-weight:bold;background-image:url("./images/Components/tab_arrow.png");background-repeat:no-repeat;background-position:center 24px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-tab-panel .x-tab-strip-top li.x-tab-strip-active{background-image:url("../img/synohdpack/./images/Components/tab_arrow.png");background-size:16px 10px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-tab-panel .x-tab-strip-top li.x-tab-strip-active{background-image:url("../img/synohdpack/./images/Components/tab_arrow.png");background-size:16px 10px;outline:1px green dashed}}.syno-ux-tab-panel .x-tab-strip-top .x-tab-right,.syno-ux-tab-panel .x-tab-strip-top .x-tab-left,.syno-ux-tab-panel .x-tab-strip-top .x-tab-strip-inner{background-image:none}.syno-ux-tab-panel .x-tab-strip-top .x-tab-strip-closable .x-tab-strip-text{padding:0 30px 0 16px}.syno-ux-tab-panel .x-tab-strip-top .x-tab-strip-closable a.x-tab-strip-close{background-image:url("./images/Components/icon_search_clear.png");margin-top:-3px;width:24px;height:24px;opacity:1;filter:alpha(opacity=100)}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-tab-panel .x-tab-strip-top .x-tab-strip-closable a.x-tab-strip-close{background-image:url("../img/synohdpack/./images/Components/icon_search_clear.png");background-size:24px 144px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-tab-panel .x-tab-strip-top .x-tab-strip-closable a.x-tab-strip-close{background-image:url("../img/synohdpack/./images/Components/icon_search_clear.png");background-size:24px 144px;outline:1px green dashed}}.syno-ux-tab-panel .x-tab-strip-top .x-tab-strip-closable.x-tab-strip-over a.x-tab-strip-close{background-position:0px -24px}.syno-ux-tab-panel .x-tab-strip-spacer{display:none}.syno-ux-tab-panel .x-tab-panel-body{background-color:transparent;border:none}.syno-ux-tab-panel .x-tab-panel-footer{background-image:url("./images/Components/shadow_footbar.png");background-repeat:repeat-x;background-color:transparent;border:0px;padding:4px 0 0 0}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-tab-panel .x-tab-panel-footer{background-image:url("../img/synohdpack/./images/Components/shadow_footbar.png");background-size:8px 4px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-tab-panel .x-tab-panel-footer{background-image:url("../img/synohdpack/./images/Components/shadow_footbar.png");background-size:8px 4px;outline:1px green dashed}}.syno-ux-tab-panel .x-tab-panel-footer .x-toolbar-ct{height:44px}.syno-ux-tab-panel .x-panel-btns td.x-toolbar-cell{padding-right:7px;padding-left:0px}.syno-ux-grid-enable-column-checked{height:22px;margin-top:3px;background-repeat:no-repeat;background-position:center -66px;background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px;}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-grid-enable-column-checked{background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-grid-enable-column-checked{background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px;outline:1px green dashed}}.syno-ux-grid-enable-column-checked:hover{background-position:center -88px}.syno-ux-grid-enable-column-unchecked{height:22px;margin-top:3px;background-repeat:no-repeat;background-position:center 0px;background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px;)}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-grid-enable-column-unchecked{background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-grid-enable-column-unchecked{background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px;outline:1px green dashed}}.syno-ux-grid-enable-column-unchecked:hover{background-position:center -22px}.syno-ux-grid-enable-column-grayed{height:22px;margin-top:3px;background-repeat:no-repeat;background-position:center -132px;background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px;}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-grid-enable-column-grayed{background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-grid-enable-column-grayed{background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px;outline:1px green dashed}}.syno-ux-grid-enable-column-grayed:hover{background-position:center -154px}.syno-ux-checkbox-icon:hover{background-position:0 -22px}.syno-ux-checkbox-icon:hover.syno-ux-cb-checked{background-position:0 -88px}.syno-ux-checkbox-icon:hover.syno-ux-cb-checked.syno-ux-cb-disabled{background-position:0 -110px}.syno-ux-checkbox-icon:hover.syno-ux-cb-disabled{background-position:0 -44px}.syno-ux-grid-enable-column-disabled{height:22px;margin-top:3px;background-repeat:no-repeat;background-position:center -44px;background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px;}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-grid-enable-column-disabled{background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-grid-enable-column-disabled{background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px;outline:1px green dashed}}.syno-ux-grid-enable-column-disabled-checked{height:22px;margin-top:3px;background-repeat:no-repeat;background-position:center -110px;background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px;}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-grid-enable-column-disabled-checked{background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-grid-enable-column-disabled-checked{background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px;outline:1px green dashed}}.x-panel-noborder .x-panel-bbar-noborder.x-panel-bbar .syno-ux-pagingtoolbar{border-top-color:#EBF0F5;border-bottom:1px solid #D7E1EB;padding:0px;height:26px}.syno-ux-pagingtoolbar{background-color:transparent;background-image:none;line-height:28px}.syno-ux-pagingtoolbar .x-toolbar-right div{padding:2px 8px 2px 2px;font-size:12px;height:24px;line-height:24px}.syno-ux-pagingtoolbar .xtb-sep{height:20px;background-image:none;border-left:1px solid #D7E1EB;width:0px;margin:0px}.syno-ux-pagingtoolbar .x-btn-icon .x-btn-ml,.syno-ux-pagingtoolbar .x-btn-icon .x-btn-mr,.syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .x-btn-ml,.syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .x-btn-mr,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-ml,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-mr,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .x-btn-ml,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .x-btn-mr{width:2px}.syno-ux-pagingtoolbar .x-btn-icon .x-btn-ml i,.syno-ux-pagingtoolbar .x-btn-icon .x-btn-mr i,.syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .x-btn-ml i,.syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .x-btn-mr i,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-ml i,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-mr i,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .x-btn-ml i,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .x-btn-mr i{width:2px}.syno-ux-pagingtoolbar .x-btn-icon button,.syno-ux-pagingtoolbar .x-btn-icon .x-btn-small button,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled button,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small button{background-image:url("images/Components/bt_pagebar.png") !important;min-width:28px;width:auto;height:28px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-pagingtoolbar .x-btn-icon button,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon .x-btn-small button,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled button,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small button{background-image:url("../img/synohdpack/images/Components/bt_pagebar.png") !important;background-size:28px 560px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-pagingtoolbar .x-btn-icon button,.synohdpackdebug .syno-ux-pagingtoolbar .x-btn-icon .x-btn-small button,.synohdpackdebug .syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled button,.synohdpackdebug .syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small button{background-image:url("../img/synohdpack/images/Components/bt_pagebar.png") !important;background-size:28px 560px;outline:1px green dashed}}.syno-ux-pagingtoolbar .x-btn-icon .syno-ux-page-btn,.syno-ux-pagingtoolbar .x-btn-icon .syno-ux-page-btn-focus,.syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .syno-ux-page-btn,.syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .syno-ux-page-btn-focus,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .syno-ux-page-btn,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .syno-ux-page-btn-focus,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .syno-ux-page-btn,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .syno-ux-page-btn-focus{padding:0 3px;background-image:none !important;font-size:12px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-pagingtoolbar .x-btn-icon .syno-ux-page-btn,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon .syno-ux-page-btn-focus,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .syno-ux-page-btn,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .syno-ux-page-btn-focus,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .syno-ux-page-btn,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .syno-ux-page-btn-focus,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .syno-ux-page-btn,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .syno-ux-page-btn-focus{background-image:none !important}}.syno-ux-pagingtoolbar .x-btn-icon .syno-ux-page-btn .x-btn-ml,.syno-ux-pagingtoolbar .x-btn-icon .syno-ux-page-btn .x-btn-mr,.syno-ux-pagingtoolbar .x-btn-icon .syno-ux-page-btn .x-btn-mc,.syno-ux-pagingtoolbar .x-btn-icon .syno-ux-page-btn-focus .x-btn-ml,.syno-ux-pagingtoolbar .x-btn-icon .syno-ux-page-btn-focus .x-btn-mr,.syno-ux-pagingtoolbar .x-btn-icon .syno-ux-page-btn-focus .x-btn-mc,.syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .syno-ux-page-btn .x-btn-ml,.syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .syno-ux-page-btn .x-btn-mr,.syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .syno-ux-page-btn .x-btn-mc,.syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .syno-ux-page-btn-focus .x-btn-ml,.syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .syno-ux-page-btn-focus .x-btn-mr,.syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .syno-ux-page-btn-focus .x-btn-mc,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .syno-ux-page-btn .x-btn-ml,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .syno-ux-page-btn .x-btn-mr,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .syno-ux-page-btn .x-btn-mc,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .syno-ux-page-btn-focus .x-btn-ml,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .syno-ux-page-btn-focus .x-btn-mr,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .syno-ux-page-btn-focus .x-btn-mc,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .syno-ux-page-btn .x-btn-ml,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .syno-ux-page-btn .x-btn-mr,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .syno-ux-page-btn .x-btn-mc,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .syno-ux-page-btn-focus .x-btn-ml,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .syno-ux-page-btn-focus .x-btn-mr,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .syno-ux-page-btn-focus .x-btn-mc{background-image:none !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-pagingtoolbar .x-btn-icon .syno-ux-page-btn .x-btn-ml,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon .syno-ux-page-btn .x-btn-mr,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon .syno-ux-page-btn .x-btn-mc,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon .syno-ux-page-btn-focus .x-btn-ml,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon .syno-ux-page-btn-focus .x-btn-mr,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon .syno-ux-page-btn-focus .x-btn-mc,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .syno-ux-page-btn .x-btn-ml,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .syno-ux-page-btn .x-btn-mr,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .syno-ux-page-btn .x-btn-mc,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .syno-ux-page-btn-focus .x-btn-ml,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .syno-ux-page-btn-focus .x-btn-mr,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .syno-ux-page-btn-focus .x-btn-mc,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .syno-ux-page-btn .x-btn-ml,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .syno-ux-page-btn .x-btn-mr,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .syno-ux-page-btn .x-btn-mc,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .syno-ux-page-btn-focus .x-btn-ml,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .syno-ux-page-btn-focus .x-btn-mr,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .syno-ux-page-btn-focus .x-btn-mc,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .syno-ux-page-btn .x-btn-ml,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .syno-ux-page-btn .x-btn-mr,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .syno-ux-page-btn .x-btn-mc,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .syno-ux-page-btn-focus .x-btn-ml,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .syno-ux-page-btn-focus .x-btn-mr,.synohdpack .syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .syno-ux-page-btn-focus .x-btn-mc{background-image:none !important}}.syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .x-tbar-page-first{background-position:0 0}.syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .x-tbar-page-prev{background-position:0 -28px}.syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .x-tbar-page-next{background-position:0 -56px}.syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .x-tbar-page-last{background-position:0 -84px}.syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .x-tbar-loading{background-position:0 -112px}.syno-ux-pagingtoolbar .x-btn-icon.x-btn-over .x-btn-small .x-tbar-page-first{background-position:0 -140px}.syno-ux-pagingtoolbar .x-btn-icon.x-btn-over .x-btn-small .x-tbar-page-prev{background-position:0 -168px}.syno-ux-pagingtoolbar .x-btn-icon.x-btn-over .x-btn-small .x-tbar-page-next{background-position:0 -196px}.syno-ux-pagingtoolbar .x-btn-icon.x-btn-over .x-btn-small .x-tbar-page-last{background-position:0 -224px}.syno-ux-pagingtoolbar .x-btn-icon.x-btn-over .x-btn-small .x-tbar-loading{background-position:0 -252px}.syno-ux-pagingtoolbar .x-btn-icon.x-btn-click .x-btn-small .x-tbar-page-first{background-position:0 -280px}.syno-ux-pagingtoolbar .x-btn-icon.x-btn-click .x-btn-small .x-tbar-page-prev{background-position:0 -308px}.syno-ux-pagingtoolbar .x-btn-icon.x-btn-click .x-btn-small .x-tbar-page-next{background-position:0 -336px}.syno-ux-pagingtoolbar .x-btn-icon.x-btn-click .x-btn-small .x-tbar-page-last{background-position:0 -364px}.syno-ux-pagingtoolbar .x-btn-icon.x-btn-click .x-btn-small .x-tbar-loading{background-position:0 -392px}.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .x-tbar-page-first{background-position:0 -420px}.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .x-tbar-page-prev{background-position:0 -448px}.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .x-tbar-page-next{background-position:0 -476px}.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .x-tbar-page-last{background-position:0 -504px}.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .x-tbar-loading{background-position:0 -532px}.syno-ux-toolbar{background-color:transparent;background-image:none}.syno-ux-expandable-listview .item-summary .item-toggle,.syno-ux-expandable-listview .item-summary .item-toggle.item-toggle-expanded,.syno-ux-expandable-listview .item-summary .item-entry,.syno-ux-expandable-listview .item-summary .item-entry.item-toggle-exit,.syno-ux-expandable-listview .item-summary .item-exit{display:inline-block;position:absolute;top:0px;right:0px;width:36px;height:50px}.syno-ux-expandable-listview .item-summary .item-toggle .item-toggle-img,.syno-ux-expandable-listview .item-summary .item-toggle.item-toggle-expanded .item-toggle-img,.syno-ux-expandable-listview .item-summary .item-entry .item-entry-img,.syno-ux-expandable-listview .item-summary .item-entry.item-toggle-exit .item-entry-img,.syno-ux-expandable-listview .item-summary .item-exit .item-exit-img{position:relative;left:6px;top:13px;width:24px;height:24px;background-repeat:no-repeat;background-image:url("images/Components/fieldset_expand.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-expandable-listview .item-summary .item-toggle .item-toggle-img,.syno-ux-expandable-listview .item-summary .item-toggle .synohdpack .item-toggle-img,.synohdpack .syno-ux-expandable-listview .item-summary .item-entry .item-entry-img,.syno-ux-expandable-listview .item-summary .item-entry .synohdpack .item-entry-img,.synohdpack .syno-ux-expandable-listview .item-summary .item-exit .item-exit-img,.syno-ux-expandable-listview .item-summary .item-exit .synohdpack .item-exit-img{background-image:url("../img/synohdpack/images/Components/fieldset_expand.png");background-size:24px 288px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-expandable-listview .item-summary .item-toggle .item-toggle-img,.syno-ux-expandable-listview .item-summary .item-toggle .synohdpackdebug .item-toggle-img,.synohdpackdebug .syno-ux-expandable-listview .item-summary .item-entry .item-entry-img,.syno-ux-expandable-listview .item-summary .item-entry .synohdpackdebug .item-entry-img,.synohdpackdebug .syno-ux-expandable-listview .item-summary .item-exit .item-exit-img,.syno-ux-expandable-listview .item-summary .item-exit .synohdpackdebug .item-exit-img{background-image:url("../img/synohdpack/images/Components/fieldset_expand.png");background-size:24px 288px;outline:1px green dashed}}.syno-ux-expandable-listview .item-wrap{position:relative;padding-left:60px;border-bottom:1px solid #EBF0F5}.syno-ux-expandable-listview .item-wrap.item-over{background-color:#F5FAFF}.syno-ux-expandable-listview .item-wrap.item-selected{background-color:#E6F5FF}.syno-ux-expandable-listview .item-summary{height:50px}.syno-ux-expandable-listview .item-summary .item-icon{display:inline-block;width:32px;height:32px;position:absolute;top:9px;left:12px}.syno-ux-expandable-listview .item-summary .item-toggle .item-toggle-img{background-position:0 0px}.syno-ux-expandable-listview .item-summary .item-toggle:hover{cursor:pointer}.syno-ux-expandable-listview .item-summary .item-toggle:hover .item-toggle-img{background-position:0 -24px}.syno-ux-expandable-listview .item-summary .item-toggle:active .item-toggle-img{background-position:0 -48px}.syno-ux-expandable-listview .item-summary .item-toggle.item-toggle-expanded .item-toggle-img{background-position:0 -72px}.syno-ux-expandable-listview .item-summary .item-toggle.item-toggle-expanded:hover{cursor:pointer}.syno-ux-expandable-listview .item-summary .item-toggle.item-toggle-expanded:hover .item-toggle-img{background-position:0 -96px}.syno-ux-expandable-listview .item-summary .item-toggle.item-toggle-expanded:active .item-toggle-img{background-position:0 -120px}.syno-ux-expandable-listview .item-summary .item-entry .item-entry-img{background-position:0 -144px}.syno-ux-expandable-listview .item-summary .item-entry:hover{cursor:pointer}.syno-ux-expandable-listview .item-summary .item-entry:hover .item-entry-img{background-position:0 -168px}.syno-ux-expandable-listview .item-summary .item-entry:active .item-entry-img{background-position:0 -192px}.syno-ux-expandable-listview .item-summary .item-entry.item-toggle-exit .item-entry-img{background-position:0 -216px}.syno-ux-expandable-listview .item-summary .item-entry.item-toggle-exit:hover{cursor:pointer}.syno-ux-expandable-listview .item-summary .item-entry.item-toggle-exit:hover .item-entry-img{background-position:0 -240px}.syno-ux-expandable-listview .item-summary .item-entry.item-toggle-exit:active .item-entry-img{background-position:0 -264px}.syno-ux-expandable-listview .item-summary .item-exit .item-exit-img{background-position:0 -216px}.syno-ux-expandable-listview .item-summary .item-exit:hover{cursor:pointer}.syno-ux-expandable-listview .item-summary .item-exit:hover .item-exit-img{background-position:0 -240px}.syno-ux-expandable-listview .item-summary .item-exit:active .item-exit-img{background-position:0 -264px}.syno-ux-expandable-listview .item-summary .item-title{font-size:14px;font-weight:bold;line-height:28px}.syno-ux-expandable-listview .item-detail{padding:0 40px 12px 0}.ux-float-layout-ct{position:relative}.ux-float-layout-ct .ux-float-layout-sizer{background:transparent none;border:0 none;padding:0;margin:0;width:0}.ux-float-layout-ct .x-box-item{position:absolute}.ux-float-layout-ct.ux-float-layout-ct-animate .x-box-item{-webkit-transition-property:top,left;-moz-transition-property:top,left;-o-transition-property:top,left;transition-property:top,left;-webkit-transition-timing-function:ease-in;-moz-transition-timing-function:ease-in;-o-transition-timing-function:ease-in;transition-timing-function:ease-in;-webkit-transition-duration:0.3s;-moz-transition-duration:0.3s;-o-transition-duration:0.3s;transition-duration:0.3s}.syno-ux-treepanel{overflow-x:hidden}.syno-ux-treepanel .x-border-panel{background-color:transparent}.syno-ux-treepanel .x-tree-root-ct{width:auto !important;overflow:hidden}.syno-ux-treepanel .x-tree-node-el{display:table;width:100%;line-height:28px;height:28px;overflow:hidden}.syno-ux-treepanel .x-tree-node{text-overflow:ellipsis;white-space:nowrap}.syno-ux-treepanel .x-tree-node a span{font-size:12px;padding-left:2px}.syno-ux-treepanel .x-tree-node .x-tree-node-over{background-color:#E6F5FF;border-radius:3px}.syno-ux-treepanel .x-tree-node .x-tree-node-over .syno-ux-cb-grayed{background-position:0 -154px}.syno-ux-treepanel .x-tree-node .x-tree-node-over .syno-ux-cb-disabled.syno-ux-cb-checked{background-position:0 -110px}.syno-ux-treepanel .x-tree-node .x-tree-selected{border-radius:3px}.syno-ux-treepanel .x-tree-node .x-tree-selected a span{color:#FFFFFF}.syno-ux-treepanel .x-tree-arrows .x-tree-node-indent .x-tree-elbow-line,.syno-ux-treepanel .x-tree-arrows .x-tree-node-indent .x-tree-icon{width:18px}.syno-ux-treepanel .x-tree-arrows .x-tree-elbow-minus,.syno-ux-treepanel .x-tree-arrows .x-tree-elbow-plus,.syno-ux-treepanel .x-tree-arrows .x-tree-elbow-end-minus,.syno-ux-treepanel .x-tree-arrows .x-tree-elbow-end-plus{background-image:url("./images/Components/tree_arrow.png");height:22px;margin-top:6px}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-treepanel .x-tree-arrows .x-tree-elbow-minus,.synohdpack .syno-ux-treepanel .x-tree-arrows .x-tree-elbow-plus,.synohdpack .syno-ux-treepanel .x-tree-arrows .x-tree-elbow-end-minus,.synohdpack .syno-ux-treepanel .x-tree-arrows .x-tree-elbow-end-plus{background-image:url("../img/synohdpack/./images/Components/tree_arrow.png");background-size:64px 16px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-treepanel .x-tree-arrows .x-tree-elbow-minus,.synohdpackdebug .syno-ux-treepanel .x-tree-arrows .x-tree-elbow-plus,.synohdpackdebug .syno-ux-treepanel .x-tree-arrows .x-tree-elbow-end-minus,.synohdpackdebug .syno-ux-treepanel .x-tree-arrows .x-tree-elbow-end-plus{background-image:url("../img/synohdpack/./images/Components/tree_arrow.png");background-size:64px 16px;outline:1px green dashed}}.syno-ux-treepanel .x-tree-arrows .x-tree-ec-over .x-tree-elbow-minus,.syno-ux-treepanel .x-tree-arrows .x-tree-ec-over .x-tree-elbow-end-minus{background-position:0px 0}.syno-ux-treepanel .x-tree-arrows .x-tree-selected .x-tree-elbow-minus,.syno-ux-treepanel .x-tree-arrows .x-tree-selected .x-tree-elbow-end-minus{background-position:-16px 0}.syno-ux-treepanel .x-tree-arrows .x-tree-ec-over .x-tree-elbow-plus,.syno-ux-treepanel .x-tree-arrows .x-tree-ec-over .x-tree-elbow-end-plus{background-position:-32px 0}.syno-ux-treepanel .x-tree-arrows .x-tree-selected .x-tree-elbow-plus,.syno-ux-treepanel .x-tree-arrows .x-tree-selected .x-tree-elbow-end-plus{background-position:-48px 0}.syno-ux-treepanel .x-tree-arrows .x-tree-elbow-minus,.syno-ux-treepanel .x-tree-arrows .x-tree-elbow-end-minus{background-position:0px 0}.syno-ux-treepanel .x-tree-arrows .x-tree-elbow-plus,.syno-ux-treepanel .x-tree-arrows .x-tree-elbow-end-plus{background-position:-32px 0}.syno-ux-treepanel .x-checkbox{margin-top:-3px !important;height:22px;width:22px;background-repeat:no-repeat;background-position:0px 0;background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px;);vertical-align:middle;margin-left:4px !important;margin-right:8px !important}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-treepanel .x-checkbox{background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-treepanel .x-checkbox{background-image:url("../img/synohdpack/images/Components/checkbox.png");background-size:22px 198px;outline:1px green dashed}}.syno-ux-treepanel .x-checkbox:hover{background-position:0 -22px}.syno-ux-treepanel .x-item-disabled .x-checkbox{background-position:0 -44px}.syno-ux-treepanel .x-checkbox-checked .x-checkbox{background-position:0 -66px}.syno-ux-treepanel .x-checkbox-checked .x-checkbox:hover{background-position:0 -88px}.syno-ux-treepanel .x-item-disabled .x-checkbox-checked .x-checkbox{background-position:0 -110px}.syno-ux-treepanel .x-checkbox-grayed .x-checkbox{background-position:0 -132px}.syno-ux-treepanel .x-checkbox-grayed .x-checkbox:hover{background-position:0 -154px}.syno-ux-treepanel .x-item-disabled .x-checkbox-grayed .x-checkbox{background-position:0 -176px}.syno-ux-treepanel.syno-ux-treepanel-gradient .x-panel-bwrap:before{position:absolute;display:block;height:6px;content:"";width:100%;z-index:99;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0icmdiYSgyNTUsMjU1LDI1NSwwKSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, rgba(255,255,255,0)));background-image:-webkit-linear-gradient(#ffffff,rgba(255,255,255,0));background-image:-moz-linear-gradient(#ffffff,rgba(255,255,255,0));background-image:-o-linear-gradient(#ffffff,rgba(255,255,255,0));background-image:linear-gradient(#ffffff,rgba(255,255,255,0))}.syno-ux-treepanel.syno-ux-treepanel-gradient .x-panel-bwrap:after{position:absolute;display:block;height:6px;content:"";width:100%;z-index:99;margin-top:-6px;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0icmdiYSgyNTUsMjU1LDI1NSwwKSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255,255,255,0)), color-stop(100%, #ffffff));background-image:-webkit-linear-gradient(rgba(255,255,255,0),#ffffff);background-image:-moz-linear-gradient(rgba(255,255,255,0),#ffffff);background-image:-o-linear-gradient(rgba(255,255,255,0),#ffffff);background-image:linear-gradient(rgba(255,255,255,0),#ffffff)}.syno-ux-treepanel.syno-ux-treepanel-gradient.scroll-at-top .x-panel-bwrap:before,.syno-ux-treepanel.syno-ux-treepanel-gradient.scroll-at-bottom .x-panel-bwrap:after{display:none}.x-tip-invalid{box-shadow:0 1px 4px rgba(0,0,0,0.25);border:solid 1px;border-color:#FFCCCC;border-color:rgba(255,204,204,0.75);background-color:#FA4B4B;background-color:rgba(250,75,75,0.75)}.x-tip-invalid .x-tip-invalid-ml,.x-tip-invalid .x-tip-invalid-mr,.x-tip-invalid .x-tip-invalid-mc,.x-tip-invalid .x-tip-invalid-tl,.x-tip-invalid .x-tip-invalid-tr,.x-tip-invalid .x-tip-invalid-tc,.x-tip-invalid .x-tip-invalid-bl,.x-tip-invalid .x-tip-invalid-br,.x-tip-invalid .x-tip-invalid-bc{padding:0px;background-image:none;background-color:transparent}.x-tip-invalid .x-tip-invalid-bwrap{padding:3px 10px}.x-tip-invalid .x-tip-invalid-body,.x-tip-invalid .x-tip-invalid-body span,.x-tip-invalid .x-tip-invalid-body div{font-size:12px !important;color:#FFFFFF !important}.ext-gecko .x-window-body .x-form-item{overflow:hidden}.ext-ie .x-toolbar .x-toolbar-cell .x-form-field-wrap{height:auto}.ext-ie .x-toolbar .x-toolbar-cell .x-form-field-wrap .syno-textfilter-text,.ext-ie .x-toolbar .x-toolbar-cell .x-form-field-wrap .syno-ux-textfilter-text{line-height:24px;padding-top:0px;padding-bottom:0px}.selectabletext{-moz-user-select:text;-khtml-user-select:text;-webkit-user-select:text;-ms-user-select:text;user-select:text}input[type=text][readonly].selectabletext,input[type=textarea][readonly].selectabletext,input[type=password][readonly].selectabletext{-moz-user-select:text;-khtml-user-select:text;-webkit-user-select:text;-ms-user-select:text;user-select:text}.x-statusbar .syno-ux-statusbar-loading,.x-statusbar .syno-ux-statusbar-success,.x-statusbar .syno-ux-statusbar-error{display:table-cell;vertical-align:middle;white-space:normal;word-break:break-all;margin-left:2px;height:24px;line-height:12px;font-size:12px;padding-left:30px;padding-right:6px}.x-statusbar .syno-ux-statusbar-loading{background-position:0 0;background-repeat:no-repeat;background-image:url("images/Components/icon_loading.gif")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .x-statusbar .syno-ux-statusbar-loading{background-image:url("../img/synohdpack/images/Components/icon_loading.gif");background-size:24px 24px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .x-statusbar .syno-ux-statusbar-loading{background-image:url("../img/synohdpack/images/Components/icon_loading.gif");background-size:24px 24px;outline:1px green dashed}}.x-statusbar .syno-ux-statusbar-success{background-position:0 0;background-repeat:no-repeat;background-image:url("./images/Components/icon_success.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .x-statusbar .syno-ux-statusbar-success{background-image:url("../img/synohdpack/./images/Components/icon_success.png");background-size:24px 24px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .x-statusbar .syno-ux-statusbar-success{background-image:url("../img/synohdpack/./images/Components/icon_success.png");background-size:24px 24px;outline:1px green dashed}}.x-statusbar .syno-ux-statusbar-error{background-position:0 0;background-repeat:no-repeat;background-image:url("./images/Components/icon_error.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .x-statusbar .syno-ux-statusbar-error{background-image:url("../img/synohdpack/./images/Components/icon_error.png");background-size:24px 24px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .x-statusbar .syno-ux-statusbar-error{background-image:url("../img/synohdpack/./images/Components/icon_error.png");background-size:24px 24px;outline:1px green dashed}}.syno-ux-superboxselect{position:relative;height:auto !important;margin:0px;overflow:hidden;padding:1px 2px 1px 4px;display:block;outline:0px !important;border-right:1px solid #C8D2DC}.x-item-disabled .syno-ux-superboxselect.x-form-focus{border-right:1px solid #C8D2DC}.syno-ux-superboxselect.x-form-invalid{border-right:1px solid #FF8C8C;background-color:#FFF0F0}.x-item-disabled .syno-ux-superboxselect.x-form-text{background-color:#F6F8FA;border-right:1px solid #C8D2DC}.syno-ux-superboxselect input[disabled]{background-color:transparent}.syno-ux-superboxselect ul{overflow:hidden;cursor:text}.syno-ux-superboxselect-display-btns ul{padding-right:50px}.syno-ux-superboxselect-display-btns .syno-ux-superboxselect-btns{position:absolute;right:1px;top:0;overflow:hidden;padding:1px}.syno-ux-superboxselect-display-btns .syno-ux-superboxselect-btns div{float:left}.syno-ux-superboxselect-display-btns .syno-ux-superboxselect-btns .syno-ux-superboxselect-btn-clear{width:24px;height:22px;background-repeat:no-repeat;background-attachment:scroll;background-position:0px -1px;background-image:url("./images/Components/icon_search_clear.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-superboxselect-display-btns .syno-ux-superboxselect-btns .syno-ux-superboxselect-btn-clear{background-image:url("../img/synohdpack/./images/Components/icon_search_clear.png");background-size:24px 144px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-superboxselect-display-btns .syno-ux-superboxselect-btns .syno-ux-superboxselect-btn-clear{background-image:url("../img/synohdpack/./images/Components/icon_search_clear.png");background-size:24px 144px;outline:1px green dashed}}.syno-ux-superboxselect-display-btns .syno-ux-superboxselect-btns .syno-ux-superboxselect-btn-clear.syno-ux-superboxselect-btn-over{background-position:0px -25px}.syno-ux-superboxselect-display-btns .syno-ux-superboxselect-btns .syno-ux-superboxselect-btn-clear.syno-ux-superboxselect-btn-over.syno-ux-superboxselect-btn-click{background-position:0px -49px}.syno-ux-superboxselect-display-btns .syno-ux-superboxselect-btns .syno-ux-superboxselect-btn-clear.syno-ux-superboxselect-btn-click{background-position:0px -49px}.x-item-disabled .syno-ux-superboxselect-display-btns .syno-ux-superboxselect-btns .syno-ux-superboxselect-btn-clear{background-position:0px -1px}.syno-ux-superboxselect-display-btns .syno-ux-superboxselect-btns .syno-ux-superboxselect-btn-expand{width:26px;height:22px;background-repeat:no-repeat;background-attachment:scroll;background-position:0px -3px;background-image:url("images/Components/trigger.png")}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-superboxselect-display-btns .syno-ux-superboxselect-btns .syno-ux-superboxselect-btn-expand{background-image:url("../img/synohdpack/images/Components/trigger.png");background-size:104px 28px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-superboxselect-display-btns .syno-ux-superboxselect-btns .syno-ux-superboxselect-btn-expand{background-image:url("../img/synohdpack/images/Components/trigger.png");background-size:104px 28px;outline:1px green dashed}}.syno-ux-superboxselect-display-btns .syno-ux-superboxselect-btns .syno-ux-superboxselect-btn-expand.syno-ux-superboxselect-btn-over{background-position:-26px -3px}.syno-ux-superboxselect-display-btns .syno-ux-superboxselect-btns .syno-ux-superboxselect-btn-expand.syno-ux-superboxselect-btn-over.syno-ux-superboxselect-btn-click{background-position:-52px -3px}.syno-ux-superboxselect-display-btns .syno-ux-superboxselect-btns .syno-ux-superboxselect-btn-expand.syno-ux-superboxselect-btn-click{background-position:-52px -3px}.x-item-disabled .syno-ux-superboxselect-display-btns .syno-ux-superboxselect-btns .syno-ux-superboxselect-btn-expand{background-position:-78px -3px}.syno-ux-superboxselect-btn-hide{display:none}.syno-ux-superboxselect li{float:left;margin:1px 4px 1px 0px;padding:0;line-height:20px}.syno-ux-superboxselect-stacked li{float:none !important}.syno-ux-superboxselect-input input{border:none;outline:0px;margin-top:4px;margin-bottom:4px;background-color:transparent}body.ext-ie .x-superboxselect-input input{background:none;border:none;margin-top:3px}.syno-ux-superboxselect-item{position:relative;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;o-border-radius:2px;khtml-border-radius:2px;border:1px solid #C8D2DC;background-color:#E7F3FE;padding:0px 26px 0px 8px !important;font-size:12px}.syno-ux-superboxselect-item.syno-ux-superboxselect-item-hover{background:#F2F9FF;border:1px solid #B6C4D2}.syno-ux-superboxselect-item.syno-ux-superboxselect-item-focus{border-color:#B6C4D2;background:#E0F0FE}.syno-ux-superboxselect-item-close{background-repeat:no-repeat;background-attachment:scroll;background-position:left 0px;background-image:url("./images/Components/superbox_button_cancel.png");border:none;font-size:1px;height:22px;padding:0;position:absolute;right:0px;top:0px;width:16px;display:block;cursor:pointer;background-color:transparent}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpack .syno-ux-superboxselect-item-close{background-image:url("../img/synohdpack/./images/Components/superbox_button_cancel.png");background-size:8px 88px}}@media (-webkit-min-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (min-resolution: 144dpi){.synohdpackdebug .syno-ux-superboxselect-item-close{background-image:url("../img/synohdpack/./images/Components/superbox_button_cancel.png");background-size:8px 88px;outline:1px green dashed}}.syno-ux-superboxselect-item-close:hover,.syno-ux-superboxselect-item-close:active{background-position:left -22px}.syno-ux-superboxselect-item-focus .syno-ux-superboxselect-item-close{background-position:left -44px}.x-item-disabled .syno-ux-superboxselect-item-close{background-position:left -66px}.syno-gridtree.syno-ux-treepanel div.x-tree-node-el{display:block}.syno-gridtree .syno-gridtree-col{border:none}.syno-gridtree .syno-gridtree-icons{float:left}.syno-gridtree .syno-gridtree-static .x-tree-ec-icon{display:none}.syno-gridtree .syno-gridtree-static .x-tree-node-el{cursor:default}.syno-gridtree .no-node-icon .x-tree-node-leaf .x-tree-node-icon,.syno-gridtree .no-node-icon .x-tree-node-collapsed .x-tree-node-icon,.syno-gridtree .no-node-icon .x-tree-node-expanded .x-tree-node-icon{display:none}.syno-ux-combobox-list .x-combo-list-item.x-combo-selected{background-color:#0086e5;border:1px solid #0086e5 !important}.syno-ux-datefield-menu .x-date-middle .x-btn button{color:#0086e5}.syno-ux-datefield-menu table.x-date-inner tbody tr td.x-date-selected a{background-color:#0086e5}.syno-ux-datefield-menu table.x-date-inner tbody tr td.x-date-active:hover span{color:#0086e5}.syno-ux-datefield-menu table.x-date-inner tbody tr td.x-date-today a{border-bottom:2px solid #fa4b4b}.syno-ux-datefield-menu table.x-date-inner tbody tr td.x-date-today a span{color:#fa4b4b}.syno-ux-datefield-menu table.x-date-inner tbody tr td.x-date-today.x-date-active:hover span{color:#fa4b4b}.syno-ux-datefield-menu table.x-date-inner tbody tr td.x-date-selected.x-date-today a{background-color:#fa4b4b}.syno-ux-datefield-menu .x-date-mp tr td.x-date-mp-sel a{background-color:#0086e5}.syno-ux-displayfield.x-form-display-field a{color:#0086e5}.syno-ux-expandable-listview .item-wrap.item-over{background-color:#f5faff}.syno-ux-expandable-listview .item-wrap.item-selected{background-color:#e6f5ff}.syno-ux-expandable-listview .item-summary .item-status{color:#0086e5}.syno-ux-fieldset .x-fieldset-header{color:#0086e5}.syno-ux-modulelist .x-panel-body:before{background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0icmdiYSgyNTUsMjU1LDI1NSwwKSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, rgba(255,255,255,0)));background-image:-webkit-linear-gradient(#ffffff,rgba(255,255,255,0));background-image:-moz-linear-gradient(#ffffff,rgba(255,255,255,0));background-image:-o-linear-gradient(#ffffff,rgba(255,255,255,0));background-image:linear-gradient(#ffffff,rgba(255,255,255,0))}.syno-ux-modulelist .x-panel-body:after{background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0icmdiYSgyNTUsMjU1LDI1NSwwKSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255,255,255,0)), color-stop(100%, #ffffff));background-image:-webkit-linear-gradient(rgba(255,255,255,0),#ffffff);background-image:-moz-linear-gradient(rgba(255,255,255,0),#ffffff);background-image:-o-linear-gradient(rgba(255,255,255,0),#ffffff);background-image:linear-gradient(rgba(255,255,255,0),#ffffff)}.syno-ux-modulelist .x-tree-node-leaf.x-tree-node-over a span{color:#0086e5}.syno-ux-modulelist .x-tree-node-leaf.x-tree-selected{background-color:#0086e5}.syno-ux-modulelist .x-tree-node-leaf.x-tree-selected.x-tree-node-over a span{color:#FFFFFF}.syno-ux-modulelist .syno-textfilter .x-form-field-wrap.x-trigger-wrap-focus{border-color:#0086e5}.syno-ux-pagingtoolbar .x-toolbar-right div{color:#0086e5}.syno-ux-pagingtoolbar .x-btn-icon .syno-ux-page-btn,.syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .syno-ux-page-btn,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .syno-ux-page-btn,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .syno-ux-page-btn{color:#0086e5}.syno-ux-pagingtoolbar .x-btn-icon .syno-ux-page-btn-focus,.syno-ux-pagingtoolbar .x-btn-icon .x-btn-small .syno-ux-page-btn-focus,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .syno-ux-page-btn-focus,.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .x-btn-small .syno-ux-page-btn-focus{background-color:#0086e5;color:white}.syno-ux-pagingtoolbar .x-btn-icon.x-btn-over .syno-ux-page-btn{background-color:#e6f5ff}.syno-ux-pagingtoolbar .x-btn-icon.x-btn-click .syno-ux-page-btn{color:white;background-color:#0086e5}.syno-ux-pagingtoolbar .x-btn-icon.x-item-disabled .syno-ux-page-btn{background-color:transparent}.syno-ux-button.syno-ux-statebuttongroup-right.x-btn-over.x-btn button,.syno-ux-button.syno-ux-statebuttongroup-right:hover.x-btn button,.syno-ux-button.syno-ux-statebuttongroup-left.x-btn-over.x-btn button,.syno-ux-button.syno-ux-statebuttongroup-left:hover.x-btn button,.syno-ux-button.syno-ux-statebuttongroup-middle.x-btn-over.x-btn button,.syno-ux-button.syno-ux-statebuttongroup-middle:hover.x-btn button{color:#0086e5}.x-statusbar .syno-ux-statusbar-loading{color:#0086e5}.syno-ux-superboxselect.x-form-focus{border-right:1px solid #0086e5}.syno-ux-superboxselect.x-form-focus.x-form-invalid{border-right:1px solid #FF8C8C}.syno-ux-tab-panel .x-tab-strip-top li.x-tab-strip-active .x-tab-strip-text{color:#0086e5}.syno-ux-textarea.x-form-focus{border-color:#0086e5}.syno-ux-textfilter .x-form-field-wrap.x-trigger-wrap-focus{border-color:#0086e5}.syno-ux-treepanel .x-tree-node .x-tree-node-over{background-color:#e6f5ff}.syno-ux-treepanel .x-tree-node .x-tree-selected{background-color:#0086e5}.syno-ux-treepanel.syno-ux-treepanel-gradient .x-panel-bwrap:before{background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0icmdiYSgyNTUsMjU1LDI1NSwwKSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, rgba(255,255,255,0)));background-image:-webkit-linear-gradient(#ffffff,rgba(255,255,255,0));background-image:-moz-linear-gradient(#ffffff,rgba(255,255,255,0));background-image:-o-linear-gradient(#ffffff,rgba(255,255,255,0));background-image:linear-gradient(#ffffff,rgba(255,255,255,0))}.syno-ux-treepanel.syno-ux-treepanel-gradient .x-panel-bwrap:after{background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0icmdiYSgyNTUsMjU1LDI1NSwwKSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255,255,255,0)), color-stop(100%, #ffffff));background-image:-webkit-linear-gradient(rgba(255,255,255,0),#ffffff);background-image:-moz-linear-gradient(rgba(255,255,255,0),#ffffff);background-image:-o-linear-gradient(rgba(255,255,255,0),#ffffff);background-image:linear-gradient(rgba(255,255,255,0),#ffffff)} diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/css/xtheme-gray.css b/salt/idh/skins/http/opencanary/nasLogin/static/css/xtheme-gray.css new file mode 100644 index 000000000..919e73297 --- /dev/null +++ b/salt/idh/skins/http/opencanary/nasLogin/static/css/xtheme-gray.css @@ -0,0 +1,1682 @@ +/*! + * Ext JS Library 3.4.0 + * Copyright(c) 2006-2011 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +.ext-el-mask { + background-color: #ccc; +} + +.ext-el-mask-msg { + border-color:#999; + background-color:#ddd; + background-image:url(../images/gray/panel/white-top-bottom.gif); + background-position: 0 -1px; +} +.ext-el-mask-msg div { + background-color: #eee; + border-color:#d0d0d0; + color:#222; + font:normal 11px tahoma, arial, helvetica, sans-serif; +} + +.x-mask-loading div { + background-color:#fbfbfb; + background-image:url(../images/default/grid/loading.gif); +} + +.x-item-disabled { + color: gray; +} + +.x-item-disabled * { + color: gray !important; +} + +.x-splitbar-proxy { + background-color: #aaa; +} + +.x-color-palette a { + border-color:#fff; +} + +.x-color-palette a:hover, .x-color-palette a.x-color-palette-sel { + border-color:#CFCFCF; + background-color: #eaeaea; +} + +/* +.x-color-palette em:hover, .x-color-palette span:hover{ + background-color: #eaeaea; +} +*/ + +.x-color-palette em { + border-color:#aca899; +} + +.x-ie-shadow { + background-color:#777; +} + +.x-shadow .xsmc { + background-image: url(../images/default/shadow-c.png); +} + +.x-shadow .xsml, .x-shadow .xsmr { + background-image: url(../images/default/shadow-lr.png); +} + +.x-shadow .xstl, .x-shadow .xstc, .x-shadow .xstr, .x-shadow .xsbl, .x-shadow .xsbc, .x-shadow .xsbr{ + background-image: url(../images/default/shadow.png); +} + +.loading-indicator { + font-size: 11px; + background-image: url(../images/default/grid/loading.gif); +} + +.x-spotlight { + background-color: #ccc; +}.x-tab-panel-header, .x-tab-panel-footer { + background-color: #eaeaea; + border-color:#d0d0d0; + overflow:hidden; + zoom:1; +} + +.x-tab-panel-header, .x-tab-panel-footer { + border-color:#d0d0d0; +} + +ul.x-tab-strip-top{ + background-color:#dbdbdb; + background-image: url(../images/gray/tabs/tab-strip-bg.gif); + border-bottom-color:#d0d0d0; +} + +ul.x-tab-strip-bottom{ + background-color:#dbdbdb; + background-image: url(../images/gray/tabs/tab-strip-btm-bg.gif); + border-top-color:#d0d0d0; +} + +.x-tab-panel-header-plain .x-tab-strip-spacer, +.x-tab-panel-footer-plain .x-tab-strip-spacer { + border-color:#d0d0d0; + background-color: #eaeaea; +} + +.x-tab-strip span.x-tab-strip-text { + font:normal 11px tahoma,arial,helvetica; + color:#333; +} + +.x-tab-strip-over span.x-tab-strip-text { + color:#111; +} + +.x-tab-strip-active span.x-tab-strip-text { + color:#333; + font-weight:bold; +} + +.x-tab-strip-disabled .x-tabs-text { + color:#aaaaaa; +} + +.x-tab-strip-top .x-tab-right, .x-tab-strip-top .x-tab-left, .x-tab-strip-top .x-tab-strip-inner{ + background-image: url(../images/gray/tabs/tabs-sprite.gif); +} + +.x-tab-strip-bottom .x-tab-right { + background-image: url(../images/gray/tabs/tab-btm-inactive-right-bg.gif); +} + +.x-tab-strip-bottom .x-tab-left { + background-image: url(../images/gray/tabs/tab-btm-inactive-left-bg.gif); +} + +.x-tab-strip-bottom .x-tab-strip-over .x-tab-left { + background-image: url(../images/gray/tabs/tab-btm-over-left-bg.gif); +} + +.x-tab-strip-bottom .x-tab-strip-over .x-tab-right { + background-image: url(../images/gray/tabs/tab-btm-over-right-bg.gif); +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-right { + background-image: url(../images/gray/tabs/tab-btm-right-bg.gif); +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-left { + background-image: url(../images/gray/tabs/tab-btm-left-bg.gif); +} + +.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close { + background-image:url(../images/gray/tabs/tab-close.gif); +} + +.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close:hover{ + background-image:url(../images/gray/tabs/tab-close.gif); +} + +.x-tab-panel-body { + border-color:#d0d0d0; + background-color:#fff; +} + +.x-tab-panel-body-top { + border-top: 0 none; +} + +.x-tab-panel-body-bottom { + border-bottom: 0 none; +} + +.x-tab-scroller-left { + background-image:url(../images/gray/tabs/scroll-left.gif); + border-bottom-color:#d0d0d0; +} + +.x-tab-scroller-left-over { + background-position: 0 0; +} + +.x-tab-scroller-left-disabled { + background-position: -18px 0; + opacity:.5; + -moz-opacity:.5; + filter:alpha(opacity=50); + cursor:default; +} + +.x-tab-scroller-right { + background-image:url(../images/gray/tabs/scroll-right.gif); + border-bottom-color:#d0d0d0; +} + +.x-tab-panel-bbar .x-toolbar, .x-tab-panel-tbar .x-toolbar { + border-color:#d0d0d0; +} +.x-form-field{ + font:normal 12px tahoma, arial, helvetica, sans-serif; +} + +.x-form-text, textarea.x-form-field{ + background-color:#fff; + background-image:url(../images/default/form/text-bg.gif); + border-color:#C1C1C1; +} + +.x-form-select-one { + background-color:#fff; + border-color:#C1C1C1; +} + +.x-form-check-group-label { + border-bottom: 1px solid #d0d0d0; + color: #333; +} + +.x-editor .x-form-check-wrap { + background-color:#fff; +} + +.x-form-field-wrap .x-form-trigger{ + background-image:url(../images/gray/form/trigger.gif); + border-bottom-color:#b5b8c8; +} + +.x-form-field-wrap .x-form-date-trigger{ + background-image: url(../images/gray/form/date-trigger.gif); +} + +.x-form-field-wrap .x-form-clear-trigger{ + background-image: url(../images/gray/form/clear-trigger.gif); +} + +.x-form-field-wrap .x-form-search-trigger{ + background-image: url(../images/gray/form/search-trigger.gif); +} + +.x-trigger-wrap-focus .x-form-trigger{ + border-bottom-color: #777777; +} + +.x-item-disabled .x-form-trigger-over{ + border-bottom-color:#b5b8c8; +} + +.x-item-disabled .x-form-trigger-click{ + border-bottom-color:#b5b8c8; +} + +.x-form-focus, textarea.x-form-focus{ + border-color:#777777; +} + +.x-form-invalid, textarea.x-form-invalid{ + background-color:#fff; + background-image:url(../images/default/grid/invalid_line.gif); + border-color:#c30; +} + +.ext-webkit .x-form-invalid{ + background-color:#fee; + border-color:#ff7870; +} + +.x-form-inner-invalid, textarea.x-form-inner-invalid{ + background-color:#fff; + background-image:url(../images/default/grid/invalid_line.gif); +} + +.x-form-grow-sizer { + font:normal 12px tahoma, arial, helvetica, sans-serif; +} + +.x-form-item { + font:normal 12px tahoma, arial, helvetica, sans-serif; +} + +.x-form-invalid-msg { + color:#c0272b; + font:normal 11px tahoma, arial, helvetica, sans-serif; + background-image:url(../images/default/shared/warning.gif); +} + +.x-form-empty-field { + color:gray; +} + +.x-small-editor .x-form-field { + font:normal 11px arial, tahoma, helvetica, sans-serif; +} + +.ext-webkit .x-small-editor .x-form-field { + font:normal 12px arial, tahoma, helvetica, sans-serif; +} + +.x-form-invalid-icon { + background-image:url(../images/default/form/exclamation.gif); +} + +.x-fieldset { + border-color:#CCCCCC; +} + +.x-fieldset legend { + font:bold 11px tahoma, arial, helvetica, sans-serif; + color:#777777; +}.x-btn{ + font:normal 11px tahoma, verdana, helvetica; +} + +.x-btn button{ + font:normal 11px arial,tahoma,verdana,helvetica; + color:#333; +} + +.x-btn em { + font-style:normal; + font-weight:normal; +} + +.x-btn-tl, .x-btn-tr, .x-btn-tc, .x-btn-ml, .x-btn-mr, .x-btn-mc, .x-btn-bl, .x-btn-br, .x-btn-bc{ + background-image:url(../images/gray/button/btn.gif); +} + +.x-btn-click .x-btn-text, .x-btn-menu-active .x-btn-text, .x-btn-pressed .x-btn-text{ + color:#000; +} + +.x-btn-disabled *{ + color:gray !important; +} + +.x-btn-mc em.x-btn-arrow { + background-image:url(../images/default/button/arrow.gif); +} + +.x-btn-mc em.x-btn-split { + background-image:url(../images/default/button/s-arrow.gif); +} + +.x-btn-over .x-btn-mc em.x-btn-split, .x-btn-click .x-btn-mc em.x-btn-split, .x-btn-menu-active .x-btn-mc em.x-btn-split, .x-btn-pressed .x-btn-mc em.x-btn-split { + background-image:url(../images/gray/button/s-arrow-o.gif); +} + +.x-btn-mc em.x-btn-arrow-bottom { + background-image:url(../images/default/button/s-arrow-b-noline.gif); +} + +.x-btn-mc em.x-btn-split-bottom { + background-image:url(../images/default/button/s-arrow-b.gif); +} + +.x-btn-over .x-btn-mc em.x-btn-split-bottom, .x-btn-click .x-btn-mc em.x-btn-split-bottom, .x-btn-menu-active .x-btn-mc em.x-btn-split-bottom, .x-btn-pressed .x-btn-mc em.x-btn-split-bottom { + background-image:url(../images/gray/button/s-arrow-bo.gif); +} + +.x-btn-group-header { + color: #666; +} + +.x-btn-group-tc { + background-image: url(../images/gray/button/group-tb.gif); +} + +.x-btn-group-tl { + background-image: url(../images/gray/button/group-cs.gif); +} + +.x-btn-group-tr { + background-image: url(../images/gray/button/group-cs.gif); +} + +.x-btn-group-bc { + background-image: url(../images/gray/button/group-tb.gif); +} + +.x-btn-group-bl { + background-image: url(../images/gray/button/group-cs.gif); +} + +.x-btn-group-br { + background-image: url(../images/gray/button/group-cs.gif); +} + +.x-btn-group-ml { + background-image: url(../images/gray/button/group-lr.gif); +} +.x-btn-group-mr { + background-image: url(../images/gray/button/group-lr.gif); +} + +.x-btn-group-notitle .x-btn-group-tc { + background-image: url(../images/gray/button/group-tb.gif); +} +.x-toolbar{ + border-color:#d0d0d0; + background-color:#f0f0f0; + background-image:url(../images/gray/toolbar/bg.gif); +} + +.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{ + font:normal 11px arial,tahoma, helvetica, sans-serif; +} + +.x-toolbar .x-item-disabled { + color:gray; +} + +.x-toolbar .x-item-disabled * { + color:gray; +} + +.x-toolbar .x-btn-mc em.x-btn-split { + background-image:url(../images/default/button/s-arrow-noline.gif); +} + +.x-toolbar .x-btn-over .x-btn-mc em.x-btn-split, .x-toolbar .x-btn-click .x-btn-mc em.x-btn-split, +.x-toolbar .x-btn-menu-active .x-btn-mc em.x-btn-split, .x-toolbar .x-btn-pressed .x-btn-mc em.x-btn-split +{ + background-image:url(../images/gray/button/s-arrow-o.gif); +} + +.x-toolbar .x-btn-mc em.x-btn-split-bottom { + background-image:url(../images/default/button/s-arrow-b-noline.gif); +} + +.x-toolbar .x-btn-over .x-btn-mc em.x-btn-split-bottom, .x-toolbar .x-btn-click .x-btn-mc em.x-btn-split-bottom, +.x-toolbar .x-btn-menu-active .x-btn-mc em.x-btn-split-bottom, .x-toolbar .x-btn-pressed .x-btn-mc em.x-btn-split-bottom +{ + background-image:url(../images/gray/button/s-arrow-bo.gif); +} + +.x-toolbar .xtb-sep { + background-image: url(../images/default/grid/grid-split.gif); +} + +.x-tbar-page-first{ + background-image: url(../images/gray/grid/page-first.gif) !important; +} + +.x-tbar-loading{ + background-image: url(../images/gray/grid/refresh.gif) !important; +} + +.x-tbar-page-last{ + background-image: url(../images/gray/grid/page-last.gif) !important; +} + +.x-tbar-page-next{ + background-image: url(../images/gray/grid/page-next.gif) !important; +} + +.x-tbar-page-prev{ + background-image: url(../images/gray/grid/page-prev.gif) !important; +} + +.x-item-disabled .x-tbar-loading{ + background-image: url(../images/default/grid/loading.gif) !important; +} + +.x-item-disabled .x-tbar-page-first{ + background-image: url(../images/default/grid/page-first-disabled.gif) !important; +} + +.x-item-disabled .x-tbar-page-last{ + background-image: url(../images/default/grid/page-last-disabled.gif) !important; +} + +.x-item-disabled .x-tbar-page-next{ + background-image: url(../images/default/grid/page-next-disabled.gif) !important; +} + +.x-item-disabled .x-tbar-page-prev{ + background-image: url(../images/default/grid/page-prev-disabled.gif) !important; +} + +.x-paging-info { + color:#444; +} + +.x-toolbar-more-icon { + background-image: url(../images/gray/toolbar/more.gif) !important; +} +.x-resizable-handle { + background-color:#fff; +} + +.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-east, +.x-resizable-over .x-resizable-handle-west, .x-resizable-pinned .x-resizable-handle-west +{ + background-image:url(../images/gray/sizer/e-handle.gif); +} + +.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south, +.x-resizable-over .x-resizable-handle-north, .x-resizable-pinned .x-resizable-handle-north +{ + background-image:url(../images/gray/sizer/s-handle.gif); +} + +.x-resizable-over .x-resizable-handle-north, .x-resizable-pinned .x-resizable-handle-north{ + background-image:url(../images/gray/sizer/s-handle.gif); +} +.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{ + background-image:url(../images/gray/sizer/se-handle.gif); +} +.x-resizable-over .x-resizable-handle-northwest, .x-resizable-pinned .x-resizable-handle-northwest{ + background-image:url(../images/gray/sizer/nw-handle.gif); +} +.x-resizable-over .x-resizable-handle-northeast, .x-resizable-pinned .x-resizable-handle-northeast{ + background-image:url(../images/gray/sizer/ne-handle.gif); +} +.x-resizable-over .x-resizable-handle-southwest, .x-resizable-pinned .x-resizable-handle-southwest{ + background-image:url(../images/gray/sizer/sw-handle.gif); +} +.x-resizable-proxy{ + border-color:#565656; +} +.x-resizable-overlay{ + background-color:#fff; +} +.x-grid3 { + background-color:#fff; +} + +.x-grid-panel .x-panel-mc .x-panel-body { + border-color:#d0d0d0; +} + +.x-grid3-row td, .x-grid3-summary-row td{ + font:normal 11px/13px arial, tahoma, helvetica, sans-serif; +} + +.x-grid3-hd-row td { + font:normal 11px/15px arial, tahoma, helvetica, sans-serif; +} + +.x-grid3-hd-row td { + border-left-color:#eee; + border-right-color:#d0d0d0; +} + +.x-grid-row-loading { + background-color: #fff; + background-image:url(../images/default/shared/loading-balls.gif); +} + +.x-grid3-row { + border-color:#ededed; + border-top-color:#fff; +} + +.x-grid3-row-alt{ + background-color:#fafafa; +} + +.x-grid3-row-over { + border-color:#ddd; + background-color:#efefef; + background-image:url(../images/default/grid/row-over.gif); +} + +.x-grid3-resize-proxy { + background-color:#777; +} + +.x-grid3-resize-marker { + background-color:#777; +} + +.x-grid3-header{ + background-color:#f9f9f9; + background-image:url(../images/gray/grid/grid3-hrow2.gif); +} + +.x-grid3-header-pop { + border-left-color:#d0d0d0; +} + +.x-grid3-header-pop-inner { + border-left-color:#eee; + background-image:url(../images/default/grid/hd-pop.gif); +} + +td.x-grid3-hd-over, td.sort-desc, td.sort-asc, td.x-grid3-hd-menu-open { + border-left-color:#ACACAC; + border-right-color:#ACACAC; +} + +td.x-grid3-hd-over .x-grid3-hd-inner, td.sort-desc .x-grid3-hd-inner, td.sort-asc .x-grid3-hd-inner, td.x-grid3-hd-menu-open .x-grid3-hd-inner { + background-color:#f9f9f9; + background-image:url(../images/gray/grid/grid3-hrow-over2.gif); + +} + +.sort-asc .x-grid3-sort-icon { + background-image: url(../images/gray/grid/sort_asc.gif); +} + +.sort-desc .x-grid3-sort-icon { + background-image: url(../images/gray/grid/sort_desc.gif); +} + +.x-grid3-cell-text, .x-grid3-hd-text { + color:#000; +} + +.x-grid3-split { + background-image: url(../images/default/grid/grid-split.gif); +} + +.x-grid3-hd-text { + color:#333; +} + +.x-dd-drag-proxy .x-grid3-hd-inner{ + background-color:#f9f9f9; + background-image:url(../images/gray/grid/grid3-hrow-over2.gif); + border-color:#ACACAC; +} + +.col-move-top{ + background-image:url(../images/gray/grid/col-move-top.gif); +} + +.col-move-bottom{ + background-image:url(../images/gray/grid/col-move-bottom.gif); +} + +.x-grid3-row-selected { + background-color:#CCCCCC !important; + background-image: none; + border-color:#ACACAC; +} + +.x-grid3-cell-selected{ + background-color: #CBCBCB !important; + color:#000; +} + +.x-grid3-cell-selected span{ + color:#000 !important; +} + +.x-grid3-cell-selected .x-grid3-cell-text{ + color:#000; +} + +.x-grid3-locked td.x-grid3-row-marker, .x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker{ + background-color:#ebeadb !important; + background-image:url(../images/default/grid/grid-hrow.gif) !important; + color:#000; + border-top-color:#fff; + border-right-color:#6fa0df !important; +} + +.x-grid3-locked td.x-grid3-row-marker div, .x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker div{ + color:#333 !important; +} + +.x-grid3-dirty-cell { + background-image:url(../images/default/grid/dirty.gif); +} + +.x-grid3-topbar, .x-grid3-bottombar{ + font:normal 11px arial, tahoma, helvetica, sans-serif; +} + +.x-grid3-bottombar .x-toolbar{ + border-top-color:#a9bfd3; +} + +.x-props-grid .x-grid3-td-name .x-grid3-cell-inner{ + background-image:url(../images/default/grid/grid3-special-col-bg.gif) !important; + color:#000 !important; +} + +.x-props-grid .x-grid3-body .x-grid3-td-name{ + background-color:#fff !important; + border-right-color:#eee; +} + +.xg-hmenu-sort-asc .x-menu-item-icon{ + background-image: url(../images/default/grid/hmenu-asc.gif); +} + +.xg-hmenu-sort-desc .x-menu-item-icon{ + background-image: url(../images/default/grid/hmenu-desc.gif); +} + +.xg-hmenu-lock .x-menu-item-icon{ + background-image: url(../images/default/grid/hmenu-lock.gif); +} + +.xg-hmenu-unlock .x-menu-item-icon{ + background-image: url(../images/default/grid/hmenu-unlock.gif); +} + +.x-grid3-hd-btn { + background-color:#f9f9f9; + background-image:url(../images/gray/grid/grid3-hd-btn.gif); +} + +.x-grid3-body .x-grid3-td-expander { + background-image:url(../images/default/grid/grid3-special-col-bg.gif); +} + +.x-grid3-row-expander { + background-image:url(../images/gray/grid/row-expand-sprite.gif); +} + +.x-grid3-body .x-grid3-td-checker { + background-image: url(../images/default/grid/grid3-special-col-bg.gif); +} + +.x-grid3-row-checker, .x-grid3-hd-checker { + background-image:url(../images/default/grid/row-check-sprite.gif); +} + +.x-grid3-body .x-grid3-td-numberer { + background-image:url(../images/default/grid/grid3-special-col-bg.gif); +} + +.x-grid3-body .x-grid3-td-numberer .x-grid3-cell-inner { + color:#444; +} + +.x-grid3-body .x-grid3-td-row-icon { + background-image:url(../images/default/grid/grid3-special-col-bg.gif); +} + +.x-grid3-body .x-grid3-row-selected .x-grid3-td-numberer, +.x-grid3-body .x-grid3-row-selected .x-grid3-td-checker, +.x-grid3-body .x-grid3-row-selected .x-grid3-td-expander { + background-image:url(../images/gray/grid/grid3-special-col-sel-bg.gif); +} + +.x-grid3-check-col { + background-image:url(../images/default/menu/unchecked.gif); +} + +.x-grid3-check-col-on { + background-image:url(../images/default/menu/checked.gif); +} + +.x-grid-group, .x-grid-group-body, .x-grid-group-hd { + zoom:1; +} + +.x-grid-group-hd { + border-bottom-color:#d0d0d0; +} + +.x-grid-group-hd div.x-grid-group-title { + background-image:url(../images/gray/grid/group-collapse.gif); + color:#5F5F5F; + font:bold 11px tahoma, arial, helvetica, sans-serif; +} + +.x-grid-group-collapsed .x-grid-group-hd div.x-grid-group-title { + background-image:url(../images/gray/grid/group-expand.gif); +} + +.x-group-by-icon { + background-image:url(../images/default/grid/group-by.gif); +} + +.x-cols-icon { + background-image:url(../images/default/grid/columns.gif); +} + +.x-show-groups-icon { + background-image:url(../images/default/grid/group-by.gif); +} + +.x-grid-empty { + color:gray; + font:normal 11px tahoma, arial, helvetica, sans-serif; +} + +.x-grid-with-col-lines .x-grid3-row td.x-grid3-cell { + border-right-color:#ededed; +} + +.x-grid-with-col-lines .x-grid3-row{ + border-top-color:#ededed; +} + +.x-grid-with-col-lines .x-grid3-row-selected { + border-top-color:#B9B9B9; +} +.x-pivotgrid .x-grid3-header-offset table td { + background: url(../images/gray/grid/grid3-hrow2.gif) repeat-x 50% 100%; + border-left: 1px solid; + border-right: 1px solid; + border-left-color: #D0D0D0; + border-right-color: #D0D0D0; +} + +.x-pivotgrid .x-grid3-row-headers { + background-color: #f9f9f9; +} + +.x-pivotgrid .x-grid3-row-headers table td { + background: #EEE url(../images/default/grid/grid3-rowheader.gif) repeat-x left top; + border-left: 1px solid; + border-right: 1px solid; + border-left-color: #EEE; + border-right-color: #D0D0D0; + border-bottom: 1px solid; + border-bottom-color: #D0D0D0; + height: 18px; +} +.x-dd-drag-ghost{ + color:#000; + font: normal 11px arial, helvetica, sans-serif; + border-color: #ddd #bbb #bbb #ddd; + background-color:#fff; +} + +.x-dd-drop-nodrop .x-dd-drop-icon{ + background-image: url(../images/default/dd/drop-no.gif); +} + +.x-dd-drop-ok .x-dd-drop-icon{ + background-image: url(../images/default/dd/drop-yes.gif); +} + +.x-dd-drop-ok-add .x-dd-drop-icon{ + background-image: url(../images/default/dd/drop-add.gif); +} + +.x-view-selector { + background-color:#D6D6D6; + border-color:#888888; +}.x-tree-node-expanded .x-tree-node-icon{ + background-image:url(../images/default/tree/folder-open.gif); +} + +.x-tree-node-leaf .x-tree-node-icon{ + background-image:url(../images/default/tree/leaf.gif); +} + +.x-tree-node-collapsed .x-tree-node-icon{ + background-image:url(../images/default/tree/folder.gif); +} + +.x-tree-node-loading .x-tree-node-icon{ + background-image:url(../images/default/tree/loading.gif) !important; +} + +.x-tree-node .x-tree-node-inline-icon { + background-image: none; +} + +.x-tree-node-loading a span{ + font-style: italic; + color:#444444; +} + +.ext-ie .x-tree-node-el input { + width:15px; + height:15px; +} + +.x-tree-lines .x-tree-elbow{ + background-image:url(../images/default/tree/elbow.gif); +} + +.x-tree-lines .x-tree-elbow-plus{ + background-image:url(../images/default/tree/elbow-plus.gif); +} + +.x-tree-lines .x-tree-elbow-minus{ + background-image:url(../images/default/tree/elbow-minus.gif); +} + +.x-tree-lines .x-tree-elbow-end{ + background-image:url(../images/default/tree/elbow-end.gif); +} + +.x-tree-lines .x-tree-elbow-end-plus{ + background-image:url(../images/gray/tree/elbow-end-plus.gif); +} + +.x-tree-lines .x-tree-elbow-end-minus{ + background-image:url(../images/gray/tree/elbow-end-minus.gif); +} + +.x-tree-lines .x-tree-elbow-line{ + background-image:url(../images/default/tree/elbow-line.gif); +} + +.x-tree-no-lines .x-tree-elbow-plus{ + background-image:url(../images/default/tree/elbow-plus-nl.gif); +} + +.x-tree-no-lines .x-tree-elbow-minus{ + background-image:url(../images/default/tree/elbow-minus-nl.gif); +} + +.x-tree-no-lines .x-tree-elbow-end-plus{ + background-image:url(../images/gray/tree/elbow-end-plus-nl.gif); +} + +.x-tree-no-lines .x-tree-elbow-end-minus{ + background-image:url(../images/gray/tree/elbow-end-minus-nl.gif); +} + +.x-tree-arrows .x-tree-elbow-plus{ + background-image:url(../images/gray/tree/arrows.gif); +} + +.x-tree-arrows .x-tree-elbow-minus{ + background-image:url(../images/gray/tree/arrows.gif); +} + +.x-tree-arrows .x-tree-elbow-end-plus{ + background-image:url(../images/gray/tree/arrows.gif); +} + +.x-tree-arrows .x-tree-elbow-end-minus{ + background-image:url(../images/gray/tree/arrows.gif); +} + +.x-tree-node{ + color:#000; + font: normal 11px arial, tahoma, helvetica, sans-serif; +} + +.x-tree-node a, .x-dd-drag-ghost a{ + color:#000; +} + +.x-tree-node a span, .x-dd-drag-ghost a span{ + color:#000; +} + +.x-tree-node .x-tree-node-disabled a span{ + color:gray !important; +} + +.x-tree-node div.x-tree-drag-insert-below{ + border-bottom-color:#36c; +} + +.x-tree-node div.x-tree-drag-insert-above{ + border-top-color:#36c; +} + +.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below a{ + border-bottom-color:#36c; +} + +.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above a{ + border-top-color:#36c; +} + +.x-tree-node .x-tree-drag-append a span{ + background-color:#ddd; + border-color:gray; +} + +.x-tree-node .x-tree-node-over { + background-color: #eee; +} + +.x-tree-node .x-tree-selected { + background-color: #ddd; +} + +.x-tree-drop-ok-append .x-dd-drop-icon{ + background-image: url(../images/default/tree/drop-add.gif); +} + +.x-tree-drop-ok-above .x-dd-drop-icon{ + background-image: url(../images/default/tree/drop-over.gif); +} + +.x-tree-drop-ok-below .x-dd-drop-icon{ + background-image: url(../images/default/tree/drop-under.gif); +} + +.x-tree-drop-ok-between .x-dd-drop-icon{ + background-image: url(../images/default/tree/drop-between.gif); +} +.x-date-picker { + border-color:#585858; + background-color:#fff; +} + +.x-date-middle,.x-date-left,.x-date-right { + background-image: url(../images/gray/shared/hd-sprite.gif); + color:#fff; + font:bold 11px "sans serif", tahoma, verdana, helvetica; +} + +.x-date-middle .x-btn .x-btn-text { + color:#fff; +} + +.x-date-middle .x-btn-mc em.x-btn-arrow { + background-image:url(../images/gray/toolbar/btn-arrow-light.gif); +} + +.x-date-right a { + background-image: url(../images/gray/shared/right-btn.gif); +} + +.x-date-left a{ + background-image: url(../images/gray/shared/left-btn.gif); +} + +.x-date-inner th { + background-color:#D8D8D8; + background-image: url(../images/gray/panel/white-top-bottom.gif); + border-bottom-color:#AFAFAF; + font:normal 10px arial, helvetica,tahoma,sans-serif; + color:#595959; +} + +.x-date-inner td { + border-color:#fff; +} + +.x-date-inner a { + font:normal 11px arial, helvetica,tahoma,sans-serif; + color:#000; +} + +.x-date-inner .x-date-active{ + color:#000; +} + +.x-date-inner .x-date-selected a{ + background-image: none; + background-color:#D8D8D8; + border-color:#DCDCDC; +} + +.x-date-inner .x-date-today a{ + border-color:darkred; +} + +.x-date-inner .x-date-selected span{ + font-weight:bold; +} + +.x-date-inner .x-date-prevday a,.x-date-inner .x-date-nextday a { + color:#aaa; +} + +.x-date-bottom { + border-top-color:#AFAFAF; + background-color:#D8D8D8; + background:#D8D8D8 url(../images/gray/panel/white-top-bottom.gif) 0 -2px; +} + +.x-date-inner a:hover, .x-date-inner .x-date-disabled a:hover{ + color:#000; + background-color:#D8D8D8; +} + +.x-date-inner .x-date-disabled a { + background-color:#eee; + color:#bbb; +} + +.x-date-mmenu{ + background-color:#eee !important; +} + +.x-date-mmenu .x-menu-item { + font-size:10px; + color:#000; +} + +.x-date-mp { + background-color:#fff; +} + +.x-date-mp td { + font:normal 11px arial, helvetica,tahoma,sans-serif; +} + +.x-date-mp-btns button { + background-color:#4E565F; + color:#fff; + border-color:#C0C0C0 #434343 #434343 #C0C0C0; + font:normal 11px arial, helvetica,tahoma,sans-serif; +} + +.x-date-mp-btns { + background-color:#D8D8D8; + background:#D8D8D8 url(../images/gray/panel/white-top-bottom.gif) 0 -2px; +} + +.x-date-mp-btns td { + border-top-color:#AFAFAF; +} + +td.x-date-mp-month a,td.x-date-mp-year a { + color: #333; +} + +td.x-date-mp-month a:hover,td.x-date-mp-year a:hover { + color:#333; + background-color:#FDFDFD; +} + +td.x-date-mp-sel a { + background-color:#D8D8D8; + background:#D8D8D8 url(../images/gray/panel/white-top-bottom.gif) 0 -2px; + border-color:#DCDCDC; +} + +.x-date-mp-ybtn a { + background-image:url(../images/gray/panel/tool-sprites.gif); +} + +td.x-date-mp-sep { + border-right-color:#D7D7D7; +}.x-tip .x-tip-close{ + background-image: url(../images/gray/qtip/close.gif); +} + +.x-tip .x-tip-tc, .x-tip .x-tip-tl, .x-tip .x-tip-tr, .x-tip .x-tip-bc, .x-tip .x-tip-bl, .x-tip .x-tip-br, .x-tip .x-tip-ml, .x-tip .x-tip-mr { + background-image: url(../images/gray/qtip/tip-sprite.gif); +} + +.x-tip .x-tip-mc { + font: normal 11px tahoma,arial,helvetica,sans-serif; +} +.x-tip .x-tip-ml { + background-color: #fff; +} + +.x-tip .x-tip-header-text { + font: bold 11px tahoma,arial,helvetica,sans-serif; + color:#444; +} + +.x-tip .x-tip-body { + font: normal 11px tahoma,arial,helvetica,sans-serif; + color:#444; +} + +.x-form-invalid-tip .x-tip-tc, .x-form-invalid-tip .x-tip-tl, .x-form-invalid-tip .x-tip-tr, .x-form-invalid-tip .x-tip-bc, +.x-form-invalid-tip .x-tip-bl, .x-form-invalid-tip .x-tip-br, .x-form-invalid-tip .x-tip-ml, .x-form-invalid-tip .x-tip-mr +{ + background-image: url(../images/default/form/error-tip-corners.gif); +} + +.x-form-invalid-tip .x-tip-body { + background-image:url(../images/default/form/exclamation.gif); +} + +.x-tip-anchor { + background-image:url(../images/gray/qtip/tip-anchor-sprite.gif); +}.x-menu { + background-color:#f0f0f0; + background-image:url(../images/default/menu/menu.gif); +} + +.x-menu-floating{ + border-color:#7D7D7D; +} + +.x-menu-nosep { + background-image:none; +} + +.x-menu-list-item{ + font:normal 11px arial,tahoma,sans-serif; +} + +.x-menu-item-arrow{ + background-image:url(../images/gray/menu/menu-parent.gif); +} + +.x-menu-sep { + background-color:#e0e0e0; + border-bottom-color:#fff; +} + +a.x-menu-item { + color:#222; +} + +.x-menu-item-active { + background-image: url(../images/gray/menu/item-over.gif); + background-color: #f1f1f1; + border-color:#ACACAC; +} + +.x-menu-item-active a.x-menu-item { + border-color:#ACACAC; +} + +.x-menu-check-item .x-menu-item-icon{ + background-image:url(../images/default/menu/unchecked.gif); +} + +.x-menu-item-checked .x-menu-item-icon{ + background-image:url(../images/default/menu/checked.gif); +} + +.x-menu-item-checked .x-menu-group-item .x-menu-item-icon{ + background-image:url(../images/gray/menu/group-checked.gif); +} + +.x-menu-group-item .x-menu-item-icon{ + background-image:none; +} + +.x-menu-plain { + background-color:#fff !important; +} + +.x-menu .x-date-picker{ + border-color:#AFAFAF; +} + +.x-cycle-menu .x-menu-item-checked { + border-color:#B9B9B9 !important; + background-color:#F1F1F1; +} + +.x-menu-scroller-top { + background-image:url(../images/default/layout/mini-top.gif); +} + +.x-menu-scroller-bottom { + background-image:url(../images/default/layout/mini-bottom.gif); +}.x-box-tl { + background-image: url(../images/default/box/corners.gif); +} + +.x-box-tc { + background-image: url(../images/default/box/tb.gif); +} + +.x-box-tr { + background-image: url(../images/default/box/corners.gif); +} + +.x-box-ml { + background-image: url(../images/default/box/l.gif); +} + +.x-box-mc { + background-color: #eee; + background-image: url(../images/default/box/tb.gif); + font-family: "Myriad Pro","Myriad Web","Tahoma","Helvetica","Arial",sans-serif; + color: #393939; + font-size: 12px; +} + +.x-box-mc h3 { + font-size: 14px; + font-weight: bold; +} + +.x-box-mr { + background-image: url(../images/default/box/r.gif); +} + +.x-box-bl { + background-image: url(../images/default/box/corners.gif); +} + +.x-box-bc { + background-image: url(../images/default/box/tb.gif); +} + +.x-box-br { + background-image: url(../images/default/box/corners.gif); +} + +.x-box-blue .x-box-bl, .x-box-blue .x-box-br, .x-box-blue .x-box-tl, .x-box-blue .x-box-tr { + background-image: url(../images/default/box/corners-blue.gif); +} + +.x-box-blue .x-box-bc, .x-box-blue .x-box-mc, .x-box-blue .x-box-tc { + background-image: url(../images/default/box/tb-blue.gif); +} + +.x-box-blue .x-box-mc { + background-color: #c3daf9; +} + +.x-box-blue .x-box-mc h3 { + color: #17385b; +} + +.x-box-blue .x-box-ml { + background-image: url(../images/default/box/l-blue.gif); +} + +.x-box-blue .x-box-mr { + background-image: url(../images/default/box/r-blue.gif); +} +.x-combo-list { + border-color:#ccc; + background-color:#ddd; + font:normal 12px tahoma, arial, helvetica, sans-serif; +} + +.x-combo-list-inner { + background-color:#fff; +} + +.x-combo-list-hd { + font:bold 11px tahoma, arial, helvetica, sans-serif; + color:#333; + background-image: url(../images/default/layout/panel-title-light-bg.gif); + border-bottom-color:#BCBCBC; +} + +.x-resizable-pinned .x-combo-list-inner { + border-bottom-color:#BEBEBE; +} + +.x-combo-list-item { + border-color:#fff; +} + +.x-combo-list .x-combo-selected{ + border-color:#777 !important; + background-color:#f0f0f0; +} + +.x-combo-list .x-toolbar { + border-top-color:#BCBCBC; +} + +.x-combo-list-small { + font:normal 11px tahoma, arial, helvetica, sans-serif; +}.x-panel { + border-color: #d0d0d0; +} + +.x-panel-header { + color:#333; + font-weight:bold; + font-size: 11px; + font-family: tahoma,arial,verdana,sans-serif; + border-color:#d0d0d0; + background-image: url(../images/gray/panel/white-top-bottom.gif); +} + +.x-panel-body { + border-color:#d0d0d0; + background-color:#fff; +} + +.x-panel-bbar .x-toolbar, .x-panel-tbar .x-toolbar { + border-color:#d0d0d0; +} + +.x-panel-tbar-noheader .x-toolbar, .x-panel-mc .x-panel-tbar .x-toolbar { + border-top-color:#d0d0d0; +} + +.x-panel-body-noheader, .x-panel-mc .x-panel-body { + border-top-color:#d0d0d0; +} + +.x-panel-tl .x-panel-header { + color:#333; + font:bold 11px tahoma,arial,verdana,sans-serif; +} + +.x-panel-tc { + background-image: url(../images/gray/panel/top-bottom.gif); +} + +.x-panel-tl, .x-panel-tr, .x-panel-bl, .x-panel-br{ + background-image: url(../images/gray/panel/corners-sprite.gif); + border-bottom-color:#d0d0d0; +} + +.x-panel-bc { + background-image: url(../images/gray/panel/top-bottom.gif); +} + +.x-panel-mc { + font: normal 11px tahoma,arial,helvetica,sans-serif; + background-color:#f1f1f1; +} + +.x-panel-ml { + background-color: #fff; + background-image:url(../images/gray/panel/left-right.gif); +} + +.x-panel-mr { + background-image: url(../images/gray/panel/left-right.gif); +} + +.x-tool { + background-image:url(../images/gray/panel/tool-sprites.gif); +} + +.x-panel-ghost { + background-color:#f2f2f2; +} + +.x-panel-ghost ul { + border-color:#d0d0d0; +} + +.x-panel-dd-spacer { + border-color:#d0d0d0; +} + +.x-panel-fbar td,.x-panel-fbar span,.x-panel-fbar input,.x-panel-fbar div,.x-panel-fbar select,.x-panel-fbar label{ + font:normal 11px arial,tahoma, helvetica, sans-serif; +} +.x-window-proxy { + background-color:#fcfcfc; + border-color:#d0d0d0; +} + +.x-window-tl .x-window-header { + color:#555; + font:bold 11px tahoma,arial,verdana,sans-serif; +} + +.x-window-tc { + background-image: url(../images/gray/window/top-bottom.png); +} + +.x-window-tl { + background-image: url(../images/gray/window/left-corners.png); +} + +.x-window-tr { + background-image: url(../images/gray/window/right-corners.png); +} + +.x-window-bc { + background-image: url(../images/gray/window/top-bottom.png); +} + +.x-window-bl { + background-image: url(../images/gray/window/left-corners.png); +} + +.x-window-br { + background-image: url(../images/gray/window/right-corners.png); +} + +.x-window-mc { + border-color:#d0d0d0; + font: normal 11px tahoma,arial,helvetica,sans-serif; + background-color:#e8e8e8; +} + +.x-window-ml { + background-image: url(../images/gray/window/left-right.png); +} + +.x-window-mr { + background-image: url(../images/gray/window/left-right.png); +} + +.x-window-maximized .x-window-tc { + background-color:#fff; +} + +.x-window-bbar .x-toolbar { + border-top-color:#d0d0d0; +} + +.x-panel-ghost .x-window-tl { + border-bottom-color:#d0d0d0; +} + +.x-panel-collapsed .x-window-tl { + border-bottom-color:#d0d0d0; +} + +.x-dlg-mask{ + background-color:#ccc; +} + +.x-window-plain .x-window-mc { + background-color: #E8E8E8; + border-color: #D0D0D0 #EEEEEE #EEEEEE #D0D0D0; +} + +.x-window-plain .x-window-body { + border-color: #EEEEEE #D0D0D0 #D0D0D0 #EEEEEE; +} + +body.x-body-masked .x-window-plain .x-window-mc { + background-color: #E4E4E4; +} +.x-html-editor-wrap { + border-color:#BCBCBC; + background-color:#fff; +} +.x-html-editor-tb .x-btn-text { + background-image:url(../images/default/editor/tb-sprite.gif); +} +.x-panel-noborder .x-panel-header-noborder { + border-bottom-color:#d0d0d0; +} + +.x-panel-noborder .x-panel-tbar-noborder .x-toolbar { + border-bottom-color:#d0d0d0; +} + +.x-panel-noborder .x-panel-bbar-noborder .x-toolbar { + border-top-color:#d0d0d0; +} + +.x-tab-panel-bbar-noborder .x-toolbar { + border-top-color:#d0d0d0; +} + +.x-tab-panel-tbar-noborder .x-toolbar { + border-bottom-color:#d0d0d0; +} + +.x-border-layout-ct { + background-color:#f0f0f0; +} +.x-border-layout-ct { + background-color:#f0f0f0; +} + +.x-accordion-hd { + color:#222; + font-weight:normal; + background-image: url(../images/gray/panel/light-hd.gif); +} + +.x-layout-collapsed{ + background-color:#dfdfdf; + border-color:#d0d0d0; +} + +.x-layout-collapsed-over{ + background-color:#e7e7e7; +} + +.x-layout-split-west .x-layout-mini { + background-image:url(../images/default/layout/mini-left.gif); +} +.x-layout-split-east .x-layout-mini { + background-image:url(../images/default/layout/mini-right.gif); +} +.x-layout-split-north .x-layout-mini { + background-image:url(../images/default/layout/mini-top.gif); +} +.x-layout-split-south .x-layout-mini { + background-image:url(../images/default/layout/mini-bottom.gif); +} + +.x-layout-cmini-west .x-layout-mini { + background-image:url(../images/default/layout/mini-right.gif); +} + +.x-layout-cmini-east .x-layout-mini { + background-image:url(../images/default/layout/mini-left.gif); +} + +.x-layout-cmini-north .x-layout-mini { + background-image:url(../images/default/layout/mini-bottom.gif); +} + +.x-layout-cmini-south .x-layout-mini { + background-image:url(../images/default/layout/mini-top.gif); +} +.x-progress-wrap { + border-color:#8E8E8E; +} + +.x-progress-inner { + background-color:#E7E7E7; + background-image:url(../images/gray/qtip/bg.gif); +} + +.x-progress-bar { + background-color:#BCBCBC; + background-image:url(../images/gray/progress/progress-bg.gif); + border-top-color:#E2E2E2; + border-bottom-color:#A4A4A4; + border-right-color:#A4A4A4; +} + +.x-progress-text { + font-size:11px; + font-weight:bold; + color:#fff; +} + +.x-progress-text-back { + color:#5F5F5F; +} +.x-list-header{ + background-color:#f9f9f9; + background-image:url(../images/gray/grid/grid3-hrow2.gif); +} + +.x-list-header-inner div em { + border-left-color:#ddd; + font:normal 11px arial, tahoma, helvetica, sans-serif; +} + +.x-list-body dt em { + font:normal 11px arial, tahoma, helvetica, sans-serif; +} + +.x-list-over { + background-color:#eee; +} + +.x-list-selected { + background-color:#f0f0f0; +} + +.x-list-resizer { + border-left-color:#555; + border-right-color:#555; +} + +.x-list-header-inner em.sort-asc, .x-list-header-inner em.sort-desc { + background-image:url(../images/gray/grid/sort-hd.gif); + border-color: #d0d0d0; +} +.x-slider-horz, .x-slider-horz .x-slider-end, .x-slider-horz .x-slider-inner { + background-image:url(../images/default/slider/slider-bg.png); +} + +.x-slider-horz .x-slider-thumb { + background-image:url(../images/gray/slider/slider-thumb.png); +} + +.x-slider-vert, .x-slider-vert .x-slider-end, .x-slider-vert .x-slider-inner { + background-image:url(../images/default/slider/slider-v-bg.png); +} + +.x-slider-vert .x-slider-thumb { + background-image:url(../images/gray/slider/slider-v-thumb.png); +} +.x-window-dlg .ext-mb-text, +.x-window-dlg .x-window-header-text { + font-size:12px; +} + +.x-window-dlg .ext-mb-textarea { + font:normal 12px tahoma,arial,helvetica,sans-serif; +} + +.x-window-dlg .x-msg-box-wait { + background-image:url(../images/default/grid/loading.gif); +} + +.x-window-dlg .ext-mb-info { + background-image:url(../images/gray/window/icon-info.gif); +} + +.x-window-dlg .ext-mb-warning { + background-image:url(../images/gray/window/icon-warning.gif); +} + +.x-window-dlg .ext-mb-question { + background-image:url(../images/gray/window/icon-question.gif); +} + +.x-window-dlg .ext-mb-error { + background-image:url(../images/gray/window/icon-error.gif); +} diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/fonts/roboto.woff b/salt/idh/skins/http/opencanary/nasLogin/static/fonts/roboto.woff new file mode 100644 index 0000000000000000000000000000000000000000..1440b1be64111bc184959ad9669fc0497a80f827 GIT binary patch literal 22172 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 z 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 Ld?mfJJ0jw{hu@Y%G|&m@oupcMYE)<%>v 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ℜ!NOJ)HdW{2p97!rTvp^0Zb@ZfH!x_SMC z(7gNG0)3TQ>!D63<>?)ZsZK?8CR-wl=D#Vz+TF{VhD6GZmFJz-o%Ye{lcOfk_MFt| zC(m}X&oV%PmBUy>wADy6*v0y2?>5=U;i-^mKa;(Q-7Bi}MElbi_}EC)sqll1SSeMA z*-Dbqty;g$t3M$g#nBgnz)EDmZ8d>*cL_b9vm|@;;FwUnmH4y7`5yVwJ~K z!HSrsugD6`JbI&IjSgQyxf9zOinSx4!Xai4mO{TIzyHhyBjxn7k8{!VDyvR`aummz z6KAye16QUcP_E#+1q~j*cxd2$7=*lx`9~4QicZ0ScIX{-N>s2Lsk)_w_En_ZMm7A< zc)Pry^9blBQ&Mq1KLbgRi<+IvJ=uAij{135hMTW&t-dB)Ic%%|G|c|xYH>NWC21~qI&^0a6@e}F9#nXpL*+9*VM~?1>Uw0C?Fw4%o}q9}m=9b zG1GihU5}`*)%y}!7J)P?{pgUp>h>kvd`DW*=dAwX#%15O(_Z?);6sQrcsw2OF_zwcGfJ?K|{4ChM;D* zz(nw)P};!?LKasIxQtlA5|-tNZ0O}n#Ca!l=h2i%79;2{<-T0jvx4Uaa#_sCnR?XP zp`PS26{@N37-z}-K47wGJLTQmUcgmAJIP+JYc0tW#^b*tPBZnDG}Xj=EzYBjKhJ6y zWksdyA0Bwjbbfdg_3FR{@_y7nV5fCoYr(b-jG%fVgBvc2J;tKi0yRqfoZ`yT4SK#D zsqpbdt;qU{NGVF~A9<(q-HjRanUUMH8#cuR3Qy*e%elGsR|>9~S{7${rfU6M|Lwps z+Aedm0F-23P_@id;-V==AZ}~u1=aqWY5|^cPCol|TdxkTi}{@B*en^&X@AuQOubxl z)h=rP8tnH|7m{$oWaNX(*3Cp7Y7^j22+4>7^NWECptIse@NPnQBd;jb3OB?izagrg+@fmIBpo`k+aTA@lp)WrNj`_g z!p5oydQ#!4j%dO=JqrZ`wZ*yqNT{wXSg1OP=M_MR`Yvv*Ab3HASu*@n zEMGfEa*`~!4|k`WcdDt5t6wRu|%m_!J7d;WsLKXS7j;|mABIh4)Xfk^AKVWC) z92Ywvv-~x3>^mc>Gqvtu-YOVjQ2eqsz4QBgCMx$ScV)HXt0-5%1#Kmm?4nDd41_Aq>drMY&!RYmkU;qO1XftNjS*=4l-h6R zh-jUWB;pp*?j}z!zpq&N`t(vAfrRd(d+d+q8_k0qKgNt@Ae7EN58s0(Ky-)O_tKAN zZ9(7b>87_!(j8=7lby1#D>a&clNvju(^iHQh?u_>=HmBV33ePlsoPq-0aWSExP%vp z#~?_y6ZL1of|fl-=8H(pIoQ&n>`O$c=5l^NYI*`$WHcRIx<;BwF3`Tt8P83&pR~C! zU~OCBg5%B_reyW&20~Bt>nm%AAznx7;;p@GUkOxlLCa*B+!284rD;?gT@K~R&7Rr! zB<)VUY@-Bf&O~H{kb3hSBg`!2@QC)DBOm1U?Dfsa3^3hVNN8`UK!|hpYlj);_VkumJW*-GEx3M+7;1rZ?j*QYdGWEr zGQ--eMvw|CF{5O?1v~1OZ7ckr$kV@*!I9DeE1t#F9}X2A^$-;9BAKT(8kw~^fyowe z;`yo;aRe__o+JDWb11pFDpK&mt6rpiq?2KgMYLH*T!FOGS`B0qnP;hDzcq@%ITf_U zPbbKXgx2{JdFTyv#h-X7P{VI%MnL-BHJXkck;xcD5mdG4I`ZKj3+HB@3i zRB-44$z){v3}!{5{d-ubh{Hpo_zudF5ZhL)= zHyWzY+={+-+Y_x?ASVl{tPREpAq*Fc9>gmiWbOW??47N}tlV&KeeHUk=%l1YIEJc$ zVErDPMQiut&YC)-&l!Ztz+oW3+D>)v;;moTl>bk4-8e9H)-p*`bL-NzhxY+L*Sp0J z+|Z`*A+=s#zdnv=4~x;9=!tCRIKgR}PE1$IEwZQ?TrRk(QmNQ`00+Nt8@^eU1NOjg zI1^7BnG~!bPM+HdbZ=(gWR`{j?ul0=c*}z)zvy|&>k2#A+622kw_=E}HL7j})fk&` zny47+VKsJz?K3{c%}ws8j|sx8JNf+jv31k)NS|=rz~reyxc6^LLGW`NPh#pnfWH~q zF>370k;brpMGIK8U0Ij^LCdD?#z3xf?YYRWp{HX;pDdlvYaSI7hxjO6`3-ROL(B4% zi-)f!jTpO6Kx^zI-&&myWQUc9z)ZFbjrii5SAs_Dc=#~Njb(JF5BwP9&sqD3Fj4w! zM;uJ=$W_IJVO``SUHF;nn8!&QZkJo4_@bP_UJEhZnWPoSsn77}#39+?LZZ862!A!r z-s}`#{~WG0x67K-I4e`5G4-cozl~8B1oM}k*Uk8H zaQXd1$`DVZ$DB#bZb`v@QS7@sIVsUj?RHh%#V^o;w(%O(%B9Ye!v%bdrCZo`Rj4C& zTS{;2HxShR4&Jnew;1k<{4RPnG$Ay5^~Y;rJodn}ecVi-q&fL&Cayy6pvy)3j$Iz+ zosF@YQP`m|qmT13qLsErm(u;@gdID(kki;D&NE9Cfp9fQs83lPgO7e!Jrg64y`)vgrls$hoV@{r z4VcSwU5L&z%ZGclwonCLHF&^`{d@4XM7PL0h@-jxdm|FHbu15L!`-sr45DLz)v62i zWAv`y;@Q!nwQ{+8W~y9@_BKtF6Nm!0>NL*gw$xw5y4+FJJ)2khHd02SZr_tSA7zUT zV7-i`0c!N9GC1g#I$Bys^z(@{o20!!SX|nLBps};ou&oVzD>E{DW0{K{BXasR;8!N zNuO2OJ^OdEq$Px~4UwHI5#>o#rG*X3#2nah{Ecvs9WM;!kWT395b@80#q-vYPil@c z>$b{~?$|HjCuXfM0qp)ht1*YHDjH3DgubEN_y`;<96cKo`pm-y@B!DEqdF0p zP2tx6k5d4vXitZc zD<4c~A6sl+js7zs&N(_)P%xW#&p$N}w*VIU2pj~(WXA#Qa02F~QshImmL21sec254 zDHg%y3+dR?j%YF(UV}6VdW0w;qs$bC#VM=;_HhFBLcXJe94xI_mK$7ighhD=4OQLM+y_`Lb~%nkab0*c~daM<%rC&WYB)lN|$s;K&5Iqfl;-!e$$FAh61v zujW+|B6!#aP}s8%H-5shQdW(Ll+bqyImQO>a()BenVP69Qz0l`0R5-+M>R_V|MHa3 zOaYnwBIdI)zpV?&X9EQ)KV@6%;S+F1nepKPrcsNq_#soZs?dS;J@S4lz;deoduVCr z>@!W_-+Os^;A>Ytej~;&20pfkeu97S=xJ~NkInCi{{dV2KUGVr^Ocr=C$U)_@6Z4C zm4@#`e?Lc{cW#Y^TPDx^>H&keQU~2EpCqvh0(v>OJeXtGIxSW{4mXKrFpveT_0gbN zAz&`?Lm^d5($dvO(NeG?-YV+5jS(s1wDuljxL?Nu0vTg`3E5>C2oS)D%@e+eD zG-dmsYdS>73qk|WA+p2Ak{imPfhBWpv2Zm~U)2T)jCNQRdJPFr#Q~$tt@CEtSD6^R zyU|mgBSZ8sq-?2dT0C4-zSZqt-0iGEf%}F^0VsTK)Iw^ZB#tT=h?J#<$c7>r)JZmV z24$U(cPcjbL?{*zk#GHOr=mz`qc0=Ax8j?#6N$C^&k4e(8Yg5L_xYEtsPg3|WZ^zk zJaC0MU`%z;70B6U_XfFWDnZ*1ST9cDuR_Z;3d?g&;o?@{-|UX!-XJ{$$0}VlN@D1I zU<&tSwJ0SbnQXfw;{*k~=i>Flu(t);Xmr&^OD>b1ok&)BoMr)uZ|1nSat+eo3%ZDw zX-P}|8wkxR+A1>LDi?xTs<3tWrzIPx@h0^Nj_k@@(Un~FDtK1&RFtVEVy;=N`vZE~ zRv3r*=H!VYSCxFFw2RBY8v^!Wb3o??(mk!OwHuo*SZ)|(2~{+>8ok&NHaXeZ)39K6+)U09Vg0pRj+%w*_~u)GjCL# z58R1?x(^2DF78(*S8{B4q`Cl8q7P|`_b8kL3=CUGpAvFBMNFJx4Nrh;4rRQz_(|)_ z3?~o7DX=@>Ao9FNHdMx0g1!d%o1I`gn|#8BRzx1dufy=@_u3i=d*+Mhx@jd;158=J zdD6v|r`ww3xrLRLCnuyU7Dko|7cT0;FYkBEN5z;VO8|vd!GnToH(rhjpxf@sz~`c^ z1+{o7D_a{ao=N@Pw96=_+oizSKNe3hS6yv?z;!fg;-Dtg8j+z7H#e`{-meO_B2QQ* zy(;hdVc9>%{y4I=TIkIrIrO4MGi`+u6Ef>zLb1Cymqb0E58F*VITk(v6Z zZ;{=@Wv7!|(>nSfq<1Xeddjl>gB4Njk-iwD!ALMrQXq})xEu197pEkVnaEDR##3tZw0Nx2#^sKJ+i-`j*s=G{JS-Scd%`<_iBrLqt1HU-||+!Ug4=DTU{= zy`W>itdAHx*BWxkczP3>sxi6kUS#4A?sAwzu*|8J*#xl89q?$ z@i#9C#QgTV!9Uv#MdKaUAU2O#(UqJ(bOc*ujKq8}>rIzPSAq50R%p2{$Hr>ltp9@R zTQr^1Fo$h7HaFbAx&-f7RaVN7N@Dfagb6I1uBKH+!SUEdNZ+1?{2O_z?y^JI@)fgI zr8Sy3a+{Zg?yEepQEf6vPaS5{+Ro?PHiGN#pexQDQzz)nE1iK6R0>0D)ZwQ80RbmQ zqBG#1KIh70eRYc4ydZJy+T&TZ<6Q0Q!EvDH#pf#edLr{`Kf&N_baDFuVrc)}^k+uf zlr85Gi>wJ~xX&?#rm*IYcQ2TSdKfbd*>JTTX!I?U9Zc^y`N^Gu=3&ViBgsy6(lIeh zo_P1JbR_-iJ9*V)wkCV16;;Y*rT*M%Ukx_%n;t_jL_=&B?QPtv$n*{AO{EHS#KeQDyEUN%GWNWg&I zP47fVbX*K%EH^vt4$tI`0VQ_@`5z#tew}jTFv0C6kA#_>9_|Y{WV(dZ7Ia%2J%D~M8a`ai?*%G9W4^k7Y%6S$Tfp#)7Hg|`a27YcZz9=G`pHRLQpt5g; zA8NXPEBG7Ci*b)sUpqE~oj@M4(OPq-SGfm5RlFyv=W&g}V>wKGc7XHRfv8$H2@pPe z?JkyWf1ExFNl&V;LuKK((O`;d1c` zs%m8!5SMa2M%D_lOU>ZAsD#A^%+$d`D!?ZJ6TVcN*ZCI9Q9h<*Lt7d38hh}Pq{%11 z*ypa4zHKS_R5~bUv>4G;Em6ng*A>BS_OAzb%uRpg|IzpbdWX#nGtiL<4tkNVOkFGv zU8}$>qHG|EtqR6it|zVwazAugALo(4>D!RBpv!F9LI?`=h>6wCcttw?knwu;C?xcRQEE=T>4@-;i6PW9Pa$ZarfRh)U_aAB zr+`K6fo7ba!7M>e)EK9DwXPyx5l`lPC0r7k5ADIhO`OP&(E_Xf9BM1|SxZ<1&{pL* zUM~lyLW0lkBaOL`Tir$sbdS!Co$nHNBG-D# zT(bLQA(6I7h0uQaNJd?a6Dg%VsB&_@7!H1~<4kK?5nyCiCD#+aL0fl&t{{)5rl%AM zqDvSS(O(bp&I;Pz06~dlpRZDfpjV0doO-PWNf%Fv5~qv62gnhW$PONC5k6;MCI$vE z_|-V(d8?yZjacTv2-po7u@cCw3%M^+h|wdi_f9H|jQ!Y*xO`-2_gBg7h$!EB)o`xu zm1`%YlrENj{tp0;YDww`e_uQFFN`alv$A@VaBOn=Kj8U)z*E-yG}S@Cq6pnmAx9+CRL{GS?mnaHHe3g82K^kE4Arp(7eJ znIPgrq_MX?q`U)Co?Gnw2ih|L@!*7=J=0ra6dtb#^)ktAkUIv|jhD=c6a>jzw~}}S zyMiDyDM6z|j?0Z-*AhEz`i9j`n11T}XSj1J)%m`SF7+fmq523gsZrScYE;m?YfhW8f zQn`V^x4O?o-Fi78KFc#$&1(bV6@SWRRGW7(6^Xx~?V(I;kg08%s}^)pQ&^{^!So5a zWlbJI<2Ft;qqK~5MM;4LIZZ_B!#jGGxsQ_F_*w-M{NzU(bqw_hx0bBot9;A{9;+Sy zcls=fvSEO9OD+Z?+kEDe(@2SeF%H@D*-GUa!aKYqO{Zy?93wJ=ay_@EeT9jbOEB7| z843|Lb~+92N-&Ba*Eebc{|cZn$K==K5{c~x7GJq?wVA?ZIVh<9gbrc?D*dhi8Cl(k zC@hzVzd#DSQ|XA-MLUTROeEhjm0X#Q{&aR4{G{vuQt=Kiick-|{QJX)CS)Jpvu zH6RwLZs9+R`9^0xoRGg-5+#oUX(#(91 z2aOjriGIa5qxD@Uxkf$$&(@26l5EG)13)!JOfbbuP6nxC=-N*0(d5bM2G3J zZ{-_H8nxkvO}1d4gU?1xn$ol};!3mM#geS)^?-kPqZaEb^f{yEuBc_n1p)dki0`*Q z*|Mdd_x}Fs=>P9MCOs&N+Os^r9+fgl5a@_p4;R-!fLcSd5G5A`32O%!9+n2`6CgE; zVj}kj_se00-D&pJt2}(UM7qXvU{jGt>p>4~Yx~j{nV#-Zs+qkkGADDCrEm0O`)kQ)1UTvjwic@zsi7)yQdMnChLH&3PWbm&NvL(tSx$6`9$nhIT zPX+sts1qW%<$!El*-P5$pg>6dvu2d9ZD1G=Ggf@y^!Cz$%c-Q%^nBd(`FpdV?gHI# zW%h&{h)(z{Ic2-dofhfDHILuZm5f}irC%Y;nHmn$=yxY1O_i9-|Bs?`k7l}m;P`i& zO`BUW*HqFro6Cr~m6&Tb#+ZcA<#7hRDzpl2j_Wl%$?` z;z8y4eSiP%I6KGr9=@N?`|^5^xN8}`##Sa#bH}czcg}3L-ujiTpW*O`FVQVbZ2;9~ z$(cju4z-}o*Ff~0k$mUkD^&e)E3B&DeoT{$ZMO0uVd?!{!Fe+O0pH;Hy_v&iQ84}R zVOdZ6(UetGo|RjsqkJUPhoU`K)?q_W=}7M3$-Hf6yT9%>hn=Z0>htupKW7}3GAh88 z_qHz{zqY2Voh|W98~a|9{fK$CN#u{`+boD%Qz731SM1r>%)&Tndr96evL0M^uMz%| z)2R>*{nEXzruB3@$2QjtmKLnk+k#r~^nxE&o0z`YHBia(KAdgXdT=`ZIM+Eb=ESnM zmi)~Lg|sVR{!`>KDO@W31666^UW3Cp=B8oaC@}lyyu!@dzq0OM1=SRk|JJ1vD`Dr} z(C5k~qS2LBqrs)CJxaGz4&vpg!51zqkhGjjsuzR+AJM_mHz!l(retjAmL8ZqH|_f% z$9p+4&-gLhUa+1}{d_{kJipP!Zz`IHyt;riwX1x!pp!Kd;tQ)6OVK_~?I3x*CdP_d znoB|(Ac;`zmiCgs_=LytHze=MQ~ye0zwq5Msu+JJ`DD!pCgI}%?%!mZ*Fmi# zFsIOv;{m-JEg?|V2wfq#w5P+7Th4 z&&g(N7yHM3$hPG3!DLa$o=od{*QM|1Nkc|#znr2&qDkTH>4om&8eZ<4eR<5EG@T?M zp%%){`Sr(MVY~9N#5~&B&uaQ}B{0I9Oo`SNWpPZ%VIA1T3~B$A583_FL-AT_jipCx zj8!%`?qtS@mQ@C-3M3Ok1K*6`bzaW%1-S1|c}eh6Zroeg?ZM*_@HFAg5tDXsDo(*9Se}oqa*9bXYGUO#Y^e zeB=$~l}-P{+h%3`-$-gzUOaLI;_r!{X^lwy2OLc``(+6^nuseqE!Hn$KR{mQ*Yh2Z z`7soz?X^jYaoA;f{&7CxKY(qznRR96XsLP9HY?u8smHR)FH7#*jr{@UH!tRMtG`Zt zT92K}`@m&&NNX5ra{GH;hho~22N7PLz~7s*e9e~%z@Q%Y&N+1fj7P5VFie zyRGnBcSlRS<1Qekw&+&d=L7cI=tg(}S{ak3q4+AmfK}zP6+04&3I{n2%hIS&YCHm0 z?wl<(Z{eW?rv{j~*&n##N6nLhtHNz{g>lKNRVp3xwN}@86qAJn?vt=m%A~u{)=99aZH3%I zz&KJNQXVP>K!L72Ba_C)sMNt5 zKx~!xZnC;ieYaoQZ9MfbH;)xKi%Bim?Tpdx_0p=+2ECRJv+p&OF2?r*$WL zmjHxUIYnB9>c`pM?$?gpbbeM2ISvxMYQH!fd!K%ESSp=D|K@-p=}FMdP1sy%Dwk~TDWATEmVJ zEJ}YvNwuLsLXt-!r8VY+z|yKlo>>`M^08=UD}(q0l~5CS1yMgoss(z(riN@gLPIWG zZhtJ0RC=rB>{EY3-1K_|HrG2;2QSPcP41UW6hINO5~6KN#NhO*DDEV2d*mBM`@xK1 zg(T-^eFaO^(tf^P@SB>W5xeGcgXVy*%cAZ}^5NT=Ab}7~KM=Q~a@}Zfw^asEpg$+W zCmyZcS0GXwD~vqba*Lj@)V>(JDpG!`=Mc1g<+EI1)-;Xm-LK|0&LPHS5A9)LH$mFh zoP9SxCEooD6HJxpoqvT_LDE$^X=VcpC>c7vx8iP6YEc2gqLPH2Nu%7HH=075J(9jB zz}?dPNCd9sKRQF1JQ$tw6JYEQ7B_d3WhiU^vdtkD!z%Mdp2?jW?3bY2{{Y=|xBRn) z8^D97J;9mDQISb>k=~lFd}Qd6Dv|tK9DiJ6Y}3-3&?!*&p^2kXZv^mWu8U}shT&fR zi~w82Ui2f)nRV}T_CZw!65qPjHLo!W!>Zt~8llB9l|-qlUFQ9AO6B6|ZTZZwAnA=K zk!n|2|Drx-2_>5aE$vWzC#vNzRYXS_def#qExYOF0jpNRQ^wombBq_o;!BPhW~{ z#rMo)^@a>ELH|tp{7%<%g0EiAF@CU0WHfn;q^^4`%jkvPT5h06qY_OyzTpSCZo|); zi164OQ%B+;JcM-(fGE_nli;y-?(qe}S9ywD*44RY`p-Hsz5g zB7eIpzIVlLpay(phE<{||`GI%E!K=xa_U2Fq8Y0;<{J#W${y zIg{gxZ-E(7vq6b)CU)>G6N!CGHbOuQ!ky&DB9(%q0qlrL$KHxIAyNlk%r0vuyO7-B zs}Uy?M|4kZ5h^}?{Z4^FXyau!*CEN33F)M(cGIyEV^$&Z(Gw%*6@&M|=(_il9b$xJMvJrgAN+UGCJ{oZ0}J8XMD$SAu5Jy9#|vK|;kT;^4`ys*iSn zPr(G9yc0qol<<2%rQ%I9)YPMT16HhPAhpje_F9nE1F)Jbz9($SxFyH)2a1onj}W7z zb^^C5%Zi=s4T76XIK~CCdNYCgW|#<>``V?8=nljj`vh;;edh*hoPyjgt^A-bCHnL8 zwWSF7i1pj7l?w;Y7fpB0Y(D-Pz3Ka?6uL%$W>yi~XO_-qZR!u+f<&oXS1@a92YLFR z*3F|VARyuTM^{Uybd}AA(yk`4vF{eSjfE<`^nDh5sky(7;~3aCa^DjuwTka`pf)1HvxA0-RHj!m^=-E9 zM4;H^nhj{AcC7Y{UjK1`IS@b{(wLCH$}J=ShcCN}L75~vVNeRDi(+~D!?$bf$ky#& z1PTpn;rTehP9*HE6G_iI2*c9uH%822a5)yT6;fM-bZ<-02#G8$J359A3gv6-z&VxH z%ES^AWS(;+0+z64HB7U6-)~=?w-GY+q!?Q0Q~j|1W&ZqNDl*!!VTI^N&D|RyRr6v4 z*nNoV-LK4XaNCD)g&lRfSpjiL&ju^weqlQR+ngw=f2G^usm@^rQB*EB5vT1Azr5q= zPA^|h?d9Mu8#M^ehvx=IV2XY?9@|#Hw!}K1ZVMkBP!z(A&Fjsfih)Q@gLVU@Tz%4@k`HbK>31xWC% znvkDYJdo1KQKTAP3L4RdCo0MyJhiDM@F!`ctA3P)S*Ne?N_vaMhqs?f^;crLpJ$tO zo-EaRp66vKsu!@vVz&$fuk96qOt>oB(-scoZ0(mXYZ~~eeHs}}zuy>z(WbKIS!7jh zx5h-6J+TQm(O*$mkZ8h#@L-7nM~-LBep>(Mq>tbA4-=oiLQtrVWs4;hc(L(5s62_v z5RxeQRH6#>{3(b{sf<|1unFk_HrJb&K3oZXfmpjdJlb@tL`&~|mv8Wb)G!>sU*Y$m zh!);?AK^^4@tC~xk%1t7D3Y99Wk@?TB|p82jGOdH_?7Jbt1Qfc%DTCGHjISJmT{xk zfBa<_BQPchI^;>)rcDrD-hmR-xl;)(HO!S}R1vV49DoKgRR9Bb5+~m#mFQ>AXBSgH(=}c*BkRonteTMC+bVG(Lh~d$s8F za3Wvz@i43=o~&fz%Ws@6nL^X6w!SdlRq!B^bG5XrUS%;jrp@@vFpN;Vy<}Z(V1iIw zh=>lpCsun7=9*?p_Fc?NGu}2_GNHAT8e;$GlsI+(>b*kKXj>nQsn^M2?+dlIn77*T z@=oynABeenZhjkC$*qDvsP$4qqV<&0tv<0SR_?|sJZg|~iC69ti&$vvR-d?oh2nu8 z3`)g~KQNP5Or_81=g6d3v8lSdtdV>(bc0kH?}La%*>jY^j5%3qLM?MZjsGK<9#@v= zEcMcEcbvj4i=xt?upzA#VETLKEwL^2y-M?sO;DDVvyut_)p#hIa0}T>>?kU9U?oh* zMHbr1GM6jLU>;qpGhF`;zC~fhqD*(8WN7hii5FCrAHIqEmF9XTh%?#f$ID@DvdmE^ z6U?dC>&>rQGa3+7M}fY??AdjlBgW`AYS*WNTj|yhh%9&VmnoQbu5}+2(f25_?u!;3 z#S7d97j`XQi%{=ZtC(4pbRLaaH#lFp0#E1WiqBC0RQ+I9c>>`9v!%QKRFt(khk49O zKWRCuyluPIONFqeW}t{h(Cd-)J>6sxH6eXS^~8>6=B~eaPhbTsr2JINUkC3oW#6GZ zleeE**{O{~hxG7f@3MXJqcpI!uJaO=cPNuSA{}?M*<*ox-ro|V*zYQ_BB@@)swakZ zQO&^8xRK!UDOYNHuZH4 zV&(ga8Nesus{5^$bvf@sSd@nzytj~ck8oE&=Kb8!Pb!h=&;iEEPyPo)pAJ-%laiK_ zZDKv*CWT?|0&hjcqW**p-XRU&R?1Xt_Su>|u}-!uYwvKv^WoMQ@2CvECupF3gcGcD zRdw~kcv!$s-HAbJFs0FQ;Dp^{e&cMefzliy#9h=>epbSTI#%0tZPnyv=09n)Ak5*W zig2xd?WBR-{m8Ei+NZ^=IHAB;YQAT!ZQ`7<8NBGpvD`=0!!&bxOPjDZ}|IUu}Zvem)B0jI&D{584?nBv3{?{lp;K|fI}*THa0Z)_?alx5YsUcwXDPS z2ex;1Pi<$o*~NTE4jA~lv$-e#HI`u`mKR)((KeoqSdD;7heAA-W)G=qFQ8hFf>UEy zLWc@yYVdKa@O)Vd$>qHpP=6#??5bw?rR(1DR8;ux+0pQT*VJIh@MXmwAMbfRq&9E^ zJZBFt!8&ztFN<0|XfdpSzlN%*C;6sh&$P~BOB7O|zs~!Ndo20c@W2R|ow%-j_~0%f zTT;JV@~!nnhrMVa?t703r@z$^-8|H~A@@pS9`)%YVS9X-F>BvMNWUXiYv!jNK%)&Yvm$dOoVAlNNoe)MxRhqrAQMSs1Y`5N3?el!diE;@Ex|t|C@0R-NZ)xesXVHaI$quD^T- zpJIQ&5Gk{UFOXK8<9Jfsnp8vTHDFc^QPwWVS@cpqeh2MX&noOHx+MJ>d+!RYMF!hc zQ)z&!p7;Ecn->jhS7#SE3sAjoxFbS>2Lr0Xg{tZANzqUvNoNXlP?Nb4dDQXD{9^)r zi2{)c(!gW)Ha3D3v|Z~0b+SAuvm>(`p0kLEKoi_1s|?+S(Zkij!IS8qS8)a@uEQv| zpnkAfChwQD23#W*)oH0;N*sS~SDEf$iT~2K{4`$=cHO&>P@_I~y$%5{m$Y9%DoIDz zVTG!Ww{g4qeZaAE@{+%}0`+>ZBjf6pc|_xc6SQzGMY?ak19pZm8w;XqZ26ueF(NFJ zeWWq512AFPJ3eGPnfQtC=7Jx%Myr9=VArwfOEPq+&~))gD)_uARXmyo||(}v0%$^AIC}A97wK* zp!C4lPt+{SOP6DR>9Bq0Cvf1qncWQgeYUJ_rC}tyUyA9=9O8EiQR&)gD|QW3x(WFQ zM1lo%N6Su9c>^kWuz(Q0qNBnOS7bmQybU$8#}rB9m6m7npYXrBk==sF0;PF>-2U=mdAkqPT@&b4t-#40 zAf_MV#&+pH)hsv%tfibt^<_s*Bf0rUKrbnMl;~BeZ#f#RFnYe(tQ>v@8ESq*bA=i)Zv{1JO&+O?;^^#Jp#=zbpQ=> z;^>dxSL$!|y0}`cUa%kJu8o_0?pH6>5_h`lCI*g2+7psik z4kMSpq+=i8ZUK&?b%pf#u_O^;YJ8~oUuCErlvsk9r}x%0NsQ@;FOFTh$)L_?gyC8y z<|M{)yTP6Nsk!+(%4m=>9F6?lrY5G`L@%A);NWea$`~d!`QOXNoY<~ilH~lfrusC} z0LsHa!@hgTE+xJ%5PGs^PcCJJDiu8dm2PjyJB>a6M{#QlSmSi>SQ3Y|!xrv3ZkwKG zQ67ERmKQ`=%4k>&arC5M1-K3db3D%dx_j*bDUamL0e+az1h}h+J^;xn@ zpkN4QO4+OPD#UN^Rrh9zO1D^>R>JYu&tSHk^kjDh+3hfz2J>c6tCI+?iePM-Nt8G~ z^r!DW&Gx^&KiLI0+MBNg>-d8{a!oVFkSCbQ6OC295$Oo#WW-iacTx|8Ja%J!U6@!n zJZ9b#3vYRs@;rdiT+vE@XP`~rc5&yYL}qhqj2|^7WS7n=rLtxV?VtwfSW3&xCSot( zRA;^aRQBwfw2kXqCBAOeHfjhn-pz27B<7sXXFHt>`kb+htb|V!vGd#*>OM59NR>Yn zH&}^Hz-ah4?h1Np4dHN)&Q17@b52Q$A9^6Z zs!CK&Bbzx^PX!oeF!eba2omwCKLS?b{^7+bf zQCR&S+w_et%>s9@=*lLNo^P%;%e!c+UhD#f&6Z5zH5vB6FI{=+-8@~mT72&`vcsU7 zP4Wy*zVPy@L{Y5gB-p9fqC&Q)x=G`ZPHa6cC$4^W_VSnz+oWsui(<5kitK&Ho54Tj zbFZueTGeG~y{ET$+mwf*V=~)E>{{p5t8wo%$ev%n@4LgkVWYLi*?+Ao;&FOz<7(s+ z@Ciw>Mx_+#H4kjeCVafa7;%abs9UJ!n^7ip`eP#d6=KUGc;PHOX>}*_2kQ7dY13fB zQm@R{gDlWiuTM>QQP|(&h06sWb?`T8vjij-?oScy@W3I%$bb*Av=||6Kh-<&veA=U zZ`xFQQsH0W>tTPyW`ZOynJK*&sxfBN$wYYgX@&zz3%m7mi>$AMjr<@d`W|~UZ2{4@ zyNPjcch8PwEI4>!>q9eAO+X7UJKi}XpYc+c7vqDVlm^oO_Ct)f%c&n^?t%^eMUNB2 z9f73_!zw&;Giw01Z4KdSTUdLbo^16VClr224!4Y;nRxF#fZSY%9sSv3L>VTmwNs`6 z`S!qv!$a}|=bl54HW zkJQgC3ebKtvLr>YbB^!bC{o($+z{i=Z~z|Xn9GjDH;d2JZRHC9^CQ zd5*xcYX@(OkK_}s(HoAUFrdiu&PirkzwLgGYPCaZw@*;RjEW1B#aa3$fNQOM;Yzdwc=MXOrponh^ z3P#RkQ-s0QxPlIthkP)08^GXoNRy-^(B$$TEb3hjbpx!W%A68Cw5NE$DrgplHYFSj zgzaU(&6Bh{=DtxKY=4)JqWv8R?Na@JE|X-iI6|S7>NR*1;DxB7 zNcxOAjA-`}I^Jq*0N=1biJ7TDSe_IWEOusb>p99)&-8s*Ye(ry>Pzk=*BaI2Cc48u z&^Gx&`38R;?c#JF*PecqDV-lgnkDE;t)efvJwhxZ7oX9^1>Sob zY70C{JR6M21fQg0*yYp?X-E8Iv;& zmsceNqs*@a=rMw)OYvJA1cZ)kbyl;aY|$;buuuvKNe*k95y~B-)W!N{P{8E?StTGo;$L-&r{T%H84L@nP^^5KH4l4yTpX>Z2W0;36;rLKY&Wsu5nT}w_% z2{I5}oK_wkf`)lbiL#lzh%ZEigf{oTYHZw5=2&_0o;pg zYOH~q$!}Igl_rhwF(bVWsp#3#xpTmkqqUAt@Vd1CE_a#O`b+AB+&M*A@HyV|8+Q&0 zkNs3P8-x%@uXZwC5LuXR&6k(rjv$;2yIOqd~*E7*E3zlLQ*`$rK75*RaQ&FElAda45 z%O<3U)q2ZC1`#%3P8*A?sO_i??;5&@?`7AHoB3May9p}9l|`PgZduUY2Qzt(3h*-b z$aaeV+M;|>Sd(TnkmBhj<%i9KerD;aEZJWJGg|KQ%OGkYLxd%KY>XlW)^w07z8w<{ zJ%&b;Cq?5u*G%_|q-GW~J6=19F8&66JXpi6Bw97s<>S2?RhPMlE$=qP;67dJ1W5B!JNTK29q0Xv#e1M_P0K zor$)&ct-W0NR=-0!|^Y#|A40gh2JF+yaXe;J$)bkcwyZ7eJP9w5m3gFJUcp|xb0=( zb%sc-u)q<)So!7cb^zT!+ogx|~v{kba08-05Wo==DZ1 zA2$hH)St_ts{{pWC{5plH#Vs@Z-Qe}lIuxmrCCM${XrI#b zKN_sYd^73O$_c~DS~N^*Ff=TLuRygr4$L|1BI!p#3>T_}#+eM$o{#ITuj#!iLlEms>E!qcxJLn51YjQ3(=s>-k1DL*7^X^Nh^kiIO?OP)X{| zi8_=oP=gLyW({MGr4mhb{Q;7OQu+`08xc{PfQTB#kt(ER>{S*?UwHEpZP@Z*ptB<1 z{a%^rFmhGeJgA+=gnw~kcn2$yKohsID%2Zz7?qfYEwG)y1oen|sH&%FuE`f`$)G{n zgJiISb8wQM&rK6aGi_B)AhM+h1H&eu&-?BpWpRK2P1Jdhi3p~`8^adw`jDr*iJ5%e zJPY97aCvt{iGe;+x2BAZoHYo??bpC~DRrwrcfH6wy@sH%UKw;-tV7rU zUW)L0p5#%By(Ff5^nhTlyAD=f6wI#FCQRiD@I_swf>ubnsRUk*RBZ5lIr&@d<(<(w zJTJor1Y5On#9njjIAq@<6%xE;!nyO?6>q>rdpzHUnXoyAIl1 zWqWH4m%3MHOHaM5U_~oPBj4a9N+)ZLPbf_1d*m*E7BVTKfH~Xz!UxOK@VJASDxS4nmC1JMQ%M$LC zbOji4vK%8CBj{9h5%eOY8WL3P>P0GjBij9wtAL8)7B1Y+{t~W2hI~N!_wPSuXJa;f z9|y*^ES=27C9MB*e%;cKx;2^OLhZO7&4}oLu-_^0l60YQBlERCG6_6pKoda}%ii~Z zdwW;KD4RE8=cN`!pEL-YeWk2HFUd?2*Q9D2BCkk?G3h~fIZb@83#9xz`X@kDKCS8= zOx$`|`yT_m3mkrY<971cHr`}w-qQ$7ly4vOKtNmL;fwI``^$i?si4$FE->2@4Pm? zuYjSor?>7WEY2}7XmX?gq-@+(Rg~?4%$r{dan=ks;)ym9{O~2_{YHjv(6fgcM|l+P z95>9EXR$*h{WxJ%>6e?O>0+9Xgte`rcAqWB^14XCBPEubrA&RjVPY`yU5+$p8E(F0XL zd3qjti8f+N)gv4)sW(iqJC5VJs7SQfE>5mUaHIM(UxLQk_O|`nhkxpeYe0(NKru5d z=G@K&(T!K{R10E|;s;{LL~w_pCy4LuWAAy$oPt-w*KHf?iQ88wP~CJ>vLW&)glOOrpj_se=PqY~RX%adQ%IZJ4U#KV^Mz}%b)40CI;Htla z_^WJ##+~n?oo?;&xyG^a%zULeJ$=(846pD6k={-zVHr*?-QZq~#y#@OB8^M&KDb4m zWvV{wV4uhzCX~%SI)X^JuNQjGLgTv-DURR5tllGb;;RUirVgv*WxnbE6)%+39$Z`3 zTKrNZFp3(?(n(&N*PNHBS#1t}Jh-adi!YX_Zc&KRIrccixwr=P=sf43cBW?RtJ6;0 zs}TuJsNmZXVbA9oOWbgN0ALr=yPV!-*BHGl@rBT+M;ENTQDul!85g$}n|xvS6y5|+ zyor}h=zOwnQ709y4+V_1CkDcum%EdlDh0aj%01_82z^u1PxjxBI(C0-h+cNn2cCPM zbTp9RAtJm;h4VEh@8;EM{e*%?E-DANhgS1O4pPZ`^K-(j?Vf8VM|lX8uaYf}4cy2G zg)K8S9wD9UcCTE~;BGomX>UpSf!})bYgCIld}Pr)LU|(i&IoQAeL-7P>R)CGrBq7Q z04K+i(U6vzI)(IXqh1A{*VR!v%sRI~yl*3&VF8O_F1G%aoY0YRB~M~9reWrU z;2f?jD7Fo7KD?lG&)NH?`>@(c!O$)Bpn$sLY}YOM*uyu9zW)Ti^kp``y?i3K_H{w6 zH!N%qt>$`aATQ1OWs>MfoI0JN?z^8Nx}PfJ05dP=ml$BV?#E*xBCJyubEjJYUTjUL zt1w)t#@}w~RUd(}OylF!2f-hcX9rA>;w~-rM)DbU{ORMm+w(mcLb9j0y4RH&j?Ger zM6koSzmK)6o)3PBtU|TMo`hs6$>(o`7G`mC*Y(!mUTAvr8A$Ab0&K+T(xboSHmvR~ zE&pEsWqDPO^z!^sEvuQ{$HQMY|ISD`e{sj%`xgHJ4a*j0KM*||Syo#3Ub*U(&i#@9 z{0G!O-O2bTEpGOGe-MkXs6(5%ZCh(E)$Tu^K1kNybe;&knQ25S#rx%Lys@{owNc6 zV^&mzAaWyJ(yl;F6w=qND`l;%krO1-AI$CV$MO{o*@$GX@+6U)Ax-lcM^p1TsC!M3 zuuX$33(e-te0!LMGW&hu_bn%_I zAYx4rBwwp$8!!46;2ml?H}@!E)0e?QcHC?M%1fG&8vsbVL2mX{fmRWLu0*>lP~7S= zucuiml((g30CZIcdutrfCa>kCoCXgSSBCD*-rA7Wpbgk3s(Q;hqk@!US={HKmc4FF z#G`Dbh@JMMf=OTrpItzn((__h&9(~^#|llG6k-vSZT8S&J@B>WG>7S=A)8^}9}OyC zFSV1XM^_{c8=5sqaEaa{=QNqaidzUqMCrH3Q~={igTC@^7TX^8QBkOx9dQpg$^@~xxM+Q{s(?_g?2D$NvB6>=ko6k+yV#xU)OFrjYwa5u7mt;fh8E5TtAt)wF9 z1Z`+Y2m)!|fqV3rk=k%mNNvd?orQe@Bh6Hk?gHuSnWG`#v+G`rB6^Kf^8M$3?&ZYJ zeR;aJ^qlv2@cAFB?H8Bhvk*dTDjeykbOk0IvBd+dg4d*Z^}}~4rvE?tFCAEBK#C=; z=pumu<%u$Df8bWjGp^$eb2z1DAV1{Rcck+nwtQxmrPIvxdQ!*#X;lPE{P93=SK2Z2HE6O29XO~}Yh%poesP24qG=Ls$Q!k#WgKMQO{J&~6aU zgqwun8j-dAHHXS8(v?Javf>BagBSE7Bws&NkyIESb*~J1t`Z4N+hE?C?7Tk}fF~k} zp6)IIjx|>kVbNb#@M~>&gYU1k0GYq)4wJl48=A~FYzx0e7xgmQkuCG668tPyCjrek z%XQfeJ}|xI#O3EtDw6v=ssZ)4zQ5E4hveP=hQf-=3GkUdziW)kJ&klP8Jz`R4WAjP z&E=5f^B$PI2fTD;StL5`jC^81f%vU&-lrePKAi}wsPHqOXS}qSkkciknX|Tb?LT2{ z@HcQEBP&UnlxB_D!`5rfh6Yonm-TKt%LEXO_O4})>E1Gb2e#f!o`C{(G24+=|H2vf zQ2AEj`a#0unI;ozSE2uoh4bVIi!+Fmsz}Fy62mz<1@YeL_3|P{Q<4Jb&76g9I@%(W zwSfWLPtb39%M~NL&l!uDci?vih|5%T%L{=%Y7^Tkrx*bRFJSMc0uHXD#=1hX<-cr{ zLCT(6AIis%TBiBph86!z%40Iw6Yfj>OPLw=%nVrGmy$Hd`y+K#;Q`mxOB)i$ zTZE{85xpH2s!xetie^+_-t^~dx$Vc=j4bf6*(UAzGq)v6cW)JyG%#-W+g?3tQ{Y)A zLl3?6M!M-ndeUB@(uy!%$XfhdW_d_MnZg*d8ZKLUgsofwR?|Zhi5_y9wG(gaK^c=Y zC;xkU4lwq2!17=CNQ~AsMh+>=V5ltT?HAr-FDfcmYc%cN7FU{*f+fx8k%Or(4PN%6x=%z0kT@Hqo=RBvaB zGd>92#?*6F^)~WS4bKBw-g{U27>@bi&0&!`e_#&>e$rORE?5o8rJ7Z{hpX6+e*I)3 zS_dco6d!KZ1mw;Zxn)O}NVz{&=Qt~bnfIR#8r=XM>LG{1Fg{w&Qc|!hrwd$(d6uKM z1<0msr>mk$on@`wS@@f*+L+q>oX8ljeutl^#`)*C<-&SBss*g@LVYarP3iC}Mf2gN z&qBl@X``QHMv}Fz(729kbe8hjS-STxdsoG6_<_T!lH!ejVM$7u-5LcQ(o@JscjT(M zCttN%IxQeulYJ{YFR2&h`FAiCoCqNX*TOj@7^4r}ba%pk$7NlEo#ZIYPH_#h$=m5I zpv?pGmOF1@G=?5f_gei6&1patR!4<$m$^TjriQXf4u9++`~|~AmX8ZFpUH&LOBCXF zyi}kQVf_!+M)SOxm;y{BFG3k_Vh+$A3>UX}>UY9*mIOQB(I8rvI??% z!L5#{-R~~VE%vSZXSS?n8|&;qKh;$Yvs!kO1&i?mp#kjYiV>3Suam4dQy~7x4NP8@ zH7iyAlM>(?h#dRNyJ`adU=QVJL;m0qxQoiKI<=V}|F82-|8CoN?@I-5-Mrq?YFV$Kj8Mq1;hLF3JUX}cC8*(TU#R&rDHZ9J`>NpJaydV==j>&#nrftJ;m#t z{-@W?zB%};KFHpG?&9H@PW1!pr!KBb{<+7?UvkP?h&_>nA&6SzJ}+M+d{_+GU0kPE znA9oIPyegy$%si&ITO4o@SvW3R(?SYEDPxuF75x7Jop`TXW=-08`n{)1{X#ajQPM9 zM=1I`MDUUDn!Cr5%CA9VvRzCGQfC24E_4ca;ssUh2X6Q8EBAD1M3SZO--W)lOoUit z65BL|WDzPS?9ZUvVIsi~{ThUpBeVkk1hmI8$?n&PfJ?lzr?-I~JTL^-50U*^GFnyLTUP=2&bTW<1H^FWQAP_@70D}K>pb{YT=`?^ zKcG|xQRtfkbnP$a-r)FXih=g>VL7&*HL1%^iHeFhIPvl0;@rmzQ}G{re?V+>)Z&Yn zgO*P0y^Uf0F@YL>!_KoT=uNSAkQfYs#g&MATKBI4#vX$P}&)-j_|UIuAmp75ng_O33e8NL0y>3&^j$K9F@{0fe2LKnHV{uFQgoB zQi7P5YA6!Q5V^?c??y>9hV>zK(vD=4MoFWnI%ux-CD>A|4KHf6ZuAC~M(mk#%7QH| z#^5AZs9?xb5zxUf?25<++s1){%L|lbaL3*VoIBOC+j6?ZFftTv!hCNN5poV@mh)1Q z*sn!(3Z6ae9>v6JRw1V_8tFKYN1od;D3lF@j*;3-#2*YgNC+2fZy^#h`W4EZ0$uSS zG546l0Zu!@%V@SZ=M@u4EK0=vWC@^OH#rEbxq)3(6-eB4IMM1noCx!?Zna5ogR=2{ z{4SYeYW1j*y zc(I5g*`c`CmmL)~2le;i7LhbOm%$TCvyWVMYGo?Xy7gg`GDP;U<&zE$5kGcJ+zkcv zyc~Kv!Nc5pt^2pYgBzH`$3(e7C84o24HbTf>RoX`1je$v&S0N_;4zQvhMx##vdRa4 z053?tiVWer#?&0AV8{xnlep4lPdp2HJ3di~pU)1l)a zA?@g}JFXeER%`LW%6KsU_NK+fxQBzwXV0JVZFRRuXDXqXguQGQ0?12Ys_Alb;8%Vc z_su^m@<9A%AxVy(7g$V0ga;0Lg(_vJVa{Wxv&{$vWEPLZ0y1O zs&JQwaoMl@TiSXFCF8$ zrID>dVFm6ZW`DsRuRU&!El2@(&|FE`E@g9BJ3T&o0ma(mCKOqqc3suWa4h2F_-O=5 zIQR4bpn9GcVq$2pgqq}++)fpJ31n;TM=^9o$ z>K}j}6^m|84H4?aBgpTr)nV`Q!RFC+0{=K6Yd)aNkR~6| ze;YB#rrh~S;JYQF-gdx4usWyu%YjDr#Hb)c2yLe3iX+nx(T|2SJ_{GE8lm-tOPKg+RPLO z4;l&)GA}j|{Hc5`Ze%Pxmb+k4wGR<#tNJw*W^*X#Xs(f-IkRRoer5q^>8X>7ozmBM z$GLaXBahSc+N9$r0ZcSw$~GGa2Zbtr%=Wl{i7h^OGMMP=z+wGxI-rrnP1yJ!N9P{T zWdHy1Ynx4*k!%i=B5kudpHE2>x(#CvIpj3jgj7hPl#NtQ#Wv=ckz=WrltZT>hoK@A zQHd$H+HP|NixO_ycoYpU?aKdOe>UL+@KMYr7fI!e}AtWZ!PMZnJBx@)NMj zpzHxI>PGi#nLgyyJ-SM3^dH-rD^%kP%g!?Q7<4V^`HNBX#u&^<*<-vYdO0_jShpbT_9$ z?K5nC%V5wLRbJ=gJEK3a$D`yCYxjqxz4* za1-}?yUQGV#ntl}N31jamK7g}2-e8O7;n?}%aGX@%wO8)MiKX*>qUyhH)yNgVx0;2 znAYlwS1acTQQi|T=F=_{P+7gIW4zKKNMT$_jl#~W*hO|FcAA%&8J^w-U5&|J^C4Zw zR%Q)j`WW+>%J?-$Fys~oQ-&x+!ga=qj&RI<29Ef9$1rXU!ptm>IL_f;xaf&-cQdGy zHkY1M-Wr3~baUBBo67>l=oMjVb7ni`#WQi+Yvp~uA3=@F73Ci=_va@Hj`B0+M*+;4 zr@gpb8$Z(@bm;ud?sl1;jf^WV;J&{EI_BG7!3Tar4qg;4(Fpe;9$1`vbEXi+$LBbMCx<&+)afyRL=^%gHw_S6HEfA2Ns|4=G53W1N?(u}IXj=d334=Qo5C*s4URLWlR-QUbQ-51 z8TM4_o;DqG=*v#^xxPx>;InmY;4i-@hzfaXI=JhmrmDu{L&Iqk;1?B)WeH$&ZvWf7 zTc3KC=b;;+G-mg_R^q?F``Oz|gX@*Qz5gO>Sqw_&B|$PT({mQ#bV~Cs=rd{qavKCg zt{%qbra!s;MW$=n2(pdhdr#ogaY=4m?PoFwELfLs9Yg=d(2Bw$d_<72s`x>jqly@> zsD`ozKr>>QHlUmheDNA9P0!9Jwc)b$(gQ?tF16WV3^u6|o1@q1IRW8Y(ssH5C_n0o zY=K8A0Ah{C)8p~Y&~BMbj*j*$giI{P^uVvFogVQ4u2c&{N&V;^m4YME4lcA090?EE%rQ@c?xlc-$5Gl-XC%y|oE6{n1G#Vp@9hb&=dHeW5UxeF| z%K02C#=!WcCL}?L{=sW6>BuS&mH(g+aE+K|R0*Na{>qi*)Ud=`Zsh@|_4688r1?4Vy>#131eb;;C(0ypudJ+|@?Ms1Pn7r1;* zEo3uv90(%)R%+sN0`WcGaE8~99e&_S%&@!6sp$bER5DXT6yI8mu|4-)4_sUh6cmzk zsG?01FPblQT8lBQfawQF1B72-k&yj@RL=JFcCSNxha1e)HgRj2Gw_mW^#RlC{isH) zl#reT3&3-*9P>=Wsz&UFSib*7a~$Ucl=jg%stM!@)LcW=px_3g^X3cC>{D_v5C+_x zen?wHqY23YBnOs&;zRcu4rZ9J)h-hh^v$GU6!M5iaWWa=?OxqE#O{j1WVitpY&W8` zBnrM!BfJv@gvbo2NJ2PdVwv7nw&`Opx5h)_S{ulpMxngO@JUUzBoQ(paR?Pha+F+N!**3&XznJ$ zT<$t^p0j1XJ8vln5f>?BYj0Hb8pm(+?b*L@XV4y)Uj`pBhyFiNbjbN!Aaq~pbyy%U zk)C8O_M`cxyOgg3<5a5}S9Q(?38mNOkr&^(8;O_UH)_siTso~@#+IqaSy%wv07>m` z!1^_(mCEz;Itz@~)DVNC4%PKMZd1i|sdR8lw|fDs8^`u>M|J${JYZ?zxyr;;ef7#k4eQg;JhTxa zc{DF4;jIv=eE_9hY`O$vp*cSbU$>&w1_>(XrZo zRcwW6cOJ|u>Wq)KSljh%uVBta-IISyge8uh$=e&Fs9)3UR@eolgSIQY4XH&TLIiy= zf0$&we8sE(#gUgt{M4e%i_3jXUXIz)XY3_KDBrryRo&bCpF={W)Q}5zu5`UdF$@S1 z#rijEL9~}xFJd}$aD06gt|Up@=`9+n*O);L#<^~DUOMV}2nYP}Nl%m(ofeRP0roz$ zWM%LWK@^s^l2E&YPbm8g51dLd=!V6Uh6eN0FD7Ipvx&2%GF6yMGzWKMS%ZP$ddWFQ zzVR}w$L5aVnpv=4=ht5hiZr^C=yzsMa z-QQ4ZZu@6!DKtUkru3HD@GNa8d2zffq|#`Z{2dr3$@HHc^=GFiZ{!XX^e$`P0jL72pvs7{xB95 z(HnN_jM_!-X!{PJ^s`-xP4n>^7eH^q9*M+Ho^(;cXBcWjD4;s?PAIVq9stY7gJj-I zYQ7)hHcrUhA3oHZ)4bgz7Gm|!#Q4ET%~(~9AJDRM!L@D7>2y%@*w~x(88%UtIfk_T z?BR`H4Dgvyuk7veZ`A*5V&Ehr+5#JSXs75%2jtuXnf`>c4}6CQVid7y(ueid_(faj z#UjMRtHhMu)kSXtM=y7NJHEeX{qPSMFOK}M;_;tjYpD+e*kjon_2}o8vL)_)$_5qI zshU>$U$dsJw*CuTf9c=X`CmkNe(=LuN_*))6!7CQ*q8UGQahyJG>8oPI`{eIyA2Qe z8xd89k@PRHa=cHb?d$LI_T`TQQ^!^n{N8WY2@ww&Ryu^O3f`mSx@WE1S*)i_i(#owlmm+>6Kc9F;@$)FA*^p%Ea zyD>aMK2i8LKU~v8#8do)zEoWa3;0VKh`)ylP zW>z({$ZwfyMRl`$w3%0QwI7$5uJA9gah7~G_0dJaueO7^Yq0cLki|4PlB&7$>CR&x z=Fe5(Qm?$F_;-K(`Y56UB}W2f8zeH&M16eM|?L%AZhx zdUx)Use%6_>(~-Ra1Y6c^IO$nJGV*teOF-tNV?gkXK`>ob;OH6LeAuOkcINfPM4JV zTJYEeZ{b#vT4j}u-*&hyG+oDbGjMp5QjnZFGzNMC=B`2!MeD+S4aB(U>SE=y&?3sC z+ERQ?9Twu4-c0Ln12t+z&K7JBpxV`(R@8u`4+#spmO=S4^ogSSxordQVM9Q#RFHq3 zx*KSrXU%pEt44SrLS(h@4TXgr$|70ET=)?B0kCg?R5p?#R)IeN*_=d0%o$|%DKbUV zJMZjOIs81wG@!XK|0rc|U^0#m_%uHQe{w7BYS^mEFNlLjH{t=LM0dePKN#0>FS4|2H@ckhVI^~V$HKR?L-VO?r*wXPT^G+w9?@C_u|%Xx zA6>?Vv=x{X_OtP}Bn^&URhNvZ_@1#G^fusFCUe0a_=}DizRs|t@N@g+nRU_~GrkZj zTZ_J{2=Jdnlhv2=;p>yH%OD`&>3l`n?dKp>u}SZ&2TAre)o^YTgtScsZYXry)wm|Y-djQqdk>zo2Z-Bod>px^g%ko=n7Sp z{E~uyF`!^#qT;V*_tm*~wEWz&1n=R^Wz4Z7b6(0lY6M5U9n4)omduqzR^7fx@$PWYAC!4DQNIWyJ*>`+9dm~0Y|Gy6aMSgz zyxwI$nSYW^%hdxP@SbR)SC`1drKguQI8D3E1})N$Mhj!i*!bVMZ=lqc{BGLAL?ERq z+Giqd;8E|5jt0QvHOu&+->Od^k3=0tH66ph_Bh3x-Uo)hJI3cx+vnWd+D`tEOJcuB_9TKv;=1-jq!jCCUl1&13s<#n zS1<+iiyePgKH!P^nJ$(K)a@XC99O;oPjJ(-#=oeKSPxBL5sZhydE}0zI&Ef{ipcLz z6F@kFY-!}J(meL%Ex^1j1tt82POXad~c<{5fRb(VU!H=tUp z;(lh_MPr?# zg@6B-cUcAJ<~rp5J(Xoi%@^2HFaF1`eO|#=cUX~R3rS(#!PiVTw>7xZai0%Qt(aLz zuNP`b z2ApDG-hdy3%2j(X=&Uw-9}>S&-#-Qx!hUD}e0-zxZ0f^zp6d#B?cYBBDLd=<^14=1 z*q+UK{{mlA4NKtXx4>=p;M=2+{5GJ2g|+v624cI&j6g{i7- z%AFX@V)Cy8)Q`@RIvPku83L|-w%9$P!;(1i5mf}OfvvMB6OmEmn97!ekmG3ijynbe zRmJ@z+IQf+w0wosp;8VJ96aZl<)RYhU}fyF^^45w5&H!tp2rEc>FdNSPt{~YJ;E_9 zjk>6sk)pTeu&w$CJFxpj9HU2-8w>G09r&yl57_v3>227>PLdzo*>tHKE7Z0 z(?a)D;`0nOWw)I+;~g(MXbr3Xz4K>H!G-6%*8c9InJP}rhOi4~7l2hffCIo^HxBBw zP!OPkvh+`nMUh0IaUM%Zo`DjS>7A`Y8Q8`FCXx@_N~%B32_NazSU(q4D$scR=poCN+5w;r#JH5`RRU8eii$RuJ~^FM_5#YtOHjd z!-x3t1Fa$&&<~0b+Jp9#`l^Fkvr%Ew5NWt5OHD`=DLKsok=^=n=@dUk+3+y2GGES! za61_qTh4uwQO@p43SdkIC^m+pMerzY!3cq}o1@ijjtJ&^Y>HIGtfNk;IHD0*uA6fD zA8_1NXIW2L|`;pAVG zSb3_2*0@Z+D$}F*kr@1>5jiI{7^oK7f~r@ZXw!m$4PguquTF;MKw0Jd0W~3Ecn3?V z&KA&1v~{ZBIGKiIJp@^pzCGU&Rah77Zj}%o7IIr89s~}@#z3k(DTz-t#3eg$#G-7g~;2zmO-k3l9adTWl0yr$@RBd6GIhcR`gW(3?k)09C->8U3)PDS7%(cW&kbY~}`E zor3zSlOdoRY*za0Di-N!MajWj`k%1*N;qgsOsQGXZnoBVl%(b+z+=*au|V|>SE+2a z^YSt{JXIb1NBRzXSqBso-zf)=TcB=oD&a?gS2c$cKq}AYP-eDVXSg+915rXE@+jW7 zhkfZf(Kq`%JX+E+hC9;36>sJEYym9?wWY2$fUB#eo|2qZ-G-a*`N%LZ^}ujT^LVrO#Jo7+0a~YE?-<4bEE^5Y@ecF2? zlw#wLKb#wukmbj*DO`o7Cbzl^W?z_H?msh{MMr#+lrwjSmbil*Dp!1cP8FER&7_#g zT~m>h`G*r5SG`xr72@AMs=l9oL+Q8?4l27gBHVe?|~+BiN|)^jOwE?XN3U{okR5*AY@MAgEhF(Q7`V+L9M#2 zB@wIK`#0lDeHL`ec8u&>Z)Vsiea$thL$I9 zmY*YSH|pCV$7@Z`{1;F(GsClB-i$u0kyDZjp_b zC@fnytq8zGcgyzZ>@)E;3s$r4(8NSMzskM7CmjBaq~ zRci^?jom5pOMFeVJ+&%@phzR8?`(tRG0*q}-q~gGn`5ClQ-_VM(DrCTdVi)JYb-ua zkZ*t_@Jnd7pLM4Fp^TQx)OdWPR89Q`>SmNKM1g~TJ02rIV);#YDkRBBk^S7>pICnC z2KD^nPS{O0t~XC_RwI;&$z{kBODrpg2cG92W<+mzB&wQAc~8B`SMGus^9vU|?B% zd~W@ifVW}tW@IES=(60JO$}IE2m9?tI%eAnaRac{)|KS6?e_n>4lZ8Oeytt6pxmRu z_1bsf?^ST*@KFLT)s|RwTgyw`VRy_+GwfgGf-H&XDcQ14_jMRgNSx=n7xG&v)*)SQ zmi+f&Hj9+=Y!&<(xfegfC40Hvj|b~Xpf;M2eqPyOkHafZAxKYEw(b! z3P9%-qS$Y5kXV8GWKvhbV-|?eC^;IU?yyB4_L>x?Q=K{3Z^6)2epr%XKCOGl#1e*e zKN0(k5+txSVhlF`?Ks5JFs?$THAJ2{;0J3sxEoeP;x$4O=oJ}U@Ni1p+z@E~YD}Kk zd5<53oZU_-EL}pL)mJ_VP0!0MnNazQ`&-3W_n&n(=DbD z(B(fNhi-WN^N~l`*UQA8;5#7uF^``_iEqGG>duxOO8%Lgro5#2Puf>1B=gJhluYT1 zpZ4~92KgD%H_OK-hL#j~U%#YXz!`=aSxwCAH-mxp@^(a*elxo+!9{2+7Ut}Q#8zvD z=O3duJ6~?Jptx%#xC5C8Al5E713Kc!?7(u8Mrawz6!)vnyR%lHi3i9?;B!E8lhP>& zTt9!2txNMZL!SV=OCE!%#nt3})^*c6AFGF6-y|m>vI9$^5Vp!%vz}UeuVf&KNYKEu z-Hviva*Y-(eiAx%y^qD5kc*5k1#Ne_g^h5MR?kV{R^-SP5hRHUkHlK0Rvh4mr zPVbj{p70E^iz6g8D4Q_qSUkZDa@Z+(d#5}I#V&2vV^IRWSQ&R?&4y9kNghdL7uepy z6ojyF9jIIk)GOI5)^GN5l~a*vwq_P}>!UPE^Ge#cvPlVE2jehf@ENSky?e@;~7m?_u;#!K%$oJ5~6f_CuZH%fZPY4YD~o<=Z@1 zRa=FebCzL;E5KBIp(RO1Fv@`)n;BVVH_pcCF@tm+{Q_5hsR1gl-@hY^ zLMzk?RAJX{osFdVg%FAm_G!G)b6{1iVfiXp!dN{n$V)bDWQ!Nmw<>P}d<(PhLtI|? zvfRwewKjEFFgv(l{b=feO0f3vsvb^c2by#~@`}7Mk$faOt2vs3&+`ny&6Xzgv?s7n zSNUMoE`8t@f!U+cW%)$Jcj(XO(!n)3j~!62Q&8I1$lCjGg`SsjaI^CC4r~!d)k6f= zIFOg_nP;aGEPma?F<3RUtcg4%if4ok!uk|UY5tTRcHQgG%opD2czIH$jeOVd66({a zsr?L^eZW$T&60uR1Bi82;AiUJDmF>v zU{G0OEwSBO8so)Z&WHL$7B(!9_h(!|E2IV;)sb~h{C=p^ zJnNUtT|R6;UAA|fz8LW20Px7XWzS&lQW@=}ncY>9T6CcZ!zdM$rrZM-!GI!_f14k^{dvj zpE6pFY8xnsUs;rSKXS!TBbqDyc~bMJ(I0l-#2_tA>3E;YmCRF3hlJSrUc?Suw3V9j z(sh!o06Wg?dbGQz;X!t;z6d|Hv3JQR26@)tA%tJ;W6@)9!Dzkz72F19*0U!tJ)!bo zrM-MAS9GFsUF>B%eD6#8X9L+5A87oFQLF*B%2SBpH`MmjT5+|fqQ!Tf7Q(Mf79g- zzZ?RyVP8RBo%c9)MV0JTa^wfpZz1SnSvWFng7-*h*8D1AfDH;+(B}6A>iz|(cdwc$ zn6E;-XTle@PsU5%m_t7d?>)z9eXzrWu0G3MmhahV`8iH^YrcX()qy28WFb?Md920Vc!)IS^Txkbd+Npxh^k z_{C?2HBrDv4FTuaS10jh2dPmnH4GVBxQ-N!`Wd#R|2+)L(erQyQ-NN?8r5@SC_z54 zNpzoMcwo{kv2Q=OP$ZwU5bXE%d~Bw&IX2QbC^`1imw*$xYbBf9apJkB5kf3`h3>A3F@>6Ib`?hbf8MxBRY4S zUk6tlYDK5)(qn{->{bx!P`p=7_MMEF*3y}HmI=1j1O@kSB3ctrtB`s9vx;OFTZ8Xq znf{iNh%TSOc0l95<3@_3`S+m6J`Vlw^BTZJ;OQtev|Dowl8h)u`JxNgWfRyaw*tTl z-)v3Ff%c7Q_gz*qVM}v8XEkCKG|p=Bc!fQE z!Q1xy8DCp=seJl$zAvLpIwgozxPD>f=ZaMFXD}~rPS%b;4Y{=nYDicu*~Li=>M+qS zTTL$doXK)1pe3SVphZ+I&P9s*F0Qw0Gn7JckIv{9$rgljbJ&FROBug$_h1uE?i1)1 zXa|-eGo78zED~4Y%C=3?m8A*Z7ol4=QE;DWv1P*niiO+<92Zev2KBT#`(01phUdaz z-g&cC47gfYZ2`wG=swoH-SuJT=RfCSE;CWx7~ zKpAP$su_eAxnx;ajYIT^m`#No9cKt0!Oi1@2hu?P0ROgEK8fpK;jAwkA~|pQ4YK*GT z@?3#>-HvI{@;3mquRNL3hcLa_jU=eKQVow{Axt(DmP3+A>C?GF9mWWYK6DKdKrHH< zA+Tq&^BpIR^(Pt8AVb!NyM(MUt$@(Pv1Q)08F&X7{aSSl;Ej?uYwazfS`Z94y52q$ zl}=UwDhD0JE`#24wG3dnqfV*2V4S9ai2*K+p!InejXkNbRNo*+&vI+_NL7B$&~>^h z^ufOutNS$>d+cQ*+g0<=D7Ff9#)v)OQP0_U`v}KBR?Y{qwcvVlUKSL!K=Sfk6GaHuYJDPp3WgEQh?d?~UAqb+AJRFGt3ba^iI$1Sb6jaU7(sc!y* zl8@mA_ud9bkxCL1NEV)B@);UPs`iH2;_13TbMM}slh6o$wbKI1KK*YMFUaAxjdP%` z1x>?h7m34(N|PzdLTt70<9a0*T>IYeN%?XzRj_??S(lyBe?Hw51`8W-Pp@Hf#11w= zJD(UssXh(r2Q6VePfb%gN$KzM%_rg$-e>zqUcU%EuuiQm5f8HQW#+}?y|3Ikdh|}x z4KwP39TVX zb&S}?iD-m*wuFFgyZ+geTMltYxpnI(75j=+d_R~fHwQnA&!7=yt|IeTCBeP}#Fxtm zo)4*R3A@+Om0jp|&}@^@%PdRqgx(%0dzs`HoTe9<%DL&oN8Z!rdpP^6QILZ!2i)55 z9S2B@h_*TKbz5~e^uL$}rE2(T_wP%o3q3=?a!^rfTf zwp)rv<8rUxzAiHjIkiaj{XtN;LbK#+p?5Xk9TZu9D1I8+0(WQ!l@f8`tvzCO*Im^& zv;*qw;t`f`h7NTwQ zhs3raz*u}z*a|U1gXypAj`V3h`Ww@VZU(O*L&{%&vKqJ2+U*3y3Ib!d#M1S#ibe{#gQ55m&aB(Ebo4av z3XdY%!sugIdv`=+hJyLv_%%bV;OijQuqHBUx33E(^d`OD>PpX2Ykp?$fo`aDK@c(f zitNza$o@?>8%QYJy5ey#T%H6CuHP}BT%EMU(q*7tMXX%%7VY_3-6qnE_RV!%-A-;| zj6dZF(pQf->TH?5wo@o8y|wSL%3}?IN;OI;hK+qtI`0y85OwGp)Hl;Q;+^U~8`ov= zJAAv%@Ts1mlGV)3i@__)Sm%c_j9<#Jej_0i~De>PlF%bd1xs%#}C<3jtP zk&=^|%xSfRX~;udxA2%Sz8&VdQJ|Ay7ALt^3JbkYkb@W%MisVE4E`4xiM(FjODUVE z4=|&OTT$#djGxlmM0ue_k>aRMmPPjk323P})+W2CRB@+cqh9|{xj^}cGT0{aKOgqs zFqj^;`(zDfNXjaHb^Y(Jw0{B5?Z{g>>3>;$`}1IVt_N~=J=D&>Rr1tGbB(ld3t9j4 z$DPaM&{OB^M7tjUV}5mRmTQx+W*>S|(mDlPb?)Q00fA!k^}JRbagmP8zH+XEdje72 z1c{8~w5xf75@sW3h8poR$g)%Q3l0fP=r9#Qr=pZ{PMhk1vSp7pmoB1IIW!u? zlX6OJ;SeMG1H{_t9U1X~4MMsGOj% zDE7Mor6vb1Qe&&>LM70s4vw8_g!?Xb=Pt6d5E4KJcR6tZ!shevbcv}L0kg{A{B zgFD#REH+2SFKMQ9ZnsCO^>e*0TYF0IZNzEO(WiL$jCXkY@qCK_GsjW{EcV!rs($P< zq@Tlm4UQ?H;1`gresR;}KJiOVL^eq1ht$YZ^$_BC7ysk71xs*J*(SBmfbDHz{-y=0 zOU;%z*f!L-_OC+WrU;&f*04;Afp5BzmaoY$=>!1I-W!c%#O2J|=4h4oklh$Ai>)wc znk7|K_W`pylg^yI2N97yE6{iXVY&gCUIEepr${dCm?yxfuR56wrLoS(`nVg5_cN=H zC?v>fdBu6beRi56{Qbx^Gz1BLL-5(v%ZU?{uGZ)TDp{%8lMG}VcH_M^WKW#8H7g%~ z&oB|QiGLrGCo1`3!y^aC#h`Wq{7aVb86_xxIsMn-xW*ovg;d*Rg>7C+Q79k|CR^g{Mij2N4{ zo=(6*0{2ovDXoqMP?ZHFIf>SSR0vQ>pcj}*;qAljj0YGPb@-@jHBv}&-s)WailR?< z$_XM+ywnu?=K=dpvjP`&NSe^g@IwRoxx?oz%nsmDLmA%_js^1E5VPrt;QVTr&TziG zan6>Ue3Gslw;P(HGh8PTZDMUhwrk9w0`SX5+SkE%>)XvbtM<;%D{pDe_5IlOXBtGD ze(ky$+_-%=yZLfE8sZRmK$$I5uI{6CffD+cR^cYpXV*>ns0FXRs0maE^}b4{7H)w) z!O9hpBDsir6cB7;nzuJ!rfH#VMTTegUt~HAS(fI$6ar3SRjZ|y2#C9Ep9L*iaFBVUXdc5JtDN7BUg3b5R- zN7TpI76Z&6epj&hqxaVssJqX~XmFTg_Ay}t1m7*_>%`SWQGhc_#_Dz5-D@AE7*NBM8H= z5a;+J1An$pk2`y6Y2-@iq^3WA+4~KI{CqksqAU*v^>dQTiGdymMpk&zkw2rG*KJ z!L^)A!Myl^tgkem?WveIcTE1C2IW1D2a(TmSxUzMPp+$}ov#Eh(u(|8b=uD1mhV5t zD^t*w)&8^Agc4?T@H$YfKYC#JG-K*;4d-cFjn`(_VD4*~c?P^YQQo59a4p93<%H5~ zMaJ`nI&Rg#XGAc`ysC~BKX{gU)_Yh*Z?BK8n)z5F^e{iysuVk)C>O&%?$H6_Je)D% zOLgLhmBT@Qr_X6zk>j5F4JrDcXzJvp+9e_Pd@cJ0xE#O^)%f=?;C&i0wWk@MB~4lc zd4cqk!zVdQau0CLpZ!#rq^qh$C>D1Gw(E?;=JkXqm*ZRS(M6V>Y;;@zDt?N0~4x^dqO?ibyT@A8tlElxL~x>yNofl3LI%gaFhEeF#-36 zH|P6SHn?4??cv0oJgD#sGuIM%Kxhso%biVcX1UIhp5B8gUMKVw9fJK6x4lt>eVa4+ zo~fzn9b;YB4BtK}ocHxN-)xC!8+eF0JCNw%{m%rZRIEOiEi;v*SWt7l4Kph@J}~k1 zRAkcYew=r?S#Zh$=RLm*@O4aCL2P==j**1>l!rkgtHrC9EaE>4g?^{AL&Sp@el7_R zP3^>z`hjRjXdfbe`UZ<_GB;qybF(&+pMke5T|*L9$YFGul~oJZ4p;-T^q$yX$Cx#> zUH4adom5^&!B(cLWAo7`|D3iH8k(Feppg$4SLBM(`dnI=m*4&GI4T8;&wJ9)`HZC= zeDxwO)nApQo?@|7amT295!gW!%!7Kvu4TxP?kbuNqkQ$V(zkrv1^qL%B?ConTo=?2 zw%gL4LEvW_S1MQR&z1+!Hd+Zm)Dat zzo%+weEay%WZJAp>V`+EU|u4ctzv>%+0Q@i_iQ}Abo%kHNX^wp9zntW2YKEDJH&GH z&v}9~AoChkT|!?41R=S5H#Hxl97Z|fZv-?@xh&tZbM)N&1~g#svhzhAr?8c6l$tb zc4F8U?BB^sSg-{u#NKBHzC$Rph&we73UV((y-kMI+nk#?2dW>a$f77!6K*aExs8x$ z!VW6)K|b1*+bAn{uma-F)WArrfg(?*1q}TXw z4+bYOU*L+IF56q5QZG$W)xpDNPw(3DY98d{Dp+XW@bGK9)BN#k+`qu5_ba9wp~vFb z&ow_Ce{M+K8TRRC^2cS9rK#2(lJBrvzpcM)Xn33b*YrBHbo{6geAxdgso)m^LCyQQ z-5OFTab#Z>^Q4wy$iz?v#aG`r0BWE@rDILcXBCOLPSap3pZA-;{=`^}&0fT5XzAbs zn*r|8Y!r|!&Ei<5TL$9T`k9&S1De@wK-x)Kss5Z zBO_^M6S8%oFl%&fQ5+m!Q!qL=2NEocVboI%%-@*(k*pa+Ce(K~J0ZXimC3==OwZ9L zP~N(tP1WMkbXWTM1=PNo(yC$j5at{z&ILZvwJ$QT-Vbv79P*xl3&IW^OS(ddj2f(W zOuxdWo*-r)5(D*{45_>Bco*Y3Yot2Pxe%L4UA-vqCiWYqTudxu$bgt*4)qXz(iM7U zOKfR%AaLm_x_QtLXr`$yf$5k;w29L=QpNFv(=g zJn97I=io9>G=gteS|YW-MDh}^{)$PajIsD2yAR=h*1s^vXEZD46x4(}NY zTA;HFnL+GRGPUeMvZMEwu}wT?GmWkUs@v)vZ6{=g9h|`G{TxK;@D4Uy`=1f_bG<+` z)-q&J%M;&}nh%RoT{N%+>>cDmr;63irTxumLdlRPCY839I({GMDU7v5jr5K95OYG+r8;~jsm^)sUfX{GUCllV>pvn%Rhz4zRxJ3}h z>0PLN;=SycZfzkn>PFF0m=pXRv$pzti4D~0+9VnK8Q41Ps8Y@=hK}e9l#+e}7KnT- z#I7)Er?B=1^isRN)|*^sw##Cc0bjH=KN_>>g3?Xbe@Ty=z&KT`5<66y5H;gLrxeV< zO4su}`#0_ij)^tSh86sI@XjDS*>n&-jigBUd4_DiC@dHx&pfHn&2aZ}>4tV=c4@GO z_N$x*8Th5eAG)bVw?uXnYQ|H&#{srzxZ_PGt zdvx|}`ELK^`QO`pWyrYV$om|-+*m=pD*Sr!v{wV#%1Z-?; zDwle~bWA1r2W0lDAR;D^U}>UdJPZ9`={1sjh8>0r8Pw}Q24EjDkcq=x?m>ZsUy$terN0?l6}_vC+!rpV+q1eY!QODV;wa0257s676xtL^xDI=5e`@r zOP2YA(%_;oU?ZqA>&Q#l*J0swaogSMqAx7Nx_5BQJz1+_>5-272I08}?4g6&Z?o|K zTp(z9zgBs14t0YE`X!Eh$kIN(rFm9t!!oRS`7|MD0W-QAs4M3Nv5fz>!+r>H1=#>T zDf2KidoglinM&q($&4odhFlm3$@_aafo>P#w=4tBE6}_V!guIuCM>uhhLeyhMOs&< zUK5d<9%65ikO{QCfx7z+MAyX}vVr>DqCB-M{NVoN(M6=Yqj}co!l6lq?8}gIeHpG1 z=B&P9Wcz*&^;GvV>qfoQJ1~rnpJ~@OrP?veK;>hr^1z7wE{9(A%fo5e&>NGAc{5O)URMi=myT&yd?k5I z+FR%js~XZ?z)g7;y;k{$C&6yGl>y$aHko{y&RUM1ki&lZft>2J&}AF6JAo>^*8{Rw zW(*$esj}Gnbu%$pDw}s8vVG5!LF%f`4=BCY=yqlxan2V;8xXe|(yiwek&c%eHme#w z-4|T4LGCp46~9xvDAl+scgTv!8-{txUoF;#GwVt#W{7$(qGi_Ir zt}aGh$KVF&p6&CpB z6jhJb{A^P`>c;N@;(caHFF0?%<_F%qTC3yx5XbW{MeL&3;9HQp6Az0qg}K`{|66NdQEv)^YVTP?HYtnBOX#QMO5u1 z2R4P#X^#Pq^s`-KnOYVoCVp#k@h^7xa3B53|FLxL@k}=U|G%zl8#ae>HWf?TY|J5N zCC%}+F=ixZBZNfc)`?tm%ptKkQ$~)Z?xhl?8YM=DRjO4gWy)oEfBpWGO84XmAt zJ(Ijns*~=MU4@FE;gZ#wjvD@#aC%>k+@b#hKOITaYO0W*;735}g+G^n-PBe82>nX% zzg6O;=DmuL&S+grsV9bR9nWgIF*GqdD{+%YTW&F4{E_;3W&wGpyKYur{@Uf3o)T;E zNuk-?x3MDCeIDsmha^dQxws6SdoDF-YIdOxWP_FvLs~Q7X8&=ug>yWPm_9?g4W7^c zUJgzx)1tVpVq8eF5XYQuYlMvQeJ~fT?$FNANxCuRZN2C^iESV*1EotMZQt(z>FS|E zP{g)<9N^8_BnP!x6bVX$mBH#PN$gp!vv^*5Qwp>VR<-A*(7UU?pl!s$ zULQWZ*@Ny!pxV7n{`BYJb9!F|CsO(i0s+~aM&%;9;9SusvpFTfMj_dH<9A(nqgNHO z(Wn`hBq_<^l9--JuA+brV71JHe-pI@kofj;N;U!RSM#T;ehGa?V|&72g|&?1fE!KU zYFgolrpICOEXb{iwW2ye4OFc!zJRqn_U;saABtq9IwmAuExhM^hyGZpx35r+n&cOn zXJ8#g`X!1eM!t~RvJm@-s}V{bo>onmsN{@Ht6VV>VXXrz6z6rEu|BsTS#s<6FR|HN z-EK*+%H|~v8B)lNJ`Utc99MO^lo88AXiH}$SI;%>_u#6W@_5q9xXW`%=9}Gt>$e)$ zW1+y2>w-&ICg{_eyaAWWb+j6n%E1hBp^5T8P_86|3XRja?b94skzZ##g^UF*Xv&I3 z_y)=+2H77EWHP+24w(SF)|3#}3X@@Dmr#5Kg>BhdHm`V0(_h5&tPg}~4aaM=^X~(l zUB(LaRd7I4Sx7^JF2Sc-!CR)1qkAHFvB@I4UWE!5V_L8leFa^@ z#dwK0_h!msK_{;+DQ!jD7tWw|_3{%GOQWJw*d(8-9l%6KKL}NKGv79HA~e}qxJ6p7;HaY`auVt__247$45Ie^PM+%`KT>FS9YG5&{n#8bcfp>2e7_PucyVoYPTSmp6Kc}p=bHhUzXi`E>`jRHihrjPT}$Q z`9hV;5u+zQ#~<>`otfxTapo|#?;vGo>9cM-!H4fjY@VFnJbv%UZ|kJ^l(&!P9g>d9 zUmTcxV7vvDDDSZ7uKLD_nF6lPdW@3eZjy@Dp?ukC`x@h0Miw5B%mK5DzD8i$yv7aT z&V@w#^!P)_G6Lg4g<%pq{E%z9u7>X**!G^Wb+am0ut&VXxg!F7nGZ(BR?)cQtjOcW zQO7NH(HEjkqO0wJ_>_g$%tlfZ9DUns>6n-#nJS5(>lkvPQl>xna1wu;QpPSI_>8mh zhfGK?KKQ3k82R0CYA39nXZEM2|E~Eak#+)Ub{2P`i?Kazod?|tKo5Ur+DYeTkF`L6V5wRznN(){sj-^RzK8%pujkG!TG%J7W4NLs zYM?FkHK$wtNUTsqv>$&_r@UdMTx`2+_06`RGQe_cwa_?+{$cdx@z~zKxj*}P`*O;h zTGCrp`YzYlon8jB+HTETQ`TpoA|GrfnO488)usQBhP|fq65i2B{5q{%b4!pGi=a~V z*66Z#zf2CP_k{z5Mf||_6MX=Zx1Nd^n)v;wT2sy+f2X&PKD#D#bmn~LAJ}~wiR+G* zHrL9%du59Wp`8R=s<0iei$w>D z^y4`QF_1yGH-~SukIeN8189mTamV`fd%YJhR&yIRFUH*v>OAi%khinnNTKlt{h+n2 zFekKkZ-VZ-wH+By6HQm={qSq$mtD$*SWmsj^z&CHvA2f8{+4d`u#_uI*I>gct6}2& zgd@(qF%V_>4m((Bo8wsRL5B{$zbpVC}^~N!S8rZQwHWV$EJl z;xeCn8nh=Q`h?W(64G}Xy%@5K0|QJ=Y%LYGsvr-4-F`cs9IXPILzi$9k~0V z?Ozi$nnzXBzB+r({&J?@9`o7I|07Cw&4=+LoBZTokw%4@VUVJMljD!NcRw0uen$F! zyF9vV`|FdR_VfdD*6aj`ykA2@FIRGwr7yqzU$)!n@A&ph3U4G!_H~QVXX{P*`-LQa z3eVVTTmb9~rMjbJZ54KymWPdb%wT-%RKr253f!8>M8YCwUqEbQU9=j#&#d5QsWUyq z4eZ0n8&<(!rHfX5W|yZ?89s3y+U~H?o?T}YreI-Q?7X*7Z*im)A6(_0hAhB zPq#s7?y6uF2+3~EByB)dMfXz>;OO2)f@gpws*Cfq2FL#&fQoM*Biz?=`5mkj;;>D4 zGA*MXqXJSW6o;`2h1Vuj2B0+EZk@PR81Fl!`v>B^R)<DGg_=PRFrGeOR$~g{^3jjU>0B zIWq(%QH8n4V%X~ewXlb*MY#S0!9fAD!J~^LC{*`ZQ((cEy~6`{EE3$a?`4CTXagFMv(QNgK&+%98!^8{3cn{aRO$$aIR@ zKJn{5`{oIK`u>%@WoR#+>v~X#)l<^JSU{De-g@v!b(I=jLnoL5GA>xt9*H&PJ!EXK z+ozS`3Nd^9eRDHV+c1!6Yu8JhZopVaf$v8}19n(7Y@E47?Jwfb z>Z7M_L5v((Q(F;2&6VLUVP(h|&-QY9?Yfg%QPF<>p=trPg{W~uX?350XHqq6i&^8Q z8FK|e8N3ygb$+1^l+1SD|3| z6`%6(%&~;K*}8OXiPPgXiLJ~=+2?CwNdEJBhF_VZ?nt&-PSs9sied70c0;khmZs#)LE@D3@VXX|Mmeiwdl z{6Zp$(2LT@UF^v@@fCyhW1Fp(W@vn&`qIb$P?>D&vX9$F!(19HOx?h2&`xg!j9YAb zk6qq{9pRB*cQsCF%=!-E2kC1rYZ>PS;zz)M8Jb|9dg?Lc$0x62>@y0wF0CIx&~RZS z=F%PVDxMh?i<-Z=9GnlK zPj&49%pJ}QXuagblc@MJ>5y8$N%VKyjy+#L0NzWBs&h?A!X{)Dx#KD{YgK5%)EorM znd{f+CH+}OlsDrqL45D-T9e^jRcpwP7tr5gFx^Y+Ue(Lv@VUqA&FDA3S}XuRt0l(( z9fK>Cv*T;=8Pd_-is}iY?qO*Eor=iY52%^YtKf-9Fp_dEif-Jzq#p6x3mz9sd}4LL z&$B6kluh3xJnv#lvZp&WU(8plovk=_e?0tmh|}QJaFh6s6uYiXrXL=f?eB2ZB|UAj z-An6+#$*lze=R%NfHwORS6@~NEmCHrr- zqv!A4EM2{6h|FbeKkyQvTpen%&N{lL_P-?O&ZvQBKi?QC{tJwJ9zEbO@!inEq;3&2 zy4rMcDLvfZ_GjdpEM&yz4@CrillkEqy5$?{=J!YbpFfA^{B_|$^Sz~|&WVqn(e`}# z44^KN$Ec^x;zG@=u1f8s;3&hA#^9>TqFlQ%mO6;@5hQUC}|eJaaSuotN2_ z0W`Qy-g3dlm1fhh?+b(Q_1(|OC*iHDYjm3RbUL}U=U~c&?s%8J%pGi-(~528O#XuX zUL1iqNpU&w|Bzywhq8*pO9NjzpB~sOmsJN5}Q>97D(gj#EP^vJXRZ8zMf% zO3hiZ%FjCz-}!9CmyD^gBXOA}-!g%ma?fx^Tu7CIpj2TY-Cwz1W2VoyD}1O%fiFz@ zu9@Z~I13%)E@_xaHSPg#0rlNu<8?GHj#6#90fC;pD;kNa_S6X8~2_2@>}Hg zXWve>9N2QRVY}gpl6Ph4AC{b!gxZT)Svk$yTMbi-3O>(#{I5O#!Nhw7^@l}cEs3d? zHL#Sl&N?-EEp$>dZY_*OEC^N5EiNHaJun!WOY|K+f)?3U#gEvcUsq_+UBz=c^l5vZ4 z`6=>lz4`Py^I>FwG(b<+k`Y+N)+yFnA#p=!dF?3VB2oN`c*3R>tuMewv|Xaq8!9ho zl56G$iQ~sw@m}iYa*-F>dKv@T1C!mleAvpeP^b@+Io@a(H!{5z7iN}Up_|JKRE5oR zyF~tk-9`B8n@(3DW|C)kAEwnGJJmEG>}FwtDGGM zrM76%7clylo?gJ%=*+Rhz!Mh&NJIg|EFx!8rwAtWs^0XG4Cs256-OpQzbgz-Vn+&tRW1gW z_M_%C5_f3kD}+_DxPQ1LDByMxdqm=kamkG#E`-e(4&#o8GqU9~mmUvr$bG6RU%+7O zK`nI}R$|KD0`I5*cjm?&h6;VVNRkAFu2%7`WaS{e)rK+WX?6{>QE8Vd7Z*xw3h$u>B%MUJwj2bKn9(cBT91IFJNT_j6dbP7QA(C+q?4NPODOlY zrs?bSE5rd!Hp7xEeeBVtB&5!--HiTB4|IwSCMHrif0az2w#&Y4bKbt=$H1@A64k7x zH1X5+fU|BL&$!nM%N^&>t*NE%AgCUsbp|915IrDxZp@`&@>XHz6 zg<$93DNi+dfEaB0;exI+pL%|8umuKM=D%_;7zOr@Fxl^?cXbxHD|0{hC#~>7{9Yd?{hFyk0_E;o4XuPV$;$|JZt*; zIo{Poabl)r=Uk$vHg9W&nrx|R7GHe13SkYBIHgZ__RE7Fui_bl8aexH)pJu^ z`Z*G}Km-LWsQP1Gt@*3<lweD0%SY!s)i0}zx9b^BB98}fe-MMXZ2K(;;%d@aMn zWGNXa(@5`^<$A_#k>}*fSBIF#s99;{EnO(zjhoCx)&^KlHoEgiNk_?Hz6djJm1wIF zK1P{9rD*4$r#D~_-T@8s%MQ=^c=F&6L;I~+(Fabq{<>nY{b$pouoFLcAA-7es)ct` z7kWP3{L#Fws@eI|z3m^_< z%joV%jN|F;qYhGihC4oG?qa-v1s44%dU360u7Lx6rfD{iz6BBZWnmEW8s7)$wzXk~ zJ>yFKT=q_5ww%*mcyMv(tQT(G7^Y(RMHk4Edj1zsP(+4E^UOtkj9%CxyrZ+=={(& z*^=|^*UswsYmGV2zJ7hPqv4@KC&;esv`x#Kw(iW(|Fh0Els6(AB^;p1zwXF@kC(%H=Gp=nP&zRsZ z?G6c`K*i~0C3V7-EO=6@C%-os#$#K`+g1r!_bR@}Ho$;z+>|~^pwy`juPafShgPc| zdLr5aeyo~bVPd9TBTmOmpM%|xFI2|y+;V*>!LBgXM-+M5OJ%ln-n839Xia<(-$YnM zp9V1r)$m;%x40?Xb9Z$g(4mnmLNG|M+e4!IKV%`M)nywRVouPG05shILr_{iLF z-j)_sG!KEvIhE6K>XwBlj!vO8R@MHrHLczRB*K9(KMtj&K+|M`O{<4t=ev9T~f_`W@EJ&ZVW$$P`tMYJSIfvlMd+(0U47m`dlhz5;_U zR3H+W^oFo9M%+?{zLHx5?{XKC8B*nWrqsNx0d()hmWA^Uk^AyUC0z4|CJOH=tLBzH86%glYNA z%BpF_FGlGLgTO2rC!7EyeoNoI&mK^Fel)iV^$8tpoXezhs{B>VH23m0x5eR_;JZLu zd^qn9&M{@(RbB#LF_QVAU;lTmh;)+`99k@a~ng5WQ zsc@Dq!W@Ktcdut=S}N4Kmm@vJXp7>MZyOA4|Kp6FSYz%dNUiQe7vze+K^{60qkvDc zaaRYri1^%G>|5l~s1F5MFW*d^!tE$d-bbbMRsokV{ zT7UF-fKc}VOQo}L_cv;6{}t{YS+<~BPf>Xw`Vg>h@&ad0zlq%qQ(|82l%?N9s2yrf zt@ZoovE+p)k|oes-XX~9vi#sNGDXmS$WLPW6RW4OR~AkcFE!!!7u${mETI4VoqMh% z@vQJV*b_Ty4E?di=0%d2`WiLJPjahvgYK36Hd(vFBSpM%R@K&l`e?N~SC=xY2)s0QM84N|ZjHO^?WCbjL>-_i}#l+T*Ny(06c$k`-SBf$wjeKJ=9LV6EN^ z&>X!JTX3EYhnQQn%Olb&Qd^sHwZ0)X*`WBjr~cgwN!P$Zl-aWkM!yYG5)T$@?&o+$Z2kl%xBuqp zj5C7Th@h^}U^$9sCMnAt{JN-5D?Wo_( z5K?hHh!lAQH?nHAqKpySwtMybDD}hmH@hFaH$S7EeEnPUcTSEB!8PH&_M2}*5b}=a zw*|X4iuFJI{p04QU+ima_p=IuMP|@GP#<3eZZ!x#$qOu<>DyIezh8!x`Oq{|iJdug zbJLi=fb*w(UZg{_J{pPg>u2wKwu*1ci*HIdo;BQxGMg%qU+n#{4-0lLu&&4rDR*!w z^dtF*W#u^3Al2{aM0aD{(bvKD#AVfBpU~BYl{3)78V$`p&aY|4Ez&q<_+GW8NwJ5G zFVrvybk*xTY>uoW-dx0(J;n4ZB}uL=V2X^Up7Kci#61MR?zk0&Mm?@3ZPJzcF846P z>x!+qjbAkTDIOHGF&^+zgkbvl*;BV$tn$TLW8dA3X1UCz!l1j|NsCDSy6HD}4S#2x zK9@0+V^qi(LA-_PDN^#fCg8a<51C216t~Tqt!im(0jz5LU|dEl{~TfWYa|2*#Wm=K z7?(hGp7H5s{e|j%3jA8apXJ~cBraQZiPa^%LQi7bFB@!MBaw_6SWKKg^Q)8C*-V6I z7JMT%U46Tlc6TZM=BtsNYE*Fa#I2=4%HPOd;15ZZv;T9=Z;tn)oeRST#y04#I@^0c zUyhsjFpKEB{NLDHjF^kVEH#9Yj!aOSgo=;mX5&5;p1Ap z^$^?Vqy`k^;XzO)$z$Zb=%>=H9wo6;9LRmV&XTGdJsk}z6Kc>EHi?=rq;n>Z?jhr^ zRRJE;K!GP)Xo5eiU<#O(RCv*=aRoz6_&5KyEqK zYK0^!w3D##Wl>G=V9gOgVxw{n4CX$f0B&|{J#K(nQG7(n5@vhaeis=WY8GO=j|Fr2 z$M4J!EWS#L!DH!j(mHIVIjoF68kJDF<5l&S75=8D5W2n^*7; zJ!-`5CT9Ll{CS|N#H+1Zq^M7v=5Wk_@M^B!Z2~z|VT6l2I&#SUOd)Jlv`?*~qYhQM zGZqnzu2)yhodi8JMxdA_3~3uq8KA5$6$h*Q9Nw5;LJt~m6BM$0QC`IO9eEH#C8SBE zPaLP24e`Lv+=t9uDT>bth+x`ac2Vmuu;J6)k4viJwyY7zk+AsaMaUq{$ECFADYunM(U=QErZK?9_^vJu(I&bj#%7}e+*2iVlPM@<#B!kY<0Q{$0hnD{ zY=SsNCYdIPW}SdB%{#F&F#0cGXh{3`fdBQE{k;#7eyV*hGsV^NYdX^j%Dbj3+R)pS zZ752QhbkAK(pW?>Iw(J%-2eW!9$veZx7E;5*Q=nL&FoLmw56s_lf6aFZQw zdcHE~+2m4Qk)jzv*V;oe-z7{NyJ05Mt`8wMX81!r;5fVJ_-^8SaRf+>lbpFmesRpW z6ighge0P1Pz^>>bl<3E=Y1)|R`rKre5LVkVQLhMk&!Z$xt$}TKFD*O<%Nx-ZoytQV z44zKD~}G$E9_=U&(A2&F(*OV6G2gcil8hceo@>VG<4;QR*P&4&AD8tF9ij`q+?DlW;w#POIZutG~t&#l4%Zb%j^cf@dDl-?M;96{qdkWtN?> zTerdxqcQOr``@~r{>-jB`q_*wB&}(z+Yx@vpJXBOaTYrF_A+bbYtF0Nf#%%S^}pMi zY~{b}_yy~+7g^o5h5=TBP>3kt$R0oSx%AWwOmB{Z9!tBKne;fHsHw0Yr@PMwAG6k; z!raKaL%2Kr>|(JPUu1haP#G~V?k+>cnN){5g|{>FhI|x@wxGQWBVi@CQov7&$G=7> zKQ}2RzNmxpd!2S!c#QbET0I3EJw4omFAYRuP16DVKB~e8Le$WchLpgCiGbKDhl5~v zVT#X#vu7()Y*5zl{@j_Mg5g21s`(f5S=#@|VTYk&()QbXCLd@mDKr`D6PMKDBa7q3 zM#X0GFh5`k(-=yv=ZBwrm>x#gxtQnorA5?WCZS;QM!F_$fW( zj|Itpjv|TCf#rhN@cZ*ovJ}#W+U4x^KboFt{|iL0I)C~d=VZwYe4VG7&v3qn{I^=0 zc|rNC{lCC`*V~aa$L)=?v(8gZ8DeA&<6l5mal7%>7p?<2Q8WAhf0rhW{mc`Y`~7)p z@2K9)YSXu@W@C%@FC&JiQqK=_D2~Co=k8RSMw#YZ1vL_TH~*4CLo)d^_m6$%{J$ol zjT(JXk{w8%%;Ble`!6ZYg3WXXt+ye?^He5^(*ar@I*ChMftd0pN!s0-_jG;p0O;cb z*8|-3Iofd(XDByrEmUYQj|dpS=}CJ&1xi)3gKcr+CpATQmP^xvn1?Konw#2U5>coD z`5QoXMYSZc<>^QJVPu!G=~zLyfl;yzGW}nU3xHWMe<*_p9tu|*K79jKl$2VD1$R@^K~RV7$L%8 zcL)w_0cXbndqbhp?C_|L0lj9R@y3 z%pHGl>(&)qOAI`Q|cS zWIXa=PxF!2DRXp!3IJ}ce{Md;PE)N^WdrYQMeQ<4egtrAO(+%V^jMnZK}^OrT$uFe zv=uK*zZ8okT_h{`^66_l66II|^2MKyJs#o!7bCxRx8#ie7&K(w())XYBCXCCdI9X< z$4*sAH5OPpY3@DBL(Xq?=p0Kl+Sk(Zm`dq_KN?^phtj&Bij;AMI*nf9mo)^M5eq=; zq;Ek3-6ivGT_~%qYInLo;S!CgRFLnbLHVvqD1}aHo0tj4bhmSb| zqU)Y(!@Z25fYw9M^@jK;4l`M?q|&`aOyIyZRM;4EAua@DK(dj7F%3>|Yb~!IXtU8^ z0iiKfa@T073JrDGX7?CwDCV`Bo`M`>H=c4!r5AeR+DLt*Gp#Zx{YL4g(7kP}0_)v* zjcz^-?nw3C0=+P(eHD7gd3aE=o1jbXEvum@WCU{1213w(oP|zN#iH;HueBzE^bYi#u+^iD(Vt?NMGvCGj;RP5FSGX2tS2f@Q2Z| zu?cF@E>EqA5Z&A;-7+p5ZpkV96LNj3m#Sw;&ck8tv!-~Xn_X> zOW3ssvw_a9%vVOfhG`S4YxG87n-a@N>^WXaL474moDNjXh4KALF_jg1v1ba5+UZ)7 z=_aiV=n21fhfkeyK5s|9YyxQcq_H^=aHMb*_;60Qy_6&}3b`=2MjMZcJhR5|-hT_Z zh*7*#^X7`5HKt6B&G~_ixY38uN|oj z0C~yd>$uh!zLyZgAPzZbNp%HTktJn6rk;&{ezr90rDnKY^1q2EIR@JYB$|iU8ZD88 zBn5sMBo=Co4+X!K;Y=k7e5uAseO6BquWAkxU}5KdyrHDR+=Rv%IE1YfVy~`CxZ?Wi z4vh3LE+}2uWFuF&!0$wc}C>qkhCKPu;0a)$UR5%vfU=g3Lt)kSu%pAKh%(X>7>FIJ!@7S}HoZiG2=u z#8x*~Puqi3NfM*hMp0)p7Y#+!fVdd54E=_$T4T z*^f=BCbllVorH*O)DXPv^H6?+!j4j(79fcNw zO+AX_$1Pchxh>gn%2tg;sSnDR1T6Wc>TBh_C^g?eAh(PU9iFV!_T3j8Ne?pSzCABL zB?^?`4mP*gt4zF;_rI6v&rpL?LeggjNUE98l?1_{j(t*MXh{Pvfil5!Ql3P{T99dwJ zouM#@U)itp*gF;&aqf5T9*g9RX|9xDG8Rp1Erhmq;%76bc-FDqncSxpxRKa(!@HhK zjfLc{ZPybX7lm1~WXkCe-480(>5l6uI{RU4Gj|J`=Jvrkdi=~YB}o&4F1q?-qZh|q z(k$qWN4LNOB&nl${xx`bSnL>W$)Z$=HIt4zt`=P~U6a^>{(!)L4_RIG{JJ=c3`nD2 zPJ#KayCyrEPX4DD%qGp0{0~tSypgRkjMKLVq&CIolETES9OE&>Loxg3;j64Sx+DJr zPd-05@Gs!wn6qp4Lwf&;7wW{9Zyyk1qD6N*qL7CbEzN%VPb42%LXP>yz5ifFa;Dd~ z{TdxbVxU=x2OPII&&~!IQ0|@6{Da`{*k@5vO0o%u$KSP9o+;Q^nYf*>RwPL)ptUTR zf$f%tw`*rfKhjaus>{>1aX`RA*Ima839S*lT@L!i2aWIaAUlvD=>J_fYTni&)cI7@ zZ%ny62n?qbx0mNPJ~Zw?;38j20wkn=0hpvunb*B)uz9UQV}b1UE3H9|`U+EV7u*+d z72GRs6R}TUuvaBeb^@oKw@K5F1CDjB?`VPaBfx=!_=h$^f}-APO|W-}@nNC1iTvan zy0@&QlOASlUVy}rA*Oc0cJP|aR%Gkk{_(oTF_^jD(lE|W)n=~Yk+D=k=1A?*dJ5my zyRwO+sRp+ta;)u*8enQ1*6LLLq{t-GLKuFhwAvlC-*|*_2oaVW{`8EWe(Ks9thG(+ zft0NH&3qaW6UN&6Sg*iH?6kH(h)rjRJ2@<#Ke@&=;RVvFP5t~%eD@3SX=dik&lJCJ zmv2A*dP8m93ir^f{^H%f+Z87!*w-FD`7w16(Hb_bzY!&<2{)gF{snsayFc7_(vSLe zRN3Icz=LJQ2`{w=|LF|q{?p9}GWfwJtD##$ZSR4aDcPW49+HtL8jUtU39*O7YZH#| z8`)wkL(w=cA-i;dJ_ZtV7a0sG#SPVSlgi!-JYjA5SpUvVM|9Y2&1{;& z$WI!sr>HJ*kxrozfhFvk&}(@s9eA5%3^oC^1;AB3lkJeEyhB|IS?T_FsnLeD92 z8q6lpUq!fxM&-h5jB42l&HE7E!f|L!cOfW1+6(4}fIesef_MfbUhHq+PWdTj#XpdA z`rPyxdOcO+33zHal4&GnDrv%aizV#lB~T@>tS7HYNZ}(8`bL;M-C|i!fl?$PTjSP> z^;$Dc0o7J_K4lIFvB8QpA2PyJWhw>bPMYbMO;xz@M^JBT-&*k_IJRvaG6J|Wy(R)~ zj;S}LAmJAw?^eFf5_AgQ#YIh@j_pD~6O9jPnqgY+;rrob^l37^jbG(EE^bh;j#-60 zbo?0{A~B;M-It#wQ2%9_ModnG$`}h5{4)ic1)heQeE08@Scz=Y#L@TFHLU(@9b@>m+Y zBo_jn{%UOVFw%ZLhKK8c^pP{`P08Z>9xcO|Lr}O!Y@?U4Q2DS`(DOrJ?lV^wj`aZu z4{Y!saSj*t^q<>Qv~q(PrSbQe+ID06rTtl_K2P7(miH*S?iQZ`iC$dnMius$x>6Vv zWXDj0`MJ3ZNNywBD<*g_7;kICR0LG#Zu+;!O{3!ZvO~5bmIkI~Zw>rvk&n*Zy!oYuP}&(pn-~leo{R$}PyRc=g;{C!A>BKna#*X++!)+S+LnOzS)q#j z_-*z)crqJ$*hm3cSXYSU2t?Itd7`Lj46`@lxEz$i|5$Eo4aWXxkV zkNt#psmi5ucaM`mO{I3OB5ooClX5A%7k#RJ?_Nd9F|S$@Y!Ey~t650o;vU}|sHN6k z2+M{K?c}FKWZzx7BCDl!DDbBW`XtLlIVh;@ogFtNH0_>KsNU^)$o`CRO7S~8)ILod z!@0%U3m3ME`01lbju0ImWgl2a^>dy%zw>g?);jqy4z@m2ceXV?^^>i)qWuM~dH>*>+Z*M(c z&iSVJ^L*NR&W!Q)z$z5em>!N$m>Z5xHKJ=>nAdbH=!vA-JaduB6D=EfeTwWhd9{js ztw^^6wO8>+RZCsO&=nRu5XJHHsEV(xu$?&Z5dZstLHZAfNyDb6J2h32+qSlYfGsO1xGkwZmSS#y+>W5Xpo&MNb*$3sTYDujvhQreE`-YPkVs zAn|#oX`tUS$TEp}JAK!exeG9JgqK4z_uROr^(7o2gkEJ-Cu32me7#`wr^gBnWc`_ zHlC@7!asIj8Dqvfv#R$}hwp(jS0`R}J-!rgJf_meGU7C83Kb-;G!DnXl-xkG{PbCd zUo3Esw!tAMYBuH119rdE*6V(FFbBV7KQdqMm_96!4rCb`B30GZn?LGj|6WR|B3Ru# zyJVYo`^~Def$86~7A?(3!)xX8TeCLsU;q1@m2<1?AB%s|kDO4Xd`B_BzV|O{;<=rk$%R{#@MD7nUz|*< zG>84F+zANrQ7qbbBzw-zpl-U9Udxw1Q7 z0Cxurdvp=E7l$Ax4p^ON1sQ=oPI8YEp#*v$4uuL{#q6PQ#|9KGTUFporhd#@vpdqlTJKn?ZZO;#rDZqf49+@KZ_f zB;6NoO%Bvb5TYvW{~`MkDC^wv5&g+EwuW1w*~U!Y(ObveiPDM~a^ksc3|5q4yR>Rt zz97q73-~S(0%$BGX|mx!dbIz>1yIPjV-pM|N{lhfm}EsG)v5&`-Hh#445oVNKi@Ne zG?pC#)i2ZoeqCO-W2-H7rcfT&RN>L7+Ig=U`g(b~$8D5KP;$b$@5oq%%v48gbw{Ks z0c|n-{k&mFIDx0n(0vz~>X}+XT!2;G2b9Qa;i+~WoQeLkgi+ozrc8+|A;}?p#|!r< zl!*FWQ@S}AY8yJMca}1bexeZ=#TF~iqqfm8JGAT;I*NY>c5T4X8s;!4Q$PaWDXDDK zt5{ncJ8B0!Zm@{=#sI9ny77z>fKxag3vVPdeLB?ySKCHH|E%zyLweoD`JPUS58K$?AbE{r~d>b6Y*Tg)wcFcgj??Kvw-c2T7Ga?@WX zu9}C|F?YaStg)*X*F@ZNKsJKz-gVS|eSG^)x^|`C%Z(!m*IUGzY2M2;s(DDOZ)%s8 zW96xKtGx2VVB3pxI^pOyoFKWvM%ggM6y>yMh+04Ph-J@z*8paG$80f97sXLTwgKqg z*SvY!uG9taN8K-PyW%^&j6Zqq1LUS#L-s1YQq8k^D<0cKp-oA^IHMs&`AeL}HQ2G( zGcfttITz9sfSK}z+BWg@JE|B=GjWY;spCkxIX8r?0mP!iJSm&F3)b{JPNlz1`R(}U zle{fs_QyNI4~1`^+;L+JIy!tt=9nd{cJ9LL{*ix+D2V;&3cmZ>8Y3K$;;2R3<>AJx{jC$_O zR%q{IYNPbd8)-+(K5*2EGms6PW9cGZ_Mc_0tsfBRhhm1RW9we$yN}v|^>OHd3k}w# zsDOxDWrv?vz1*dv(8vnPE6a9S843h#*Izxs&g}5%cm&pT*Cem=lNhV0I>zs7+j+%) zJyQKVyV`6)`u3Zl#V>Ihd%|&>>FS#`7^E(GKgt791a?Xmv-bZv9EJ1^w;MV~jg}_- ziL^1kZBJpPMWrLO->mZP_5YV>{KiET1i$5@_D%ywZZxmrevOXYLioWmjAbY3>w9T4 zI^s8ypC@W--ezu2d39y7<&Z+1mNTL0vCg$zA+bpikdPcTBgF1KptmGE= z+_L)9<-B{NH53T?5^kJW5ZN|fTx9K@&&oq1khS_NMfo@%Y?yJZ0+cDsw@ znx#K6QCx+`ZY9P_PP_ohVTsQh*LsmnL&{Q2c%N?=5pFgQ;jKig@`L^#N$29vbpQYV z_xrsAn`1L)X|&DeoKuu)jv2;`ME71qwDv+zP~@fZrI`V+VlB%-0vvE8~jIcUPBx??uz*=E^o}FL2i-RAgdx8 zwV|8NsDf^*dgQAl;Gf-}7|`z)Q9lx{_Cz1;l#)J1M6@G#6>P~S{H zd}#`c_--t4WpM8&z22}-ytf#gc(Wsc&ZrD zpJ}4)^mYTi5uru?3%@hk1QEYnI59o*qp980AGe)&tA#6dsJ}SAc;nCan=1c7 zs-Q*Bhfge9Tx*CtlLo4>{{R?`i<>r$HG16mvycDv;QAVCT|WPHy8hV{14EmiH~kA_ z7ojU|PGwvbJgixpbZ$N)xt4z<4wWVgD0Fl+EmSfciEN7z{w!_+z{{ADyKdDTI@L_N z<5xOtJs=dHgU@P*TyJ>?$GD1L>f&y%FSWPBtBq#Vb-U>-kopJAAM3UQVvl+WG!qP> zyhL$IHxtL;dmeJc-RL|2I=+j99gk&HbFt~CXlPG4#m7NdyV;YpBnUVi#07QOkxgr1 zrlWW_BwxbSE$J|mfC20!+T|w3CP%wZD`SV+DJ$S_0y|WB?2z2t-Em9$BOpETfp(|U zZg5-bDo0|r7Puxj-4(Qb25aVU(i8pJ<%FNidqIfgByRJqOfW+=-SAy3r_0Ao2KvD{ zGuxf8jiaqpuTt@zq|I{+0dShRlVEDxs`R;CTqZSKiwNpAiRPV@s1}0rzyio)$P?tY zS*0p4vyp8M7~8{baMLC3&@P&sHp^z^Q!x%0v4wHgm7D3-Z2bI^6K(s48 z?LBTy6=^9{(xi6o!0g6|_gHWVmFCnIqqo4{&?Do_R)M{&WWcA6&fN%Kt*>{V#IoNW zq7-AYhDm>DVwA?VC8@fF@aE;Fq#4B9w4!Ybwos96gP&5LMEb{R_#wzigUBrP3Qk+|+=6-N#T%t#LUZRO|>@I;NN)BRRWHrK` zQMi@4DnDk!0*IT9=H0@O_4*ws4bb+e^&D9)2t5m;ZIxms+qUZ5g2J&h8{+{Q#ANaX zxdX^VBy=>!k3w=%7uuo4u;X~McMpI}sxK2eMof+%LEzA6==kAtBYk$Eu-j~dLu~W} zekvBCH3?RxcM?+d1o&H32TI12rUjARS%d$TTiELD@FPuvBa!6%UHhcYDKRQ(C-z`b zMed7DV^zzy2K~JM-#X(`!?e89S;_5XM*%+e6hb0c%qcDbO-hxBUXwvH!3c|o6dYJg zb65t%Ej7L+F4y+dJ2G-+1TP^B`B0VBv&w&wiCYdn3dwf)z@#$kc+p5 zKrLG-MvAS0!d(pCM9nj0k|@Fvw>)&ID|_}dqjA>rAKmFBhAz8vqg3*!yZ$ts;uW>v z_KTg=6!bCm$Tbf)fiI$aCvW1RYS3A_Ww8uMQ`|Q9Ln|%tlz{o z-x+*hre}U@euhup@dBvLE^TJqn@MJE;?j%9V`}Uv+ZheQy7z~EOSIYp?G~lqw2~u7 z)WeeTV4pnnx2ZMtc~XzBU2a+7efNf+y~C`CgeD8!jVW#|deZ4Tm*~a^fF>^||2DmQ zuAwQ6c7k3~Gt0@m=bNB&|Dnoy+E(+=+$_3m1EXyp@sj&L2!r)8=0?nxr$o|rMvUij z2jEnJRssAlw`25l1R}KI&9&ej;`Ugxx4rtZHYM)mtFsp-b;GDL)>S`aYmj_AWvIY- z_*_Nxz_>PbN3-Ii}d~sg)S@UM>^;e%F)lV97qc~aEiJ0TQ z+3fgs!{YqfAD3_ZILX=P_HakX(oGBfuY^gly_;*+)zr*S|1rlxP|XQaxAs|2eP)8< z2V>*eprQL}dc24DopMi*YeW(%cl=V^h0TL$&CC{- z%T}mGKv(Q8BS_#q!G0|jzM2l0V#srtb8-})RU1VMl94${05e6ow6ETBW3w|km8+Lm zR>`a_q-1M-h``;c3_Dk=vDnj%y^JjM;DYa_AA*LctVy7qbLT!))hpsj&3jpojQn87 z0shV)mADHItlt~-Bd;2t@t6_K>^bzPJI}L{&eo+~2sq>RChfv8y^+K*bfxBY%>=Yd z*0Tg#i3Di7Mz^kr47a%hoC&Xdt1l0AW}GD4=`uPdW06rSdG@r*@RLCZs^$;1>FPs? z;?FN9Bdiaul9faSyI$|-2405 z3yAiE|7y6=m-@qU)8nshe?q5c@zQ6U8@%@*`!<@jq<4ZX6 z@SkIEzEV32T)*x^UL7Pxq&S8-;;os|Aw4p7`*lhuR-YNRxgOXk&VQkm#>Y0mJLQ+H z=kSkCz>m;y#}i6^D7nqdxHrCyDcu8R%_70?u@NF2Zpv=&F!%VtTNAc{i%YhEuS$A> zm{PeEVkcUJfS&^$nmFI!FbY!Zi(#OURkqvFV(5K>yk(3LNv(UUnD=qf2#0+79)n>&37Wdd<@R(CDSRhH`D-Umaa(R&rWD z?IBs^s!I?!N@<}3@f{LgG{jq;{#faFb-G&RA~zNH7+;K5gS{-#CGvw2a~tF$sbgj% z0>TshP*sdD@Ow2bl$+Qc!#a#ye0Z*$=dMJ~`-l!YaESpm?E#tSp4+1|pwdhlq6H!f zAV5ByELBKpZ&|W(aHu+zjg+TVL1FY~%YcmdFy2zE4ZwS1(^UyP$(C{;tRn#`9#wbf zy3z~joR}E&tpD{PFU%VJ5?eWTvNAvMzei$6;1NEX4;7nS9j4nZwTKMT(8zjw92Iqb znR>NlkP4&xuotYy8I~J#nhHcxJDFdiITLwz+dmTK zV(azLz3xcMb%H4UMe6CQrwW|5;5z+}fG+8UAEA0p5@DNKU2X^FsUx~NPS16ZE`A>r z8eBbUFEYdyXHw1Xq+iTU=S0H|Tk1<^7Uc7ZhK*I{zY4&4V1FbCVagnN-k z2iwr+2YTUnd+c+ft7*k6aZKrx+{ntCBW8>DN53FT*@XL!UwoVISAO+b8|mnU9?dLP zfEmra?-+Rc3SJ3zflROqCuvE8Gus#&NH!{evsvJ_6?4nTYuJ%rLM0L2uaLFGV#Sip zZ;LHsygd z8`6_7fy54|Rq*mt`ULedxc)8sk>o#F>Mg1hS3_W?Mw<&$JsG5}cqeG|AGGBFF@Rt)qcde&5;w3I(@QPAzAA0bB zs+A_it!ZL;d^^0stn|1vC*v1y?IXck$}Mgh#B-wX1)*-}E23!)Z;*aegK3)-Z5^*0 zHHhufyG3oewMJwfIg433=Gb(1s-MPz+rHJD6Y^6YhQiTt&Tj48zAkyFC79E@uJoF; z@M<%iCHI)CcVENnql`_hJE<1wQY{ommOJ!4O;+$~KHG9KQ! zYu+fgv)6ibCy#Yqr1Z&<6Oh&Orkc~&HWuU~J%c{_*MniR@cjAUFCUQ8Uf=2ba8c2p zxr>N0Z6i{%nE83V@MVp$26gn)V(gpBq>Yomxs)PGwbM!0o{l0m;Fn)NPS5oI#?Si) zb?N(}C*l*hx%%R|#S=A^cM8^%t1&Hb;{LXr&l!bhJ?(uD2Lqf)HcHom%bIiEYmtYZ zn9>pPryKgvU+pbou?bHH&XmB5A@v7=%0vW;{6-f69G&!}@&@R~HveE7%rho_f<7^! z8_Soq>ZR$99gBY(R>L-~wcF7|twM}u2Av7-oLYnmB#l{U^8Rv-!|rs+G%jYcCYKoo z=OB>X*ahB-e}NY4wXjEC*5l!p{b14r-{$c_k19o}vGxk+o;%-FNVE8y$s%KeBef`MHHy)gNQ8&H0>i4*PVZVUC{Zws4O0fD#Uw<{I7>x?c)>|7kvhowf zZv>m6nld3@CU*TgY#Sil;u~}g1moP;tmGBM;#_?>LZyNkte0RRSfzB z^v)&l1J_7)c$lj|Ez6a-2?U|D5kJI&L13g^cFOibhtXx-EA)PZCCMwDH4!m-=pC4t zaLhw-%u(7sns)xO>C``guzo(Z&Id-Xa(3~@<`~`+_5i9ENEiAX+@d#f$DWd<#7HCX zh&foEKz}^S#!53FuVOoro@!+a%Pou>GO^sLCl>t|{7wfCx8cT+>Ox$gIS;lIhX%?z zP#B`CkuG*hLcHy731+ugBrMZ_yG=FA(v+s1L}ed0o$n#Iug2#mkXxc30(8?*p&`og zIKr|1>KGST#>R${#KkQ6(s1H$xygodCuo4_EQOY+qrby9NVVCyU3g}wVlVQ2GD8&Y zc9|G}5T61p(cfTPU@04jZ=o``7NrSREM+DQ9 z8>Y#){PaHq5F-p*+p!gXAt{UV6=ahV=#Y9F#xap$K{LkyCb5BNdoXSY9wMUaV`00F zmYbMxL3;GKEo=g@;`G5Mj8yn{Tr}B%#1S-|L&E_c<%Kl4aq7`PAGsDOE7L|!l~yGh zmpUS@mKO5@a9Fq<0hGYuHg~0&xv*Wp+bFN-TwuaBHbEP<8V}cBQod~7tvvH0myk*W1!7tnviU5~wm=Vgy;aXP z2f4;{Y&wSS91=|hJ+(PfWJI5S4Ca>v9s;Zb zuNZd0DWfIVkfN|-y-3@<+`$DM1%zSrN|hul^k);?h(QI*bw@~F8zh-}_49P$m+Bie zm6udwKa-ZNdExx#=#xt>E?l-N1XUU8DNR#*bUMLSbv>d*ChFQ6+D)X(m|!-q*s&b1 zKgp1Rhv_S!JS36o%X01}<%uF9q5+*N`vBueQMDw@{J(m53}p%!x45wr(27 zAJw!yD5g6>KN*rc2ImM>WCi*;e(PD)-nmo;D&Y1mVG^%YifuR``XKu@T^ZI#VD=Fu z!;E8&AqHLjW|`jezrFRXeh6JNsyihN=e1@rY#kpc&c`wX<}j*1UG4u)dr()fgh5yN z#Oj~-^T|~{k!U|BQIYc&eTuh_j0vu-pf@U?PFl07Q1Lwa^`ZN6dbvma39!s4$`3ZZH=7YtSG7V`&;;(w z$B0{gm~3KrJlHMWUtmxf+1;vI&o-F0CylAX?c_!)uC9p7E_y|ZJ|HZ-BV&(=KmRs? zyYmabjhCYOZTh4jA>XN&^RYy`G+b-Zll$z%WM#>_NXc#}=ekEy%2!iG<~?PS{HN+Q z<~;1|F0VH0O{@b;3an0-Tq3`zg2TVkiZ~&a(8AV%#EdWd*SV~FHFW(8!lLFEfBlFY z%=$59lMgD@eMmXy)%nQh7ru=n8uaTt_;sbuuV!1{X_g{C`t{)ImyK(a5mCpsnuU{l-@oj;&_8%0uT<*1$!_G&8atr% z{M69p!x()>$vW~$XX$z6#Ng3G&Q!UNpCO8FbZmZEK>S7qTiUuR-mNWFGzM0m?cmo2 z7>4M!p2M@^Lu;*8b2-ms*~W@|rPWz_p5t$JY}^C`e}(%mP?IVukq`EupJuV`n%I8_ zMZ>fs-sGy!xIBu>JM<0Hv`3@Z%8(Qa=t;ZFD(f>1EdaL-q_3-1wOyC4eKg6NHZ|*Y zX;Y47Q{&HsVbi{mOgki0t6sh=o`c_TuI%O&mv1orPw^cSe%J!E z)0MeP%WajM`dE}g(8a$+Ponk(t-T}L2Xs1zSY|dzFc?!m%4$>;U;nRJ7n&pXx%jQ# zRsAlECO{Zom5rgJC8FFYXC%G7B0(?gKhQzSM#C$o*8Nb?kena*h9z2)r&!)|Hw4q-0*pQvY{9I{t;hl@g(dmMm?P8J?KpD!#7!uu zh>?STi}`DU8j5(RqR1zg&~7s_{61OP#$tAmdkkkHy?A@Ybmhebxo7S)#f)gNS^})k!fyn2sb`y#!H}GIX zb9blYV{g%&Wzu+yIDl`+3CEZ)VEOFHZBko%1giQmiCMfQr885(aLw&f_wp^8okLwj41IIkhK}eXwA+Yu?5IoeP z-B3=weyevitR%KqoIWgu<7d&AC_2cfUH94)u9IXa7MJT-kJM&riz$;*9Ww{vTmp0x zeM^c`p5d^9su`BqQ68*09HQmblPGmFySZhTX@CA*o5~HYKAvw``$_1#mEw>ZfVIBaN&}v_a2FEbv(%z=v z@dsgy5TP#}c9Ao(wN&9I>|x=Z5O1UO+N>#4+Q~< zG@9%%2H|Unj|j8id+WRDvGGs?-J}UHikiBR_LcYu^z)>$>_~>{&L^I!SD@X2lWwPv zM3OiqElksVv}kX2aJe~utF0z6AN3e11U1zF8Ov=Yits#GYw}8I^&uh(?|byD)su8c zR2M*Fuoy!lYstz^(NA!mB`nzoX)asL>XQll4uX1^K=7pWXm#I5Ns+yfz~V)Ttcnt+}B zWHS)e<2tq$PtwZ^|A<5mXBK8=k?cUkA9gOEe;oW{KL6@zyQfOFu$J5acE1mkO3@|w zZbqotAL^CVD{^vIr&~nLH;ys%;{C1^65St&x-@Sq!N>nI6-! z_DVd|I5O*(VH7b6CG|bi5$D^B@#IrqG9XOA9JD(Jzel$Q2(fZ`R zZ6Gl2l{s+0@O24wQo^qT`PD)EnnG@G$_=hX9A@K0Q}`|ywt0^Fdy*+pI<}GIboOnS zNrbWEijokVC(()8HOiTl&0<_`FY!P2Bv8S$TLXxvt173bV%Bw5|0<=d8+n*}MJRbu zb7niEGS??sUV8uuP#Mo=*O0Alu)qs38IBt%pEOrEuoIVu8K^rvg|(=Wv4UzY=Hpl- z^KfhKna$7}AY!BNJ=3lN@eun?)ZE{4a`iXiRWbiN z5bI@6H4EOPsi7BORQnR_14LTc_`=ynYk|eMKNPi9x24PVjbAnN^yWzaAy4{T;w)Hd zy5h^>`D0o>2v^wpuB21NQWFAS?4d-;`9Fcwv(C6Xe6Z^M;*Gnb z^`Dbx^*JxWj!V8%sA&zooR z8@oRF+}Iwm$0zMtF6YY?BpW+8(sIO8ynO=@VA3m0G54>9Shf*bWjZL==Mtj#T=WF4 zr9(`eB>ZF~pV3C*;Od#*;Tu%_3_Yqs&u#=4?iydc^+M8t0HqOcuhv*V7|H5L&&2V# z7(w0uU&)`NGjvCh=;$%V70@SwdH-Bl*qr`Z26I%XjP$SNW?2tPe*O~e`b>i_`lT`_ zT`n=TlWO^lhh>dsnbR0+&rrendgYjYRF`10SMsH%&=}!vhPR3rw>G>gj!1S7w+5dB z?HE@<%T+=ciN(I8whorT75ra>66w|s4dJMei(C}gME_>Gx5-RT47kbfmqT}Kdoe4? zlT~vvpv&fJeM>7e;{!!>wcbG4?<01BS{LIjzoE7Y!X=+6$F%#v=iKqCZ^DgS-;0x& zqZt@Mq5G?VdMFup!g`&Z%d4S_?T8JlNOhi+cUL^Sw`lx*?&AJyjgddKPK(recj3~9IZ39yJI)biOj>NzT{9$jc?MK$QYN@N! zPcug>+%A{5I|JnCbfo3R6nK+QA3cD~fZIE%aud!Jo+n~kSd>Dk{1v}$rh#|R+cHk; zwn_2Jmup*%+=8#)-qNvs=y$+Ka8-5`^F-kF-iPscbd_MWte%Ga?~+O`n{?dG#;mr( z345J@zvZciSBQYjrdjDWAR3#&^1yEp6wnnaPi;IB1)nOJhptUYGde~rvivQG)Ae%7 zYAxOs`Yd|VO%gND1U&=>`R0(A?@`Ki#pH~0@g&!k7?O5l-hdC+xZ=n^IKf?bucB!r z0BX}OHc?5PRMAwOKKxJcj;PECAr~wjah-Om$$-A*yJzzp4Rv>EpTsLu1^FgwPX)tG z9&2#M)D`%4EYu1#vgc0gkk;yqm@xJefNj!W185XM)}Sh51b6+2d$8b~6kY5n-}o7b zS{~x2n#GK4#yF;O@yaZaL=9>03FqQ!t-na+GBM-B_qIpeXIn?QI%gSN03JqCCw zpjwtt)di?deRizj>Yhkdu1^x!DnvvCKHyfObkq#0iGGg8NDU0xX0*k^7Ia~66vLro zMW6JjoWgTuAqLv3@D&OW_)RAx1FjDGVyxQ$>j>}a>gX{YFSg+jAT1CLT?1?nh$@2B#JKoQVFUxzNi9Uio)^fozQ85*HPK$;Pvw_s@NDbRLKq}CV3>d*+tuaxLEf+e5TmWPqpam&E(0!sI`R8#ct zaD5Y#6oKRF*ghQ(g`b0t1Ow_BfEwkjZ~!nXCexQ7=x*A(P*JTOh8duZiX#25swo!} z<=5D>-k;%wK!!hQO?GECS&UszF>oa~R@o#oT-S`* zc4_m4Xq|3bPApa=u;~K*+|r;!w$dK-Y%dD%2td!_Y0>P^SSA@=*CO&dj%@V*H~8BL zL>&eWzWKWD$vp&uz240d%J=n4VP)#{olOQm8`@}WkHSkr3|qO&ff=>NWUN z@gpsC4J`S!;z&)Z>jnb0)l_l(bw*I$cfsDzn_mzTc>5VK62ewG9j2(l*jDY!E$#C^ zp{sTqe?OjdXzL!}(kAJdrl`+)U!WXr``eiRO}9A#XJXvSF10MFR{qvou|Asa+r&Z! z`WdcqL)Ctx*Wfo4Pn1KsKd`t`EbROo_%KeXOHu3&tO_UI1w5OXkBolBrqRL9;6226 z#5oz+K3S+P_+B{#TyhQ?UJSqL7g0+nh&;h(pFG?iqUXVisw+xMs@1t=`{?jk#rA`+ zj#rBM_9^*d99Y+daR_hyS@yd!u}75SgbtN$XZ%6M{l)DXb@N+Y-sU}g zeUJU|`qaZ()Y-+cSDTg*D~^8L-?;obtFYPnuq;lel6u3r`7OxYWxoH4Rz^~u8oZ&d z%v&D4If{{Cqw?AO*MSmGM;wPzv7Zxzn}x>DyZ$AtnTn2sc08)&TQ$9+IB_u<%&B{h z54Pz-+@<~G);=?aTQ%z0XM;%@!>jt2pt_8PJq(woYWh|A-C1l*+CVt5ZOD7X{3s!I z-lfJbCkQ6&&Pd#;NlTKO#(yVFUq=1y9i-O^wZTuMi((OG1bN zbIIw~&X6c1O!Cm@JNTm^E3z@2zYw#a=b{}QI)@3!-?}~2CV|6 zYAU@HP9dm~!8_v1ht7OCm=YKD8h-WsxZCbckE4(n9p<)`e)0BxbvpsUTC0ZUFC(g!i;Kfvugb_f z_c!!Tk9Hm6x+}{2bPBK~o%06$(Q+C)WL=unWYqpPabzVII$cX6w&+-3vLC#|`9M!X z#q9w)fS$?`?uW56Vq=YECSJ2Z`BsyGA+v>8ecvHlIN0yaO*|?*>9Y0Y{$Bz{zwBSHV7wXJm}} zYdpC=R1;AqZa1Ble!AA!cH|~j+yk)b+2R^*+(7Vcj-gwzzhe*dqM4TW8CcE|9tc%N zGiJ|eRx@0gMD=bkMDQ4&i3>|tt+H2|l&r`V0`=5bAdWct*e@NQJyDDzCB8Mc9)$I8 ziB?U^;4XxABQ?p!+F=aYNYPJjUSMAkqcrS^6>5me^G(E+L_ifc_{7r$CSNJPg0c<8 z^Z^HO=`9;zHZnh@|4v7cTqWN zj=dJo03L9a$R^>vGkjLHQteCp1eTjSPlc0sL?yOlx}y~&%(52`enf~={AiR z#fF>?B2gtq1M874I9l;bcLzlcj#E`<0MDJ8dh!b`IkAURvWsF46|X8z8Q24r3c9rT z$b{o5aY465EA_Gi5!s30K2c#w*{u5~vNDNV^4W!}Mft811S~T6=c2BRpw@ zII+g6kHo)Oys!G}{?BbzJE!##c=3NRdpd(5$k0>FGme)@Im z{-pi${{r2wPb+DPkaV2x;W#-hE=@|xMTvJvZ9*BFGdXWD*?P{0{{{RhTnFf~siDTA zIBvww+#GBWR#Ch{YYoINC(GY4+TVqypb$$t$~|aG9KZQ8cvCx@r)I4 zeJCBdzlh6=|BVsGbwZ%Siui8?u2X#ERmWOZ=cRi5HW0=;cd8AshassdUO|z1AF%!4i zLGAHO7};kr;qK%K|1)m404+SU(_bF=bik1;xvun0)H44+4t@WNz5nFr6eS+D__}A9 z$Jq1bT7A-v+UJX9~{4X$Zv9}O7^EWzym8ILG~udZKMtZPILbCu}T8ht17w}#vac;}3&fBM=Q`p;@q1%PbcJ0+Rg;0*Y zvs2LYy`9qc*v1WljTwoua?4mn${%UJmY2d72c-88CGm|(D+vRG)L9DHQyofVunuv3 z#4N6jV%Ie8lIsGqrCw|3u0pBLkH5XDGKNqO6YKURp>LK6+fesQbAQvEcT5y6pw@Q7 z7g+-=Hi}=WoG>2(ZuJK~{7z^OP|bqz{^7128?E;v{%KHxdxEfa`mYWXbM~(@(0McV zzT2(u3s(J1`S1Kz<^5#2oS6DD|MSM5-FH9c zB+C~>h=scF%!?s1@5kh)J6;(yEU$ELF#9ZY8+%9dCut-3S#6L_146M^)^CQBnRNT$d7>0-V#D^k?I?!*G@s!Sg%q4Oufwe?>MUSa75i|(?j0iwX#Pj zel){L?P%0p5A2b6SvWC_cw3>7E8Jz%c~fWb6fn|%=r~OZwFNj2MGFrr&(JD7oZ+!c z0ac*j7r|!o#UOD$x_Uj@5*(G!$0^!SlN2x$AC%tY5f_7LK)2hTE|n968+jNSV#D?} zfm=o{)1YGmS-A8@wsuBU`kh|ychJP)*|tm|mRFr@!nT)Nq))P)n=OIvS|Lk|v~&U6 z)ui$j*lhJ9M@`_SD5Y6=DdeS6pNAiTVMf$8LsXDZ3`vVUIG7IPJJg%ylX$saPc+{V zx2F1LsPa;9kM=SK0)ROb)F{=RJ;^mPozS*A(d_|#Ck8bM=g@U_6QmZbolSQwong|Y zWdp3axz`{q3$7mU3Xs~SmRe+j63K2;80>?}DdQ5v#-qVHCYlJ4g{?ihwo5=E#X52E z@+CaOAvujI44T64O*hY!;_S^sbsr&kISh2($3N#*!iHYyuRFn??Q4V{gV`M(Fu z$?@-#l{{`IlxRoFa%`c_DWKb#_sm=M1QbOfrMnG82`6+NAQJNkcOtgd226?)2rltM=@ff)a^kYm`GKG0NElZ z(r1~wjLWst)%Qv^xVo)ba1*3s);8%gM_!E(lMbm;Zrdr19f?lGZYrMhQy9xI)W&sD9+#%GkU?ND@qmt4oo z*|<0xYq*CvfdQq-!Y57wAI%FWszRzwEe<1P;P;9)TLL0kA3ch<6vzLByUON>#v;>S#L@ZA_C~<>5Xh=mN)(acR ziO9GL*x1UgYTzaYtJiI+Y3@8jQu#Azt?b+alx#L%^yk#q8%?dlO*6>7;P0{VB5R*{ zEt6+EDtqTcM?FYv(h&xssg!)13udswwUCXhC!&(Lz`uV%vMc9g{U{%$Sx1LiQ@p=PacM8&{eSoORAU14M^d}YH;}ezxAM``&0PCZ zNu)TbM|Cp>#SvPbK1A#0GRa+Q+HKFFDO{gp-|?F^8*XLmxw|`Kg2_wQPOZ>??`+fs zZQq9;m79*nm>7~TS8ionRIO1BFYE9sxf3dldxy>6s?YP8F!0DEdP=E(y2ayG zMc)p3zf-Z|qc=(oOnq=nWdZSw^3hzUJ^HbE^(%>> z=b>Lg#0Pk12t=;&Yd}xH!+zDs8%wr3ThBv!&()y{wH;vJUO=_aPpS! zpj>azVe{xR3w@_s!1WiFg~Z2rXV})M%r5oHGGvPT7iJGWyJ{4bGBSD~%sR9jzt_$s zW5X1ulpE{TA5HBQI8>uwc=K)>bl=?d?P+fR7pPnPM&&%B??Z9A$+|w=l>5ayY2S*X)uG;bA^J&cmsQO8zuUUs z%Jk#RC&uD-gtveG_9hCjtMShtyM|9(e2b(AB45Ax7cdKXH8*t{csBi&rz$CA)FpzC zgs1fGmKzV}_QnnD1L*^+-gA&phg&S`uI+J{^FDcOdj$+4# zZWLxQOtNcb8o~g}&&Pno7AtBnQ%SR+H$A74&Fn!n0!}}N8C%u{TdSfH<=A1bQWFCD zV_>v7^&2pzTqUb^t0mqvNDGloVV(Vht{)-cO5Yk+j6(MUba}RI=og6Nce_wcw4E#q z)s{P{eXBVQi42j1m3TQhLs+b#7 zq5@ABdkuO)pGbAPxhAUEFf$tXo;8TeG_%N^Ys<|ro6_p{!duYQI&*sBL~W@fzIX#Z zR0c?nhs$b}MyfDD10C@*)sNytfKV9SBmwBI`M0+#@tA>t5R`msNhnmOyn}Tzg0dUX zB}#mbOwKH$V%7xsKO|z;2L-V~p~}x5dM>%E!#xR{!9K=Eo8px#d6%tCPAD#M; zb_I+*)`siBu&RYoB;(0z;`~UHEgWpa_!{VH88Sx%r2RyoS8%QJu>O1KB%+w?aCwim zACFc@;K~q7ah~`d5KW(BnruZP?M9f8i&MA&da+shlvdzP3%UfgVzQ0B{VsqS=~u7f zI!V;_vTO`jE=&o{#PH|bGKS^GrgA?HI5K4Zj@ge&fKM60nOYQA)*yKrAC-zy(UkZ^ zlQ_mHAfz}+A}3EJ&MuiqgC*&$A$|ei9C9%7*}%N}Cmo(HwnX^1tfAaID8?Fln$a-J z5sW*`qb$j8#-s#Cqf;p4l~LC0KCw+3k5EeR4UU4gw?e52b3}I_Ts|IRaywn2L-KFh zjecEwlM(H)RP?;*cpVhU@P7@Ecfyh|xz038wpD&?gkU|yn2?(lv)K#Y488M5TuYwX z#iAQIv$T9cQqF;JVf_KPhfhM4hPCHLnSA* zjR||PN05sx>1EIvF!mz<3pvnFpiS;4YWOgqnkl7 zfj&?WMxZq8GK|9qDVWFbq{?_8-2VtjwwV-{TRQ*5DE}`st#5#W83^!a8Px*JemJ=2{7iFR5i14@{Y;C@m{&0i;oC&6!Hw zT}0VazPC# zjZPW0=GpcycWP5UZW*hizFr=HYht5jGg<>cq|>C-Sp_iP|^Iy<6}t7>&Abf zuy`+PTZDR==88lcSA+8p?0`0YR6ONYxu!5i^|(&Ds>9i?V;Jm7bM$VPkGMgriZOhJGbEM@P9?FSMT?qtXib$?^y0yu*qO}Xff%!@avDHWiM`jlY4)7 zb-(e$%UuXiZtKCE|10tDUa7h7eDDuMwZ3WDz`$Z85(q~!0lW1bkgwIE^{1}a()VhX z7CpN=GkmCF#^CH*!s|PN3mMT~`l4EsOg-O9xiP$LjyZek3m~X3KQ___Lv_|PFLWiX zq6Vq{F7b5C70#nV3~%a!UQbp;1{si|K56qqZ|4IFCsc2&GMN-zAyPET_5Bp#hzyoA zni}P$j3Jveat`3treBQ_{Jru{+4y?@5Zr1y`n=hBIOK+3DA>=?mPUm_2Sif&*aQly z9y6!ML1Kv+$uwPIPx2P{1?lD^KH^Nj^oH`K3&z3u_Q?X*&C_zFtN()%`Y}ixE!-ZA zz^cjL${Y{%p#SEfD=2__E^k_~f|Ok1K+#-yi|K+agJ?Q^4zglzu9@=;C$Zc%&>3*o zG+(QcbG6<^^BCX2j*}>3#w4u0#~cuJQg5=6yzq3%OJ%E_|L{hEX3Bf4##U@^pK^~ zJ0s+yG>ZpH55U$Tr`%3~CIX~{bU0e$!Ejp^HD`#ShyhPx0*w6YB1*~Q;b2%0xz-nc zK}e*SS&^t2EIYp%l6Iw_ddUQC!PuN8{mk{Wv7l{UmP?2C7=zjPgNL-6gnvs-VvP7H zK#E|&Vh>h|CRH7S%w$h|0HtH8d>(tKGu9AcYaR%ix`S*ZhOoHa1V}}!X0$P)3b@Pz zp&6y%b~Q1x#_vQQz!>SrLn^Nn+z2XNw0t>Zi*5m{7|u-7J^vbR8$_-a#aU3Oa!W@C zx+EIpj|PV;4fy?vASoq4KfJz%6fSlmdY99RBWkA!Wc%xtmAJm6BI6(TOF6_T2kHArQ)Oree?+JcicIys-Qvc@ULDJy4M z=Xd6N{r&^53*mX5`+mP)FB9plHkW|`T5<%ofvq+PBK9sjmO~EUSlMu)=C#gbKxyok zauqJLE*Y)9862w>k4jnLL_yM0vCB8)kzA7vYC>z`j3j!`hmcVZ7vI}xEotj1R$tNN zo6d3bg`*!SXbdPN-{C;{!F#j$`Alr3rv#Cx=4atP*fDw}gp^e|;R_)BIkGvhN05D( zl()QG-wagQIBn3c=DKob1be~w&iom;TH5mC@2Elf=VPB9=WptHbO-ymr)@rJ{Cr!LvrUEnj=kuxhUW0|1P?qkAZRz}Q^I6*!4lbZH>5Yx$u$D8{ zlB{RKF=HX2R0;aT%?)755<&jRv~A?8I1bc2a@ln7uhYq(su9g$l_rZ#I^;W7X2W~b z4I9&4BoCjD6W8%L>>mzl&iO+lPS4KH+Tf@0RQ)rlx4RQc&A2b!``I=IpnPYO)!^A; zw5|5MosPFn_SUQrb2kscPqy3m{8B>&JkbeJiW;qNT@K&UyG52{o^)w`PCVdiPbwci zzIfCuf9l!IbYlyusdTee|WVmKJpC(bMhuv;MhrlfPGO z`@@8{zE-hE{vp2exkK=UXKJvuTt15Gr%^9nnzvBlzFGoqzqd1^ zdbrxdJqdfpk1iMjo>RP9&ESWCX4jD_&GCPMZmTdabBBt7$G`>2DK^yy=K2usk-lO! z=ue?>U;{pX57?{yA^YTaW@zu|?Cs_I2E7jK;Ka|}4*+&{mKmb5P~f{r^sN|0fIV!^ ze20A^TYuIbxw@syuQj7fE-?!<#KWVpMw1Y2=6V!MjmpJc?aL<9{sJ7p-j%0YY&ORV zS%)RB%C55%_$JQic=C$wGv4|olDCsqJL7V}&HV2T0^g--@XQfRuKI-dR3iRSTc)KS z{Sze@Iiu7>WG~1*gU&;LV028M5tG`wvvB@VU<&cgJc=%G?f>ABDZ5B)%N6#|eY3fj zPK}VA=d7!A-)|(F|W$_4ph3If1 zJwR(3wSgj_LNn#LYp0^8h!}dwS-@H?RW|DJ)9Gtj^D__^y~_aVsX&;Ys5GTZ15}qF zjInqDW(~H+l)$w6f>2?sqrE;o?AIRt)^5{fVZA^`{cxj#np^f0;@va}?q#FS_)4DSRbO z2}dAlZQo;$Gf;{@a*qz|Ub$Bih4(4DW`)2GkveM^h2=8*g&*q`IP0*dGJ`kvI(blQ zkB+MMaR^#F^NI_TpMj^z&JGxk2r{G&@XE#OoWY#PZgOyx4&Ol-4V|yxoF%-XFB!pk znvOnzOYvtg&Nm3}62g*hFYDZ@ zUa3ECF62*Pbc;u;NkAFrE1shUV+5oE&`*RxX1zuo;1mwcX>6&Ha66)I)lQV1w^ydw z2VA|l7FWI)jZ{0}v~ZGT);S3{QSZ1#i0$zVB_K{SNeuJnN`@=BjKQ+ZTXd83<`Ats?IX0qgu>z!ZPSMw5#%XFtd%|*Xqt>woc+1jnIr6 zl3M;XgmXZeKMy;cW$GD91J1x+Sp9W+a!?;1%JZmHZqVoOuT#|QU>{HHwY-5q(7O|-N#rli`aeE%5wNpgeREvqi-hoiNNi0|O z2aaKzDiwDS2br3c7MKo-$a^>uU>))7i3XxPHIZ!-;3SF|2DVVcX_U%X*mY0IUF;=K z#0|BMlsGaXGgL7)F5oknkDw=;n0VZ^l!X~?Llc$2S z9K-}at5kU?uv#5mW3A?rk0s&Y2#k?nx@S`|u}b3h`UesWQYBN|OE%f*^(qFnfs3F16VgP-t#XyqRNM0=!#-*2dl zoyNB{*}QS-zz1NW4_)+DUB|3n9sKg!ofX?t%Kv%$_5N>*SA59X@hztNqz{6N+e61y z_F+q#i8fmfuV%2M1M?70x;kNT8;vSe{ED(J0aia>Ql0<1|bHe};h$+PKZ zyFOaod3*D_pJq(v{rT?BkCzV|TjKN4=hrKpe1hr95}>tAMFw3gvhr}Yw1rorfR1CC zq_&rJmg1i_Knw{XpfoVqPxh>h@WCq%!IOrGiyGx|o^t2m} z$6Ggz{YV)g9-sESdnM02#ZB6t@9ZA1;OW=GQMU{y>Y1!b4lW}rJ$zm21! z1Fz-V=9bS#-6*N=3Z}0XZc?V)T4>o18Vc9^{$d;RTG#G>fp_TPie{_~1(tTG^Tc(H z;nwKOD)Ig`hOdQ3?l?F+IET_tcYXT}1)^8%{DZ!;{ZP|+AZVlWiWi1kj=3(QL$Rop z@)xu6*EsGZ&UHp`g|#fnnNQ4{jkhrzFJCZ;Yp^-HIB7#KbqI=9U8UW;ow0Kk-=vAm zn695eK^=0B>SGtjmg&j&JcUKG5yUF3L$p(~gJ3xi^wtCm{EXk0{EBQhV^%b8{!x1T zV(eK{etmKj=}A;$!K$2$A#r@-TGi&ANJ9yNSgnPl52ufl^pXx_xz+wG`D7Ls!jL)+k@P3(>FoD+% z=4qps)AZ)6GoalInEwL8L*CeT>B2A~#`bT;6+8)0f|Sc*?)P!r{BYrFYPlav^POYW+4*E^dL&a>Z^Jxxdy-U4+-s%X|FtK--K_?Y%6>rSF=hoIOFza&GGq z)jOqdNbJ?9!qx=aod0irI5t< z9~AB_pOF#%y6}o>F=>x=+W9K6yJc}6*L@vJsg-j~7$Lj1({ zi@2p6q8gtO%tY|wdKrrTo>aaPj4e~Mm3rE4>tvKAJF+l7PD@afZXG!-78vqzPjIKy z)VsC0JEjw-h!dycR2C-?PWCohkC3uOa8*;>yNHp*K(C&k>N2RsCitvVkA}7=DY{LGjs>`w{a?B6%2K>a&R8y zTx}_aOS~Z~K@A^KN=dEg5+*03Gv8V5Jkm z~ZQ7+Cm zgVUtT#jRb;LPzQEnG+4&JQ1{KwFc<}qbp?YTI>sD1x399ZYLX8iS7Y^o1`mBvFb)r zFpuDZiMJuES#H=+`(QAD+4F?qH0^B-CAs%6MVFa3XiK!))a*E;bvv}rCEp^8T3T#Pi++pY5w-1Tl*%{l4}j_JP36QJA?=;3`}gWmg)A_9HQdrF^xGFhF$7oLyt zuxUD~&X`OgI%5#Cd2ne*m3SF$PT%Gl`w54RJG; zXtdTy!J&)HDIoJZt3A=J$XQ506=KHdvMnZaK$I3WSZDM>%qX-Y{8|~AJ^>H(DNAFu z)TwCPSuWcCEAI()_5wsA+5T$aI$Yv$1nEZ=5`rWv>EYnbM`6X(gR~Q1aKaH-jJss6 zFU(;+CF%~NfPPS3Q9Q=cllW&D4M}7VT6}BdRSCrVqd(!jXI18k&Ib>VefsBjbRTo) z|Dx1+?bZf(AJ`-D+yZC^G?6e7xC>kl2bc8@vC{`me)+oQ?emTCw;s%*<(wmh?g_VM_WdkeY|NafuHZ@MX9%By zF@u?gJRUHW2%)bigCvJIO5AUEjl)miTfAMzzDD=JUk2KPonifB12XgpTs)pLaS8P> ztqys{9Lhl+AK@6PvoftoYT;mJNuCiuInt(%7GK>1iI#Ax@Si030Q@BFH0)~8s}&5P zLg6i7UfRTc{Rp3WE`0iz8R+S>lYMnSDB$a9LDd{r+h7|^25FQWjK}kkkHPMCAOEw1 zTo`!W_o>kJ8_LE19)*L>MBi{g!%r(deDg(fH4lFAzV#;Z^TK(z{{{ZJxdJ^zTTRUW z155t%cH6;2tG~uMC$2D7L z*hf5PM5cS23kG4qiYCr3?9~umL<881ZJe`He?c}+oj%R2kXHcT`374ZcZkTb+pJwE zI*<@*U^mRHKdbN76h|-?2$1VoLvoZDck_)qxh=!-y#1Q1;l2F#!% z(5$XOok;FO}{2Befld}>9oGug; zLAf9NkF0K>>+~FycVTcVxICPXIzIv#Pb>#WU}e2V^!+;MgXU<_pN_txgzyjWXkVeI z1Yyo|Qem`9YceNT9i&NpgQ~<&eJILbV)CS2;H}w@QM)E?$w)pvyuwI4d=ZIPFZER0 zv4TC^-(dRxC>Hp<)m?4`Za&UjYZJM^CJNf9jMGIs1JAN>!x2mGJpKJ%MC^UDo!@S; z4*Vhj?fvLn1#z22PG+4-Yz%Q@w#C@ zWsZWDphELbkC>pwz)BP!8S-1CM2uvhodJvT+cx}!euBpQpgn&D}@i? z1-7!IO$^ueWty+DgA;M%xZ!k0Y@v5_8s_I=QfZ7-##Hz zFt5`Vtz55VmpOKm^T8aOu(xR{K#ay;N2`srP^ReNVul$x&bUM z9NpoZILVBBJ79lwen8JEp$iY&Gzb`&anSz|we8Z=%j?YWcpU{dekMGbyABKw7v!5} zlk5jqim+Wc<>;Ux5iVjm)nVh9?q~uK9Zz7dQojNxbmxl`Q0O{QqO{_(;q~E=h}(hv z6(yqFuwuA4sYKW@cv(8SNH&#bdtw+V5x_}OD1x|Z#v(~#*LI({@E?hZp}e(IgbyIP z@=Q#D6=%s*g{@(`ECK!n;>dK<`h{t<0r0ofHs>OSXnEyQa48VL9Gc@jhm*wqIR=Ep z37^1pFYqE0?W(30YuBpT<+$Y$`jbS#K&%k=sb;z|Q(xX0)W?XCXsJ#eCM;9SC5Sb@ zgNfw$lgFHa<%)Co>D8bgj;8xEqaVKiv_4x8m*pk-y2{S->wIneq z?N_jFYKgz8rXE_y$r9Niu6S-JvlZ^lJ~M4!4#ZebtuX9?I*rUgWXVKs$1=(Q?UIXN zl;Kt$?#OUq*e$8YwgA0|#u^sM<4tME5?LqTA2>7OyND(+6EFF|%4b+2eC=9HaE{;u zTW?R*YfgY+ht5~ap%KcIC^-*!CBMzng4+ihAAHtxiy)su) zxCd_Fx~5XiZNyFI#4}cVJJLMy8S>X!X&D^PQ9}E{EGq4#oCoQW4X_atm4Ki4X`|5g zdH?KBhG#E^YJ+xEjXn9iVo}Lkw~dQrYRZ5kG@U}yO1ZS&2srz?xy4>EqJ+;oB6TmC zz=?rJ9!gBSk@9LSi)Z5J&{OU{!Tm$^-Vz4{bUqio*O89xLT9G22{(iM^WT`vt8Mt` ze{*f`n@oaZAGFRAU_>rITn2o5Mlk2#?VzcCPjJ@7BC0bH`;(ymU^;5BJ6gpg!2 zU`W!~O^zSsFDN`x+gURH7-^hpFn6E!!T*m#3vlhdcxK+~FE={-FU%mn^EAg+Eqt{K z{heLfU-&bcOZ^&qREfq`Ur(7d9CL{7jsEBV3cf?GkG5SzgEZeiT6L#?=Su%Cw-yJ^ z=Dcq+`wz9@ZiNR&^j*FW?7Pt|33_tF11pRrRk?&~&a z+x3MB9rd|hBK(@Edz|3PHfYZa+7A;J*AcROtN4+yH?rH(qwLMb&fIlI%9PJkckQKA zAUx7F-G%4~GUqnG_u@54_qST}mW=#>ysEe>uEG5dh)z|;9KgOJ02jDb9X7e8u4>}u zk1pay_ZPbumaJ%1nT>@T7qpq&5wBMw zLgOEc+=ASNcHbKgr92NU28n?H4?jlo!bK~k(s2M*I9=%xA~(on=NiOx!ggZ z_JiH`j+;BA6O)jV3tV+YW|6=ZyVGVCMuY=$RrslU%m2Nw7 zN;DI=shYJ|<9p}RZ_cc(kM?4!z8hV)3jJsvynVaz)C%qA1A!}!5ehbbgWv7^=PEkM zzxjLk*X`eJK6qv$I_md5yeeq@_|UFVv&Dy=K0WYJ@crC@z`{cd+lR)yC?=cU?JA3z z|DcvTUL0WxM!6|b@Il5{7=^7*{H{oLeA=U#xSxi{?S}GaVj_K#1}FtNvF}+Y`+R{- zhwtfIaB$}PNT0=L$;g#da&4}j6lzg1#MQFW8smutawc)eAP7g)c`ii?+Q40ynFN(( zR&=QJxYp%$FR(()S48U=88#Vo!mPEosnkKzpG-6koLqGFJ_+-yZ`u5d8#`KnYb9%h~~{ro1EkXaGN0t z%;3+PH8EDnP+wL#6Md=*Ea-$wgQi4=t#o5sHtA}pRroaUnW7xxd3dWZA`A_juT16* zry8j<@vY(SAywrvSs7Y^X=0pgZtlXjU}OV(#A{uwKh+wcWcTJrN3E%=Q|--sSEeCp zxugtlE)W{h5zG@z@s}b*g^=5 zj{h6)QW+-AvQewOWZ5^W0RzOwg-H2Gw}GKoFJ{TvXrHIwESqHjV~icDICphoiBHUs zDRF@-w?>5hMBiX8pKMu}hS+8e+^_owsN-f#wg7*-#qHz` zpoDl=ZUtB=MGd}@0g~NJ^Hg;1C&R7+S@1I@VO`5@& zE^r3g@L8={ffJk5v=K{m;3i(JC|#0}j7n5vxT<8B%C{}{)DZHZ)!_r4WsC)x(d@`> zlaH?9lz1A>$IFj3&Wbru$ z@rG5N{~NkK)$<0Wqe#nn#ZjseZ@Q=&>%lJ5gpCr<;wMk&4iAvqOs~5vMT^H%lAjf7 z4BsJK4E;(D(f--l4n;LzJFd0P$iB5xYnuL9veTRpj4aMlLqNd-ot_h~!3uEM!!-9VK4W(WhT6qF( zZ<+1237d9m!zUK)iL^-6KP zvRp16Tr>L9`m27=8r~rOxr&*+Prt6HJ<W9p)0Y*Wg9HUuUp)e^jQlq5 z*o%)Vj?q6)&D@NA{iU$)dF`WrfrlpVzBG3Jb3wm;#hKYc_XD+-e`j`o+4%VBm#aZL zzFo6xcwsmgeT$tiH81vG;LP)<8?A1uw$&Ame$4l;d%KFMxWb73EcqcZ+1KcXw0*KY zVIw-xbY?4KLDPNAqNR%&t5wNYG>K&qu;<@MP8&O1LRjuOsNQ1cOalY8iReQW7I-gi z&#Kx7uv~ir>rq?K3uDWO`urrs*d{sQ;#GrhA9J3=%d8iujLSY@-w&)sbJI>6z}k!Y zd8e8<{|jZbBoU7<$R|{fpO-c(GuWvW9Udn0h_@dPS?h+-z~mK&q@Bev{(x^3EK=ONNjyozs$KPPI52d9k%F)Al7|+`iw*mIM;<;rFBjQH=^S8V9MN8{8!lF~@ zR~EjWeZW>O{o_r}5ZZ{opx;?-5WYo=wh5}edAkc2JGi6q;Dtj&9s8id#~+Rz6zpT( zG+*j)d!gIpf@&C@-|s?^ZR^E-s2Y9!RqK9b0lbD2{^uaZ-8+tm&~!UOP6?A$*t261 z3-aP=NP@&Robo)J0B|g^k*)fw@Jd7l;>;udhwGjNy(ZVJv~~sWAbZpP*99b;w-s(u zGBu+lXYpTP7LNM{vm#AlqfXZHvj}5Mb+>98;A!=#8iqP^O;a|(fj7@&_mM&HZ{vpUe<$wq}bKjWVAfAvm#-pMmL&zvS zC!(%78VJY}ZXs)JjYIF_ke2W8``4s&~Ag%+EYKT`65PsD7udJ#}7 z%=41G1LFNSG_`_0Kl@giP#;)L+n|D}*IBsz9C3Ww&*NIE*e$L)&wt=9;CGm0budCt zJ1SJ~%_3Rb@EF^3aP=I^m21J<9x=UC>r(9dBopN_|6*uF8{R|PL z1ne~{Wior3@QBW(CWqzL1SBb6~q%& zx$@xewX_emS$D~QAmmFam;rL<45j?Ac^gZ0w*;A7(Gw*`c4ggix~i%D09EE~O4DCd z9xW*eQxo&ba8oL2D68_Tfdj>WlP5gEg4-5BlM@78Judurz>CG2XeO%L$NbP#k>fx( z(rV_2bO1|DSI4=RsBi=4Wg&H7VdaKF7P8hxTh~;NzJxH9M~brXk3*T$*-#=eZ^Ia$ zyvW-l1weygcaNeWlcqeX5yA=24s1f>MKWCiZr?m+zY7$Si5IC|@p2o6*W`88ZYzXf zr&3BCkVlI{YP^i5-_drH^yWTmv2tsoQ-pOl>}Bc`5%R0F zJ=`NRD_-q9(4ef>ji}xG)_UsDVYZ0kH3zjj1D~8g8Oc^}NiRcbTc)V_<1^6eb=s%W zeZo5!1&mH8V&j@|((S~&`6Hz8Xleoxi5JF$bPrtTPNW4fFXiCWhYAb-}GU> zXIyfD)!IZl{)9=Vj{`95>*$>%j`2ux$zC`O)jRNLo=5AzZTO_@1im>5YolNq2TfT( zEOScY@fmc+{W-cN#G1NU6Xj$9woV>*agKq{iBr(Kab3oQPT#=atVW(;8fY(Nj|r=# z0o)qFkTq;ppIFh+P+a{KJXQPR{ZrD%+~$4v4%~A7?0+-TI)w~0!O5T{Vh6hN<{@B2 znIuvit<1QNek0eh_|?+vhrt#ue;}~xHj#+}+%<@$?66L>Bnar%d^{NbHs`>Vl1Wi% zK57Unym+F}!5jJAE4z%^0TP{}Ov}+^-LpGA%hV@8&9uE-zbbgkJ$4=Cm80yW+TF%o zI*|v>!tpe`Jf0{<*RMm%rJh}od^_=1hMo|ps+od(0yq2W9EC@jjDT8;UKWV>A9k3Sswnx-Kp-2idpr23*}%}*!A+`ZDZdMWHNe6Yxk zdPuz5aX*XVCJj$YXa14w3eMWxz}{a;O~5@XQ~4oK_6VP&RAIUIFtJmDP_>J4x7hy^ z@Ip0+liLO9g{SqI!#+QcbpHsv-L(#Xk>{IWb{X+*w>(E~XZ|uk-LtOFPNl_vBBPJP zoLLKqy}JAkLLV0OR9m0` z+^$dJpn`@xDC$H(@IyN_De9q!9<8TMX-ip2fuM7S2fDd3Tjqw!ZPeKfKbck_XVS)@ zTP#oPOdl`VRg1Ej%Sw^v45)M+w9k#Yp96*452oXiA)abz+FHDraU>)&4cJzjDl#k3 z=UkKJM4skJaHFxQt+Eurb1}`&1aXrvGS%^F^M1;PzHZXjvR{;Md;vnXk85q*0MzQ3 zeJh8zq(i10&%#**4h&#>xq`T*Mj$yj5*_8bEB5jxTfk+(n9(Ze&dx2N6gqBn-LR|f z1Q3lTQ}~y881;{yIc7<;sdyuN2WBaq!`=Xfy{5Dp{dMUXM6Tv(5=vYY$Hg%=ysis*bhH?CVZ*bd`LSY z&YNF{W(MdH&v#i?j z1Q6gx+s$r+s3BUSoM(d5$-1GPsNb-hj~mUNzYfe8wI_;gX+wEt9^A2*AwLde%Ty#F zF9&X=mBG>XEb}>W83M%p+4FGIcF+ZEwn3XHZdJ-+z$-OGRy?? zL+W@vEUjZNXKWcPkd;{j^sbT#wp|r4>ptaB!qJjR!$Hyjj7aTBMZ{i4H>F(?^+-{Z zfip@O$QCa{u0|Bmxx4X@hQKDH0m&IFR%ar<`#kz4>zw`c_Fo|7BO2hHUGMifa8cg_ z^iB9KUkr8B;5k@NTbf2+k`}ti7G18CNyNm+PBEfRo$rpUZVJ0$YRR9TzZZHFpiQn+ z*aVYBV`0WbfB$;)|CfG7-!^;Myr}(-xnCxm+4mnIP1f8kq zX?Hr69))ZnBs)$cDPUYW6RJMUH2}XEzdLS;I5rnSO=??rRI&Kt3o0=jUvYkRHt~lw zIsS2xn+o3_Sij=4|JV5~v#9&_&C|vI9b66vQGa3Vo9GiLwmAL;isD<*eqrO-%eQth zJN}E3beU}YP`IvS_Qmw4#b1aYzXg%r{PWYy1OIOIQdD-6FUq-Y_j|3g`0~32tBKmCx2^22v_y*WBj77)j>DU{1`RKv(mH zEDxj63?(ZV+@rz$6-BQi7&xER8KZam0S)S4L<-xWse2)}qkf4^#bvO;=Cf>o`rKF(F`42F%K+dqtH|+L&)S6if%)4`9+M9rZDYsv zykK*Y5PDM2{8W^~ZN)xP3b!6JKk)0$9asN@HJ~y`=FN%xer^xS(AfB2xnvBTD1>gD zetHL;a?9a-G-`We=Y{{0T{~6>eq=2gdhv0=6;kJ+`@6(>>km3ur}TgOYmJ>>^U;Gt z!OQheKKk$W?~+Go#H4Qi9Z@k(=wj_�PI1K7@@=wIb}5`+)~Wa)s_I--K@dCaN9u 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 z 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�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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/favicon.ico b/salt/idh/skins/http/opencanary/nasLogin/static/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..cafbf0458b55c4e6e206248e5d235a1346e6db12 GIT binary patch literal 15086 zcmeI3yNeY`6vk^&*1$xAjZ6kv(a^})NYKB+NKAA=5K&nX+!dn@g-wiQz)Va;F%U*j z83pkHiYtl_c42(%q6rr_bzEBN0H&z|W zfej=taw(Sbs{J=RtcQ3Y`6bhdD?~>Q=@gHKKeCW~k(aaK-*Nn$>qovjt&b98-j{t~ zRMb8*WqrGK?N9T~HlEBrqrGOc^>fzWS|6<6uQXN;<*Xw~XHRaZO3VTJGc3U63r}(+}on zezg9J_3PIEwLZ8vosh9=Qf;bHwW?>pR}4w_1v;rRkP|}V_kBIJE{8Hi?#3X zVC~GQYM<$F{i^-{4%gqmC+psI&$ZKI|Jn6xpkD)DYz^?vr4DZ%O4XASOYfEH_}(^q zxa`;T9qQwhxSmrtzIHHGPk$TMQpb(9J4f?=rJB(DIOrns4yO+19$c(${Jyce`|Gfd zI=;94eQUb-&O6o;WgjQnkUghv{QjRu)wQGR2kW+u8*NW7oyz)ALkWGHHXP5-jsH4- zC|gI48+GLOdUPdh!)@ZczOctr2KAS6dcAi??2Rx z53=g>jd~-F%JF`6xa(_{ao~O(XWAi4fJcEUjyIy8tC%xcOUGt>-z7f`#QY-RJ+bXbm{B^ z_wG9LptBD;1JSkf8=7yP|)ud}xH4e_tT(R>(_TMdaUTKUcmX!Sa PXvg(u+R3mhLYwzb%OA?D literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/icon_dsm_16.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/icon_dsm_16.png new file mode 100644 index 0000000000000000000000000000000000000000..f2ae9dae8faf87f7fbb7d37e721e054fdeaca960 GIT binary patch literal 1191 zcmbVMPiP!f7@u_GHY8gqrO>P%GE6J9(%Jc+oi}FeZg!GpB^$$b+wQ??-^{$pj>*g$ zXD03@7HL9g4HZ&vrUwNn3L*vDOF@HCduS`APz1q)r9BiphzC815Z@%b(L?CLftmNd z_rBlv{l0&*JUMZEPw#WR6h-YRj~P|6?oHmFH2Dtvu>r}FjYsP73GBp87$T}@V-wM3 z4^E*fg7(~7chC?;r6RXhkL#6j&B9&|COWy67Z5Z>4IOI*(3(auZK5gH*O}kH`i7xh zTW3xy6}}RbP{SRY57CMFiJCP(Z2_A(_A))x(ue^M#gJ}!Gk&DCbY|18M)t`u$IzQ9 z@wCotk*ZfF=@JeRt>hHe;su$`gPfoUvML;ED6XP^Y3!&S)#d`kRZ)azLyOeI zIoJV{+&$e}LicTCkA~QzHA~7TA)>%E&QUsEQ8j0L$bhU_!-_m^R-2zschWDK6=h|8!30h_qv}-JSy?Y)=yM z$@qk1POh)5oFg-Kw`>$^t)ETUc<0HT^>zNhdoN_iQui0s)#dSfnMplbz5Qb*zqGtC zT==ppvtIanCF6Xw@z=ni^e2$|G=1jTTTa*NxAk-T{a-d-pT6+tZv)u}nVWkbGq0TO zJ#=CG`!(u8_o?oaJ-cp9d`(@t|Gu(xX(3|>{crSN#qU1z6Sce0w|?b=qvpa(Yt?nM**7}ti+F8%|$!+-Gr literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/icon_dsm_32.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/icon_dsm_32.png new file mode 100644 index 0000000000000000000000000000000000000000..b7193aaa083359546c9155dacb04e02a550bfb88 GIT binary patch literal 1351 zcmbVMZ%i9y7{3B#0|kLBq%1>^BLW)kZ(DkIqtMbqS7(ti+*l+F*Sq)VN$=0@j!`Oc ztSZ7{bk4-YWHCDZG^ZJA78j##6B%ZFP_qxqGIi0B;2d${qGlTPEl~6W*#|GVd*A1M zpWpNRo_{yl)fp)%-dv0zNJ(^CxEro$_T5+rzg9YZ3occ5d#}Aym+fJ}1V~WQ;{c7S z!T{(7f;6)4bI^<+`IgetYxl+;=0#m4gscvcQVobkkmlBuA&7&(M&n>W(frs?AAW+N zisZ+3dt+402!VvMEp39G>CPT8Jt%S#*4lzLr+8>U1-5{u)TCzdDL=Msmxuf8F^Qqe zD)yisTOrjO>q0}i2~aQL#YKwtpgxYEy|jm=8&QU$-6Z8EX*W(YJjL;}7hQcY=*^U5 zzB}Bp>I+JKEMeOQPm;sK!^E(g(9Hpo<~WX|7?NRdsDWD}nk}So&8p2=2m?zr6~k6^ z4b55<;`)&7#~{;{5L6=;TQjU#tBHasBU6Gw(ga1SYBsKAZOiTk|I%1j+v*uH0ND*J zeaIAHJ>=RP80PNIjXgstMG|C>A#k|ML6@}JJh z9l>_YZrA1j3Tu-DG&nvcoRj<=;{^!fcsv>o_M|SyrNk36NWt;I6~{CYm^&YM>}Ju# zZ^%Ap*|)Nz;(A~-Z^G$X$Pe6mcV4_6J=LFAq1x|nsT#YH6f=c?1RTCPewu4J^XW8o zrvIYjjne*u^k2Ilia$#Ic+NL|Yw^Av({g&r{brT%`UHKdH9~KgiELO{DhMG``E1+h z%iq5@aoAORlKA}|`J>a%e*N0s!5b}&Er*VGg^S+0f8q8QpY2Ihpa0-kWo>z8wD?zi zwtm*-j~z`NJocn~qGs2StLEv@bJzL~e|(#`Qhw>Hjl^A3dph?vUAyYsnkS)iT_+|h zHa|Ff{p2&7eki?K?%bMb7)#bvUYM$DOHLMYvo%Xc*!iFN%+UsPYoX1zG(2T)|>P>849gGvF;d;6g40 z_wRaYi;;hEyYsuDz@M*_Rvs9??0ol^!oZjVnd(c;%)NMeCi`oPws(f#Y3tAY11fjM A4gdfE literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/icon_dsm_48.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/icon_dsm_48.png new file mode 100644 index 0000000000000000000000000000000000000000..d8f5388e51dc9d295ad60204d66f6498a2542ba8 GIT binary patch literal 1603 zcmbVMeM}Q)7(b|`T?fK+&K4OS#V?}QyXzP2(L%AMwr)j4CXHs1`*;gg+B>hOw4g$f zAf9Bm+aJb1cFEoQKJWYd zp6B;`U3*#Syfj6o0)n74x64s3u2}q)r-Ebnsvaff^_0POmItswV?byO*TeZ{4Q{~oCVUR8#c&;p=}=sU;93GR6Sx5$d(@&g zp79ao4(FIJQL?IQ1c4(^w63mBQ>W9gd^L)j&1MwSqFOB?Y9OIVP$0udFqE6H-~b_- z_j7`u4Z?AYB*m^0tZI?zXb1t$<9TQ}7#d5Im@+g>awx9B&_Ey_*NApVCK@(<7Wt9*5~Un zU_eZ`Nss7BBZ-(yj2_9Sd|ID)gJX;@VdqhJbBWXFbmnV~W?epxm*|R3Ca2k9c4Ea^ zEruD26IgdJB#=QGBz*ft-(y((u~@>+15#l53YM)+bU|4SE3ly&mV@nfc$SBx{lU1L z7q8K1$PU2!R|Ce$vjKP{$%OwA1dKFo(o-~v=uHL;(F21PF)<7fyT?dldZ0IGDWD$1 zGygYvs7MNpcglY{CvhaUV|@E?4n*PMB!QqfKD;<5Es7Ks1SR|2j^c{&j}%kWa2S%- z+O{PPY_feK8L*_Te{xOIh1s^gthQ<>hIYcaLy|#TpR_Ga*_zS|4HVk$ZGIy2ru|qf zwQNsNO0Djc4Q|--3u&9$_MI)ejZ*G~6&I6wa(+*;d$W~0plz~Nz4F$cM<>bLOz+_OZ_W_jCLAr8h1dsFW(SEz7wKkVoGQrQWTgdLhjh(~dN4 zOfKlZ<|0#y$G7~jwfmlHQqNmFp?pG>&!s!p{KuvE0VtCH-IT8p>;R&62xrLO&@sR%W%ydJ)I`H1FQ3Hm&X^3vRPf(~{Mq}Ht{6L~eD!Y72gxzWi1w_@+eJ0Tf9vj&QpcxrtD64-KczEO literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/icon_dsm_64.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/icon_dsm_64.png new file mode 100644 index 0000000000000000000000000000000000000000..cd79763d89c8e8179e1650dab53e1569e86d588b GIT binary patch literal 1706 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/icon_tile.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/icon_tile.png new file mode 100644 index 0000000000000000000000000000000000000000..e3ed42ece4112b02dd9beff85f6123010a1a5393 GIT binary patch literal 2093 zcmbVMe^gWV6%QsW!4`_Oa?~^6EkSJ$O~puV?M*UwPLGBPQPOvepmF+yOpL_MB| z0ctankLfT(U$UhWOQ6x{He*H>nWb3=qqv!i1Tb8O*-B~CXbEc^Rs=O+B#?*Y8!a-{ z{pL0nVARW4nIa8OV^v@U#*|V5OD|2$Kub-iRL@$o8c1-!lmRnFB7nnOWU;{x8EeKa zOwj=`$O2{{q)En_4Ju2c1r#`e0V1x5gYqCD5GUnAB1kBK-T?SKNC5H#ASB>Ge3&PN zArUb5uqbbY-T>>AsySa2Cu0?mq!k9i;^Ja%v4D#c`5+{fNX$tdCj10 zqz?Oc7|%u9GD@r%sKacyoj|F67})d5RPBD;Q2+_-p8{wzB4rmVyW<5oQ)JlqoB%MrP>AZqLXId-97iROK%Bh1 zJU&MxKt-4k6+k=$W6kO7|KH+)R8U}GQvPFd=0(&v2FPc7KrzoY3A0e^Lr{CtS9h<3 zMq_Bz%ES!ErI9N=_^bA%9itnx=z-f+M_ys7V+qj!E$Ssk)ejTVp9j}Itqgkk%C^Ig z3U@-`p!bjAmXx2Z-{EMCgI0bc9P)<>I?s-GTqF%!PfwPvijMg19yu}6+>;=PkB|5H z6MpNf^?l^q?lZZnUHe&}{^J#=*=g)Hm6-h{`VXTEJ=SX#K}#nPukaCT<=)AVfWzR{mNZ;ZPzMYRld-%t`%?o$=0_1jJB5U{_ve8 zC5p&JgHLo5>)_^wtTQJYJo4z|eFF>28geA3 z?yMZqLBgQmElq>*u|N5_`*y|n$T@)5$(?TUr8b33zMD{Urm~F>)5~jC*7yd9#rtwE zPe}b^jN>kYM^H;|eKV>bklI#+khvUfwO{T1b|6S3J;*3ciquwD8$X)n$I2xzqG$a#$`o?Ha&z}j%Qtz9oXp_0ZTa5Q_2jkj(E~+A zA7s1xJ}Ef%F&I36W zm-Ay%;l(1^*P2HuEn$qvn(JdNu?h;_@41=wm9=i$upAC2z0>ZVBlJLddVe`Fb+P}8 z!zX(7aN%%616?z@kx5T$3}XniLv`8FkxaqGgq%-{c<7y>6k(UV{BVi5Zuc@KtTkO8 zIof&ao$~A_74U2~{-*(R;&GT!XES2pLG(|MKc;xEFNYAD}O3svdlOH@*C`s2bm+haKL> z4TpzZldcu^^NfU@hbl+*Mi#6(RnPr+&+di!(|+BbyM6hE+vtyl#F43v%_IKrBUsl| z`vyXqA1H3PeVfWc_DU8tE!mI(?tJhX0i6;}c$!<6dw&17yFQsnalW;E$BEJSao9cd zL;LAZFLld0oiA=*{1oM#&%c+uE2mL?@Pg)>iQDILGQCPT^>f`D54yW9L?wShzAuf8 znQ9sQ1-{n1J~ioT?4@k@!Q;XkH+}xXHR)4}|H&SUDcic4*IF}ezp>?`?NhPmX!?yz V;M<@W>fb`6sgqKb^=mi3_b*opG6nzu literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/bt_dropdown.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/bt_dropdown.png new file mode 100644 index 0000000000000000000000000000000000000000..8b3b0efe7dfa4d448e83c32e312e3220ff0e0793 GIT binary patch literal 1208 zcmbVLTWAzl7#<>sCMK4)h8jV~5lccdd*;l}W_N~NHM^74t!^4Ni%l;U&z?D(jLBS_ zIdLbkiWE$556z2DEfJ(X6q_`(DJ@v2C`c4Rp+&L2*y2kdpkS4>KGZYW-RMK`!86Rc ze&2upKkMyzv$4LVp5wU2>~1~J)^+T^vt~7$;}1UB%$AL`tDp8cC0a%v;W`bcNcgOU z21uSDWAxBvlH|BmzFFv}{kgpwcB}{rF_FM>8JpvhI|CQtAwu~g88GdXaPQo20&f~A z;hk7c%DEXbXzm{KNZ(jb0gnw~)ev^>;FE#I1XzS3KCp&uUkg&gl3b1L!)qY$OAtDg z5-LXZ=X&{!;}Jd&DuUiHYPRQCevNz>d)nB z8IK_9cm>B9u2n(rphF#h&~f=phHuRwY}(RtpSubAZ#j<$Yy{lXRYz3(eBRIGxKX7fA?^U`0B-Dw-);{X0Yn5 z*7d*d30s+szN=GT-jsLz{OI)KhrXnQCyj%gF zZ{PLk>+4_a9Xr!3pK1A~`NrqX;s-~zx1E^ZUI83`_xNo;4ZQi2@6DY&=>9abZ}#lb jq3`d`z7is&O^fvs7k%yWx@(h1*N2R3SC2lOKJf7qNdb_# literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/bt_grid_dropdown.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/bt_grid_dropdown.png new file mode 100644 index 0000000000000000000000000000000000000000..3d33c8698fb5cdf8956cc835593a76c2a39053a0 GIT binary patch literal 455 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/category_expand.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/category_expand.png new file mode 100644 index 0000000000000000000000000000000000000000..54bc5dc74ef73ca3783fcdb0ed11b40e08f1e036 GIT binary patch literal 907 zcmeAS@N?(olHy`uVBq!ia0vp^1`G_03LI=e)~CfERsbo<64!{5;QX|b^2DN42FH~A zq*MjZ+{E zS_=aQTp8_Ze}CTo_x-!q$IX4KV?`I-U3~j}dG*fB_3_J@y?(s@^f>qT`jvlF%O2*R z`uZ*ANYxSMd$KY2r!WXU?Emgp%PDLBVMh9+{kFTNKS^odAtWfY@0Xs5kf4~|6SFEc zC6hlloNM;X5~_NU;67)z$bn!1&4$IuW0dq%{{k!$C-Tr zm8TB>cDn0bw8=T9lY=w9R$Qu+gIm5x+E!Rls_u=VUED9H^Na;t3-wJ@7w}IMv*W(d zenI?GnG_CN9~@<1dp41`?&y`X%Bv$^ABjKr@At!7UgvZg9_w$vEbyB1&~l|~Cm-gA z`)fDZa34sX+o2}B(T{Jx)ei2Z3fF{N{9R+-dF*!O7mfK6aeTpt#16yu3Sp6b?-TMb zy?072dsQZCFlpnP?e011l6tQ{<8TDSfjbS2l_|}&3-jb6&t4Lj;@BVm%PE-gOY1YH z7u;t*l_y+Oek*1hQgAU@w)s%IqTYJ_khJA_;f%_Xr|bA@7kajx{)IC#4a^e~DP~3m|HTTq;D{qG$@Hn>VzH@xWq=%dA i_z~{jBXPiMNHKk)n&s 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 Yr|Qf#{?Dhc&!cBq$jxalvP)Zk0W*R?Hvj+t literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/date_dropdown.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/date_dropdown.png new file mode 100644 index 0000000000000000000000000000000000000000..e8ba17a3742c38c8c48f50fe97a3c7238de61207 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^JV5+_gAGWUe{PopQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jihg>!IEGZ*dUI_z?;!&bx5V2?oLN~~TxCg&2~0B@W@;>0 zxGbIL@$3_m{YAW&hWEv!@-Od5j%sKozrg^-q)9Uvuo&uQi)?tyQ>( z%~SbpLA$ER<2RRzHF{TX4_Ra+C-sjXs1^k3@2@q#yd#?5ZGW`$>qDGw%}XYh-C4`6 zaqMT_T*u6q_t%)F8txW_s9nIGaQ5TH9ntHp|K{fL?f2r}Z@atee%_Vcp|=vZXH772RXD7I}{ a&%n&kD_vZ0iz7J`q}kKe&t;ucLK6V4>4)P0 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/date_prev_next.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/date_prev_next.png new file mode 100644 index 0000000000000000000000000000000000000000..8d0805e863a9ef74c3d4292619c51c334948a2fe GIT binary patch literal 1374 zcmeAS@N?(olHy`uVBq!ia0vp^1`G_04IFGh*6aNb-GG#2iEBhjaDG}zd16s2gJVj5 zQmTSyZen_BP-|M||C#smV)SbPhk{&%Vy{z~jf+e;;4v3p12gXe$WbWAkX;&M@iW z(}t1?%>`~1k_*BrI2WWGI`6>S^2d3OTg1NB zNgTJYXK*F%&(#ywM7aHo*G{>>CRV89M>4ifpHo=Hsq?k<_$ zZ>?TG-dzwEQkwSgL;KZ$_zbza&HLX=z2u&GIGVBZgPDWY9@Ysw`s_;%do!9II?b^4 zkT-+rVdFEr*;cph=QH>3zI2Z7ipz^%PE!SL?F(RS*{3h!R`JWpv1Pr!h*QOHC&rfj z`YCQHznqF)7S}HPc;-8+OMFKnACglb%muOs9zD#B?Q{F>q*_z{f}2zDbit3qSu6BS z`1jwmUq2uYdj0$OE}7hKt!*FfUJ(z1gpgnS3t-H>JzFYWt4KKJejhJ>kQsjKX5%c5 zo9hE~TfP_vFf0BSSS~m%f1%2uZ>F=HBGxl=w)}N^=H{~Qh`RvLvSr5i#RX~=+bl7H zsNplC&OE#APb17ZB@RuOU!7MGZqyO*?!b4x0G@@_%m01M`gbjhVPWm^eN0aO{c0s1 zRxY>e_^>xv-l^jLN`8eu@2|`joLT;=x8sJ+6DNZ+a}Bi5{#Rd77=BLv0hc_Z#o^nG z?>>Y%DDB~$z?ILaa@hJ^=i-M~zaRPd;g#%*%MbVa&DoS^{5LgeI+s3s%oiON4EHfS zxW2XG<+i68Tl7N?mACH;5P0~SyH#MDXy zyhg`|udPlTvGFe|O$XLlarf~Foqar%0OP~vXBB?8yDBbgHS3+)!17=sG{O4--P;`x_ALFnn~=d#Wz Gp$PyCDngY2 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/dropdown_menu_parent.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/dropdown_menu_parent.png new file mode 100644 index 0000000000000000000000000000000000000000..034893ac777b2e0501f581d644e0bc56fe023931 GIT binary patch literal 344 zcmeAS@N?(olHy`uVBq!ia0vp^3P4=I!3HGjzZ5Y8DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MZY{<978H@y}5ai>yQD@v5&P!*{`gQ`?}Jm`kUZmwXa4; zcWu*a{L9Ro*!t(hB%hEpvkEtY@Z@yD|vr&3d`ll?1^J`~hO{%X_ zU&HibZjImr`IGYv_ww$K{r&i+S9+A*M`=NrT_|*&MY5n)f}mWZ>kG#23oT-aTsns& zqFQV>eEiRQe1f{eJkbfyl_#Y0pV-X#)ROg+jI--KgsT~5Jytxx;Pzl~TGc%{u&}4A KpUXO@geCwPn1PG{ literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/dropdown_menu_tick.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/dropdown_menu_tick.png new file mode 100644 index 0000000000000000000000000000000000000000..f7818d510633625eed6e5d1443d1525b02896030 GIT binary patch literal 823 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/icon_advanced_search.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/icon_advanced_search.png new file mode 100644 index 0000000000000000000000000000000000000000..6a2e5c69ec4d2ba8705db9ca63020f35eb48a171 GIT binary patch literal 1975 zcmaKtc~H}58pjhLKn3NflmrCBeTIZYEq6HuByxisLI}wZIYg>Jfl4%-B6m!d5Cvo* z+{zu5!&FoR3|7v93PL3=3dj-eAkb*Hvpb#Hoq68p`_D7a^POit^Sswxo$U`EP&fbr zfet!4*t!eUR`4E)iwg2Xba$daU@>++F&&}y0LY3M6%4=~Bk|_|cK}aJxY!4n zfk0xujQDz&ot;JL3$#e61O(TWS?>kVKew7XiPBqRq(AsKSGP-XnAc7IbmFiVI zgz`LMy$5NmY8N3YZ=3Q?=SAp)pGzAnndTdFk2BQPe5h^jjCdK`Fz%^7)`nVx(DU3v ztQi3EG#awEnGJ~ZMrND0DET# zfXSUq(r(@oDB$*dG<{I((R~VQ6CPhROMJCx=JrN%qdhFE{2}vY;%Wm_a-Y|^oV&Dq0K`a}<7PWgK z*!4B-D9?B$mFI1Cxkbkp;z!B9YL-WPdh|PZC59JXHXxwH2xd~o1agz%I0ikQbqU^j zvB!0^#eYMmMI)=_3DpFCsb1Q%8?$vzn=?0{JD3#bGcmBxOgtlJZEQB=oUk1K(6LQr+dlxfKQI`*c$ ztkpQSwuKPXDf>ZRT>+kTeLHm7c`V2WOxb-puW%SLb3C!Z19fLiMF;>VobfIyPW`?0 z5EvAzTB4~WwFhzQoixx(wG>aa%piZsUxFEXt7C|@KX&DZU-ne=QW3*-1vMF0_~>+F zW&tv#EtQ@9)CMOS^pO+VB%*D@jafiov{2a03_kf(nCckS{%Rz1`cqxC>iTC$>p+T+ zmKPtLHW%7Y?_$mHfaT{80{606P1t5L1HeD>t6~~?Q)qPJNt!YWLNAndW}M(lN{?Y z-6|GJf=Lp)8>+0X%1|2GA|5V)y@M%q&4tE7kz@lk9$Y6|%frwp5Zb+;ks{VPgx1=#-3cI*j{b z8=Yc?#)afxTLGGBZ0t9*yMI>OT>r+w2dC+zwgHG5lVFGs9O$A@rCnjv0NwCBII}5y zkbObW=fpIJ7#qTIcOz*8tp!t|AE<~i<7Z;L@Dk6(#zh~+Q ztjH6~N60t`2z}B?UrgN>m|hoF-9lEzkcqnGZS! z=sHQw-E?paA8kS_B#W#At{N+Rv^Ky;`w6x=0l^B6S}Bq+E_9eMT1G1Vsj9H<@ecYy zXhb68;+MTfB*Hp}StQu4q}R#w*+`G$L3G{lG-S#gijRi&W-fi67J4Efe#K21CyGku zqwPTTe;p*X|H~#T`;m`xEs0TnY2KXTxu4VdR#gl9E^#RNFFLdTMkn*s|DZEg{BLv~ dli!y>fjXvQ7pHKCO$0wN$kEQ(w%$4@`45`!p-un* literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/icon_error.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/icon_error.png new file mode 100644 index 0000000000000000000000000000000000000000..fe6e9e18ab32f176ca79f5b430b40ce2eac2ce40 GIT binary patch literal 644 zcmV-~0(H-Uy{Z02JREK>Ti~#6Sy@<3T_a zDmEmNkQNZ9VG&P*$_;uCbOA9l7I9{%+@SV=Hx!dAKcF4}g>X9&>e_L{(13dYl*V<5 zP^XI{j|`{>_(?2fTA+FcjRz{wicMnbiHgDE0Tm!FB12yhRPTU$0F)`&$k4||WTvNS zQv%f93BhV`YbyhzzCM`!|Kdf4Kh@RPl!ZXeI5H4104fS6<7}rx9goh&0wz;ZtWx5E za3D6ILJ~B9nnhO+@KCu~&;>PffeOMB~Um!LF;>+a5K+6C+o~VHW7FrE~5ZNCfWvFH=DWwp|=e?8!9SQvbVw*3_ zq<8={?4iyucmS^9N~|6bqDG}fVLgB=KME0(2TDmCBEbqCm6uam4`2&eP~}!bCkp=;STUE@Xo0uZ2a+gc~s zAC9K+x9i0;-sRQ-5&D&aA%KoCK!6_sm=^B6#K$?7v>wm+80X4aQy0WBkk4{CEkNwV zpUO=f#P8yLDqi3`^a#ZX(_QJKfT6Z{RSW9)! z2tWV=5P$##_-BBrWdLXwS{tB<_*wwP#3R3nm(108wT?f!2|xe>5Wr$@0R{jnT3tS< SwmT{S0000$Sc1+P-t{ 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 DRW6Fx literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/icon_loading.gif b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/icon_loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1c073f400a7fe2d813580910692278deee5ac9fe GIT binary patch literal 491 zcmZ?wbhEHbG+;1bn8?Jy(DwAir91!s|7T!eQ2fvB=Nc01>=@u`q-Vg)2on0q!phIU z#GnIY12q^hFfeVO(!cWbTmHp!w%l6XaBok(NXsLSuAcU?gp+;gTm`O@k?k}ctqT2m|os~yg_5?vSS@L+=X`jkO<|h%-njx;^igHohwDNR<2n2 z!17gSm)3$=T2);)y{u15X8+Qf&9Hm*@61hFVcox9OU3r3%c^D1mi298-_zQV-nhsu?3w1$Q>TLTn2tZ*V`A1WU3%y9 z%d-9l=^iHkBD|igJE|Qh z_N=q-z^QHTxQ~DGx&E#9`LA=||MBy%aU%kmg+U7Duoj@hgy0Ti-qYGhqQf$Q4zmUT D)4|ct literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/icon_search.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/icon_search.png new file mode 100644 index 0000000000000000000000000000000000000000..d5e69e50aefdc649421ac348aaa1846adfb4b8ff GIT binary patch literal 842 zcmV-Q1GW5#P)`6pHRCwC#Sy4n}Q5e3{tXPI!!_bN$ zN-U+PD6L(SqL+wLtlqYsmR2b}jMlE$B})%I)mtgMc1iQHYa^vq#6G2E86uX5h=|Da z{rqv~IQQOj=iD>5vG?b5-E(KoeBU|$|DXTA6Dt%7RwY}NRpAy1hy-Zb1KkPwUXEye ze|>c+a-sj*gbfKA{VaH8`gG2Meq5(6E;C!kev3KH=avG6Bs z7kUVM26larC+i1}un@Ch?m!yYU^mgR95964xGJZB6fS!}z2xx?um$X}-`|Pta@i&N zd=Erimn(>u9mo@rSHQ94Sr&K-%yOXHEyLqe#&-a#KgfP>w@Y9GSX7+mH82mvg`I0w z3G6Bj@^M}%(PajFkf)P)0hc$zux#$Yvrxapb>@H{C6p5+;)}ROSfobN0_=7HeAJjP z%R5*k!lZ!b!u=YHD7C1|TkkNL8dt)wCBN;mmKtNu&Pni-B zcQ~|k?MC5u0ugW~8LJIIKw7vzHzEK5cghEr-C6?>&?emfHJOFPfExy?HEXJj-^8FJ zASZF5QH}Y=xg;;zY?A`kB(d;;J2AhjPx*dQ7~Y4g9vBmV$uA`*Zvy!4M+C^zf%sLD zakAy;$QC4-qL%xEF^`xavG0JN+%p%g4;E;v9Q^>5!AS>l^lX}ov;$j4Y2v=Q&*8gy z?jy`}WZ3dLZXX+UvW|ltayRzRNK?<`cX<_MD+lr=*HNAV6vq z#jWBubM|zs6*MX?wBbRXe74i08l`8yEd!yd6j z1d)G%XQ7f;J_lGt4{*vS>b)TE>l^@KdSmd!x@T7L|Ioyuf9fLvk$^}*sCFyB0QIHT U?DStM?EnA(07*qoM6N<$g2wrPM*si- literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/icon_search_clear.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/icon_search_clear.png new file mode 100644 index 0000000000000000000000000000000000000000..b3a7b748606cef066f66bb43cb2877a1554feffc GIT binary patch literal 6219 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 UzE8;ezXJeOMNNeYs73HU0C+05`Tzg` literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/icon_success.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/icon_success.png new file mode 100644 index 0000000000000000000000000000000000000000..998025eb234665598cb152f40b1d91c44965bf94 GIT binary patch literal 972 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/shadow_category.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/shadow_category.png new file mode 100644 index 0000000000000000000000000000000000000000..7d3c08b20377a43b902bbe1cd8f70e20fa9015d5 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^96&6qsq$MOIFeRmFq%mH!-&gY>JtZZH&GP~4 hVy?EyObrao49C_o*R?+538U}fi7AzZCsS>JigY|(978H@C5cSDoRGGFVFQDq@KQDd{vC`u%&(i|SOS9^>bP0l+XkKYUm|F literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/superbox_button_cancel.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/superbox_button_cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..9d89ffa35985e22c8b52aa35ac3695b1db583d87 GIT binary patch literal 1649 zcmeAS@N?(olHy`uVBq!ia0vp^0zkZhgAGWsy?@saq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1FfgZOhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Keo~drKfsvttxuu?= zsfnebp^k!)fuXU!p@F`UrLLi&m5I5Pp_u{{C;@FNN=dT{a&d#&1?1T(Wt5Z@Sn2DR zmzV368|&p4rRy77T3YHG80i}s=>k>g7FXt#Bv$C=6)VF`a7isrF3Kz@$;{7F0GXJW zlwVq6s|0i@#0$9vzP@mS^NOJX1q?F%io^naLp=li++2{qz^aQ&f>IIAz^b}9q_QAY zKPa_0zqBYB7$0fMFwMZQ!*3BtA<#8e{zaLmp)x^@#(iEoGGq1QLF)uk4W^X3QUWi^xyn3yii&7Iy@{2<9^K)P+ARr^Z zB)>Q#zd*q`*hIlMF*!32#0NzW#J4V~MVV!(DQ-pixeDO$waUb1KS6&(^rny#X8J(K z=z|gmQeuG#0aGA|2~YY!4m|Uu<^gj|5io09x$|9;fq`kEr;B4q#jQ7C8~vmm1@=lm zYU)x7$&6ufN?mec0@I{(Q`dX=o)y0#%j#Y@_rF4E7FW#9?g=`V0w$bV;88fakLjck z>(RE@>WlZP%I`^us2=Spxm1;Z@AI2I<>iyLmu{NQlB&<6D8QsR!}VX?_vEKB;l2pRIfp$noa6e#irr5RROx4?oclZnx|-oi^dz3H4`@9AC7abs9bGJtDb^Csbj5Dae69 z^rJuRY4={+|CgsQ_c)2J2-z@mYWcNmS<=(X%gqe=8~^@k<(k9NdZ2BAp~M`9Ng5H! zC-o#IY1~*f;qAQnvkyL8c-hi#;<={%@86$KOWoTMdZ;nmcZ;;q%Dq9@RCD<}AKyzHrQ@<@Lo{OG{0+jEXcd4t$9r?xt9w1Ckb{mVCx9kZV|HG1{x zt-bQ!zrR@n2_p>_GnTWfR|`7`v1aSsWOWu|jTYT>?rg85jN0wno|`wZ@|&5bZ{8Gl zMC;*!t!lS=rxX;Q6}*$zeolJAPyMr}Ufg%KQ(R*FiBl06LZ9N-PIC$>v{Phpvzr(h z3AMWAz;C0{-FFY&wq~Be6dJIkX{WNt$|F;LDB=C(M{PKGbu{ayaq^$A~o|IOai zow_^UQ2X-BFWc_st+$Wc?xX5hu>QLA2IUYuVL%MNvg`(hN|vR0Z)?)}FDE{=hM3;V~m^?nZ%@$Ndb<3?I+r9{s0uBpy@= Nc)I$ztaD0e0s!d>X#oHL literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/tab_arrow.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/tab_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..5467392463a332ade15380963b712f67beab98ee GIT binary patch literal 501 zcmV+r*3CAVSPRbgbvhVGYptFQB2vDw+wIJc(=?@5d3=M0 z3heiLje9u9cDo%UF-YKWIOre<)Mzv^-~1hOpCjDht9W#7BpQ~p_P*s(Y z;EMPpJ`%9ui^W3W2<#@r5tL;qk`N2Ha2x^e-mU-#jzA(I5_kni`Rxke7^D(j0UsQ@ z$3PXN5^n|aJny>w9o(*fPlD%h9Ftd|D2fiw-R^_C37<*e>EQWlwW6ND@pv?UshpT0 z=Tbse%9p-~dbExW-A{{y=_~;7MB9*WfPEsp rr=T^`L*9mdBjUc0X!VcdM}PqU4kyaxh@!@=00000NkvXXu0mjfN-5?# literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/tab_shadow.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/tab_shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..32e3fa57ca0149d13b671b9d0c71450d2c3032ac GIT binary patch literal 1065 zcmbVLzi-n(6gGuaZJ`LMEHIti1*H1NIZhK>NlO|hG*aD`G>EYE;=3kRYoD>N#4Q7b z2`0qEz{rjSY;@>^P$ia12q7dS7PhJ^{R22BO<^bqVadK9e&6@r``&wx7w4~!j$9rQ z1Yxu~Yt{G)_^2JXDvCUXuDoUr*kvnObhAjme zhM}mMqG=MhkfIHrp;+>x@jin^A}4eM=29OdjHpT1SwZBH_EPWy+dd}tqa&fXWJ-(z z1xk9JuP{!uj_Ml$QEDWj>!HKzu`=EVbM5}_C^6*Gma2Uj zXH}~p@;@?mv56tZ&5WLwbO+}o9TOrUBgeH(!={RnI;l6CeV&u>*{qSVN|sj6S``S( z>0+j6l#NObLVdPHOu4(a=Lxo<gLzMK;|N0{FM&dwBf6;wd~RCFzvkI;Vfd z+cDW5&jCLiPZII@_=J2;wr;=Q<1;o_wTkul%l^k#!@`ZBGkas__jk;DYFfK+_zdp) zsVBpq4i3g!14Cd-82GmJ=vr!L`%Ow4la_D38+iLX_2Jyv&tG5M7gG6CgM#^B>igk@ Q{W=-mYI)vzIkWumC*5{W)Bpeg literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/tree_arrow.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/tree_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..3ca5234fb9a1ef3c8127d02a0655c63ee4e13f7c GIT binary patch literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3HF6DHW&!DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg42)u)E{-7;x8BS$a2E9)22B2LqxIsvI`hwoyk5|tB?)~ljqmO@Yya_%bZSKU{ zF{DX ztcd*hyLX;KZ2HqsRgbNTTRaSQsg!vL1Wj6dI<|brx{SA7>xzHqFz26U)rVk&QwflY6Gq?*?@b6P#eE7X?VmVW8@4fmT ze&?Cm?!MY2yyL|gcZNgm4Ob5@XJ^o2U_!tHQ8la*4D|_Z0uxg{Tn7dtgQu&X%Q~lo FCIEu&j#~f# literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/trigger.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/trigger.png new file mode 100644 index 0000000000000000000000000000000000000000..89cc0e4c8e469553651598c1b184631d2d43e572 GIT binary patch literal 517 zcmeAS@N?(olHy`uVBq!ia0vp^7l7D;gAGXbY%ZG(q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1FfcCnba4!+xb^1lMqg(`frf`FNu0+PEdas>-Wdwg4vwyl zt_LF|9}BuqY1#9==2-g6-|QAAuhnk6q;flRmf56hTZ>tR93XHK0~E4MfI*c8C}dQD zKu(2~`&Qp#G%x30Xs`4A>&I-(@8>Ukwz+pd zY;OAW%!k#FJL7)bt5_ty&wO4-YyZ4Z-WNZZ=Gwhb`taw>t6Lvgxg!4N)7uNu@w9l3=m~~y5d!B|%KH|nM@gcivmBKaW&zZ zx3k0Tps{$Mw#`|FzpWW2Hq!-q+nx(8y7(c+>57nlu)}^uDbe$mE{h*owr7OcJQvt{ ztaz96{{VH>+D2fwAi{)G0RlZ4ppeM}28A3h{r|3efPpRc-2PL?{htEkmBG{1&t;uc GLK6Vl2Gd6X literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/trigger_date.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/Components/trigger_date.png new file mode 100644 index 0000000000000000000000000000000000000000..f96efaa7f91c00fc415ee7b6890701f76b26ea4c GIT binary patch literal 472 zcmeAS@N?(olHy`uVBq!ia0vp^7l7D;gAGXbY%ZG(q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1Ffdkmx;TbZ+pA4{dr#WpE>>K^EW@;xzonH zal!HR10oba$r}H@)#lR-hYeFWr*Q4P z$6fivuJe^Tnx8WaB|4&jdrGX$O)tPPzFwEwfqHwXFIzxs``Jmo461)a;jo!lfZ v=+NlU$iT`3fg&6*7@!cK@Z$D#24;pOSN1+$)~>b$7*!0Ou6{1-oD!M<$eYMC literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/modules/ExternalDevices/images/tray_icon_device.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/modules/ExternalDevices/images/tray_icon_device.png new file mode 100644 index 0000000000000000000000000000000000000000..e9a56661978c68d758710026125bc5da31f4573b GIT binary patch literal 4156 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/modules/FileTaskMonitor/images/tray_icon_bgtask.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/modules/FileTaskMonitor/images/tray_icon_bgtask.png new file mode 100644 index 0000000000000000000000000000000000000000..2db01970b4d1a86b3721626cdbfa71bb863ccc11 GIT binary patch literal 928 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 RsUIdypGup`2}Z*<{}-23WrF|! literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/modules/FileTaskMonitor/images/tray_icon_download.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/modules/FileTaskMonitor/images/tray_icon_download.png new file mode 100644 index 0000000000000000000000000000000000000000..9d7951dbff25b7631b415de78c67c6fa0d52afd3 GIT binary patch literal 1192 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/modules/FileTaskMonitor/images/tray_icon_upload.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/modules/FileTaskMonitor/images/tray_icon_upload.png new file mode 100644 index 0000000000000000000000000000000000000000..7f9d2781d8faaa9b6acaf68806f86ce0b8638074 GIT binary patch literal 1129 zcmV-v1eW`WP)Mgs>$q?nJ7hd0KK#W$?qtPcLe~*Ds%Et+#U@px*vFYX-~)VEgyaWdl%ew(0i~^nk0Hcl9AO=%Ufk9SR1VjM9H6&kIUQ-~bn)Hk! zA;Uy~^+8x402Sk%jMwCOF?>@=Z^7zPKB1j_O#IG&4eJw^GUFKo5EEXI(d2nHocf8- zQ*@GAaseC^1z<_Lc6FGa0|q>lid+}-mS`Wm&Ua&CLlxU(>;Hb30Sr9pK^j) zsBf@~#J$<0{Q|}hfe_Sj*v+v{bpGW5&?abm6YG2cU?S~L4F^?21^`&pX;{h)j$Ov{ zgG`{knE|G2olz+@3xruS!K>Fdo#!{v^Lhc#54W9SGmgA+hVhn!+0@9+HHxQtm4 zn2^Ox5THqukDekllC)BT1jCv9(NSAC=c~!nPQd6`kc43dI=~GKMcdk~DtXU`sXBzi zc;gcQG1i3%3#q?l0T?)p>;@f1sCrrp7ijKX0D|M)=Lo=%SA3XsDlLr*dlLx^9IXjL zk_!{!mJQyo!hnlE99?N77JsUuy2Fl?*{77iZaj|ho3Jn-znLHos@C3IvsbbvFd(dn zd#IKKg#r07;L+wq&Cda-Ry`NEcm@;zN)DJE>UeZ`(JDEf-GSrYd*q&B4Mru2EB<(* v{8+jGPyi?Z6aWeU1%LuT0pL=v{{jpE2fESXXu#MN00000NkvXXu0mjf0O0dt literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/modules/PollingTask/images/tray_icon_disk_port.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/modules/PollingTask/images/tray_icon_disk_port.png new file mode 100644 index 0000000000000000000000000000000000000000..b66b079d4b131c617321affe59b21d014b0bc8ee GIT binary patch literal 5685 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 jxMyS-2Ae)Gk z&1$W-0l}iRHjdUK-6m{`RXfPgmg#Y9Xu-O*g%+pF=rFOiW6$ZoF!#56&-0$=^LgLr z`(D(jmq?uu00BQ71*3z-~RTcOU94;ga}_La86QcHe` zwZMs3@)TN|LYHmKDORF(DP&S<%zA8vKD#JWszI}hjJc~cC?-d&YSa!Jau7>?mKc(% z4HAVeORkkEbTW-uu0k^r{km~vOiAQPmsNg*Sw&z2!pp-7sZsgkPXOnjB&Yth3~)wN?dWR3p|*F|0zY z84_5HShQvbjM@#^MKTp?cC1pU4Ve;6MwU8LuFaBa)PcQH=$8wn(m!3t`) z90gJy6+emzKwJP&64&7M4D2R`FD)MRb`3Sq<4lJQr@Ke?a?;mdA3c5a;)}5{P0>r1 z_UPN=t*f*xBQy@Q@pnFQJiSN^h9Ye~V{>-{W3wHF^WAKoC0~(-Ln@*=t$$bInERQR!U9L%Xvd#$8#; z>~$VYWNZLVITzsJit$^Q52P=S9V*|l*54a$x%1Kb>mOHj|sbIjLr zL=R#wvPGVAZBe3){EK0t#<^i_cIO~unYC{ytZLBZ9%tcqtWb0=w8-8=`A;U2C_hqGmetGm3q|$(o=@z-;(*~%Sq^BpHBmjx#g}P&i8g{tz?nuM5XZ z2$grQ{xDTc$4f(G5g9cJ-034IZ|ByMJ)=jKvq*&HRN=tgaO!Ljp{?g5`rT7QsdBexhLW!~2uZz4dS&1fPU48Xy83fEftm z@ke1K5W^E8Tp)}R@{1(2#o~7w?6G^S8*1=HXZC1E>f)F75Z^Ad_pu@ryUrH!i4oTA zcgnh%@iQOV({iwN(=HGfvaheFwW32GOA3AdKO1BD^nJD6-A$(Rd@8e76%$K3*`+O|dlg34J0!3$Swn^soOyKe#uN9-!xLU(-wqf2JkHF?#9o72p-w{T_1u zse6+ZBTdv6N;1*pd>r_VlK$4#Zaf7K0I?--P};NXW5yoMbGw5Tc@N;TtyJ3)dDYK{ zGv?L>pk*x|dcYGvXw+Hql~{OpFv&SWey%YCR?~NVb4u0^$ zLeRfnDHl$;>*vV4D`Icq#i|GjmH2!1=wI32dVCEwv*5-+f& z>e9xlGyI+GT)o}V3WjQ@KyO2}@Bw;x4;E#;T`*(ay z9GO$N!Q*o=*IYgnLFBtWI|s%N@0agj)q-FUb?n^(%Rg~*1zJBeR{nWYOUF%aMAeq5 ziybp7QX8w*LQgzs|MPhBkw?M_PoF#RONuY^`Ue|=7G>4;Vcps$+_DwJqu5cng}0b? za^jdZp_Z>EA0Cf0zr@SM>ba8LEqmF^ipO5&Z$0W$a#r*$v1_ap>dxm+aJM&7$mCx@ zK*9mU#E|s@PRIq|VjVMs6}1Vp)!$Epmj}j)Ep18fafDsp)Pl>Cv|mU}sjJ?tTrwLm znK1Y{$asg!o1Ceeh-``sn;)*aSV#DEC=Hch90XTZ!T#GIOXY7DuSc#W@XA}`Oc z?z>iUp(RwkzVkdi?ovB1+h#dF-o-PdA3MwK9U;_fid4rZG$cc#O~C8tS9R+eEy?+l zZg*G1kU3Rz63g+pm~2RR1*;4S-V2avT#W7_G>4N>&rdnA_a=j$9&5&KH5dV0=}0uu zhp!uYbV!_yj}9rGkEa()0Q`P>FrFy%SD0xGK{>>s|K8%aJbQncC#(~;Jx; m?D+nhuc4fQki|s04o*SGxpT9pNd3hYkmVE&nf~&(EU( literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/modules/ThumbConvertProgress/images/tray_icon_creating_thumbnail.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/modules/ThumbConvertProgress/images/tray_icon_creating_thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..0050b8054ac2c9b3b228a194a292ee056696df97 GIT binary patch literal 2125 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 DqsaPA literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/bt_bugs.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/bt_bugs.png new file mode 100644 index 0000000000000000000000000000000000000000..c1f28e6b6026791d18fce7f47275ff4e9a042ad2 GIT binary patch literal 35658 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%0D0~Rp;W9XUd9KzbjRsRc2 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 MWz}SArOYG#54tYB6951J literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/components/icon_error.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/components/icon_error.png new file mode 100644 index 0000000000000000000000000000000000000000..e33d0282899ccc4c535009bd44f862538f52f2a2 GIT binary patch literal 2031 zcmaJ?ZB!Fy7EX#93Zk?HDu_4)&n{L-GWjHtAb})6A$(f`DiAUQWJ59`nLq$RVg*?~ zR5%rikOd2+9w}DQP`;s7AzF*JVk?2tsBA&oBWFRamRfeAV)uvLIcMg5?|Yu-xzBs= zJ!k$I9U0D=HA9aY#CvD^bHZ9)zU9K$t?3 z0ms4;C@=dG?2p6Qc*)|$s8|%iks=C`#EK#56e^63!};&fsU%W4i~?zJhD^yN&i4%w z0U5+4CNM-4kt!I@l!fN2;kf+Bcxk>|%7%zL0swy<2NO`hs07d{vXmN*j!S%|%fa^6 zV=@tV20`Uq;&W4CQ8W;Ys9}IXV)#laR1jdXNg#vH20%-fu*`f|Ez5x+p&C&D&+g2Ty}}DEh$RpT zC~Qm*e6^S7T<8^EUT}GT$t7cE$kxvOPp4Oou<@~OU(PKSyqtVkiH*A&n`@sA=G!>j zsdSzV58+ck^=AAwn4M$Lq~|pLP(Se0GCS7Do$YJT~;eV6>Bt&o?r`bG^BzfGHU-Bqe}=pJkQPr#_r zSU7U{>@K?O3+8ORf+%%p_FOO85ariCURAmET-K>p=7%D?U4UIP3+e<$x&i(v%L$UnUw5hYYu4j7Rvd40_k#XkA)B6T-eq!|- zOu|CX^k$FRyR_8G%DKX(%_PEoufy5gh=HNisIUxjI%w7#OoS=-(Y()SqsEp%dF$CY zAJThJ=@tEU6Er`$K<$>xMXcJN(>6NSIM;h-Tf93D&`t~{S1yh`Ud(85IQ*s{=h`OI zzuPWMxu3=@xc(zpQ3Vmc)Q6k=$BvZSU76dBhxDhay8IWMHt{sY>l^Oe8D2wpxZaJN zY^wiT^}nGd~Aa{8%`FW?0^Pz3MSz5p&@xsI8 zl+B?(4klhL9okn1zusLDar!#G{K?V)(%wFN@?=){T{zJ@uB0%X#iFfq52{sv`N!S2 zLhbDz8N#A#`_9DpkanWGa)5+AQOBAH-;F~{6O9bkSDmXTm13=hxZv^0iOx4IKkitX z2cz43cJ;ZClCm+sadE@HEqRK8iEn3GQzSP`cyoNDN)oqm;g`WX6SiOXA9_nT8s$Y$ zY6fT&+_x9_*AR0k;V!lFVx`UD>X3d!E*}oqYdfJm{;9q8q)L3|(g!vLN22`n9UZ{a z$G7UCj8E>;6X({d%hgXPyck226O2-A-jMx0+ZDRL=itT48as@BWE~xSuobx=h~(k1jJe7+lBK?dBz0@|%L(q>jvHrJ?fI{%<#@6&GhY|eNTIdua5*Y7pU9YZNy2pZ?Bq&T=oi|eTPXe zbGA8;N{$-~16P^(8KpNH-L*1KRbZ(u{+vziulNCDv(fi`VQR^)z1i8RA%m`&zp&P> z&1@)kzUM}ISmFE5{trKJDx)6}K@G+D%O&1zg9qmL`oGt=Pu!bx(LXNhpGn+<>P}S> z?`-1|ia^6y>DNuR?v<35q4PgQxty#VvxzA=v247&55ERy|LCUK(GR?8{RM{!BKfC+ HQuqHCu>LuB literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/components/icon_image_selector.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/components/icon_image_selector.png new file mode 100644 index 0000000000000000000000000000000000000000..4ae2f3a718a482de4b096d605b1becd4cc178267 GIT binary patch literal 1748 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/components/status_loading.gif b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/components/status_loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..824fde78c6c2ebf42db93e543d314d19a9cbca2c GIT binary patch literal 1549 zcmZ?wbhEHbG+;1bn8?Jy(DwAir91!s|7T!eQ2fvB=Nc01>=@u`q-Vg)2oZ|#4N!1N zEJ*~?Hue<-iOJciB??KY>6v-9O7C~?S5nAKu~iB;^)>JRtPXT0NVp4u-iLDaQr4TRV7Wn$Y4bCgp1A9m>IX_pwBC$Z$_i>(q+MlU5Z#mXYt$TZ0~*-Y0W%_LRV#55&Y*D}S-Lf6zh)y&c)#nRHu zJQ-#VHvKL}Miwq^hDPR&mcTf0HMTS}Fm<+Yv@imS8#%cc!Ss6O6_+IDC8xsd&IH;G z)oX}Xua$FAYGO%#QAmD%4lES}WaO9R7iZ)bC^$PSX!s^3XXb(UnxHs>c-bYjD6=dz z#jPkmR{cKGm~Up)8sVEw4~HDOM^5EC8+)s zasy8v=qP>*tT}-@bnN{ORL| z_wU}mdHw3;i|5atK6(7;;e-44?%uh5>*kH?*REcZ;0$^0LyB;-bQW{Jh+p?5xa;^t9BJ|cQ;oTXD3GodplbjYb#3&b2C#DVE~a3 zL$r3VYgCnY)jw}%zsN4iT9L7%WygvN)4&xX9G03hH3VmdOHQ2Wx#Q)}3p;;SuFQ0GoI|Z|zcHn8A^a=_G=>jo5CfBP58ThITY!G%Z(GDL ksx@AR*O^12m$` zJs<{TH8U^^0tj-St#x)eUC}2+#nipBi}9xQBxEB}7W5L=Ne!nJ!$VCV|O z=?h}3Ms-Eo(XeR&l=ZT>;-g5^FL+6o5lC_eO8H2dAbkWS;3O$Bev#zR+=D@FmYNV_ zQgcoh+y${-$4QC=kxHe!DcWmVJp?HT0^y?wioziRw=;$#r*XsHmX{y_Td}mHqnQTk zN|fW~pcBNPrK>LJ$!K&yL&5gfzTRpx23_P$o-P34C=seB2o~8H(pg!MP8xUIIVCvpI`vau&RO! zD#zojA8-Pr3IgX>@^aSWvtdSRtsf+--IXo2&wVLrrD6vb1G5|!sh4BL?n1>|*W zP{5*mbL?cqDGyUz)r`|6u2$j83S$^h$2I`tW?^oiM1XZEdOh1Kpeb=4E=R^zOS?Hy-6Z zbr&w*E*x0eoV~d~m(5I8-7daUr7DZ1-E-w1a+JPwx9qxSH$GnZSnbFg^;@%3-N=#g z!q*-t{%)u|c5<;GcH_ZmMi~C;hq2m`U~Hy3uy5|STlA|h4WutzE4Fr3hamQ1Lq*B< z?A++`@Yw4Qy|oni3u%t;Dw({Iy&7R^ZtdMUaJr~wnK)O}Ji{+fe$alpsN~9V`Iph6 zEmtNUJy5-8^y}%Z>INY;eDR}+lLZTZA3Pg4GW%)aj%&H`)9(*=Biv@dfcQJK`}c}8 LwMi3=-7o$FK7Ye9 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/desktop/add_one.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/desktop/add_one.png new file mode 100644 index 0000000000000000000000000000000000000000..ca1d78cb3b3d36b80d226dc3627e63e2b211b272 GIT binary patch literal 2537 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/dsm5_notification_num.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/dsm5_notification_num.png new file mode 100644 index 0000000000000000000000000000000000000000..daa7909be16df99067bdfdbea1fa178646af7392 GIT binary patch literal 21353 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 JSgP+3{5#e}rN96H literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/dsmv5_wizard_bkg_v_01.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/dsmv5_wizard_bkg_v_01.png new file mode 100644 index 0000000000000000000000000000000000000000..74fce05309182ded70cd1d3f8b428c21cbd404a4 GIT binary patch literal 9530 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 Y0KcU&SA96!MgRZ+07*qoM6N<$f`z%xE&u=k literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/dsmv5_wizard_bkg_v_02.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/dsmv5_wizard_bkg_v_02.png new file mode 100644 index 0000000000000000000000000000000000000000..acfc1b352e9acb01e998cf6720f47c0c1ea15bab GIT binary patch literal 63006 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%0DkA_x;x(Y?U%$JLzcfw_<<#GUb-RVE zQB}|@v}RzkOQ@k@{R_#_UdCn9BfF8=XV%pgYovjoOLi&vaTU?Iq~bB_S}z|^S)xla zt4VUyN`_lRvKMEUy3o~a=ne=`457Y%In#|AlvOB#;3O5apy=Hn0Y!VQDr`Qbuy4(^ zLZmQ$h_Ey+$+u#JP$GwfP?(AsI%Z~Ok)Y_?j8B&(Ol2fYo#+cq|km;N>7Np#e!{3bw(^?OTjZU-_7x0}kA@bomEI>~g)n zUM7l~V}~nUz=>-VXtSAJ`0&O3{2}r+Nu|I@BayR&cku3>RE9AvKOK(`C3!!H5X!Mk zay0{N%Myo*HQOvwGdNJ}G7Kbk(gmiCyxh?%eGo`^j3b^E>@rCv2pvd9rz7q?g-)RW zA##;PR*jBhTSOCzKD^uGBFHhbicS6;ZZVKhtnzi(wMRnt1uXrjK`8Ig66mjrAB1+o zr)g(nDdKGW0R)huC_X#MP zZQ9RY-G}!}-4L@9RIkiZU|I^V!jP^ET1Asx(!N4KuysX2Ao>(4iC-HXbMKD)#JXG3 z?9R5ugtS`Ofo-9nGI&m2Vho^qN;uRff}@D7y=Q8380dVt&UsZd>@FnXV10S~;Be5# zZ|>bYff9hxyj22~xv`d?J470(FicpQ&yi4mOJ@!3rz7g zdYhN?-Xo~o3pgu;@>0x0^H0+o+}YkmTA?Q0ky2bN7(q*?N$YQ!*qL~S)!HAD91>Vg zweTLPRlufV+@?qY{jGmF_qV}MAtW_DWuVGtjVKDy(1N0y4MI+6#k1ID1pdIib&~f4 zLHBXd7w>}<(TKy$AuRn6>2d3lT@5|$;uUrla@l4LNRuabmZ=;0VmD?nj2rVi^fVV_Xza^xI4D==xi2IYPT^CQ>E-W+h(~4eMkh z{&L~<{Uo3ABXgI13*)KBc=7UUOi^~t0nGjR5JroqofS-&*3@89c7$5>)N;LeU@Vk= z?+Ia2N`TPHXxFEhLGw!?Mk^zV;Qn}a?|ur48|-Q`ltqjErw}*gpeuA@B66fE3HB6=ie!TVASX{LBBiEPfA|4hw40V&MrRoVnk7s|I zQS=&6biIhnt1?g(jrTeYHg@?{dAB9biAuJQiELc*ORCaCg=Tm#h1(rtmMZ6Di#lqZ z(w4Tk_@-sruKXAP;6PTZ}U0^AImhoOl*r=>;r_dvaKQ8jV1@BN8zj_t-e> z$kutU8hx@IkjrH_atH-R`}NviZp3JIM916Jyok}b=55jVzc1%ti^h%I6)GQk_-K_M zR0*hU_X>Q&lW@|4&W4Bh053Bq?)kyY?pVK=9t(-Kw5u4PN4F|KXN&ia35)DF<8lE< zMn9vvQkxz{W`%Co+xa?NdcM>^oho81c7oultth&w^DFU*f0f4%iDm+Mjnij>4H@UKbvF~G|==Y1IVuD;aYrZ<1Rx_`cNFR#f3h>NT> zKZuRNCaMLnZmsVgjgs$}2aU`g66cK5elV@N;WSH%zg@;Z=L?}a&LlbjEf7eTdUt5= z|9*xjTUABzP{WzX)gNfS1Y_Zxcf*tvx(=L^4!adKRb4^SufEMFdcFpa?&XEy;j0Z>_IY^)V@jGr{?k=I1UfgmMkyTgV875U~(7_%wr*BSM}5B_vV)>CEB7&&9e zad`Wubgp%i4=S{%OFdLdv0wbeLsIB+zP(-tp}YwSJ0xj2cs9i5JeBC+;5|(!!av@- z*B8FjcGZ{INEpRGG$ zE2MB7NRRwEJOJ+z4MOeo4Zo14fhbd(!^>^h(FHBmK+Rx^%a~(oHm+j&!!ii$bIDBCY8%1N@uZ*r_1_~*)RwmC$oPjS@>vd%o{0QI^bH>Cn^71 zJ7no#Pn8m+M+89PqJd*XjY_P`A8yzF^^^Yu6xazG1?_6N;vxl>hqZzW%u` zFLp8{Rcv3C7Dw&cV1v+V-lsA-!`@-3yGJ^iB0lDN3)gZoa&<@T2|dcSL(_6C91bL< z4Mr-GpAw&xToALz8XyE3+&MJcZDaySO-PCm+HE2oK#|(Yu%jr9)BAmS5u0X%?8f9N z8Zl8!toQ>^vMZdm6|QBzGn$SuH78GzJ;Kz_3~eK+kGC8!)b#l7???Ji2$LGgSpD-& zNuf!KezHO{nE=Pv6~kHBeA@_Gv^>EAMdbeRoBRC7LZNKus|BCF4ZdZegOuly=8vHa zbwb*85!ZJd2w9$%98*44x-fpa_#yS_M=arKDNVxT7GiWRUEA_~fR*Bdi8>tODrq=- z*SMx*6(@y)wCDMHnJY|DnUDzM6(R`scr>6$4l{BT-KKGRpMQ_(teqcY?*ULF54YMC zF#a9PSA4h3 zwJ6MiL?rs1cl#Ce5+*mAF6Y~|A1vW^JnXq5^KhVcLA+~-NL!Ea6%P_E7 z@bv{p?d2WYnz>$w*Gu2ep%5Td^y};{??6S*aFV2ujG^Um#VESfYUn%M4xLf$3 zg|&NV+qt*~sveb{vny(}L(BI-yGvl(`!sizlJ#2cAp#n57YvHt|LK1FO@0tatxC0n zNU~iJ;Z07Mj3n2(lVj50TW^x*u0s44dCRB_Qi+P>w~X-k*I<{9LWo!((RcOU+KBA~ ziB#sm&5;|SGcnpjJO*7tQBJ(pP6%;`S8)vVn(hjU#*=^l$^H6KKvATSosM91QJ@ACwoxZ#K?CytQH3&D z%gtvoAEYKcnQ*h3H6<>wnm5E z-3lzB!5nEZlC8kS05IKG&qyv}XfM;GydZIQ8)KpV$~{}O%*HB(<`lY`%~ZAkEAFtzRb>RcooAdzI&eRT$rX}ulYd*I*^p{(| zCWXN5IPG6IuL@N861k2JBJaf>ACt2&ihg@`@81U$v5p+2B|Lfcudc*^iXnm;SZ)Lw zvFnRX2iM}LdEm@az0S=DW9cszLUGteHtr|4U_&S)3h@%8ke0nOondtu;B9wdtNW$8 z#g7mgF4y6Dn>0)zgdirTfb&g2rj5f;QeZ(*;lkhML14dsbMM}VeOe57uqT4yY?P=I z%KPMjgd(TPipG{z*d&CyWjG!NtViA*my!}wt|->v+&N4l^NffAAa-aF1q$TUF{RZ` zGJ7~=kw|TkbCuy52khN6&7mLhGf#6!*312QWLgX4$krJFwNV2NSG^dvP}S;h^Jv#U zUIL0nAH$otX?a(ov_7}?IN`K8I%VZJ4wiGPaUig0B0N|xRda7N@}k7z`0jU zigPJLLlODT;OcMM?i-t5BF@i?J}Y{i;F8kbJY=BaGNY!O5lj6w@OY@|vxYx(kFgt7 z4~7k4P+MW+{e8XNqBaNfR`1eKQeYK~HVvsx6d4+xEw%_-Tr_ziBZ_`{7n};{F&tOe zMywP`t11HQ1v4T!e&SgN5*k`#buFpaOD}j-2ox2YW9)Fh# zN}KV-dv~oPsq)wzanL;mLNkP+Y@R75jyXii@=_E-W-b<0$RXmK ztp1kv0*XK~vki8vu`yhAd9A7LF&3hwG651VE_e~BPngZ7a*%M0M^5L)SCV1bC%@Dj z4&K* zhB#PC69pGCPh1it7iN-WW)$`dS4rSB&JlQ2&2eVBy` zsD%+wwZGg#lvnNm)KSFX{ktl2gB3YU?RLxz#mD=?=FqGxl-YJIxJ0^JSlHVwOz=p2 zLjD>Hw`wTuQo`D4sheYjL%h;R`JB;z8y&fR7#%sagiJtap&eI5O8i9|YZ~j_Lbeuc z5k+4w(}3gxMG57KoZu^ePQG^fP^)`N2*t5`?US=DlS%l1v9qiULw|Aphup0yQ6#=< zai(a$rKFdxbMM`;gu=BWcl?JqEo}<|gNW%Z0BEpoCt9wz#VLi29H}LWb9M+h@gSpU z7SsBA3%2N-qNqGMy?@E0qI^;j<}Nyaa-m~2h)PIs+SA8I*Pw9j!v^ytJcfmiLvDzi zaB3M+A=u{w0tX>cek$M6$*1xVqMNls*BL=DUj`Hs-6w!nutfR&G|0`7aJB5;wxAJC z>O>1D8n67@&HeN~j2YihB;gwnSltb-j6NHdKp<~ljd;9LxJTcO!261K=1hFb353=l z&ap={s+N$`0!kUU-c3yAuG8#m7A$?&iG4EVK*KNumTE5UfyNkBqb%1ry$9^E22p%X z86hT)+5}e>jET3E4pZQHg3IHASB6{L9YXfBJ&(eaNkM$8=Kn9(9@JuEnC*%t242I zwhiOJvBWf%o5eSg?jVSj)shVtqZJNP$RmpW@!mZ@hm};xkV^X6Yl!TiihghtV8r4* zU9=k}Z$~gZs!$P!rT!KMu`r7wlUD;@B?KW#LByR$eey@DM62QTKM?-bTe4zdVqPJD67HOOIuJh+M<6= zqg}nPF_D}x!3Lq|dLRP>sCB-2h8C03t|*c=4*UV7!?|E_P={ZnCE>SKewDI*!I;d< zl;}~>w#!lt;Vra z6qSS2A}656Xk9>s7@|ZcROT@WP?SWR zQCc&>8sv-ICkYGMoJexlIh#c0bx)%E2gNIEakebg-?oArX~_od!X*$QTj<08g4NEd zCfyo6Ix1?ktAk=-JB8w70@FRB=sLKcJ|-wCSA2pZJA@)b#On31fM9*;%wdDXHON*J za$OI==;%vNdA8U?zq^8!`EX_VT>RkH-wXy3KgH~j!ddMr?AV~OxiX3vE&&St$T8ZG_yUSVBSlA1 z!6ZPT>#EdZlv$=sUA?GBq|Bvsxs@AwwL)}V1V|ezC~uyYW%pVpKC&1SD;u`ARc9VA zbv=T7T;-fa${T`>l0AMyHL6@-2FQBsRH^Zqo*)!IcZ`;)ckZWO+~-g0{S-2-!MFAM z6VFKn#ntozeLxAhr{9;X;uBifr*2fm&RF4*sc=EkaBB>cwowrb*gS7~GTl7VH{~+V zE29W1CS8*pS8!h`$_TNV=(+y!`(W(3A zNB8+p21R)vYcaMFRRte5nlJuNSt)A4moHjbsL`R-WJ0m!cp4z# z4jyXWBOXFMG_qxdE^|S%BY!pB89Ecqmq4hU=Tjj7rO(Jq3%=Mln21AA#$r&EHz38M zt0WMV*Fm$$@QvJ0zlH(HsBzreEceY5(@^BaNE6aRE=<0UP~=^8Hb+i~GgE&d?_6tD zXx=Xr8DF1~wX}QKAx!cK?^n8Nq4JLMh^Xw(ql{FP>9`FoRVC!2z_+R^Nsiho&C5i8 z-RonEGQF#X76KMUt%6)FMafhVhh3D7Zqa816pgm%-LLMGgrdlk@v1%}SWiYrkrXxg zVwWWj8`8rOI@^=DD0_$y3si_0N`sB&!!SQzjE&*!hNntiqNyOTY^-4X0xB0`C-{Zr zT*WP{Q_HpUH?W#2tFVVVLU&gd(f&CMph75f(sV65)Fw%mUxz$N0hU6PW2*{rl79HodEQsnkas+2QJquhM4*$x zFO@qH#qWtrgoy5G@?#c;d2UXg_hE9EByFsyG3K*Jr`yP6*@GmSifcz-Q1oFMkQ}#I zvEwjVU&W-^IymeBWtd=K&buBnch zL@i=VNui9!T_BQT3ifD~Ly-yP@;sUyFc=?&DB$A=Z~At%g;rd1&~PS_JFG! zL=_3Fq2>nc)DUWTw&LYDjihljI zRPGXHPO>P%`Ymd;AMbqnJpza1{|s_!47|$+1NRDf#RlfHpgxKC&Rim%O z{e+^AzlO90V3^!mq9~gv5oLR{!h*8Mnk8&vgz15qm%L(?jS+br9*%p_1Lt;@ZwX-% zF%tZWkFa&5>rjB;Bvr!%9z~GoZ)&Ze;6wO>{$XuSa_aj4k}rl*h{^!nrMN?Hm0bky zKYj|f2+2yF9wmsO$c0JZ9;#&qH~$a08%Jy;0|7>4W1 zjTu!)Dt^!aAqEu?c^zWPhn9CC8Y&T{RJ_SAjp;HZHcii?j>y0(OV|TDQy^3HDObN7CMogi9;v=bMZ#m zDIK(})06pFh4?{+YEZkGAl-&=gP2f|tV$1ZrK~wFT*73FocsN23yM6mYO$MAVfpSd zU3h`r}&|kW6M< zv?+*#VH4A$n;1ofNH-kgr?G}*;54hsxv{8hNsO%{k{vmz(`l<4B0iNg&#<7Bvw^PLO zcfUNyqmI$gpU>{YG?dbcqQoXG>ZhemOu|T?+AvVL0hfdrGly$mn#2?Ykw|>AHzCUf zld%RY6AdQDev%*xv>2;(O2si=i=`-u3={>`CoxkRv5~PK=>bLwf`T+^wumY<8%PsI zk~Wb&Ih?+Kv_%0$pI)Xh<2@H$lvqR>lWZNM;7E{lvJg`BEKRnXOX-#ZCXl6*_s>)p z7As*1n4{xVr!)4!;zvBVoK=cHeOM*04nT-xH&0sLi8`S=mb_82*j#E*xuM#YUyq*i z4ktW#ir4SG%u6j>CTb*QCS2fD00Q^ z$dro+re7ivcT^#pP<)r}gKfRNB#;E-WALXo6Qqj==az?yenFSlU}ER67Wm0}j38RUXqtf`uYH~nF*M^+=+F_r&Oeo zr*x7#DMF^8gry}VH?_c?(Y0$ICC2wGPF?meqewtjoHk{7z2sK~ma?Mo{O!HFji37E zwxTE-U@V|0-sF(YmfK5FlXSe7YTiorj~kVhEjwS_EZ#i>lL~QO<2I3fX_YIdDB_7| z$-Jw)aOQGJt%!{sVj#s=M+W0rjp3bGwX`iEX??>=HXLQ{loYC^zg5Y^VnahRrWvs0 z6`;3=j<)DJ-qWu)_tQ_yP|BEZB#4{3D~hs}{1~Ll(J}_(M>{3#!WOLWK3jdrG}AB! zi%1Yx?N&-jlCa~}N2d_ae~d9I-sE%{IWaTYge6D3W;R)!M0fvK7pO6j%>#s_;#+3R z>vbyP+#8fGB8MX9zFosOy~}IT@15+*oP9tc8%>V)%}_|~l!I8nDRm_%T0bzU+ylQ` zI>*(BKxVqNy)Y+{A?S9x;bey?xX{2xrcN!xTyVq21^1{`*Ml4h>6go291 z&cYE$tOHn^YAMPhj??p%ND!h0BQd`6A~T+&h!AYi^JPNOOQ9H?X%0KSwHrl-H0~bf zQRJD$RC&5czDUzKF+d2$@zkYx@$1}Cg@H(YIb=+CX-|-k<=bAKvq`1emXl#wi;6V5 zf{L}OGI8CV2IvvogX1*m$Q4|uTq{)_=O`7kF0X~z(Br?)H}}sE?p#BWOUc2snv@uC zRzeZiL!pVMrMe3!rhIF6h7tmuA@QA|v=X_4TJadzxG1e>&0Q!V1Q}1ezb2jMkoxne z7LOnadcd;z26Ez{YnKg9eN+Kna_b;ztqJ4(gu7Af!E#&_o@hW(Pt$1EckcWwqlkk? zSrnHn0H4^~xD*JgSzuU!2t_EvC(GsnLm8f9igwtg2FYV9LjFASOT5cUsZ&FR%F1on zhxy@fIOO*J5q_iqcN0j6G@@6#Mstye2*<4sTfILNR1>NrBPx1zf~?Xy!e~a(>og$w zbwkmX>tdN=&+f{U2YZEww)InJC?dXVeajbRy@1jvnlj^Ll+nst(7BwCXBlCL3)&kN zI5RLjG0 z!AzCQifUDpJVokU#ib48c$+Z)hyq=@X(F|7Ug-0Y)W8K}*i{(@4nk2*xl8Z<`EwXb>1%QJUa&(s?FI=&;POS0-{O4&dU$3(B3DNd z3MY+}FsbOI*a9J4(#@)rxc#ySBl!8I5WS_6XYU8oPEQ$~OWNADtXr*GJdKgsC040H zN)izf2NMYh1=Lkh*3|ch9$qX!(M54DFHMC2>lDs~bLGbbTNH+`ymwzeE%QS7_&cp*h{GEm zMW~~Qt*zcx24y18am4REHlVpl9n$sMe}v_H|O6} zws^49IHQp1fVMr0rRbTf9%sui+Zqnosl%p>MP%ZmbtTI%P+ElQe2yZTQS|u>ha$(L z$YphOvPTEvIRmhPP&W7|j*A2o=^7?VQb>}pBq`Jp9ur9nG?r#6WgwCRU(5r64l6Ai z4HXD!gNShuMKYCFW9_WpMdfG)_4BF|b|nT$F=?f70~NXnJBmi9?%gjFiXu~!4J2hz zB$8m@Rx|Nz9y|vspSvZF(}jZsb;qBib8;$8FLx*uZOa{&w_)n!JE6o%pEQLz&o&SvPj6fp}#pVL4+6WW1 zLiU90eLogS{bK8c&U6<*N!s(kJ-O?39+3R2`|?L&Mv!!jq86RUYmwdQ8EU&UFFuXz zqg~c3RXk3M%|wr`a5A%k5?#ek*VQ0p^ER##zpO`8ay82fLC5$M1wy2)bxI#ua@EvK zMP{$%d8A|YJ}43ph5rfL#{yY|LrkR{#I?nA>Bn3D#Bxs~jDB@rf6vt|yui^hD9W6= zQsngjilTcsS8DpQH3*627Nx+Qrd}e>)bPrqCsywX<^=~SrB5PA9Mz>KhauO)V6jvR z^W#7Zt$c0iOI;IUoGJ;SMmI{QIukSJ!)PG{?$VIW=({e%ilRS%=gKZiX{)k!feQgS zHO9(~kczw}<5Q8;J(MV7X05NN1_?b#Y(xYtmjIRWW>!+IBv~9CSuzl$K6RO6@I|#- zsqZ=Tc|T`nnn-qmP}n8d`;;;q~Im$OSy6c<1z zVJ9(Z9G||Fhtyt9<{&EIw4rEzV7o_0tRq__Obx^X46_@uT@r?-z;bEQ404a?XX$jPPK`GdgAGLph4}k=i_p!rt-mPxt%BRj`Un6FI#~4Y|-y#8J~$ zOKLz7MjN(P{Y5fN3yLV|>sd>o*}9Eb6@)klHKQmJ3MU0iY2CZt8clA`w$XYmWC*?H zyPbQ#vRB#nhqik(^Y~<R*!6+SnW3WAt#y52_U!2R-v`z=C|Xxvic zsh83v?w?RB=Zbbf6m!C9<@d8%p;7{+ZiUjh6|h(7qsGVz;z3Z9BGd73rH_}jB&bcz zYSgraNl&JAT5X|~rdqc6e%{rb$#la)by_VP;}8><_sgLNjt@W_2qjupoGl71w!s$t z_RDk*S?P^WPok(ufLux!>yl%BJ=g+XASCR;>e zO*c1lc2PVf9Yq{t#-M29;(WRC78H43tQEOAH=i@h+9ha__c0W)bWmPQfQm!U^heOd z!x2@xA-t+XLeA7up@mGcU9xt%-s{>`QGrV627T;THs3C(0CJ2F-iD$t?$=*JEfAu1 zF{BtMXPaiFbWFP|YD>JhUS^|R>jFJg6hU?x+2!wRQ8G05Nx`JJ4?-Swtk7W_v1u8c zT=4Jg0k@lb^QK{Cnq*R-Nqkv>gmwn6N+mhNd_H8PKD%`yrMvd?TTt}J7x(eQIta{h zZTj52M_;^}T=;3< z%OZ6N``5R1`c$w4K}W@cCF-;#UT-oddsV8m-$hjC)<0LC3Ahf7@a+LbT~I_x z!_QI~OzW&0*ts5@!Wu3yl- zwFj#wQ!_a(Bnm3TE&{47{p_#3ZMvR`7FUk3=zBG}cCxlQY;Tv8vXb02GInkE{>$~S zFx`JXhXKj`kWj-}@A=Z6DKOpTrLYCp^CzD?N1Bx=O4F$M$T_bO!TeAOluoY}I9Va& zoTzYB4HXQ_R}jIK2cD9Kp*U~~Q!0jZN(EV$F*V^0Rd&1vB)WrOaQviG{z(=Sbl{5( znUWQCz0J1h#r^z#;&3Q!Q%!A=Pd$4t^phv+vS{{R#Hk}Kl#CBSsVCopqQu*z6fvHs zTA|eM7-zgfa~_Clk6bE!@Qn5YDMQY)VpCEBnbm^LEfsAjF$88NEVWjD-`iv%(0D~} zOsZ~+IMI|4NdmzIIe_@^_S<;n26)NmNuIRof-#hBvTwR3V3q9DN2N$BAZ!A#XmxFp3LX z;-W9FlSg+=T{4>TMYMAROzc5s6vgJqXCY4n+gQju)xyfz1ut@4*IDR4zs27o&KLu9TflFH1LpInh-RZJ*0cw_Z58IRZ+7Bb$C_TD7o;xuvwn`5y{a<3HG zEE1|AoUw}um2ygPgfXQk`g(T1{2Y>T@mG4s?>e-aVq;uXj?=56D7~R8ihSancFQDB8(F4n=Hy zzHI2Z_nF_l++{);HE`o6s^!m;yhe4uOc*&5$w1SVFTO&u)y*!RD9sRZv5=9bC%t*2 z6!#*lYsb!HXz^}Mo%QAZBtT=cXt`LbUhVIdhlh(Yvrbnan^u`bb9>9`Nl2_0r-4ORU^ILga2;qE(f@jJ?|*T(SEiVt^o&`io2ck7N@ajDZ4(H#s2oy+$T%j(frBCv z5eRBVQ9AdVud= z#$u~&b>#uKV2d^sJx6pxIZTxDNAA=*=?jpVCR{my?h|mADplA{) z0#(<#KgsL9F|rqfTWFiG{tZm63coD__MR0*w_uCT-=f+%%DYg>=X+<#(Seh(&z5!g)Kf8aya=ekq6kUe ziOFt3Fyf^xs`d4U?>ZH)9Yql$eX``cEJdrZN=EI;E~DI+^ll-OwsCi+t8bCHB3URe z`o;07=1f}OUf~Cw;4sf`}r4l`Id^daAP3iP12`lnD|H}qG;o+<5D`8 zS^x+pzkuA5QF4tjy(t-?!deDlC2|(33~@ggNe6NM6_}c# z_|;)(WEm=@gpuwm)wzcUR5lRr-129}0%3EyHji#b(YbfOd~`2gqwHj?9s<51#;4(_ zN3z92;^>fYbX2q$`4h(*Nhm@pR8&Ke-)sUWX9uoQsj08qf+FTC%C~t-0oVbaE)uC$ z)sY<6`niNjy=mjHpFO3;Ub?kZED|b6J!mkI)Tc4;xXpERm(dpe>Yl$%HA7Q&dan34({jQ z-1FC@bBxl$P!tLw{0Jj`K#+hU7ik)UiRnSB(`Z3a=4}%ar(Z&mF9lCdk30L zO(;qQJF!iJEIN*m^{5p!*V&heD4Nw8!STxlli;&}%7!9vQyIN5sVVt1{}>c86p-za zTDuQy=_AflN}J8q;?6R8HUBlAQX%_zj%_TuE5+0u@atgr;sDJ-peXC=CKP=bJ-RQ+ z*h)mzK(WEuOwB$aFEvv`T*RHt-YHOoY&_w{FLQ)`>Ct7gnZOG7aNNK)nON*B0N={0 zpa_CMenz2I_y?-2T}2a|8b!60d?JtzjjhE$xoV`^kULljzBDf3vGgE0E}jUgyV(In zw4&(e-`&fX=z54}y5dG7JrHti1yG72mMik!NdglLM@LaIpg<91o*IRzp~C(Fe0Z#n z$H^%#c`qcAA0CG#xCbp5K}Q=+^`=?z4mkN$@QSDIzI1JYrA{=Zr2EXa*~@7>PS=%{h&61P!+IClordIq9>M&LqY(kq4L%gq_N#QX870EQlz{{_av(w_o>{2&d zSQ5kP^3NLy0ISwC_hGkTQoA1?-mibUFP~PGg>2Y$G<^uuZK8A`(t7*iHkeqyW^@1M zA%_7Bg&<&J#F$WEC8J43(OPKd*oGWQOpjlkRF+>*i3$=dMf7C6Whuw9Dp_@z;JOo4 zC|VSgjYRrFGCL%{iS&bMxH|tv{v>MI4X8rCM0Z2z#XXiOH~%a(-2p|P+}F=(mpG*r zYe<}6$7%yewkREq49}3Kj`g+D3S18@UxerYX}nkB(N)zERF00awd8lJ5;GRw^2{W= z8t)FZd=XHVn&hA0*MAO}FUl@im!^nFaBWtN@z=K2+Ubj;>Kl?VSj^C*b=DmJ{PnZ@`Y9>0rZO&~w7jx#iX;?mLmc3fR$(eCfLwtwJBqxdkA;MeFR>~;ISEDJ zIxNZOV=3GnD3WM;a3y)jMrp|B3;}hV&x)A25l4V|?c}$#Y-?H2F)Ypfx##CDHky#( zkpl${%y=B<_cPNye)sQR-18@9Bn@pNM^|DX(bFJ#l(#RU2HH35Y=RhN#o)*atE{$2 zt47UwV}1SU!0}8sFC28@KctQ#<3>w$(RLk*B~2XflHgptd!wxBcR@9>Q+>8a#7pyq zTrWZRAQ^qRVo7bbgUIP27cDANFg>ld=#S6t+n0p^P0UX=l#;b{l(GQauI1A(z;lYP zR5IP0Dy11k#G3;2cYa-lGEu%Nx+n`4 zp=@0ECyw1xup~UiVPO}X`!b^FQ}AD7@tmxs8MJ5IV&k)IQ&~mg!pLRCI7s~>BZ^j! zF_|c1LJ{#(H?XS|9Y9g+G%kPiqGhnyBBZ*rc0P|+`QZw1nSN3mGeJ~w9fjd~>0#K{ zNswQCV$`fi3O@ua4Qn`bd71b?6q`P0krIvFe&WW5DaL?6b0Q+fI0H4zwrKqQ*BAHY z^J0sL680?KF>=+5v{A&zOPr#_>t;fIv9|0e+Q?brIo7O$6`USY{A@fb)>}dmyCsq5 zi63POx5Q0LP1cGhzpZsC5Q42KLq|@$tY~!|A-zk&)@%uGZRUqVk$H&e)~ zFE|wWO>)GSdz~=Rxq_l-#t~eujS3k>qHXaxW9Ed>hIvfE4P{{ARE>wdZy6{AQ&6Ow zyRAkRJnb-PTTkJ>4NEM9W@`I&Va13gkog#iJMn(O5`12(n-JHOuf2X)>7H+|5sISa zHOMtaAZ9Sc-bg{yXxFrCW@AUT{y&>7T9&TJ(NUpYY(Y_GJ&5D?ie)M;8qXUsn`}Fu z{U|X<(Tqw97gAaniV@Hf5xI!6JCIP4jA00q-qhYwmPFC=-Z2~+dO=x@`RO#TU~xAG zjE{L>_%YtNlIyp}_3b>NC@x!%{yd~KYbcpZ*9ed@-J8=z*_?v4o-ShZjJ60mM+ZjU zpV@R36cq;{HBcTxKi_vik%EMsI3>*qB#lv9AFOd&QHmV40SeFySV3y5=Kla>ljLumW7+e~c_%(19`dswuc;4yQT8zxA5OgtWO z{V&71-h)*4jH3J&l-nK&`69}@IFWW)Ahkuz=0UlV2GY1FHw8Xn1$+~VqJmT%ML?SQ zQBlN%Qr{0n+bwPH4~4zk?I{#4`xF;nlW-?cunYMbJrxfR z9K)ueNV7#*zu>}!eilM|EC<1a^FF3j4pK`1i` zX$;cw=TAbsG``aJSej~f?qQ&{bnbGSP;^^ENm@YfBHGPGJ}7OH_LOQ{M(s(yNG?&q z=DD=m)kSr5wDZJ%NqiwCh-E>2k}6YUw%{aa0Bj+U&xH_4StgzfJxNGiz$XO+UsODl`#iuT zTbx`y0NJA}%l6=ELniST*`l~`=|H2k#N9#_Mc}eVMC27WaTnB{9`Vf zv#es;$f{&m;1B@}n%I44sW|P6YP3Sv^GfbfvNJOro69&VISxd(m+4fmn^NEJ)(_s( z;*||}{^t5Cm9tGro*bBI`E6lRyc|igtwfAA2xbZ;1BpkL9;bKcg#;@4=W& z9Yu-5dlKA?0!8f8+SMsG{uJU3udkCI~f`KDoNsGBw{ zK`7%YM;NJVo~h<;P57c-=~rIj=m7>^?&7*G75QPW3yfW&+TI3{wX0j#VGnACP}LXM zdPI9L6q?iz6x3e@qMT67_9Y4Az)xSL4Y`CKN>x9ejmd*dSDLdhk|j z5zl?uolIFlCZ=TS6A?4Gp_!p;(*t1%465v6$1LSujh?cI@gg5%q4PQX>hv~|>;s<< z$|*MSZu#U%tsl^t_!ia{jsL$~mU{JmSXMT;If1)bLL{C>J1Gd4jjRMx4q_{H#@d-v z4#}eA$dkve!KaPWlj0)I7|$qT+uHZKKP!qzoEDy0cJR+ql<(F{@@l4|lucH+t)y>{ z?aL@Qz3NIc7EiDrHDB*_E;${R!*17LkyyU5bh!b!l!2ok)&<*XG;Hy^VUO^KP-H&b zqW+~mV993#izwkIHmZjx8I8P2XC=&{Pc%k zDsb&Ywu$7T$C7?Xba<9ObR6r)GdQ~~8c%CPd4FBsNjsL@DQiKP)eOjGo&C`i2~c8` zmT&MombOM6S_MrR@PuRdRKfWWe|cb0H6(YF{4(LNe&MPz)^w@IFFwWL$(ENePQiwh-xX^uBA@E&bm zP zekwWb-8_?#Xt#Sv)3SRgE03azy0!Ujgjf%Do{vNo$WzQNjL=`&JR*;-eEWzrI)(Dq zB|#J$=+vrgdl;6;D`LHnWRRq(Evv)owR zilXA6lL1vO&dK5vY=fsV&5UYa?w3g9ebr=IbMR=P)E? zp4XEuxugE6=m zQA8Vrwv+%dZ4S#i9^I%X&R+n3zaY59p10MVVx5x|)@WpA`Fr<(=0_~Od7A1KwmP8I1SdhDdIae9r^doQH^lZ$uG1;~qQ^ zMVU-~6$8HA0#pub*KDZzikfE#E*_(Tmz%OfeGNjHBbYT!i_=Up7-VnP*?$z`Cs~X) z;y7eoi66-B^r2?7+`DlXd3rO++q$KehobO(*hC&zlL{`Gkj!_Pb}7u01}8p4BKP)l zraecT4>F4?-Lw%#rOh-f5pW4kFS}m=vuE9lA~?%B&z)}@_gs>bNuJ&1zf4Yp`?`$E z8#nQ5C_@Wr)t>D`WQSsKry9id-y}nW^l%8Z1VZ#VT~4*cj%h$q&vCfauu;v&1}r_f zr*6+CITyKPwAQ4$G|?1^qPV1TXVR;LFlbDcM9k$8vlVt?N53-W<-xWnqs8yGMXiSA zm?2^$AA|`J61*d+T;|{rMd#PRD+DW~i0hkK|G+oAVYZcHo-mTEZkOAm4K*{0hzc`A z>_Vlo<|>ozzFxy`PLZ(vR@nfb0M8>u8spIcNbETHDUG|o=Q#!$X~%dqE0Uq8BDmvi zu>^RTe9Mydx_@QZ;9%hREZQdG7jVA>Dyud`*HhIt^?Nv^2@BaSc8*X`eae=5f-Ji0 z5{pIAW{|TBJc=~#VMEJSnR`Bmc&R(3@#ZN3a?ViYC4@VQ5YOHN)Ax$P5V?ZcTS{q9 z{H?>IQIy@Myw~t3iqN!|x`M`a6+KZ)%GKzpplF}TlaSY?IihPC}LWV zG{z~XC+_kM#8P?wQ7cWypeX1j_o)^pGekDtJ{UR7xT$cdBB8~{8_nxdx<*kOEG43L z%rz7!+LB2F`1yfwvchBZbMlF6UuOJ!q^qyyzE-U3UwQwxet z?W~%SDMq`sLG7=W_l9}KuYuqVd4EwDdACS*W+hwxbJq`4Pg{#%NvK|RUEUBo4B|y+ zg}PFge=hMIO_89Lm^zQQ?8&|9B6`{_Rj^>me)3xlII?!SBA)|}M&k=oz05u#_vol} zj?4S+^#?34ah`X`*#+Yt2q8(=r54y936mfYVhB!3@a1SvutMhK^x6$@{um8W8TkCK z=Wt$|;z};B+lb!LB_v5~i--;hVLDA*W)c3L9@FI-E+_N=qeyGUx?xyC33ezY6X-P#@@w0TD9?7ip1}zXP0CV7H+yshcKAxnZgU8)q6k9REwKxv#zmQw2W*}YI{;>15@=bySJDxkmBM;Q~oMHfP}|Y1&@`a7q_UP?CER0Lr2Znp?gW$aaw#*^D3O zxDfHbBr>aYVo%X-r#RkCybV~|1nkpP&xWEY&$PucDcQ~UFe>qAF(A3L?{-_ndUUW% zhF8YRQsOQaYOp3U8b{!D?+*+zJ=duNuOF5f-K5-*j6x+Qj@Y+pn3#ioN`;W8&Xt2W zr?JQ{cRRzzB!UXME-3;U(j$?mOi{VTZu&tKb&|uqPFOmfrnM54!%>2w^<$UDSKfKp z8-_{F0SE(Pq(ukt6+{V{1KuwtyJPH#P?k-#F3$=Zoc)8x)s+$2{S`vA8 zE}~nR`?;&|#y%xYl%V%w#7Hd7P&&hLZEL8z8Ep57OhirWP?noSe2Wo%@AEl$u9#-V z_`Pd(=jirp@X??M;$(@6Qb-5|sc<|R52GkHrw>3;)asjG9%;p+NRP_?sfN@IxKZf7 zf&>}{_wpS6xn6@f$t{a;P~Qo*nlomMm2i3x{FK|ZSTNvbX=jaUW&5Vze&4Aqg5z_# zL>0GfGqwD@RezDW)x)FP*fRV zR6~(MN&A*nUyXVkTS8^zkp&07!q-f!QBXOZe7ReZ3o(LLOdlZ`Zo;#lWt5xFL1JqW zp>KSd^@wZjpjV)7$3)|k_wO7Ej3H;P@?qu?*E+ZHJ-@oY{WxODJD2B+2>hNAkhFfK zkC|NL91)NdA}Ji5uQA;&3SFwzF2#A|v6*W^(P0S1A174ACeE#}CM<+U{QK+0-6mdc zgiuf7QiaoqoWyXEU>nub%F1Q>l~u-4KVieILIV4#Bxdt55_m#cVds(+<=vRSVAk?T~oEqbMN;!H%s9{8r2|}*c zL~Ulnjjv*g>CaP{LT?F&bgu_IFOaMXWsBhuIEG0lMNB5bQVl{g!aGs>!Wo;oDB>Qt zBYmotN-Xpj%=r-&qh0#1A3{l9c>$CX2I-Wfy|RT}_q0wzVqJ@vyhdKwTii9@%#wli z!tE%+UCWw@XSi%BnpBHr<2DcQx)#2irRCNmRSAa-G%#)?3qRt*q&}KbQKE=t>YOWX z1ds>hmkc{zt0`leg&sV~MeBcC=0*){g3^oo#{ zw3kIa*b9Ofmq8L?y??)FQFJGST%IRjLxHAN0^N-oeYqJz*S;9?#XAEeMrGgw?Cjkv zR}P`{c>jv2r9uLXF*=OCq^r<$nc!F{nl23j*!XQ?<02RNgj;8X-xV=OyM!M?|5BDO zLsVHuh4ezock=84WmKNuV?W2)B38G4YYu~Par<@@-47uJMKZR_j41W!9N%G4PVz{F zE!S@1`BUTBlxsKT*BAHS|F!XWNkvB7wv=@N#%JqKydK&v)$J2=&k9XBO4x<$W|8A5 zhXxdtQr!=MkiiT>9?ep&U8TG*h|9f(9MR~=-FkcSsZxQeq_g8mio|kS+2yCGm>2Cn z^PJmDKsB;1c}r&vWJSD{R1B@`0x=O+VsrgG(_|l~mlS~e2}?h&SOV|ACbtq1)4h#* z1363Wf>S+apPsqkouCOtC24*%$pe{Jv{T#8+`|{wH->QNHJG5wAY?mapHornV#Aws zx*}DYAPO~~O#Uf!+;vRr6}ZdZa<#%b>2m%puV$d_{X|8NRYHYtm+Bb^A!hTUc|d!< zDBC+%n>%CaO$Ul%J*2j%9A}WAU{zhwY8Q(2k*`Q_j=1bdM~rhmBbQy>9t|K-{K+`g z?kp(cL=LJP_q?iZx4_Gd%W({cdNKjEVr@v~Jmd$Ywcfa-M?3R%ho0fxA^w-ER-JC@JBsp>O`kw|jFI1(n8#oU0`K%Qod|{7++uL@0j{(eT9kj zC7F{9^$j9>nQ&wo9mOXDwB=`V4nyg7fw<&ub9J=<+ zL-^`dyi`M1ic^#3$;ycC_;sdD@e9-#8x(*I4VBK^BHMyJ2MBwX+I5xt|&osXyxsot6V&7 ztas#VQIP^ew)ax{YMv|r6PaYoii!>gO!1PNwh(SmFQlAfOiN&MNBkD1@DijhxwYAk^fwuw4fiUyQVlg|9t@i$-3F8Fu_mSP7H5tgV3Y>@P;vtUU) zI!RRM7>Z(BL`(qOK&Iv6Nse{T$~^e?r9mk8%w&fE8wOeoQF%ORC!G9`O+zE`?HO`q zGfFVX2FW`@SL6BRyF`k~ri7cOC@x~QG33T4BWGd>yYYZ86PCJe$5K+@Q?waxDI*Vl zmf>BmQj^IClQ5byULO6 z;d8W2NeZO!@t8I27o#-B-Ykk>IOnxbysI0aa=wy;Ix4H|Sl+P|=5__AT=p7Zqv73` zSNA_ZPNMhSy4;trLtTtrs{c!2TMb}13HR%o+YiN6ZxByV4R5a3-q z+WV!b8Z*TrlBq`*VJ)XBuQtYdAB z;YXvi$s1M^4uYG|@$cDX=(y@Tw+c2;ro$SG;_r>Y*pTK6ED?8qbA?APKAUg%=Wp(R z{ubh;otBAEvQ<(c6+>o<(Z#q3q#J8rTc$8E3UJzkgkZLsAjEASJE7B0WeS%m$4a8F zMOJD~h?!aCCdHRSQLtYey!KlZ1K{#pV%Zacop12_Ur9odI#0Een~oGBawuLe(@K=E z3(I}UDRSt3C4@fGcrMG=XZPO|mh$!rpA4>LRd}GT@iZ>tyc%;{1RGyvg;1?nuE{!$ z%jo(NNQG-54~mwmZT%~otN!HhDZva0Q#xgpcBBBOdECoW#TM0WY?rL6T=s}jqBjs%Yr2r)%!tMsZ?yp@xi3VMHC-sX1X2UVUveQqz5MNECaqH|RIk?aVd*@_> zQA9JZ|098rn5s7r56_b2Adu3T*_{C@PiW3hf1SC9F7oKI9fj2xL!{!*Ximz0iqB_B zw*;nY5Ll(WaRfr;@8^=!kYg>Dn5j&`w0&qBfiX-%T)U8rA=r~DZuRbn^41BK4yA0s z%oHYN4YSqDkx+0+&l2-{^uPaen1F>)H`=6FYOiW11hK%!XPU%iNVri=( z0vjb4b2}aK66xiWs}!bpjvK6~EGEbs33UGf6*8t3LYPKJhH&T-c)4s_M2!*w^isUE zA&k8to-cjYO9wJlVMyh0+-;;NvXC~mAmIQTiufnhiM)qCMIf(2NLzy926JuK20Ljz zp3Il>>1hm_Z9L;f@a63OAHQrZaLJU4T)~<63-l%7Aqd`!l>n+Z4g?gL+VbugHMf^3 zyaYwgD>9R9zrM`W=+bVBVp2aN5?sa{P~xOH7Y%rxx4OZ7eqM96X~ihJ(}tXy?1>3Ud-q567WKYEY*?*+ewgPY|-v#lj>wpZtHpW%%{5= zOXB){6n0$qK-}gEPCmwSo9pfv&@v^-xJg3t`eIz5;13n*`VI)q%2=1H0YdhV)-7a} z7eTU%m2dQxUZ(x-<>fb!%TTg-0jp|a$R_zp1&^Gp?Iw#s{OZgBosH>3tZRok>LZsA z1}N!uWPQJjuZSsMMp*#}EWvB4SvO2|4-%IAiMbJ8+wG>`_?&-g2(lwYLEsFCa~rZc zI^PbVxlG~ZHE4YdRe@Eo$pHb_RDn<{FQ;eckqw*3mZ%Z?Mfk8a{2`|P<$Eea%vQ82 z#_Lhok~KV0nIp;=A&P_}S+XBmzjPM*yR?pO*lLJQso#8J7OSsrJW*+qs|~%Y?%Hrt zou6onBzWtM71uMpzD!lyqBkIfFL3gc=eLZkF~*`%VF~=G$ob@fbb5|}@Ql(*aQ63# z2)?1MtE*Q!5}RU5Km|6JoHt{oAAx+#I1Oprh4(e8iT1Z z9=zvV@Uj4`tfVS0`8H$eZ_I^4s7THU6=)WKc^1G#|&rlIO{#(yc(U&zA08UM15z|77M`G7)`Q_@i)P^8B6Oa>*#| zAaM?1sU1-?375UDY+Mv4f}nC_H%wUi(RC-s?xfr#xI8Y(oFL5u;c`aawq4gt;Dz7c zt`mf=?pA*zDk)ciy%b3>XTGkiWT8AlF@vglGFWqi^jc8!LZ`I8qneH7lhNI}5F=?t zs=2Y70AsfD;+aT{)^@hcwpLc;n_(#>Ng0Z`xR&kVojtnI&-pfK^Pf(;o);;%2t3_y ziH})JLf*90NH#dq%I*icyiPgRfyWD(A>=Y|iYmsW!jBR6nPqDdn5H|WQcG&Up%{or zmkpSw2f@b*VbV$6ANgC*6%;$=jxsT~)w?Yj3N;H9wY7@UzHtP}ip0iySTT=UWBsG$ zJFc^DFYdp7WJ;>?+#D)u^w*AEH2r2tel$1pzsk*~S@(`*6AwAb& zf`VJz4o-dO>s%-P<8GHY2DfMttL=pi(T?NW=_`+%`~B_eUZ(b;p>R@BwV1||(~L)} z@^V0$=}=6E(4))NPjIEK3>vX@RFM8a^&2o+q?41A9O6#Y85V?)M9^-5&W<^4q9$PC zf}y8AJWmpgKHl?7m#Nm?9U3WV5aX-1J&iR0ymm%g_j-1*s^uL8BLtM;JIj48%Y zR6>Oi4zbVQNBomca>k;f$}U4CYRnNPIHr`0%0cnZ|0lozJ*FxOie3D*00000NkvXX Hu0mjfJ^_>W literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/folder.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..5545cbb85718eb2412b296bf2545484cbefac2a3 GIT binary patch literal 590 zcmV-U0wRKS*wR^QJ$b7r~o&7DWFc2!euwnvjshILRz+b?huoB*{#Y@n8xb z(@oP;ud815!ojz33~q#rwMStDVIXwYCh+f#vlxEE1W2dTww=?tJaZ^~TyLFtWq!A7 z0tuA!rRsic{rniaYJ|9kk6={t<{_#(rA0tf?WtJuq4Nn;lkuw( zP_!V%l29q<>SWq^)8QroO|uaJT9@$|^s9H5Ax6d>nFi(c-dq6C76EGnIJW?v_$;_Z z0W;ZKKTQ1mr*fSE4#n1u{mX zBLc)B=N%Q)I_LhF05NL+oWM8*;}ned0V{j@CTa;IJyv^E2o=|LT|-Z--bhf cqJIf60LRR#+er1C=l}o!07*qoM6N<$g3I{>^8f$< literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/icon_drag_add.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/icon_drag_add.png new file mode 100644 index 0000000000000000000000000000000000000000..9fc453da069955956f872ee94e0677912c6f99e1 GIT binary patch literal 2536 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 A&;S4c literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/item_drag_status.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/item_drag_status.png new file mode 100644 index 0000000000000000000000000000000000000000..0e3e45abdea9ab0906e6ece76009e7dd06d46f6f GIT binary patch literal 1637 zcmV-r2AcVaP)+7RE|&B-;lw>z`*W_Bjs2aj#Jx!upc{qCEc*>{uF+}s=_ zmRMBtk`N@OVl}EeSTUSZ`u=a7@n%5R`Ty1)ih{bZT`KS&c6?oUPsE)4TfrJRi>&Q35&TT^V@~s{#@{ys;oaMe zn_tmuqaJnsOGd?)mj9sNj{BSx%s$HeBKFFiZ^4r*x53Bf_rptLy=45DeT?wS#vilL zq-X}}vj`qIOP@shK2zdh_UNroz#DDvJH<~Gf3M20w+HOA9?m8*Z0|88o{|ZONQj>g z+pUa0XA8|h>}_s~g(uL$*}_aK|EqWHs}N7gPXBqzdVcEo`w3`0*lX*F+C&!5{RGr%@d>mNwJF#lua-|HV_X`66QC=~>aILp*t+HjvNd$l@=tue``J5G!pAeFwAUvxfpd zpWJ%&Gf(ro!LKrEnuShaO0Z2;{-?j&2nX&x4)-lz=PRObFMI_XmUrpOJj(nfo7k~~ zG?T2ZuaCs2Jz_O zw;=vrmAjZ#o()pX?GVfv4T@ItN%M0NUH0+?5%qqN(J@IV#m_7M1}zfMpkFm&A$+=u z>aR?ajl#?n)ngcDFXCnfsKs+_7S;0;?x&dBQJgdCkFxrOG(XQo%!yx5MB?Wctlxs{ z(;u{YhZk}Yh9vv$tLBMV)?qF?XH;g{sK2R-#Gj&_AXVk(zsJhPD4uN4Z^A+a#O*mK z{>;_19p%SXwS-?Izb9}Pv!Poz`Z0s>>{#6tD_pqF&xg*j@QbX_;R#*@wn{_B(8z!t zBSW>a#X{ict7I7E7g?Dja1<6Wx=9w8ijm*h1*Ya*1Xh{$0{V8KSz_&V^fwJJapx>Q zU*e9O-^dbo^De|P+_17ec2}&C{Q6mRrgpZr;DtDb7_Rf9kVyDZIFb2Ns(^JW# zp>mnoa%0QP{sP6405&u{$DdDPo#b$xzigrLNc^e`jZ>}@&4BiRyO!|Bk%1Dswk`Qn j2Z<#DN-RG6Pk;dc7qtLDKEYXG00000NkvXXu0mjf%8oUu literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/dark/0.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/dark/0.png new file mode 100644 index 0000000000000000000000000000000000000000..13983c4580134d89c40b3b462ab41b50168aef49 GIT binary patch literal 1565 zcmbVMeNYr-7++BFBni|hzo6EIN|U|ay}ggUm6OB!$WssSAYf3#z1_XzguOlX7VkhN zO)myAM-xd&DUR_SHzsOwp7lX7LWuM+q#D#_)C)v~ZM@ zwXqaaR&tU}0f2E{S9YG5XI)0pJSV3@7`dPGNNfN|N%eaux`-7)JL`10bTwt@x)3fRFB3jEpsSCjrKPf5TSdjw#T(R3r`gPE#UQ*hJju8kP zg@{Eu=%G`2)=bdA3oNLTt6&<%l%Pf{$5fb-z>+})is1-~BNz^23KG?lm8vAG`5Xv^TrV z!y-1;%a;nYR1ZgDm@MV)*@i+u$s005a7jg>ij6#7%CT7dhi%NZhVu?5IKs zt8tWpl`1t2Q<%aID+w*Z&^YdJIMA@3r}52dLSZx*)6}Q|!!Q$0C@__2(IQNPs?)S8 zlP1iyxV<9frrEGSyGzcsu@SxGN;?Wu8m$^uDhWGG5ezP6K#373rB>mD0~+Hq z|2KJvlqWhTd?dAFX!~dmB;nB{v2JO61Zhs96UyELfJnW?n3nDD8>s6@@6^Xt z_C{8Muh$>?v3{bga$3N-VcMi)m!`HP#A?wgtZ;naltn&eYc)5Vnlk-Ek9Qs2lW_JsA8@F)ddlS`wLQfV z(COPBZ)u9c3f3$8K73avJN;(%baTZE`Bk}VWz9FEKdM2m{kx!#NSZx+QulyNj7M{8 z>tf=T9@w5WSeMjY^g&_!ZhFl~cVhpVORdAlD<7Bi@8VA*Cj-b(iM*nQhlcrIj=l>_e53LPZgMDMFu0K&X_U?L*HbyU~Z>g99_?{OA1N z_uuD2Pxt;<`&aD@!^H9jvPHUb^xfOGf__h*ym6T>8%eI09QG=th62o_EU%2&yo362 z5hH8(_!FF9m@h)R)Ju8`U54p70*Z8my5mzc!zA|9ePj+`!j^Hr?IyW5Qx7@TwvyZt zSda>S23PF^BLO}<(p@q~229=J_H?p|xmUeGTBUDriP7G;^I8hkkH5>)5ia7&XRi$gQ8ePVkq8!@7?H$;*g z^>iTw$1fBXiQTY~D4H^{j(iaalIS>5T=Uu?DdG=qEU6uqhJ7p+ap(;NCap(hOA}0U z_i00sBK5{N6xg&VXfW%ULk@OHKAYs|jbPc90XyWfu4ok=0Icz^&iu9&66Bh=Y1^i@8(8I&SR)f) zM7*Hnd4tU^=&5?d3#*>bW-{!y0y1qklD9`SS_nCd1N#KF_6459&L`Qhmv8`8fK>)6 z|@eQxqZ>XaCD%152kJfiIwZ5QW&3X7A3T{=Di zos&)1Zcoq|yOYnRO7&N>FH`N0q}5}uyQaQO^;|r*Tkl?VX?kVb`CrfWO)fife|$r0 z=D(Gj`74iJsAC&<-2di9I(F+~OG|6pYIg4#X4&7u@00LqY%Xzc`o|MfoN&&6x;61# z;kS3y*xdI&SDX#<%`3A%+*I$L zljAos6Y$x;V+Rk-O#iX|_32pS^3PxXS<}b7Sw1@2**Wtz`a$G#-Pv2|zO(-W;e>r= literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/dark/2.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/dark/2.png new file mode 100644 index 0000000000000000000000000000000000000000..895e68ba5da24c64e0d793b40d8379d2bb889269 GIT binary patch literal 1554 zcmbVMc~BE)6yF--5EP}NMJuE0GUB<}BiV%P5C};~lYt-&h@jPWvsuU%vYYNMBq9xr zS5YgDIFL%GWqM#st&TmERyy9ySk#Ueidb~SdbG78t+qb(XIqX)Kyh8G8iWwt+YgV>ym6xefR*{s?mq-ChV1P^y?`A-U zk1Azc4CPtz+P6#^04PMZphzlm=8!b+Q&SNgb3>QDD$l&WU8u2o2dK<$dHB zfxsaZsmurs2UXx=% zy$PNY(q*-c_>v_fftKr0k{kug+&$eo8~p z@A<#vA#zYiq*MOWIng7z9V6Svb071Ymv5> zcP*(*ZghTtDlBeu<^F2TmD{5$j(`5;>uAf~*)~&5%ri5=(Q9hs<42iIZw>yEuOTW&nEn0y0R2-9DvS#$LpL8Z)OFd;|NQ&7)Cq0(LI-M!+X}dGN9^Xhl>?{l z^xWE|X*hnp@SWUJJZXH3X4{*p@UE%ZmnW5_O@Dd9nAKtPdjqNrByF*?qc4=5vh`-Y zX+vj!!|Cl^o2@5INjazI)+}ouJNf#?&RJb8qXxO2VA>zECazZ=U77faZO@^7vvFe4 zj_xmN^5b?V9c)kR%WicwYl)=`PSmfPb043!$+oa4an;fp)xD3Fo>$>*Yb&YIAClo( zQ`3U0%aeD{uUE$HyEbX_$r3T8_|fL#v*BuAS8X*P>QQC4p84jq_r&C;@3z<-AyvYm zB|CNOo+bI=%7=qGuqfdw*Z$C@4m%h1%T2SRG?p#q6%%bKNu~#1t^ND^!YOrYe%7KUF1@wM~(5>)5%8&uJS286BNB?he)+sa>teKe)4J z8l3+2Nz!=t$Jnv&yEk>Z&!i~97tgfEUQ4&%+~U>lYcMM5$?} J-DQ4d)jy8(H7o!C literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/dark/3.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/dark/3.png new file mode 100644 index 0000000000000000000000000000000000000000..c81985ab135b15bef3f74dee16af89540c796dda GIT binary patch literal 1704 zcmbVNX;2eq7><-8GDsE0gAuz82wF%sn}ZxCLP$WP1R`{QApw$&$wC5nbd;i4 zI-pRoMLakvRwz^jR0^mC3knGBU{ye51hEv#q1IMg?FNbM58EHznceSuzwdqC^Lb~} zLqk^1bZ~W`P$)BHtE38YrIN3|y&d`8l~SBdE(?i3B@vEC6DHVzQN$>&!T^~Tj=>Zd zj3#Ys#)K5gTSiTUl2FQn1qiOC!xkO7S*s_}6pGN#tcQ^}i~v+vj7BG-j@Hyu0Szjm zZs5ona=ipoYgQ#2u<+!N2qZZU;iFW)6@btzAPs0S0tU?5c%4yT7Eved3dp_X7^DJ| zDny)!`YI@;JQR@N1`OcPIW&X;u>mfh4sjqh5Ap$+42T6XSRllrK}-RIFMv3})I%k` z8PI5fLK-yXiks35(l8%7QG@a4iYC(z_ z5ralgXmA~1u?Va11VTh5BYl;ERxg*oHmoyF6^bkwXomG5L}!3nttGEXZ6l$;{tn}f z+Qx_^Jq9W;Bc5PD$bLk-Tft=Q{@am7k&H&L)}SGq0>?{nBteVm2$@twC2#1c1{JVX z(JF|^;n7ePgH2<@5JKZ2EMFQ6Rq?qh9>!rrv#oaCglBR13^9i-@nr-^ASjTPM5D9F%Pc*5m9i8wXc93r$bf5s$s!9hZwP>oarr79pGjl!Au@TcFGf>w zV1<@etUTgD|-WN}a-^|F?J`85C$?%0HN6JtFC7*}k3wQg}T{n2sDD134$^z-)j* zvAHgjiX+T-h7bE?!eMhSJ#8(8t}4$aj-cE;+N!w@E(i97oc1pcJDxM269&=H|SbQ8&lM%Ns?_&DlR+7&MKFUed+uI=SUyTc;~x zp8fPbU{UHG{Vb=6jbdAI`%aUj6aFyYtAN_kI}Fs!$n#$@r!qgP&u?jtQ$KBD!r{v3 z(;Jc#?FEWc!I_muo6-2%$Q#`wiLePwUojME^M0CRJZ`e@r-R_FEp#@HR&s-l+WFdB2ot^aW z9A0zN$v00PE?k_uZ)EVvt;S~(pLyY2fBWeHf3W<#8xG|JdxGb@x5((Zn-rN>`@L>| zJy16nZQP)@9SeKD#ltzQz2rTIm0P<8^~mbts5UQ0G~CPXiNC0*j;-2$22D3X-54A=ga|!IoUt8Z>O$gk^L+jOSS5KRQt^<0W&k3M2 zHX+UBq(4Ae`D&e?K3Te7Z7c3g4lc_2w6NZ*ro14GmDf7F{`5Nj zkDRoduCr^R#Jy1+^9tw8INy*_HaxtorFt`z(LLkvR?o2W{yS3Ff4gkQZRzQvDB#kP zvrRv>d3%**RNDopv%83%#Jc`#7h>I-?_WD!cu=kA-tlx`*BX*cR%Z44HNQK}jN literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/dark/4.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/dark/4.png new file mode 100644 index 0000000000000000000000000000000000000000..5b155a1e9098e33a686404faf504e4d7c8b511f6 GIT binary patch literal 1419 zcmeAS@N?(olHy`uVBq!ia0vp^N8U}fi7AzZCsS=07?_JQLn2Bde0{8v^KDjP)EVYz|dIVz*yhVSl7_V%D~df&{P2mlz_GsrKDK}xwt{?0`hE?GD=Dctn~HE z%ggo3jrH=2()A53EiLs8jP#9+bb%^#i!1X=5-W7`ij`p|xTF>*7iAWdWaj57fJ{tG z$}cUkRRX#c;)UD-UthSvdBxCx0tT6WMPh-zp`L+$ZZ61QVAaJXL8%C5U{zflQdy9y zACy|0Us{w5jE^*Bm}X$u;kO8+5a=2!|DsG_q$K9J@Zb z(@ZT)ER1xG&C`-}O%hE_bQ2RzEp-zO4N_AqQ_PahQjB5dVAJnn>Sk!n#1&Z<`tJD<|U`X?9K$*4b^LbSFe?GQEFmIeo;t%ehw@Z z1Z3ow_?n2j=96!qwK*6V7}t5aIEGZ*dUM?{`;dbO`-hk-N7ytSEk);?ivL(}OKo+K@Je~{Vo(9g$(;{O!) zz2{EV2-NUYWKraB!Vk2cH`{96~lMJIbY zyAtn{t{G?3Hc})6ZBG+H8 z!}8^M(#8ixZtFTurfibsYnS6@%unk-o~SEwuxU%Ti;H85!xhO6uX`QU0+PEDXDvJJ z&{3&;Xo7K))!aN&Uuy$__)6uxPaZr?*8)SYrr+Lnf00?V-t=m#wI6=f`A={Ce&N%z zNx^yQLd^mU7nxj|!=02HbuQ@`Nxj-tC(-M6Ut*p&Kj*xO*JZvf&eYXf9^#z+?&;4W zUls4J|G{mE9rrD+07Al2F3_Hdhrwpa VJ=d1R$1Wt~$(69B|;@IwFq literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/dark/5dot.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/dark/5dot.png new file mode 100644 index 0000000000000000000000000000000000000000..a7c8c7c348a3b0fcacd4ce9db30bf96b8b08f7a9 GIT binary patch literal 1589 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/dark/beta.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/dark/beta.png new file mode 100644 index 0000000000000000000000000000000000000000..84aab8f89f2729431b7f63386b037865117cb77e GIT binary patch literal 1735 zcmbVN3rrJt7_Z7iNkD7V3HUfpofv8FuB9#QC{X%P3}vNs*y&WRy(=xyUcDZrRECMD znM0%E13^)I4G2Exrc-oC3@|5-c8a1X#34SJ+98TV2)Ff#*G?De@na4-q1@hCD&3Zgn`OINt_|U2ptY2n9+1x zjiXrZvI}@LgE7Kp(r78IGEt-_%xu)F!*-ahG@8MPj&)d3eI`x;Iy~KE5ra=^YC*t+ ziNOUtC9JecaieLTlf+Y;NgBN~Q!m88*cc$%A)*bKaS8<-<}8a%>MteAk!g4C=^042jXy8vSg_+bA{u4~=(f z+cddW98%*pBAe9H^)O8Lf$7}6-;r05W+VEHG|@#tvt)!m+l*VN1eqA5Z`ha#6Y&IG zlnVyk}NX4gTRLcKZwWvZ}K3T6y)uce|3)Uh;B!(_;wEH z&D%-BE%f-1^qeRPb|MVM@P`R9iNq_$Br$#LT)s;P`*cUWa5 zBUybe^r>IomGLT7vMX-Pm~)}P%V7~lBPeGcJC?Z4{9}_M^HEdd%b1Dd558F%vMi<} zsHV28tmOF2FSfBnVMD4Cq(#lW+E0$R)LX6${RV zKohPtV(C~=S2D&KOm}L~oz4|gHM6jLBY{PI+o8OD>#9<#%iKXzLVs`@ zsiNk4v7T`IcenVR8-jOizMea~d-kNC>UGG{lWo2Cd+Qojoxgpg$-k%mTII#WxfC!~ zdt%|C9ptGzGraKmo)-@&XZw>EM~W`oDQK_DYD$B*yA-#Mr*SyL+O{n(YVbsSIrX}{ zN>jSNQQx-h8P>wBir)iw7AI{zee{Yby|#lmlv*t?Tx-qZS9lyZ*#Xb?xsR?@>?;gB zSv*JeynS>RDJ&_AW>yHc&JQl_xKW-4_eqNO+gJ^|KDWcyv!3U-EIpuJmeJdIsjm9f zlqcBLgO?wii3+RNdF*Y+yI)vN_Sf%po^6lqc(&NiIa0bheoso5c6W0+bDaD9?WYxM zcjd7%wDZw#TSiO1Ut~X6SXlT`*J5RJQbkJGti)F2K)7)4sHn=1%k4F<F zx8M_H6{5Q*E*~!V$}=q}_{KPQxz)JX-_JGFMIS6|41YZ#jj?zCmDBk%Hm&sjS`y?* KvcvIdEB^*3%9vOH literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/dark/copyright_2014.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/dark/copyright_2014.png new file mode 100644 index 0000000000000000000000000000000000000000..6c151700e85451ed69037ef3305a09d901f0c02f GIT binary patch literal 8323 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/dark/copyright_2015.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/dark/copyright_2015.png new file mode 100644 index 0000000000000000000000000000000000000000..0a12707e43c8c74282bb399920236fc4fc23493e GIT binary patch literal 8318 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/dark/synology.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/dark/synology.png new file mode 100644 index 0000000000000000000000000000000000000000..704aeb1beb5e39ffa4806099854ed3162fd4da20 GIT binary patch literal 7719 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 L>gTe~DWM4f*iSFe literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/icon_pw.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/icon_pw.png new file mode 100644 index 0000000000000000000000000000000000000000..acb35fd3fa80b2a7eb36c24b79a52b07abde83a6 GIT binary patch literal 3913 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 XTTqr8OLAwq00000NkvXXu0mjfUBaM` literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/icon_user.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/icon_user.png new file mode 100644 index 0000000000000000000000000000000000000000..70a4f7091b073608fa6f5222d8c64ff68aabb252 GIT binary patch literal 3730 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/light/0.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/light/0.png new file mode 100644 index 0000000000000000000000000000000000000000..cc04df60a6e526124a348d6444887d0e9e1c59db GIT binary patch literal 834 zcmV-I1HJr-P)5{#GqwK% z$5sb*W{l7j?u8$O=so`C+;iuiVWeKKH+LOIVD6d>AtFSCh!7DXLPUrN5h21u8uR}Y zSOyP##`_FjgECss%d3by0#5-ovJ}V!zkFm@0rTJnIEBp1X+)kdKfpK81V4f8L*yoi zfZHGn-a_WN9}yCG4C~Hv>3ak)CKkruM^@FgZ7R+nZ~gwbh-$sr}JX5Xz>VV<+l=49%rFN(Vu}^lkS!{kNQnf2XoFwHB~!1JF;7+C)H}TmCen~ zPNh;AJm7+yjV10u-D-(MTHqu2CN6#9gxrSjp8U}fi7AzZCsS>JiXM2nIEGZ*dUMl}tI0v+SRwD(NRcBKmgR}JC&DiWTIj7%&X0tyZd427az zW|Q8EKcDmDYti>?50y;SsZVYR-{ZSDQNuSlyXWTVvdhoIvet?>J4^`@k36p@-|s(3 zB_(T*!zY{dDO_ojt|oUan$f>VIW^MnZb;?IcTVopm!H~{qw9UAcuo6jkJ#%Q&-WRa z0xg2r_+5XydA<6Ul%GlU-{lw!U^wOn?Xw0U|&IhyW2F0z`n2g`F=XNqUOmX25f( z&?_dir4z4*BxlbGkjEGOeXgRgTV-wvj9Ohpcu4Ei+q7O z-*Q8vD9RYa5i|)9gw62@I)-jQd+_`bU^GvVB^Yz}lr$l+u-}39R|(=Ylf1%m<~BD+ z$aR}R&D`(zjdVJF;<~*JrJ&cC`*-H)1)g29YXx<0RvZHBQjKcEE z*p4*H<#KpsIfC7Bk!?mQYR(+65{bl&mm|C{Ez;!!Do}pLcE=EU34L^e#N+WR!{LyX z34Jb)U~*RO?^BkWv<*iTW4{&5sD9|~XKS@u$X&g|9Ee8*F`<<)fH95p6g-O(Q+M8E z$y=}2C3=q^8bCaua?DornPNO9kCxtbgpJH8JW(qDfiHW-GvUQ zo{Zc8&1Q2mm&?h8LSd2WYti@W+{OsrV8?Wb67!oIqTB7pN~Myr0Kk;OsuGNEhjxwJ zrnx`RXf(D7LZxh1m)5gJqfvGkow&;J&u8-a{1#>T;W8k81CeD}@<_}G&V|vk0R9M# zVHlRj*4#k;+{1Wl&eHDRE!p-nPY_+#r<@vbN==Ov07t|xSxt|u9#dWU5Kt5@`+-;< zh0FX~B@{n7SN4;WPT}kSy+o4)5MTiOJl?(6+ETy(0000< KMNUMnLSTaO{b|(z literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/light/3.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/light/3.png new file mode 100644 index 0000000000000000000000000000000000000000..25e8a74075ea0e95592dac6fa8c15fb1fa05ea96 GIT binary patch literal 982 zcmV;{11bE8P)bhfp|cQr>)a-pre6rE0b6xe4a=+z=BW0z`la5CI}U1c(3;AY?wf zKS+}F0Lw!t(Eva1pbW;+ueSbpGbOZD1$`)rGXG;JEdd(%#ND;aU*gU+J_2Oh+Hlg4242|r=HX4bg{Fu z^T_n*jP_@K6mCSq;V}EqiM2wer>7M+5a;I{kIOwhJ(h zZ*Q;q`&qeMmUee{Wy+b73l`Pq^R;39X?n)Ww9?<-U$rY=R$f8QW;&g#E7LTst57KH zS&qAPd3m`wJUo2B%Mtd*-)xf1mC@~d>GmES9rXj^&@NeZlHI0HvAlG^!6J}_lGgr) zyz|rj^!HxFu?l6o;o$z*rvmtMEDH+@t%!zhjdaZ*gM)+8`uh6TRZ-&{Y03Qg$;nAM zkw~=ga!#uChZ?*^e06n|ZT!P+%CIVuWjRtT7PsKH@W18}2I2<<>p3s}=U`N&V`4K& z3z9$T>S$Q)Lm{W$=jP^)rlzKfrl`m?a2fFZ;Zm}K&~6e-;UDsD!w`$b6e`s-iVDlK z165Vq?W*QE=koH>T#`4*k*%z(Ji^j!Y7q=b$BXmJ7d>IeFbr!ykrhP=)pNzq&(CWV z5%b#aL5Fko;&CMG6I06DQVCl=w`#K4Y{$^hke*7V%pq)|NGJ~5fw?W{rV;VnMn*=orKP3v zg(k~DNP&%w4K}l?*D1_AZJA8wG5o0}-xn^lJok07*qoM6N<$ Ef=tid)&Kwi literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/light/4.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/light/4.png new file mode 100644 index 0000000000000000000000000000000000000000..485c56560964a2d0fcb993bb2e01503794a307a4 GIT binary patch literal 680 zcmV;Z0$2TsP)UO&!Wk_V* zBLwl87S}@bdcEypv6%04I&xF4S`Uo^A&s7yAWEf@G=9-;w^tXHd;f*g;z_bv}W^>av#4`{;e8puQI)_F& zh;q5SW*g!U5C!6likJ!F(l*3z`_oTX06C^`Oy4$29DJM52k1TYS`*d@6~I1poA~WJ zXdl{9=1*YzMt8Da7$Bz4t0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#21!IgRCwC#na^t)K@`VbUE_~dV}%-Q zLv0(d&^9enuy`~`A>bvqQWz*S7n`dB{{6634V4<3Vi zKx8=&z-MZzO`~EWId%#(nn)E$3wG~w@DjWSyJjap>((U_vkHj0z&N-Co`Jhy!%VSm z#593-v9z$$(tE)K%T@3Syf&>}43fv-gg6FA6#4sL5_}zn2HOIM;0y6kIAT;4!ONOx zn$})hThlU`Ot%`(z;Cdps_Im$)e?H20K$z+mq;XRqE-2%Pjy5iyOaNnlf4{_{YBeihl-{k#9?jJt@H7{uZ*k>iqnCeRFfOSu7TN z6Shf9Vx?TO8W208!@x2BL9(#0VBw;r_W`8Ru47T7(Wth(yzE8f8r+st1$C-2BVyf- zf6{v)o6UNY$>b4tzupIsD;A4&&dVH3ZEbB$_BoebigY?1V0{v}4V(f0o&)3Y_#>8g zRtoXY+1XilKA-oS)oi!7x4o;Yt3DPP%uyfcXpIM1SgVmp!~xsj&d!c!Wo1S9yuY-x zWM|Jd8jXpWnVB0b74YurAU{mu%GG1WzS;c<`Ok-R_@d|dW_U=jC3O=bqe0cFQO6&6 uDDwZ6QcQ|TF)1d+q?i zGIJCmG+{N8T)7rrt*`&!{qQ+{`uyY9_i%1ZUY+{0Xl4t2+b|KD8g4Kf! zS8#$P#yP8T}y_l0g<_OvKn|XE%pC$-p8f5&i7c-KmmX*+~u`5Tc54m+pquZr%~_OK8j<; zN0A>|djgBz??>M-2-yAmVMpHnhWZ#@;3H|lcd|3(T5&tIKojCEpRQ^PUAV^{7Xp%a zbOt)c1lR${Qh_;?)^h$i&emS_#FS1?djTwnXY8zM zL`FxtQw(G+ZoR=@lj_VV@||nU;WC@eG$g(Pl(9*}gDnG-d#IfuvP3c!DsYRnZriz8Ao|Lt<|J@M%DGq%A zkgL%)jI2gIo632Kxm!Yay>CdAR)KlcY3Q9Qaw;9%9VTbQ3#uPBT&rYmOobR4-$ZGX zsF!QrMo#c|cKqad&L(AUp`PDfR7>6d?Mcz5p;usFV9bDtLD=A;GbD`Cs)v~Bmf4LheAF7((|;T!GV;hzQN3qm{hrxb#oM` zlvj0Qol~dmqu@ra z`1XLcT8RXh%7xX!S3~eOF(sy*$z0aK%1JvN8ozGwu;CmPU+Wv8Lw@Dk3$9wRK!<@( zv>qBQx!%3%OhJns>ifeMG8r-S3D0T0_Dk@-|1P+)8O5-Eq!th471?{NGy;0gL9*k7 zY;}5^ArJ^FuroGlW@d(wZ~fhz#**5zl26S#p+ETIdcKD!yM?n}M)d zkk0x>M)UUP*OeWEgD(5)vpt@V#c8W|OVxbdczb*A{d;hbe@xYyP#?lqv@1|TG_>dx zXP?&c{=N={w|yhoWO62_r=NIfVUy0wB^6imHjPF#bO^Jc$HG-rRc)dPJUVTq3TVId8p|v+~*JkQz*tC`rh|UD1|Jd7XFF*Y%E?P{s9njTJ zSQ7QQbR?#AwmT`py4fsO4>5enuuSrBF4EZ@{(5JMT-2I`CEUvK-hch|I>Jlu)Ye=6&i6IyL{2d%F8np&AQ8j|=Il`^wCw#Cic@ZLUhhSL22yMC*) z#2SLg^78V4ZQ{cD2f2wk@(bvkMptSy8jTh#kJlG>#ST3QXf|!Q%q==;IqcgUq{ng_ zHh?~AsTKU#-)^kja`AQn&yz6_hpU~4wcRH^qOB3Z3-lvRz?fQ4!RVXDmGEq>oh`b>`Bf=6#cCAlQ zN1b<+N|zl5mr&NHdC)nP{<5AECyM777*%}P-+uJUd%~T|uzY2=5;z8=Tih7*@S2h4 kf8AiNT?u5tR_F*|@xt;l@mTE6;n4$-2zSTkbLi{;2NrbS+5i9m literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/light/beta.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/light/beta.png new file mode 100644 index 0000000000000000000000000000000000000000..52c96e4fbdbbcf73a76be73824566cb9fc076c5c GIT binary patch literal 1162 zcmV;51aC@r>L;e#^f<7NzxmF zz2WGl`uh6x)z#In9DviCiIVS?yFFX5bO8j4*>1kW&uFYas>sIPW4ZqvE_ecE~wiF}jUa zD{~xToIB)gCy*{Em&fYX7dv|wtz)B$LbXtwYVi}G}rm;fx z=sIKqr&4gb2=EH);#{6>u?$PeWb&+bd;&tJO6L~FtC-IBUlsJ$)|PCDT`m*~rrlE_ zk!a$K6!H2sO_QwxQdLzXqo2Q9pk&gWF8kV_Bji?IGG@}bWQcloHZ(NknV+A}Q3e~& z@p65;U9&M=CNE{{p|D|7{X>I;gO7NE%c7=FOiZMfmX?k$8??2xRX1#^p}D!a%;e-` zmOGG#Ch=%o(@R{&)MzwX7trTi21*t|pYnI4@$vBhf44T!BA@HC5Rcs3+Z$M4UpGCe zSS$t%@yXe2*0j`#)n~j0ZL$T!Ch6rkFRRZUld&9wJ~OmdwmOgD;bG-38TgAq7p-<2 zv^jTN_p<|)gUTe)q@L2GelfY{YBH7FUewiQC`8LPGcz;e;p`B_@V(2;Fe7SpBSe#0 z=5C~P-PfuGUD;R&wB-RdH#dVk>v;-1RxXz>Y=*pX-AJvitz~#midg8Z>Iyp4)6>&U zpB)z8gB)>hDl#J1*4Cz^QWx51d1`7ZLcUMO%~m!;5d--%`O{694DM)Thb8q|UMi_0 zBO`7fE;Q~Ww1&LsktFdb{>{vyqv6S~YettiLsJ&Ij_T$q9vn34q5ad-)8*OO+1kG! z@Mh?<7*mK}3*3nE!X1rVZ_tjqj^*WLh2SXEul{t|byOa~sn)kN{b!PNU2o?{UDu_9 z{GFG5!sS?*D_%-<@q3l3w)y&IFPEY=&NoUt6+W;Lo3-}Np~Qu=jjFBxYDR-X1B8EN z0W?5E01eOp4FmuU&=5caG(bZD4bTuk12jNG01eO(Km#;DLjVoX5I_SoKtlix&=5f1 cNc|RI0Ac=9US=aiTL1t607*qoM6N<$f~Tt|;Q#;t literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/light/copyright_2014.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/light/copyright_2014.png new file mode 100644 index 0000000000000000000000000000000000000000..6c151700e85451ed69037ef3305a09d901f0c02f GIT binary patch literal 8323 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/light/copyright_2015.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/light/copyright_2015.png new file mode 100644 index 0000000000000000000000000000000000000000..0a12707e43c8c74282bb399920236fc4fc23493e GIT binary patch literal 8318 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/light/synology.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/light/synology.png new file mode 100644 index 0000000000000000000000000000000000000000..61da232c46a3a832f84dfa167d2a9883935a3d27 GIT binary patch literal 8469 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 N=?x1*vc7Z7{{UmYnB@Qf literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_cloudy.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_cloudy.png new file mode 100644 index 0000000000000000000000000000000000000000..a55e57e7c5841961dca95a10aa2bbcf9ed7c9802 GIT binary patch literal 23041 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 bi9#EY<-A{|)7C}!f>p7$aG+Ej^u6#u2SW26 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_cold.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_cold.png new file mode 100644 index 0000000000000000000000000000000000000000..27a7d8b1dfe66c6f05f83cdf97bf00276c4c0af9 GIT binary patch literal 33681 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 n+*yT1X}QBoB)&DrRzXO_-TM)k7 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 i|F=iYkcu~^CxAgFYAH%O_3w19vhor3Ug zp7@>jS?f9Hk8|#|yn&f-?D*t$T{})oLxljB1{VT>5Ij&-d<=o0B;WnR#sr^)b%>6F zAJkq-`d&|5ZM=NVJ***eR<0J-um{fOw$_iW&8__1hpeR_5Hv@79epqTN9vN6uFkyX zch~UxIlFxp+$YNyGo~TuJcz-N$@z*gr1ua+HSub5Qz^ zv|tLZ9@a1sUJ)KkenA14m;|qYh_Hl!05?pKUqFaYfS*rLf=56=Qdmq=^)!Q<)g;$`l~ zZglz>@L#nY-}` z@bdFHJKxRgA6I*NJ+}T|!}zaPd+PYRS@S)%_H_03umt;I!~E}?!P@%T+ zhdtO7b0IPF#fU!R^x3qV;`{T*#V7z*5Y{ zLd?oS%tllI{;&J3{%;nJ4-AO!&O-iw7W40qfEnKX`akv${`emcvUUM(;{p6*oNM
31!@>~YCj|BG3n&Er?n(&s?h6#e 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 aB326p^sOf;tl{TFA#~3fYSrRxWB(tu0r*q^ literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_moon.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_moon.png new file mode 100644 index 0000000000000000000000000000000000000000..fce03fd79f9c5a348041ae4ba79500653aae3271 GIT binary patch literal 16586 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_moon_clouds.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_moon_clouds.png new file mode 100644 index 0000000000000000000000000000000000000000..c7999b2572420ee80a22ee5f247b839cee42d93a GIT binary patch literal 28148 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 JtROf<{11^xu|xm> literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_rain.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_rain.png new file mode 100644 index 0000000000000000000000000000000000000000..e2efcfa32d0b9eb7a6759c36d457c8444bf86817 GIT binary patch literal 28152 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

@1f)z?5 zGlxRGU^Z+C0kZ2o*>?FVX+;7)Y@hIkx$`tU_s|Np?Ib>`X>*_znAXlaxbpqKJ%nPv z6$z@njt^#C()ElliY`pl!3kykDFW8HX%~eVg{!ld_*GnF`TyNG*ATmaw#z)DS>ko* zk~V%|(x{x?T6n=Ir7Q|*I+m@ITXQ{6o)1&9g-MGub5s0rfR9ITTkb8+Av`iXT*ZB* zFUiPtlA36v$5uIBw&zI{l+}u@Ps^2FHjQp`CjqFdI=mB_M(8L0CU{8TBMT=qnn1WF z;n=4?DBd{R`=s=1^{fket<w}9?Tco4tVn*cNUAdlUI-&P5jt_#qE;jv>@4p^ zsae$P?x;}!Yw?56;hqNIoS=KVm=}|7@WABe*_(q2i>g8aGg}pIyZ`wfNlYVEAiy=W z2pw+&6_wA>T|_~WH-U&}D1f^6!2p z^b!AEEZ5TAwGRwq$wF`@2dNJ>SmpE3Z0O|_$%tfQzB$p*?oOvHe{=?e5C)1LETVNQ z{9pwY?~w9qMyHmv+V?IM37MAo2)zWmk{bjO*%h^$DLpW;O3|#Ov13X$xxwSVg{tMq zST>Udb%}M7Rv+abJiueSO{eYbo^jW?r?%e8vzBOwxw>O@d6^c8y}>Ch5@R$YSfpW0 zv7vi&4Q2^P(-WmA+r0WpTv7NIp<;;egs^ux?Z58#u2DycH`=bhqjqFgi9G?}>>zEA z_zXg7Sm0JQ=Eh8DufWpWWYx9_Pc!`QSo*!Y9tXp#b;EMRDP*rOFPZiaoU2^Q0AQ(2 zLQTEQEfr`v2$k*B>%B7Kz&>l$bk8i8GNE>Sq2h&U$t6A}Si(o$P(0%;K1q5Q*Xmvs zy$dPlf<;<_Mb2oml#^Qo_pQm;O@Zp<(vyoUO=gP-Yd{K9Kk(!JU$eijSXd`x#9D#}Dy-trwi9|YC z-RS7()rMbBp@D*leMvdW%5@Tx$0&%;y7;lO1DKz`xWRX2^(YJ+YVI{4p4;hZO>x1U zVx%VP1>wF?X#n&M2ZEpQ&IP9?p7}FZBa)Hcer2tt(hTzx$Wf-%USQ1UNfAq@DZ!Go z_@TxgPax!vzJ7%thTI2Pp|~J~ zkmxj45sMSz^lP(_$p12y?HG^2!}*etNuN3#w0OP<$K1x3-h|`U;Ey=IqXx8TYNv5ddQg6vgo(o$M(>a1tM=enb3~Zzi)o=3{(ar_6VZT+WVWe2T4Y8z z%3AI|c=s-kv3s%_0_w$ZF##PgO^rhKZ;6{~-!9;Fleja&174c}7jlI~+-DQn!z$bH zda>C;&*J@0H@^5`G>r%eo3C%4te?k2m<8rV54|?QGwKOYPk8pN?sysXvut&M5jm;M z7^Tj+jOxmLUv6)!pLizR7thKf4*h$^yYB96DG)ESoaFfV`F(K|7RKK)sfbrPko~k# z6O7?tHVPML{u^iX^Hx=eLi3|2F?>7qP!-F6&pTfEIc>%e9No~-xuZtIdYf0Z!D<{| zpUlf(mNcK}WpyS0zmU+m@#X$p%JX(G$(#1RJoQ=q2KC5U|hHB!fYenpajt#om zjIa17Z7aB*QxhquXH}zmN_iWY(_W`FwnH`p8bG6)B*se9hek5AkH{f zz?eDc4mzvT+uIur*3>pgW4ekh-Aj{>$6o8c?(=i8l#tqpz-e=1!^Ohd`dO?B=g*uI z777F+2*ieK-ys91^Mc={=>5wUI_Jc$@A!s{TdY2+W1tbaLPUL)Z455I1xBkmaL-ME zBc!Q2Z)HR>wygtFuv4&DECaam9@%Pb7Wz`S{w!JGJDwO7Bv3>)Cil#12=l0gAyO6A zV*SgGCPKAok)c6{eN${C2inhNDwZ&K8VK!>TQ=2=OGO5_kSLhB5c?X2C zIR5l)|Jlm+$i-zN65c>6`~XMmiA6_0QFUX3&L$HFJ}Svy{j`P9R>#SrR`9p((@~j= z^Sv#q$S$64l;n;t5Ta{TRskZ%4++``lj-skx#T-mmA$Q2uIA`TJfOHoH-5bE2B7); zmoL8!8S)*dqO%_F1+fd~=?3{2`#s(=$iw=(I9VGatWO=Vu3w6bb{N~6i)-)IIX-%x zuZv zRzgO4y8OnEAHM(i5QcXnpJinodqV+uv~S~>=rjE8{yJacg&DpmIji%3dTsJzu6OoE zHysUSeIlwb3UDh^pwwvOsS`{pQhBH}i5lyd88y4iNh9sZbZn$du;HS3V%}enuh2g7 zBJ$O%SL{#Y;vPRXPP=BcieLX_bK~IPpb;W=zO%5fbTax_ylNB`EZv~4rhHU=6dN`A zuKc9YC<(p2yp>zES9RiXF$9^&r@QD8EkGlEuS`C!?tWs1fo6`U&cN)!b;XhQ8}Zk^ zOl%G;5BJX5qmS=;c$X=a*;~AFan+f%w9NT>qvptJ9P3(y zxl}FKJ1j>X^;|jMFpjb|%mafK%Fy&>{=O<3=2E4$0$H%a3pH-r zM~K+TRojX(ZKS`e(v6060zi28sK@3Uo{|4*B@DQ2QXM-WRY)~8fx#mr(6i>m5Z9O2 zRzB+DJXzeID4@c)l;SDW#RdPHRTvY~md93|6m31V}`&V0X|+ZbGR20 zETKdMc<_r&cyJxw|NO)l;s5u50$la~T!DMwzgPM{Pr*Gvsq&ZZ7T$6CG4&g%7&mwZ Oo~Ej5{-|x~5OG!71w1j|kw}?ombayvMEh43)fP{2+N~eGz-QC?Kbsv83J9F^XbR_xXN5^%$|aDgMBKl!YRaN;@gnm0xNvk?u$R>NBBF@da_qF!viR9#s8FbECIfwT z-GH9cZ~x2sx0{=0W%LbA&GWauKRgdn8wL*d4}CUohXw_do0* zhC&dZ{tbab!O!7D!4FUoA#hJGphDoE-UvZ`Isiib^a6Z9!2f>X|9#|tedPc9$p8At z|JynL&x`rLo%4TO%>TIB|MSTIe&K&y?f>tQ`%;ysK7GG`qgi2t+p(_-Ze%S2Dk{AZ z$?ig&=tY1ij~g|03~Io#$qT_RfnDS2;MP?@vMY-T`l8UQUO4(V(<(uW( z%8dN{?PqMfYD{Y4etv!(&E8jRAz@)lJ&$^dknCxgHMn31H3S-yyzIaUkNG?IZOW%~ z|A(97-HD>BuAwXeH$vAgzo_Yw?3eNVV>2@|y=8h$ZdvX}i|(i}f|O+y$O}+R5JVGN zZu!6prw#d5zx#i#r?;r+V^qw>q=u$eB;Bqo(uck;X~)aSLT;b-IJb-zvKGUsVIA62+Qi-9PD z+JvA6NVM6?UZ3t3l{K>IHC7vlinfuJmXq79r!hoo#wbQKgaBs}kSg%~{PIz}NEcj-yBDZui*@;r_9k2C9^GZodl1D{F zv8@lHBfR+Uqc+;#Yd>St-98%P#9zy?gU%C$4#hS2ozCKs5`a&t>g@@cLa6Q$WF*(?Bgux-}C*b?<-2MLFg~DHW zNmfL>fdAZ&3U3EcFq{t8$15L%goKtlS`XoB)C~*HPETv~n!PT6GDq7Xql z2$&}0^YHka$+XiRgtF&;IPa-lV>J=FYTzECUF1VZK(HSj9)45ndwcmFGlt+S8Z+QO zN5Mv1V}jP^2N`#wC-+})g6 zJ4_)6z4c*wUK)?zDfCHn(pIJ|kgs@6RMwxLZA$bvn?cJw62iKUZI*ZpR(Fn)=kaoT zaii;=olK)4YYR1^A*%!RvZ$zfFvcClet?ZIOsCv8`h1bwpe?0TB$k`xQQA4{{en}w>o7UP-nP{`gLN#j& zCJf7wq8XZOwb$wHDYZ?@qJ_eO*|X3vXBCyvb@OyzH{Q0N{d(?G-(Op^{ps)5e(1np zR~_TWCE>%3$w7h?d_Vq6vX=xp+(l|?s;iioSUR01RMT{0W8?L1TOa}oul=Gf)egI0 z97Iwye(_KgwMf1ri0UZj{(3Ds^XS*vkej*r)~51@C>pzymEYeO!Y;N)f)qkJj)Xc0 zlXi73e)xi`g2WWU;Z(-u(#^5sdyBulQ;%x>2UQgD zsWVJv9tlQ~zZuQ-zB<(55WLH*CI2wL{0}^wMQiXhDB)>e)nkJ-01-r7p%L+a@Nu6% zn@7EM4dDAY-{fv@w$SM6FZQle3xfO9qn0yy$K(;BQ+VyAxvj>x{jaCim364~85tQP z;1Lj7d+gPo-lw>R?p8adL8U^YHX+R(ON^nh*D>a>)rOL3gl+2#V(Rjg2`wXlu{X zW~cu{OhrY7tXdq`J8ks0A!CuUglNMjGZ`2xao|u1r%H=Sii?BEAD~L%LH$fHic)B{ zLMq}JGqjiuCAr}5-@orbHOkQ3A2_8|*HHu@n*8$p!~tyzKzaOlcI>bSzIRcgfuCoY zB<)G?cdx?Y;^M(yzkcaHEHTB)@9gjIcRbFW75vJ~mCtGMy4am#)v28iLo_pQ_keBB zp*}q$sDKNlLIO*HfaPd*kV*k}-}_yJC5CP}Ik|9feTttWA{4s%f4LpZe*4DoPPoDQ z%1-#vdR=Cl>GiRF9%v_CyjJ6VWRDbi;H!BUn-k$Zd#27sPfuSj9ZCA2RPbJowZW=-*H53 zBYhKEHKL>DK!i#L!gI8>&%zY)fG4{0;|rD&&7lWhc+Jp+OI;S z4BB;R%r{U5xR}2ehb9nm&Yq%8-?>^_-_1WMQwYrS`g(Hm^8Lesfr06(b@E-ZNH|Z6 zOSFrsk(P|vu19SS4gvYj?&vnLsDe$m-oX!ay|8EsfrKypoL!{Mp%7ZcXgvJoc6d}~ zpKf?$z3ZKFP9h?rE%w&C$^#fKomWV3@OX9Io(p(NXv4y{`)ug6ukxQ3@HCuYAM$|b zbh%;6-c*^0&2Z4Bl$2D6`B3VctCLAto=2Tfq9z z9Qq2fZf3U9{TIFF>m7ZAf`Y7P1};{SCp1cRXSP6>ZH??lo`|51Ljos)iMTv}PD(!o z9!fXBLuGSCYkaP|<04c($L(Gd4 z=+L@dOoqd^+jYI3t}sRci~VN0v*yD~f<)5SR@}!conbdH4lazR))fF7@ZBD)@92Kc z#IzgFV>?@1*?T50D+{~d{uy0+I9sy^2Zu&@p)VyCl6wCk7<0G{?|X+eDy!-SR3!^R)498a#Qgqv7yvfy04SGRcG?<0oVv$B!OuFB{or_Q` zG9JRci?@o3cQoAGF2auY|NZ>?eB(k(Unr##2a~P-~%|`xJ3PwbG-2LTwwka$ThV85Ng;B-9mB?E{i%l1{^E{4Y(J3QC>oh|q6JF8~-$JDT}u*B(7cR#-e z)BUf=hP+=I$h$n!@u(#1rEW>HGd|D z-(v~nS?g99S7$y4M}(-5kYG7W&EP~>h8!jS8{wbQjn+DC=&6dRnMbE6X24JgL| zs9>iQ_VJLhnF7S3`65#yEY$Ky?crggH{>IcgpBP`TcD~JOkz8}Ml%xAwSIGR^RTOV zxYkJ6oXve=&c3zTrZC47-2m2k<`i08Xn8kUxpj6ost=;+k)S&o@2Vxfi5Lh%!4 zxR@BSKsgc`R?fH$>Gm$uKi^-oKVkCvBs^|muX772@Pn<)$_iHDI3$GKr-DSo3KA1_ zi0lCmVt&d0@ty}XjJIG#eIM93m<%d=h3phiiK zd`P3N8G&tCLA^Q@v_AGu#FmhRjKKHL7?6VJl(djrCANo#w9@_ay!%az ziK~AXd-hKgJwlBszGHH$>+SXR#gu_gW~EJ+O13~O;yUU<{?9j1x-qsJ60WZbiEK5t zquIY78yXv1bk#aPh^xFLXrPmc(k-{1Diu%-N_ZC#grieorq#Y{vUWvfy=UYn#whY< zD$m|3M-CW6W3TwM`Tza#xV=1JjwIuKNPx(&o#>-dmjAKbSp0d8$w~wVvk(PPCU)ux zq_x!YKY+5n1BBJRgCg3bBe|myiUJ4AE)~P=&$UOf{s+)&0eG{V&H=2%=*B}gN@hmwNmH&czFMF))eCyrm0B$}@ zFw&b!a#=NOYU!Rg>mPCzPks*$-thCL zM=%LQ94R0=6e5SgCvwkB5k=)`;Nb(Nf9_@QT76}pr^kG}oU>>5^!ARHQM1VLka7jA z)pyDFYT70F@welaQktfUOe=1kwFT z*KJH`$~R8g$$-B`d&`R$4^Ti7n-#URv=~8E%?AZL>x@Jo!ciu;(}_dh(=1^25vMO3T9L*U}4#jX>y>)Xig`>WN$4Ptp{VTxbSAdUlC;midt7|Dg)BKj4 zoUHI#k!1^R%*7T5cT$)x2TCIBa}BpI%{IH5bbo(;i$%`&Hw+F6g-E6@XVivFplR98 z*H>V>Q8WS3YIDWlTW8LshN9wN1AEK$D(C3Zm_+!rVUbZl*vnKHR1%$*mR8+a3$b`H zMwXrpOkhh9`d3NV@By$1*X_5yU0BBHxOCE~U8O%6bd74!F)-r4y?8tOa#>KbK(5Ub zhC%y_Yy?ecvBg(_qNzXK*6|k@-#%#ZtW5L*uFxLvF_e_wLo@(W;{xohh42b?w|t7e z2WY844VeU5NJ(GZe!1-59u~2V6_(jZ0!e9UX}w05owypDO3<2DIzzF}jQOAeC=f}P z+N#6{fWAFOr{e*=$`S_--hNT@HD=GmL zq4@dp=Z#c>{H~w4q)be_mF&@DsX^=F_XmONUn+od-v`*p!;Z|GdCwnNH0K6{3@hBG z2!8LcXJ(#hT6$50VN+P$02RR|UOq?c@2{j>fNZGRj;YVINwoLij-ko;Bf>bp@Eu3> z%fzLJ^{QSN10j1q%d3A|{rdvI`Yw6-?( z_s^daVZR^NeI}Kg*EP9+HO;Eb{5= zPNE$p2_hzbEYA5`w?omF9@~mz;1SqNVN>uI_ws7G)_=(jj|k_rojqR=a6c3rX~ZdA z=a@%PoT-UciXZyUpj!LQ@O73)PfyPfs8Va&lC>tFbw&YAYAAz>Bxvi=C>Q`I!pAD7;?;tZf2O&?(j~S5LOv)*zFGAv>is4AV3|v;tt*$?du& zKb>p}=kj`Vbo8%)o({8DDCF-Q9Z_upeYFn^@9?DE^78Uybe>g)vC+{7Eg-a`E$4;(&16ZyI3a&+rTPu1u@_|44N!qY3qu4o z2fjCNJO_%(TD)HI^M6l;D6{Zrz~2TE*KXbgt@zwspKQGn^h5H9dnW?~ps4;y&zL=- zkIVBzbAnxqq=~7EMf2r`5`vS@^Vxpd#uTNb%(Xq~hAl2TD&jzl<($7144U5Ab)Br| zTdn>W4r3#?4tbM4Rp>ZXs>j=&By*FkUZe&l@=X{#3Kov$D+~YT4Lmp)0UmTkEUN=L zgHvOsp0d8Svcgdd76K6=dUrwu5xa2Mk5DwED`7|O7#MA^sYQsViHS*Hu~yY3fP{?> z3W@K)nB5`+To7j`tn4GkXyM4;9oI(X8J_xiO&EiL%7+h$|88z30=1db>npwn2M31$ z)F~k6+OmC|pw^*{P1V5}7bPSpIB&c;n4AKkBpd_NV@PEPVP1xin;w?t5<9$D%-_LS0g_OAjHc z%gC;4#N2R%tMvL858L$%s)cgHPN^sdd^1y1(@h`{TG{vAt*@_--j{$&*F}Jbw>o~r zMnfyG9C8=&ySp}Xa5yGl6|Af|UhdSm8`smkdjA^oDQ1O4OMiPOZZSILwe=*SRmmv7 zr6<7f5lcR2e>PBXCKPXk zb4<_A&+j?>LnykkswyJJ!H<&R-$gf(0j9-R?psJHoya_Nyrb;GdOUw+_+QGjnM`J7 zyQ(l;`XUzgarv$E7bRzLocu)W!Xv=Ri6Pl4WR5s@cYkKUfQ9MQ*}Vn#^~SNsIk!P^ z{&k`J@b?mO*x!tXGjI!h0Il_(21~G|S)-H`L!e+zqf9?i05BR>AAR=%6kUsnqKbc6 z8ruRjwsVuW09fMe0dThlJQkkLp^!O!0#^NB9-H9#)stwNj7lP9eSHBhS{R3K_*{FP z=$ThTQEB4&mlN;w%0-F=ziv)m>`9#GSLF(5{Mi2K1uib` z%5;ejIAFmgTjWx#R4`0!OAUkCL^cTlHJL6VC33@cttaxGgUnB|@g!4K;8OVmYB>VL zvwEiWf6QwQ&XNJ;Dz7ZOtfy`!&gM>%joo|Dz6gcU)j(<#DS3E(E0`%!dD5uP`^hHU87@#k-^r8UD#5kU? z(N$vg4ot6VfHhl{ZN+lLy57TO)e#;5X7;IkLx3h;{{CR+#Y)d>Y)U~7AFv`A4(A)b z1@-rkXoeu+s((kMq*aoJ(B|mh44+ikJ2ida+=^FPWQNGbyVB$g6H)YlUXM`^JQ8(T zTO&_U(f2368Pb2%`P`hc!11cs!T3l;H8Yvt!qD$vF;;MJ>d?1J6BT(KAE4(BUx7X2;t;cx{z8gFu&5G&~Dbd%sxN7c~FZ0pH zlQweHi;j+#S|4kG6uuz6uO~7v5$l|-rTMAoPaUWk^v+JZNpIZ-r;XDmQVj?)6V}d< z1C0R|T-P))jN`hpLsLnWI3f)8d4>Pu%Et-pw7*=H*FExE`iekmf(y`;Q7Ndt8~_5` z)XrF5nCs#Ejo^tvPF1xB@$`qhq1j6{c5e&t&ba_MglCqItX4VTm(Tf#%m8qaYT!H9 zIGD(EmanGzUg%d9q{lK!_I-Uv7!oc**GiYjwC+AOH~x$ajxZm+BKV~j^yX^G-#FuQ z@$|Gj{RGfhuU4@wL`s+m=6M(G=1b$nHH)Q`NOgSAHvhPj^4i^nOf&E9&s3S0-_HXZ z>6@TxLWYvuFLTodR>_W_Eo9yjj@9M!+!GaSM4J2RXDnL?Rb_>KFCz$hM%TM{fy{dV z)aM7}*QWQdNx)_DCW|!e5%Bt8w!2k37BnmrR~&wK9*>}7>=?C-hJ=LlgV}BO#HKva z$z6af5bcR-t1J=iO{|R~ju5Q2y=Y$1wuJ1#7llD{6gZ0A4JP=gle6;&U^P91OqeXd z)PbAO3d#@@6AkSq;h#v8wu=Q;KsgU=^c=PcQRdPUSYmCwog?3L81lM8wr)4+X( z&lY&eiik7o8izuj%a6-|YyssoEHjVk46aCm%DsEniUFyJ{1g;qZU}SO32&*=fN72e zZf7%VH8`0X`};qlR;UlA3Ao$2?@bJm6{hx4A zgsdy{!%n!q6PH(Mp{O$zjPi1Fo|;W=2iVFwwL!8zK0ew($XJtTVv>Ws_B&!O{OZHQ z3W+#i!SLhlwB6KLPi1M>*)=0}(jn|%tBwV&tW)#i5Yq5wC3=63E5L%!G0INA?fWY( z6@XF?P4j-v$hd>68f~iv@P>UU@GBu`n8gvE$_u1b<>wt50NvWI01&6~h0qB!4E!gx z_Z{FhGx;{P-~M9e`SeG|ShIY_6#L2Poea-3nc&opu9`!mGCKl`j6@2U)*pSws$IBC=_hGnAFv-URUX@fACwCG*qnI;1Gbu&q}0kt z%b9DMN1y|sPZ)bU&bfkC?)L|vlQ|0-Bcd_y62cDJy8IGm=_^OjkBb04yi>yn6{P>A zAB3Y3yZo_~3CSYBMhSbtckF`tiNay#Kab_^!3#Gp({G+!&Ch1g{IA}1O0cxWG##8(JzZTN z0w<$z8Bb472Jm(s%=nOQ*NznvvJVqef!m_%6B-5=7}(g9EV&W!KYsiGUe=MRw#Pab zIvNhAqSRIyyhnhfy=;D#W!&e_pV8Ny8k$&fSb*%oARv&Uzykw@9Vy)|qG^qytB3 z1^DsT#=5$?{2PLrYvka)udtUPGq{3Kqu|Qp104%2(PilqLqN2Ecfd;pG8d)*LI~Ug zP9|4SP{2el*xej#rO}5P_5rM$1weyHfa2TxomIO!e+)>dFTnR&y!5NEnk;^E0ha$3 zfRS#W;Cx4laVjKHBa&^2h}?bf?*n&c6p_*Mp136)PW3;4=I$@V!u@HQK7;QhgWdjZdqzHAH?pUGHdo zO=kbALXU-L3$&iCbl=OF4VaLo5_ViwDoOx?Ng2e^3}W(53J&D-)+p9= z6c7;52|1sltx(w|NP)vO2D6UuZyeC_-*|worw5eJ@u5F|{v6gGcc&e;R{SIlJ$J_~ zQC3H*fDc|&`qrw|(0&$@nVH!s>GYnnVj|7)@!_6ZwRR{d)l%v(?Y(76E6BG5!w}?Ly(kIRT3DyTl{r72Dj|{ z6>y9kbb!6Ujv1%#)G*)uqf`$t1r+d@raw&w?QS^H7@?r<2Blk0J(muMX@;jLx&sD}{c%X;&G`b5ud+Zx@&6+C zqYZ*8v?h;r40!_)6+9{N9r|kyhJn8wP@!98q@;4_R%}xuZI_C9xLizksT;c>lCl=B z20$XDgF}&a|09377m&@^jT!LNNHSSC5G18T%YcUWi&DhThf>FcUB@7BEbrap447U9 z%34N}qrRvI^C-s#XJy~Xt7Ba zW1#I|FzHlVyjS383#wWM>e)=>`B=pm^PpiQN*``^Lm7B+Mfwq?PS^_Q#sW(oYmvsY z$nwvXEr>d1B_nI7q8M*ilbR~N$KYq`q5AK$&8}^_NwIcZlw(TJXT3`oZtnJK*VWTY zf8%kyTn?PdQki{4Vx_+Roh4>w-@w0Z3HuFOKQM?SHqrr8-|mheN+%9L8LWkWLoRuI zR={=31Tq#o2X#wPUB`Sdm#X(?IwU663fL$8r0=q;)T%B=-Y26nj2`6YU-`UO@ek4^ zR!o<`cAdYG&*8iR>wmt{s=8w~?Z`;eyMB#4>baWD2sK4urT3BqK)t0*0 z?bC5`I#G=-sKulf4h&{t9AM<5H{nF$gH)E-&Ma(tdiomx9|j-?pqYQ~UvqgwP3HTY zun}*zvEf%Hlk*&zgq@^(@RSE{2mFVfH;QTe7uDjK%D%vrUdz!mYH|REaQiex%M2g^ z@n4k6CiG-Y;U$NCU3NyhG4`}{H2wiSb%;v9jRkGz$XKcKCvm%588u2Eibh9A$6YA5f;8)4pKMjJ8b}7SEuArcug2e zaH(h%DsD|#Ss8;JOnnu3M}TR+b2jkX5PmN@(zg$amKrK5$tkJt)AQW*RPi%1I(2Wp z949F8d=9}Nl4b`!R*u`$yZ2}ktPY@=mt|J^O1P-B=y0W~kyMp$cL&Xj#=p?xKAcbl z4Qr;Uw%CR(cMs_K!lRK>r#SHbYel$pYMiL5YLbH;tL8?QW;Br`TrW(3k$fX*+=Y+} zbD)-2ua}`#%~^Y8b0Ua4)D^z{QUDi=RS&0hwxdSpaJHk_T?gE)CE$BBv(@ftDJw&d zHa9QfC!&&n)t6VYMMzP|Dl02n>u8*Vwe}#k563_GgOXZVEjSFH&L?Ll)7XQaY&#j_ z4fZ4#{dYY+ta?1W&psAI%bw1^)gQrfqBCmB1qv?~kebF90x&9ypwF;y{uJfqnHz)8 z?1?0M6x*MnaBAuWj(tyKZx1bmpjA>gC{x{)0>>Nb0 z#(9FYNR;JuD0KbQ*C9_NFYB351 zp$STUel}$`KQ>OM4E&qBK+APTM07HNp_W9Jdr!R=gZ(uW`lI>#d}nOR8RJ{G6Pul# z9abWX*68>TxQ;=YwVfTUfds;o*P z2>wC=AsN00%z_ectl|7<>CqIPTAf0%u8W1`t)sg;PK9YsZg%#(SfiG>*1&@pwM+=A zwb@sRwxAX1;GR%b7T6aOE;AVrT#3>g0>*Q7BFLN!1zJ$A9vrZ`ySkPb4#@kSZ;w#W z|6+h^Ls-`w{~IQX#+jOjt`;8?pZqb$JU)f{-;X{Si<%AntCW?)Y>%1P|K!|QWLc_W-n9POaq$3I2 zAP>bPIVIl^EnXF8vVN8jg>MN`7OpxP+u*@`Lrg^hM^eYoz{=H2zai`)fy{(lL{yY8 zW5OB^2F6~f3(9B-C$>>6R2?ieUt7IQ5Xq1e4;@no0!I}<8M8&Rbb-+BS3%wcYRNiV z0Nbc8Xj`eJrDej_hmIg!$eRbhVoXtD77vPQ!X$|})o%mzltXZX4`D0ydU|>ii@;g^ zXd*+y!VuW;r_HI()U;5wkR`h{?S*p&6y$j|S;Rs$imlc6z)*dlsvtiGR8^aXIXX!7 zQlEkpR^QMtLqH9}B24tZ8n8ePI(b*TFIj8dNFfqKtHtML$>_}?09o8p9mdqp;N(oh z%DImsA|ldkv|@>=(dmD2k&1$>RWdy8B(fSm^bG*>Yd|zZG2$}=d92XOZPD|~=RMe6 zZ|R>AnCSr&<9Xw=I4EGy= z>9U9w>W1z)U^-w+xe3FffHqi)5w(-s}tpnE8HK?&mE`B`k)l5HUbK&KPJ>l6zO4o1W~>|A|QL7#A~@;o83 zBsJUr@nIqaf&${?8^Nf|SbpyTqR%46{yQ)*K(uo>yl#?T#f}`XeQ^xLD!{t6#w!}CFUiWVJ!5f2YK0Sv>P_H_V^v}#NHK-mUs7vYIf$8_>RH$!#7 z+%>>N+1}mlhlh337p(VBY%ex@^PtEIu>|%zuObe^qardfh@Ok8C@WK=2UsL3|2>8t z5X+*i)vR}fV32^1Y-?*nUKSRmR?dkDYBmS=;k2U5A(b(>$dB$~m5gI!rNMlip~7tzJ2Ra2!qgPmP%VrDk$quv38o;li;>N60ySIu;bg20GR zA04fa3DjK$#p`9xDq_n=a5y#&^2YIc(*mt;8d8I8~DORHrP-QsBHt&h=<`R3i0&4 z2d1X#YKf!h7#JAF79pRY#`@=gj~spERRcZNcPA(DA59?n4Y14tMG2KHbyjzFNSHzq z`uqC&@GMfK(4d(dF{^QL1g36owSVxx0Is?xH80>G-6-G+#|J*YAyBNAMqgiF1qTP` zJ%s-C>(>Zcju;pUZ=iOb{*FdQS$}x79bH|qfcO5E0WoL?l-Q{lZL*-JlU}$aEq-TU zcW%FaOVVz>9+xgu9@t!GsCTpy>Wl2e;FidF9G89P$(D(xWbJlx0KLwy z&m!@lBamRs6sYrA5LkM;!PRqx1a2B?_^JwUcXq}-NDCZ{-oyYk=hBEzI$l2B70_}Y z)daH;rPt53Q9eQG{+!si-e10CXJ=PKBr@PM>VjR7upuIkf%0p>&UVoXh>nhC0jk?i zVr&+W&BZl}meawcjZapLjo++)DJ=Y8z@cgx)i*|Z>N@XaE3J}5ZQeZ(zN=@~lV`nde#!Cgr!ZZ~VzK2LP#&nc{kU=%^==Wo*k*w}wFyVqN zXlRjOV8;pFVP|-7FHp2+fgfH+I8XtcGyR{-hVg+e3Id=49zg!?3lQ^l2^CBga#W7M zcxA^yLvxgR#f$;k?xt||?4|f5sDTP2{yxCQ(->xTn=lMVpfnPiq(o2Co`Ud0h_{!Q zo1p*09rxWNNqaF16qSBom|iklywO@AVx$qpdH@@62(H2 z-#BlQgowv7=B8u=?HE6rN@S6u-2>b#&Og3=fOp-7Ct<5JO_rkWNc-(OLDSf?5mu1h zK97!$5+t%42-8%ONrL4yMMcD-sSMaV+S9DK5^Ixi18GrIprt%B;@3aWZlZ;!WkI3c z<$xw2WYVa>Y$s_diqROK!&G+#0KZQIz9qVJa@k=Z{U;waIgFmXeU4Aje zGr9MCA>kGsp9~1gfpnl7TS6*9p5qn`4eh;AlVxgJ+TI}GvTMLSyhDSD@?ju4DMwK+ zFgEGBhzkS7;s_LHbQ1PCaB=d0bEAgoF}*;Hnl>6Nk}Ph!qEzVsHaRqPd-Q@yS@Sfj zXOE8^a1h750eEqx8gzWhLr0yQp6)W$8ZUwX(0kikrgc#kbZ8!^&{NfF4yUtmxAu?} zrh(V}KW10slalIR^6}MI5Zlu#o^c(u+#dD;vp(CJ{mYN%ER64Ro;KHXBH#{5^wb#w zUjd8i)yFpVJLXa&{!K7gn?QyN|76a__ILMloJ9DRPBz4^{Z<|H&-mD91CQ6J@6ZZB zR^ z6+^5n9iM0FrUKB>kUmtR)gA{LjP6}=KEh|ugr|XT5(5$l^R#SGU&FS@08uprN|$p< zVZb*2K53IUc3)I&djDYk06yp40oX}HP;%P`++id(dH9!#0Wh$LbWufON>>Ly6EfGr zZhF2BY}ABeQ~cWk@ygquc@bC}uvi~l5bRdXSt<{{P14X`&A%?(4vyU-*Ssh;M zyD>XsHR~Kpi(r||R7A=88o5L9K&b(`Aw%U`t*$8dEM$FePhbT)35Yi-EkePvp$#G; zUhCc~?l~)9_`C%P$!h^ON~~@#>}lUSN-C;!;HJd?=71I{F4bfsWa`0~SH$ZHm)@cg zac%>wi6Xx*N$mES;oT1w@;6Q<BnO8xl5;9WaNto?aHqtgUF)sVP1Avs z+LEhY#ML#A?0EPSgdfV*);63Rg~AlLbn9QGwAQ9=;CIOvuZXg6z@iXWKM&0!Pw9EL zb0h2mg9(!#Gy*3OE5`Bm)CAb*2y`63d7vmt^aUs5Y>-&+PV{MF@WfR)W$A0N5s+*n zCEt4{6@RSQ)3$`*R_%Rs(U+ggEiZpH1$32ROjOis1DIaY!<2XsO|0;RgLBpg;+Zu@fn-uX^n;SWL07*HOhFw-`;XqLs;We)Jbgoo zSoXu2th>_}Zl-knsGPgzc(bv|$DYY;TQq{Gg~bkpZzRTVu20r%%M4om$UBV-r&nSV z6B9W=B0NZvtWdlWVOzTW{Y)jY=ynAZk9PhO(FR!bN?qOEdbM?A;}a7#?m*soP-Tio z;Xw7qqmJbwm0-}mJZHhfF|ZsyI9coUJ#Ki6vVCOLwOhUt01>aLNH`U=y|e4@b-n2` z0V3WdV1pT)K$9=X@|U6dP?|Ld_G4f(tZI!5rh`DvDexl<#-GGOAWQr?SosC8WhEmG z4Nb}?6l>&!i~Wp{wXY>*|%*dLO;H`@)A>hjGjG+XOHzIf!P9&*Hd4@PP;?j8trimYyntDh1p!R(4 ztUj-Xl!Vy0vW`TAmWrrcOTZ}8Th0DsYW-1RB&85Ps=JTbijqR1Pz@`HK(9{zl*-66 zrlN3M$>^=&f~)ti9DWz2I8RVEy1Rf5air}VPRr(H3#=dS+#sQ z7OUkmmC3uBL*64GW9Eys1=}dg<#oVgFyF12AOy(1^zd-nGA+gidxS0uFMBqJ)0pS^ z5~lzX(}#XSVZV!cC;e|M7Y<~jP3T#)Nq>yGE!N)-fh~KLJcreT6}%1(9lg4IAn>+x zEm;5BGPTn_5`$NPg@DN5zGurG)OKh*^OjL}rGI!z^5qUfZL}`fIZvL9e#ADbfGrdBemB)iIhD`R%!6>h9=3z2ac=#>12cQE@ zseo!x#j{$C&La?)-U4PNK>Sb8&*BioXWYIJ+y5RL3l+PNZybt8j&WKvaM3Z8_ZDv@ zg8xj<##U+o9C`<^8KT8VQO4*qHaTB;3E&0u9ed=qzbBrBxDf~VNGqZns!gsLvj$Kz z5s2sUF^0$jUH=}?n^q9x#m@hX!$OqF$i(!yQ@J5@pc%wugMswmaaVN*^pHE5NV0g; zwp;?*XUH&puP^{X8WwsvP1{aDWZqzH$so76;x(iJbb@6trdfG6h@WCs=S@c~3ex}1 z=HaN_(4h!bH>t!TTtt*WI!(9+akcUfA3uH+!Hg8f3-2nOi_Ol?z6Kjk27A&^DeK2d0&~ z;tjc*NdYl61zL*I3m7vpijhBda0TU0?r~LJ-8)V1vY={h;1v~ufD%P+stns&@~Z(~ z)m(&F%?71Dp|J>5qK>he>R)E7lJp?!fD{g;mH1IW14@Y%0PLowzt=2HHb20q4K6$Bh0td#Nl|9qGgL zQhgS$$i1+5M^uv+XQ|2+4%MeJp~OP|XpaE-y2Ijr z?BJ1Y0g|1#eS<4D$W@bvj=}XMb%@uZ9zWt4~ll!%<`}LSs_>ZKd{6%mB&_9Um zZ)^~nF$wY=fT-r{&@jAYzP#qo9TMz=LDL_abEN&0*jKAB`u!%gvCQW)+Tq_v;WacQ z10K3$=wb5VJ&CY4N&|1~pB`Zwl8!71Etk*ul(giQg!OqTq0HwxrA8FzKWN9YWsAvs z@a9Ksz=abXF11pb1};wh0crgotICE2kR+7a$|pv$ploN<~G*zDtSf=ZzMa zSQ3ZsU@wO-aEW(9FpKx=a5FAyBavJLDY(-C0viP~*o$uzme~SxpX0rU%_`#&Xwpy{ zHcCFb(dfQ$-Bn!$T$pGTg?0|^h&l88L@B|li`bGnRWmcDU#WMvr2TF+f?YkuF-a|V zimALI78!jy{GIJY;e-)HP`RqsQmcKatgJMvu^ih(zG?#T zNrQj4w^UuN1GXc&3))vPXonK^pF)2M#DMr;#}kXt10?EgA(qLXU$mX-JO>t9-k8B8 zcw&tOoYxmL>w_$Z6TU#`G6dWzZD(^+{ZF7*PDxCl=TbcG0QW22^f$<#`fFcY3WAtQ z5{LmmZ1nR@0bD}4_cyciUA|2_LF-!viYv9BObHcw+`oXW0Ong&EJ z(f@MBoT&PWKix3V|B&#@ZL7Fv*}f-cFkwFv4_^PM>grQKs5g?V4pjuR0o%o2j&;VF z`|Gau%O<-W*QZ>;rMk4o`vTR?ND2WrfeU3+3XCe@{WohIu2}M&0$^0*2MdSk^&A7j z7NKCf!UMucq=16l$ZxxYkq|bR`eqC#K195P0y{?_W?eIK{yhciRwEI+{x9^-HG`~X zd?zZN-}TnAwW-1~Y@y80${V~)L5!*bXetTn?u#lRTwhB>Ojq@nrMgn!s*& zgMa`2wOj&z_^zXs%w$=6K)`LkuSD~Yc%!k7RcvaJM8{fQx}WyhhzwO4O-Agn0|mXH zynyDsuic*Tx2{Q7*@hS+)r8Zu4RLN$;6R;#{`LJ4ILVSI^}{R_Rc1NA62SIno6EDa z+ji39R}FP^-(H`coZOs(9*m+7TwWYFUZdeG3Yat4S%V-!1v2;6r^6zTibZ-&mnqVu zMIB)2=Fu#W_|}r57%sSDqeO!pSQ}H1x2=x?Vm0hDYQ7?aYh<&M);s`u$VD#PX=*u$)|Pe^b{Rg?Te)ggJ2L^)pK)Pf#HfM zmout7LRJ0k+aB2bM@o0kIOK-p7&xPm^INJx+W%y=Tf~_r`t%_U6oc)Pll5YB$v?E_ z1>&=FE!pXrrGtg0t2+=b=;cU7A!)=@On6y)B2*Dvt_jVoYs-<)GI_s@aW)4u4h`o^ zsGVAsci=itm7DYNyB~s#Vztpb8i?e55J8WCzSe)cMYo_b1$2M3#sk3pub;W>F3M#p zqAzA;#upMRuWn;wqX-fa&zv&drO94!TPWG>Q1@Hz)`D!%ryxRYv98FsN1Qz+_$%(D zYf}-&M+;AxmPW7z77Z*p*FxER##HAPS$9@hOUl&K#SdR>ntYlYH@3E@TtHF1-1K^1 zG@%7df#ICo+|5^Bwpl}y%n+Qn*ROU%&3PS>Vze`!xmq^=C1nUo2Tk)2Zy1jBml~j9gcyfh%Vl^BcJ4*im@=fVH2I;YVi^X3J7^B0NnAq8Palm|%% zpIZ2~`%)b2B;$){Fs0^}hRyDmh>r}FreMeJ06F))oagd;^jPrU1aJXOYOmYtFBtwy zKLEDAH+;7Y&A(C!DAuVft!-_6B)6tSL{?*%*Ycp4IpO=NNk~C)Zx1p$TWmVD`%FmD zx?MjUP2G>7tfIuwm0rnlXY;bkcG$so9}k6K%Cg} zwP}Cc3c!!AmwBdwP^`uByuhNJa%>3t(NlC&eaeqePR!ks_b&Yb^~x-b*@@b!7;L`u z^9EaE7`lSGzK7>!l)8rt2|0W@jyLmRXJF`k(QBZonJ?ZrhpZ5D$TMDk_A{IxoTvcU zm#o2BBJSl4-RT-zUB1eE|Qbz^xhqWoowOwBG-!>no$8T%&)7kdPWcx`vjJ5Ts-1 zkdg)o5s*?sO1fJR1QbaH1Ox#kq#Grq1Oy}mB$Spe(YxpT?}xkYU3Wg5HOu3AotgJ} z_p|q}9%ALQSDIBNvHDj>T&kbr={kJHX!=+Z>6{N4-N2tDLCE?xo<~@C_d5vbS^?hJ zucT#mN?Uqqi7#nnGU7LNQ;Ipxvc|ngdzW)EPKfns;vx8UwxH`Bvk*`vtZQY?Akoe$ z8oPFtTRYRRiNx5RiNGgbo1LAV;Z>Eez{F#!R}Fjl8bS_i5?)0+fF29~go18uwvUN% z_zR-H4PnDW{Z3OAIy$;Hw0|}fm6X~n;G1dVNtl{>_XRv3aQnC;WPVq-VOCi@ak6)w zYPww8VKH57wo~`!ih*hqh5S-*51n|Zw*1+zf>=ya2G!Q3s!dTVf8NUMTfPFyIeV24 zO-xMc0J02(pEz+k-LDm6$C=^@&IS{Wt|aMn;=7|*0X7!p6f50{dz!CjX!y;lI0Ac< zS>0em69dU$nbo(Dyqiq9nVJ6Qu>92gk2V|PzSL7uBxdy`4W$(AJ}m3Q_!UmN$mC_B z=6{N0OEo-c&|i=%PorA>ko(ES1VJ7eJ2dnFSJ@QB%AnG!kcRQ7C35NJ&Q`*Q8e~GE zr2O8MoD~pRyTOxje@z}hiDQ0`A<)Wy8wW7;nktAb^^Bbg94ZkC-G9aHdboLco$ve2 zT0s#ChC;Urj{zUf+OQP|z7J7J01+a8XNvhgOuJKnF8=eX_P#f~a~MbAlCV2?(g_Tazys8emKZkVRS8=yM_Y4F|OH%uugDE3y;cnoyz`Yh`s z?$z@7^*%DTY@**Op&;$Uj+RCn#G_eItmnd1R30B$ZsoU< z{tfWvrkJS&ce5o;U{A`ONjX5WhwsZJ2r}>!Hw(8X$=fF=zPIM+KLaBz=K3#wha!zH z>2^ml9TJBrBiSrE$jWCR0cCdm^>ZudCjoPVHDu^?ECQ;23T(n}y-v*jQHs0Vu2b0B zr+;w(%EIW1v9>Ru-Zi!!PTa=P#?`IJ%bVYaSGiqwhEGi*qwG- zkeTk}FGc@pDyzv~W-o4fqrr1f<~K`#FY0p4<)t4#{yvy`w}{={>zw$Q|DNZSP_0j) zSPd;gTGPicLTJN6WH1yCMd2VP;=W?COeuC|NsfN4XPT@g@C~FyINF{V+O%jw>9R)z@_+MTk^kh5n28h zV6zE%%qY2cNohNY=rbk>r_vgdi-bq#n|tq^{VpX&lG0~!35Gzx!eoiN#Aojk zS{)?^=cd<|F&T)vzP2dUyJzaCib}=KvPsX9r-Shh-{EHTfeeyt5f`GP~_l6ezweyYq?U&W8`*iG=j_z+imNRK&~>{LYh@ ziKsx~*<#yTr6I5HlB%z`>y&jzqCOvS^2C&I3jmXY7nd$wY6}7{+Sio!aU*7WY$l39 z2jFCvqZo2;(5hxr2E?2PZ|}H=z?|&J7yUI4=(F3%QEO`jDe4JX&F{sTCO`tZDS3O* zxWIT>{GZvubP3!|YGmu@QB`f`>|E9rg^5%~u&thP^3MvNmV}F1%I=IMe?Wv zZklDCi()>QOG!nDz!P?zpr=$t|Vq!;K zzzkBW&VJSg?g~J)gfFSjKRABrl!WXBM8&_P=vD@tRY&-lWA1RjrufBkc}_laBR4Ov z4a@h4B>IPY&yRixrSfNyc_fs#E8a`WXuYgF-0Wpc?Q@?9iol#vuhC;#;k#=voKe1S zO8qf^q24?9=Bu+2>=0)zG>s|S5jVDP-FNMB1;~W*XPc~j#h$k{GIGne3PDpGg3 zR=hU;vS%MpsF1?m(i8bl3wtc{v|1TLuM~iIbY4=uE(&x(I}MR|wA_jeXIVuR*E$*D z#T*bz7mouLw<149V&uUNgPFBDGw9ux+udE~5oB_vZ9vPY1AyLvXA2_9GA+O0UY!mA z4Y+6{@VWo^TAzSwa-NWcGUU%G5#tJ9Zecx&5>=FUX zCyFta(3bsen9no56ybJO@m1B>D}&^wZtvC71s_N+^JGwBrtN*e}=OdEdqp>*i|r#mxA@F$p3pk#z-v+sa&4w zzNOd5kR)jy1yc`UK4YnGZ1i8RS@`%-rQYM;dq78TlSoujP^ka$z3bpH3$S)!t<1@e z-B7OVc>^@0g+hv?g-Ta17+{6$nSlzQE^tVp=nshn4O#szxvF3uX`3YL+zqYe6Lc*| z{Eir|+x6Q0vHW_nBL`CH_ke^x81C=qRaV~SwK(2_tyBJKB*wzmYSrQ&lm`h-3X)Qs z-WDaz2;r`gCglol*7u+6QPgIv9kFl3MaOT5O){HWiIf-e3 zr@9urp3{v0K4O^g&ma)nQBeiwvgfMS<flM8zo?$xdC|{GniPX!+NZR?(XhL z7-Yg2jPGs_ zna}qB12y>el9XTQ)EZxMm^-Uvxrqp$OMe>ApfeyyI7&aLD_l6gK3bpEJ@MUGN{Yw# z`Scuekwj8lHAyIXqtru~wBtB)ZLv|;RqKz})dSy&mFr zKH)&C-$`j-O-MjL$@bAIEHg5gROIODV9G1KKn;pBT_q|?h2Y&)@ zRBex|DZSBA?_sq^MEdHhq`4%sU-S`C{MboOsE$0+yi;Kk2N3W)xG;rRvtI&h+ytOL znG-a##y`$aT?*EC@}#^=D;s_gCo)s&JY;h_8RDJZx&uc(i!`%b@( z#G*NC`F^L7a0%sQ?tRu#=QG4M;eUxcKZdV>UUF}04a=O6>b5cKoPvHZW321%NdG=5 zuUA_2zd83V45d`mQ6lUf|O*_9JJM6U@{yYaAgIxTI=a*miBnd zg5BMvQZ9Ovzw}qG&#J{C44r85RW~oV@2C8W-%cCpF^?rKelEVO7};s2cn29CweVOJ z5!0(^dbgYg$CgtEFSMPPzlXKvxwy-@RYckCYmA+W>Jn|Vl5y>E2!b`kUoW%|j(bZ~ zQ}C!>G)7we>xe=3DwtM6=122BJdIDpjssyqzpH{Vaz9S!1s)2r%~-@7NA5H>%+pX& z)s};PK zL1aOsq5FAnRS1YKBkDtafr)>y^8|0Soi@^~)mTL3m4$A2ve z6e%iEtV>7yvoT~613qe>Ct!y<-noH!x1U?fFlmb>kstwetxRMMkj~GSh67y6roepcBb-l??v%D8pzgq8F(nQ`*PUu(X zCVuhzK8oG@4ljz)pC9KbPy7Nssw*Lb`1MU8P~-K8W!b48_6!dNKVF#! zs9;|+Gc(IQtDt-8(Iwr%~1YlP=(S zvO#X2O6(k?N&K z;wn*WwTtB(6S7{YJf>I6*SngQKz;4(>(ib_*f$SpnPsk;N{_A$DlQF2c|UbORDgKR z1vKxfKrbE*>!Q=>K~nIaR?fgrceK|}F_g3u2);bigPM1DcTKuFJE>7~wP0wv zW>=kX!GRue4aLEV8}dN9qiDXQ1XR8IK+jb@KKjBLmIG9dS^aP4lb&Od7^NKHd$9Rx z9K;^@HWrR`{Cd5EP{S^LN{VZjj`!7uF}5AMakSR_K>p zo|_vQUdaKKfI+!=Eh($?v_Vs;v<)WA^{zF-W;MLOukW-G&>YILv%{g`Ve3gqRp_2zdw``DFyT%A zm}JTg^ony~6A>#K2b1tj{2uof&M(MXeC*pD|LD(&hs-Dwj5-A}txaBdu!3O1DT`+L5bPH1d{oCQ| zW5vU*(8dXN=@h<KN6+Ag^afgKZtLQV`pT7M5T(xdXr630?Hug@c27F0-K$<4E~rRt znnFrMsDR1TYQc%jYu$L<|DkxLdhOvy%X1N$t(_5(G*h}j?>(n-i-xK(5Xe}++4P(O z5nLX->SKv$;^p^01gUm4i*f`RxSB z41Pmf?3bW%EX?(KUm+CHk+bvJ(Xm-aEeRib6A_VGarvi1pci_w3FMK<%^W2!uY)#N zWPj<_T&-_5l2f4m4Eu$a5YXhKvhiCuD^#BHVx!SiZMkW<|3)dQE6*&1 z!&BNG7TXt=Y|FZgr}Z|mAR|lg)=+^c>9@j@bzPmpe`_J4t~9VMIqLk$H)q6p2ETo^Mbf zthF02xwZ5e=LxK&if$c6n{9{lgEf)8Zw`6s6bm9g&8O&m?f_aJf##fqQRmoM_W8D^_j!2iBlW&RB7_6cSseZkC#S?6XTho+y3YL4qy z)YoM1x!vy0tO7~GLYP=|Gcv|M@+sRj#{Qe_eaNd?e*#~(D-)$qTxPSANVuPtj-6Op zgcS@Jr3)miIoCAwBtul9luakDtF{`(>-y*nc8R#vU^Rd(Rl#vx$K}0w;K66slX%c& zOg%>iTJF%$$aV!X-kWq$gt*WOx#qi(vty z7w!@DX643teEj@>*rlb?WQroOq^v{FA-IWGFzJjBDH4k=aU(l>|sNdQ68m}1X zD6!^2Zp_MHSq#0U*YD%w9k=aykVYhSwAX7zKLgWO@xS^T%&Wl|%TFC-T(_ZfsXg8* z{?t>;S-~=D={H!6>j494teb*D#|MgNA>to^6U^YrTE6WO9A7FP ze7JLCOw5Y(JUz5^JEp5)*E7Au zsQ%T1C9tbsN%;e$I7tc!2qG?*ax_Oj%Cx;(FvY}eBJo=`NKCr zUljp2KCXIp?t7b^N-{_7=3i(Ao7dOZr^jan8{HQ>`+!vRWRTnyDL%=UfMI_LfVG)T zEN_dQTG)Oh={r{SPy{w%-9zM3n^%Bph-LWaOA@5cm3ku=M&20pkdEAa6YC%qE0$!j(fT*VpN=oI4oPByg9{txiy<-!M!veJa5ZMa6kt|2`@vNqble1xk}SoV zn=a9LRs@u=FN(@z8Lgo1VRC0!ao$v-rPvAC9~AeFMLy&DIS%E}VR1Ns_PjYO>$U`Y zVAR_Y_4RBwSf;b@&9lxqVHW?6X-f{V_RLYG<}8Twzsg zVPd!)=CF!wQ7P|GWuePe zye5%oeuuuUyVn=>KOyftgPe!Jt#f3Y*#Mswh9ND&YreTz11|12y(3%-tfvI8mTkF2 z8>w;(9C=@kV#`CQ%Uz<#Q3-)f>~>dTL)O^^ga|@mHz{JJ>esX4}X&T~$F$Q>Z z29PMh&1;F3&6ylsRFOqX@(Mj+D{N`3k>4!wYuHLYsN%EDrN z0w^v|(cfSQ@izP8JN;ucBVl6UM@+8H8}Bb-S~}F3oqS`_Gxfjq5FxFY5bis(daLx( zuA5R-n0TwOB`yIA>~67X&xKFnitdD+oTle)+ds=|+m7`=KfBhmy1ZOSf6f5zseXtD z@r?L2?EFMfFCge-ty$->Q{SK5s}>gxm1fmN)N*;BvB%z}3R<@gynb_xZXA1e^H~3j z&XOET$Xk*I$5m+8?_q&JwKU@QfRv;3rF6a52z|?$ldqFv7M5U^PI_*No}G?`Fspzo ze;KwsoWgHj18O_s8bY7uxr6&!&E1dj4fS7)2$wl#wQ%A@-)Oh19~R);W`c zIl-BubwrK4Tam2p_Ax%t<1y79UD+-K%rMvGJqda4vT&Ogn_z|U=3++0)9v|4ye`v%kNd-Y5Qxf{8k9NqK&!QcTB`!ONmM2e}{Dm zAGzF6r9fD}D9k2I;YXXV(1(-JJhmfSx0UsGXU((8?WxY_+-Ym6fp(|tac+Rl&woSz zB>q)0A`2r;z@Q`Lw`a$B-|w=U?$yYp++yk3%${r80bGsp_)Rxbq-T|1Drd_M%?Ppt z9elCI_@^cEZWHA^@9*!IAATY7(|UF?acRr-_(Xs9IE|b@_R5=N^eE6cpXkhDfW$P~ z_TX-sv_54F1SftT593m02sC*tvq6Rwx0I?BP>#V2mo+by*>;8C^4FS_HBFkX@?6SV zpf-(w{2d95H%U;>)?i2(TvKu(V4sm%ee*zJ?9JHQs?tyoJV&c;`gP}njK+N(_kYp? zaKr)RjB9kA7O+DqYS(&ZX6C&gGcOk#Yw#M(<%~IbrHXO-bmqOW&hAdq=n6DNG;47yRBf#Kn{&0M$1 z<1iP&CLpqyMc+MBgFw|H;T^BNyV|~OxY!3ul2K7)JlJu`e{O5pC=x1v)8PI~g+EVM z37DiNVfPdu#YfvUQ!47d%S{WkvSog%7l3G0Zn9+ z!Cm8cPw{k_ACXK=nLGW81aZ0CxA>@ht|U+paAdxH73U)E2ei`gZPnGnSFaWcxT^xw z(QvTC;Q_2LlEVkCu7CM~XE(D69IeF(LtNj-N3vzJDX)*bvuxpS5CFaV*cqfyx{-9F zU}I~A2rc9HLIT3ehT>YH=oq3PBcUq^x;H4bU#hT;+u!K5Hw$%oK(_n+?)wt4BI|jJ zEB#gP=6*pNz#!+@DUSE#!Cd24s_4NRT^-HWM5m8o*P=0!VL5Et6qP;c(WZ>4k z2U0O34?q?z0HQB~WL;yrb|bzz%bFP*ADu%~)4On|>J?}GbYCSL@>I1_^G?Lxo1%NS z#5J5#c+G$HX^C=`p_c6ld2Rbd#;LE#DDiW>-rj79?Jf^1!7Xz(C}puj(QMzY-*f!s zB|FI>Kn(E&pSbe^_lAL6oUbHtCP|vK3fNi$=ljFE_o~%bvFTwPBJ{xCl|p?0pZYjx zj>*EqBsj2N=eY1)f)J9dsGOiW^+-pd6bgzs`{`z@FLvJ<2bziqZhV`1F>$2(Q#wPB3F}>R}*u4K3fM_y1WdpP97E5jw z{Eb*UcS6Iwz|l>pd?lk4o#5=^a(<^h6zd88uFDiANqOn-iV}Hjv>Yu{l3nCHOGFO!6{C?)Nv0}^Ki7L)$J}56W z(zA}rm@Ks%k=v9LWp8mPDH04Bezz{G^fM^q%6FkGWTa_%1(Mk3qVm%mk*yEYn>tZruDEOsL7Jt8tBn zYv}Xei}OkraDAAdCYPa8Hv(g2%thejK`IAnxi1zqvgcg~o-Vbd9Tku4F8w>Yu|q1S@13k&bxk+PZ6 z%CbR()LbBiY%VqY**(ky&0!e>r0q3BBH5NcV?l?|!oTJ{%`kuES7& z9O+|j=vjkWo0b|oVQkt}Tiv}>l6UYsJ5wjJ==|3$O5kuzd#D8Vf*Q^pWsx_ z{M1za4IUmRxqV7ngd{czE`im^Rn+>`qFd;Due_C+AjzK7{-Yp{aPo{KgpTL-)!b6Q z*GJ1gU@EE~@&zq=%M0SF&a(7qCH`&Cb{%xRdleUo4n?w(72DMbGG`j3;*R=%*RRHd4a-{MU%eo@>36Cyy(d6*?Ctmgb18oOAWP{(x3276%a) ziL%3A?VhF4L&`*Vy?cK!}?+u%JHiyFr-A;J%=gflAPc_E;Tox_iF z98iZ$g}vX9y%{2OmJHlldW{F|*$+sz6@+A4`mxmrXL7k9YMzHj^224(>fo1X-Gs7j z4R^KXKB&=ZF)^w9h&2ZUl3>Jlxg%pDPKW82C`)SNlJAQ|iLe15hk!#Of!>OrtE(UoAC}{!n`xuh!-6x6-^b;WG4a!^JsD8l@dc6un;1eZx&h^ljmIPU>dNH z0VP^1oTf7{I6N$$XpbGZ9g7U6saYlS_}QN!V|`1_@#=o$DXA%FCw^fjV$ri^81)`3 z(|r^L5;SJAubXT~3A>EPDorzHMN4l#d+wNeQV@lQ9T`f^c9Z$)>fI^_c+s}_si=H3 z$(CuoQ*oXA*%9m-@^o8SK*)Cl{*0oy@g$ht$?K_b{00|M$AqC~^F~FJ7ObEF!tM;O z&Uf~#Q`GV<1fMW>S(ELqzWjSh33A#!`zc8)*bbPKAJt&G;vW!S7d=2j8q>AzAY-LL z)MOr~7p|_cvF9yY@A}ud{_`JorlNMBcXjB6?w|u-;wg8&`-pUJ@!uVfxkSkUrObxH zLo@Q}bLC9%l&3*KyuVf2y3$>WVT`i1J_==tHW?uNxig8j1`#GkfX@i6rW@~ZB`}g1GfyhUoZ@cagCQbQG00rwR|7sQv!EjZ#;i&Oe zx|?;6V2t^bXDyKQx3smjJ=2T+WI2r`k3FsavR+FuViCb93{*d(a%UbXEpDt1EtVF6ox~=v?i4T11TQ{<8qkXWcamsmQ4T z0M3=QP4$gLiSpgKPcz7)0)wf-%d4(KVFQF){i?Im(~X*YI{*6q38wgEk7?dC3>LKd ze9o7&{Ajh0rAX3=solG92f38Xu+k9ms41$>@OyOAq}Gd`0KWkBl-S5Y5J;xMm*uq4~X{LKC{a8G`T8jgunZWS^|dXe5L$x_t-{Q?|LpBlVte z;^uMg%gbZ%6z0kA^|H&0ywK_&*1Ywq8V0&^z_olMoR~h4*4>Ha>Kv*8n_Wz<-|CAV z=t-ZR)Muxsr>{WR{KXiE$SaeX$_AFdl-tEAvUQT~8$u_Z4JvN_N#Qpw&?}#PIP=uj z9^8j)?5HXi2rF%HhdA<(v{M&sI!@K^N|hOg#FY8J(nzo-k@JvVs3pEf?CbTl5nRnl zSuhwFsP-I9+;$rbfb0OBl-hy~htvU*(FUB{9WiP-egY1C6q24xD%np_xnNH5@${lS zE``drJ)5-Gbe-k99DLCk0bzEP%N%sJ)!&AcRaESMIgVe$*u@JfoA>(3;20sgM#nGt z1%Hf3Q%`)FTCPh;onbLCv{mEBTb{B}KjAf7F0*Kw%1msE_z$OtW|Wki zM|M@pX1oWqI?U{W1RG(2_j8ZtL*(A#6BjyJRxUsk;xo7cv%4B? zO9-5)@XupUZ@t4yiZ}qGow}lS9;f%Y^lUuEM_^+q<|%jIZ}E@m?2b%GlQDnctNvyx zM#}VKguN{JYjz5CewwH9C+k9Xy~%x0pe_>k);6Rn!p0#Z&VgK38zse|*!TUjR^iF@ z$Fp@UEiK+~Y);b)Zpu(U%#jm`(Kh>%j`q_^QKSX;_zbTEwhQ!~sylSWec5)3aS*jkBx;KBvX(vF~Plps$hIrQ_kn%G=|(J0}o)fVrk9)|Jd_7_RJ z#N64V$SM5cjZx%8+8WNbST-S|5s<;q zEYvnQ=&pBPV+F>-FA)Vp`pozyIU}rSaX5Ix+6waV3gJ+$XKOJwzWsTZB(Y(EWuZ&@ z)CQ&)cnBO`49@U;(P7VM#uM8TY|(XyDo2N}ds>ELPGl4$rn|n3**blX#shEjKTCja zLiQjG%`ybZ^OJH%6bZtV zDJkOEIVgH+ireYNazE~tg%RN97a5Rir{-&n4oNNk3uRo(3nk;wTHyAUNF1sX@yj7? z;Yhq2@=dnU?!zeSThi1apuwvHQf01O9X81Q>_7ZoAj^$!Y@+#jl;N1(eR>UU=^gfs zu_D{5h%rW?$BtSGrcYxV%fzoV2~wWTZLttw(+S`0ofcy;Fu z!r}Ku3O;|V2_qyAe^*C=eJ5O1J*q8rfR!`ZF$`T&WNW{7A3Io_6oH_mMiM8hq^LYk zOADN!iSUpY&m^>IdFwl1YS=VF)K!EpZ*MbIdXEj>t_oC>?I95VLf~|)OKY88qjAig zJ8M+lAJrvX?Cn=}fb%(WYPpfiXHwCe2c5L^s%3g5J8v02<60Gg=zF1Ol|s(9Zc+>n zpKMf`_)Pr{P)rI1%1+&yLcK>pLEP`EcAO%8Jv8IRAj`>XU3qp}RTcUiJbz-Jra4Sj z=}m5(>?uibA&|Z3`SNyq;l{muW;Wz4%7hVCvRk&h@!__6dah<6W&}RZ2TYRLQ9xBv zq~Uf3%aD=pxK_L~PVKv5Vq|n!3FC8@)cFAHFlB&Xejd2znbqArHammMmK^(7opxU= zuP-)YZMMttpTM~sO6`n$0S7Dml3{Wj{*@M;MtG9Mn)sGqq1TEJ9KPR}RWV3Xy8a>8 z&+maNe~XZ_FyqXtf+(+AdE4J%h!OP5u*j(<{eTw#j3nw$^u01`vOiQI_5B2#CxNLh ztT;_)S`|SxGQZn#+OC1X(;>Go<={^wzh#R)>hqU`eF~f3(hHk9|Io>J%LJlG#4ndE zrDsU}L{y<%X&T|lY2sNejn_0K}NQd6U#cCcxTg&tGgJLA;tir+g)IL|=2 z{5SMu!5g@+yT$SkSo!!|*c#l_6u2fn2I?W;uZFgMRfLjBiUp&a{M2M3CUG$pid}J< zuDp5gO9<9!LNiOeAVHvzDCJr*%oEvT20vlxq3d0-tQpuGTCCT~;53RkipN6ZK-00&c~Eeb|M)!qCn}ISjhBa~527J+*OC?odc36K0RzjHndj_Z)^t^nn(sSdtIFdW#E2hIs`A>C3>;rq|I zxQSf`aey>Kqfv_|e|f`{8wi#8Ypx8-L_HhtjuD-Cd)c|j$e>^>KCpa1dMACO-7-YT zEDRmG4X_9+BAl*NjI~IxPDs~Vj$xmJ_=>LWXU*MFqzzH3LxJ~EM8hSRYmgI2GTKty zyZ3U>zJH;(ro@4iy@t!$gt=3l*~*TF)aBzeT{3hoFVJGVj$*gZ{?!EIt=k|F1h@nS zB$3AJ1|gN1`D{`1=WIwiRs|d^%q63j$yr&+HBtFK3L4#gHE#yky=v&2Nc}>U5eQuD zNURhIugEs5SDfUnm#@c>bYo#|^*{|W26b}ioVGz8yD4R6FYn0m-)BhH%1ByWOi*U~ zV}Ub@z+8Q`o1B&Wh#aqmY$DD@0rW!fNi)h8Nr%c>T}&Fw9$cfZ>IU{eQiOq5&@;Y~l6a_5RQI|IbDKKNmcZ{?mrQ ZK^!oxFw)A~kYKK*p`xQ)p?D|!e*t2VQ@{WK literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_sun.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_sun.png new file mode 100644 index 0000000000000000000000000000000000000000..e3a53804c12d09b8d6db92667675506498dd6274 GIT binary patch literal 21959 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%0AnCE=7zE;xkuPT7lBnjP@ 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 RkvIk*@O1TaS?83{1OUNHinRa$ literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_thunder.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_thunder.png new file mode 100644 index 0000000000000000000000000000000000000000..1048e454842e4b2a7e903564ad219aa5ba433aee GIT binary patch literal 27481 zcmbq*WmJ{jx9_GKHXRb15EKxUmX1vbl7e)1NOyOqbPIxXgMbJ~hm=T4BS?4mUHs4a zaLyR_e!7hDj@QAiXRl|jIe)c?P*RY_!KA>1Kp;48WZ)_g2txehf9R;-H~#HBL*Rep z&XO9=@9fN+-3%Q~Az~(WMy9Yg9}LY+RZI;{JRAm01tActn>TPVRrf!;*=X+X)SmPy zCOWfQU=`Nys+^-H(AI`=6!ecNLeT=z(F3vZSqD|~P>{uvaB7Q`M9pRqO^G#4CFDpK zSU!v&%%>GFF>QRY%w)V^Jb3WfPgMCNKO%H-JMtiO;1Q=QCWe3*APR#PH+>W(^auYy zhaf)w0)mc?j2HlcfnOja`v2zvWC+6JGa<;}0Z|C_@c{(U$5;IK1OM+={?}XnzhC)Z zZ~1@w%>Q{Y|F_TlpBMALul9ew^1r{v|GL`$-&YzXlruaGjEvxF;ez#mmj(tR{zO1V zCaA_9w#EG9AqvA1fI?*;qSY*nf{}<3HA_eVqT&eQCFMji-N6QZ@I5m9Ir1a79u%2? z0CfT3cp}k06pX*K2xy449tPDAF~1L+2V=#`pLKd;skFmx^Dsj?6_}H^u}{rMvOG8( z*ZS45HOBOxTnh}FKZAVox4G72d(+PQ^lZ7gP7}Poht zy=CH3rd`|Y7oBFu?3%jGa9v66JU^-3_p44$PNQE63$vR%PW}zpE_@TBgXME|7DC>F zdVrw!%UD`WiL zMj(_BMTqx@z#ve6)Fb9ReZQ-9(%g<9G`!9+G7CGqrNKXQQh7>na}yIA5x4#M-o{1G zo#zMy{urRXAqe(|O*j$%wwK!5-)U%QR7DcA+>Z_nlsvi5nIM^yV@u7IQ&3oJ1D8ql z?#tUZUqtia(NI!<M2QE2(zsi^-llKRCZnz zG&GuK*F7z2^Y>&g|NAP-(8A8Ostv@h6h-cwgNuqb>`PR&h_!~RlVnX*q@;SM+8^${ zwptF_Zn7X4EZrzD1O!nCEFTSRkEb9nFHg8D438$NewbTS zm4G9}{@2rSC@I{>@|Z2%-Q9;>_x{K`J2^cGerP7F&)7;%Omu=VGjDIauh7yp^oN&t zm_Qi7{)WKAD}!_>H#mw41YCE~H)rcM-m0rli}g#@m9RoS{+&q(uD4ydW**n2&*N-_ zFdW`$InRd>VtgQ@v~u4JE}lsB2|~rmA|xPSL`6f>?>%(KTQ(Ga{ra_w?_R^SLP25S zouJpb4b8sqrw7bj*$6MwKKnRWyhk6tJ&b3E4?3>cw~qR3cCt);&e;F9oJ|$I_EXdN z^U)lkn=hVc+j9xF8gfpw$c8WMVauYTX2EEC{7thJceSQJnTv{ws%-w$Zz1@Hy<|v` zVSZose(wToDI%hX{O5GcPlBEx1Rx=#|8&`eF!1oW23J)bV9N{;S2j&7O-xLz z6EeO{YX>WZeOuw(y(ocbi%c1=*{cf)|Im!vdWI`lRxy_+5vDfdz!fk>5JrUA6LoWO z5Lc#NwW!Pu*T}?2po7G7(74eCn+hC`VQKbscYFV8cG^Jq4{Ksbmc84Vs%YVS`qb3- zVt-*_%+K(Jyo{WA09B{fr&=ONw`@m8fAvR;A2sertAn$%vn{u`xBohFaE}Im|2{cs zzrWsLa7~CA^DE*Qyc9*OKw(a-K^50{zsG-?)pxcty<{^}y>c+W%37b|63#Mpx!My| zqE@P^8HFjKb!zL1ZmGF(V*AU1lrsFROQIClfv>x_H`Z>x>B!bUY;wV^$lu?;8mvK~ z?l)(LcLMn2eE3S5SP-M^!!gYrG67ec=F`*DhGb^7j1U8fPm_aPUB;VWPj>OzE$R?% z*$E~=;G&E)Zm?j}Ny$?zKq`_s9{# zAz9#xLz!EBrV)0^*sIlpBQAc+s%NoP{(OD~zz!M>OdhRp&-`#8I zb3AN=PxwVCU*-sUa5R8A^857AsR_Xc^^UxpmuguU*q1Hf78n#5=-cx!M6HEYpzQ5^ ztJv1oc5;;J=ntMX?v6n1dH92KcyxQBq>f-2Az!V=sHZA1F_9Dn6_uZUAuw7g8Xpqgr zz1Zq?kSxQnKc@2VoSU2bDJLhV#EE&cPR`Eq@^bN2-HqRIaLTx>!{6Q*#SAXXTACvh z^A6AO|HxflEh`rQli@bmMdvaJ6b&cwjS z$H$1H5g8f31beJAi6%7eCO@$&8*?j z@-K_u#mb;aA$#N%EMN8EiMtE}m;l!P(lRnK>z2R2?DcW(WK7MYf?lFYMuhj0ftpgt z^K@lPJQ*T-zGwj1vH?|hq0`mPO^f&a)y5g9s>yON;>0d}n<85Gh%tM9 z&eoZ`br2?zbuZT7LJ|BSqHsiLYiIbS*q@>in<$mD4aCC-@ zL2Hx2m(7Ob(|cZDU8&*!yjvxiRIk*T^*P=Ab)mG9?=nWx>9!(U8cXJYMn^6e>d0Lgbyi-J!BdR-^KPG zov~qkPM;*%*%|PyeyL0;FYu>b``uK9+rgrc2}k-e3uC+ck&%O_=noybq~tgQA!G<5 z1m9*;w#9;)fIwya@vb~imX&O9;-{ylzk9s5+=iXOCq&P<)YpxH;!;{#n*QzGojKtJp7`UP2@mNAC`ORswx;5?N?IB(l#3fQ;n08O zol{&~Yz?kbyU3NQ8QXphde~2o3UiDLKqRKG8`MD}!BdUYvM5?W--FACi)Bu+>_^@#lmnC52u<}QIndQnrI%ESR~I+ z!IpCwfVXpOat;O^p-=HY`f2a8eiGJlAmdV5pqtv~?^nEn(N0ToDFg?H5pKyoQVzex z?;i9zy1GKauI+WTwUtJx6L>8NZ_!N=MEl8K7AFN^KJWFXlk7F!=c~|etn>)MBwi%E zHvfl7rI5k(9J}i;%J{+@ z9g{(Ze1kITUzG-Y*Bs?+ewXW&tCNkmVAoMy9i0p+VQ=^9Z|zpsb!NKg3a{!XkMJnN z2RbRdX>qfyCyJHXK1;_{YFFws4|1drv5Sc4)203_jE#*|^YQlfubhU(;VO{sU?NwRV0R-%6yJ5xMR^uZ^K4G&0Gble){SZXi}nQxT!#ymF6`s^ zJ3c<1J-F73O5m4}u&}W4#053U1On_U4%E2L`ugJFpdNrxTViI_%Q3*AGCid%Cs#?F zwd*a8K2uOL@YT9!p*2s5nZKXa`No9AQ2&HhLQ6pq>Ttgr#lCIK%Q4c?(V+=pgEw1E zmg><<$9`7`uB|r@dqi+1Ec5Ix#XZbk~2F zbG3DLK4rnA)P!$F>anWNlR=7e4DgIKad4cazP%YZUolkP_zhIUPDxq+MG(euyKECN#^ zeOVkJ$LPOf5fWixVbcn7a@wKh3%nDyU5qOo*(C0onJ&@DtJeIS${qAqAgJ zp)mH@+TP}e%>KxCSN;Pa2`=`pg=nQnRO+?B=0#65|Iezn!HewT{P;0Q4wK%khFzgK zGtaf^cjW=>W%ToVuzb8!jgzjD4L)%R2_H@l4qt1aENEiKi9zs!_ZM2+sJe{Vndf0L z0(c~XNiQ{$=3^|{RP_r8^M2-y*)n)-j^%~LQ3<&Af6UEODU`jd`HoIX2Xq%)cs*`G z_^sC@Hr{B4a0itL^20m4O~i-iLPB?HV8<0nOG-Y4-J$64+eoG|1jHv>-mqr>+mU&V zufFOCI!=yC+4~CA6we2+|MVVthJL)QR0?AS=`|`JbjKYER((#KEmivR>goleJCSUO z>c7zpZflfKX@YUZ=}8l<0R(C@C%ST%1j^o4<%L||yXzMlj1cgK+*T7~M4A)jK{7ug zWD}#sPPQ-lOy2ScyCBm+GDjTk@MT=0S+j-wETN-v_MB=lrum22+QN(F zj-VH{#nhyvjYVK-3DKuz_Z7my-4zpWnG@hK-b$&>##4tT9wDPHI*mUhC^S;NFnA)0}gU7F4^EKCdx zYqBOLYnD#!1CHy14djCE)x6^($0W-L5PTv*XC3LjSgM8b-@m6lJv?H9w6*FvI5<8E zUvGX6>Ry(h7L%*;+DtM=)9el*LcwqS90EX9+bdpP-rqx`#U|qgZ|vxEob^($YK-MN zn+l?%&JNN7b4ygu`n<&u-5t714dNFAP`&` zjD#VJ^N2^kr7eA|%41M^O-?Iad>~9;{;lgV|x*YTO9MOwQ3*TJI z$nU%kH)MCGD&{yHpV9gX?^sLtjRrPoT*K3&TY6;~^U*?w>T8$kE#EEw2tab1nVVA& z%j0&VfTzbeWpDl!iNC~(@<)wL2pVILrdBHdE>`{nTNTufBy z>zhM|Mn@k~1*)jp7gK+(D>^zk(RBCpEc^i-yA_N{u&+W#+_td$$1WsyMctS4YRkaw zvjuQ5m8vO7&0pK%dsCWwtLK>%pry~m_Jo^Q5?6#_rs|i3EK`gU!*4=uyVrdm?(ggn zk&rUeckYA$=8y(6%UlJQL4<>&Hln@V&xe#W71e#UPnY{8tTerY_~~<^$grk|Ttx*1 z;dVg0f9w04sbP)_Ii`~`i~Hg(%V_r=@Ivssu;cy#aJvvBkRyQowCDHM@1hHr&9N0X zMCuG58hh3fJ_${V@P4v9)(>RXhszyeU_~|*x4FYO)D;vI=7Fa5&mdK)RXhYUpt7=3 z3~0qJArqlMdYG=kkCTy=<*x&+4t-Z;Ji&H6{FwnFB+s{<)_oUftSj1ftqozLQ-RoD z>j>}|^lg{g?u74+DdKL%f~yTybOfOZP$;b~dNawYFPN8a+(qq>Ui9sZC>9kI*ereb zIALoLpfv;_j0?^wE{T}XDKpD~#LXyOto>mhsycAT$ z>%kMbUFJ3T;r{{>_i<L9gK8Ji-qtvqL*}q0nmK_8E^IVHQ)Q{T1&Gk+dujp5`fkLHc zYn*07d=ddcp=dT_L`yc!{%CX_$Z#%Lf^j&d|9h6HCe_8s$+N!zCg=^0j4V2CjTcUB zw!fr3m}UBkN+1?oU7YXmM^$$u7Oc|kzpbq+T<49CI{@I40*R_k`g(eez7y>pm`Ds#?(Y9i3r7LV6BN~5VEeh8z{b{-B2`#Gxv2?DG z*E#Wz&!_xAJNFp$@V}`Rmk6AZB;^iME}8F7pqIuKdzY*O#--gvnfd{HvySiXNVb43 zP7{9S%$}{K{~=oj;NE%GfNV~Wnab@QCIOA56&}nb<1SjLyVKNHu0*1_4aZ6V4E3Cd zbUgSyOZM*Gp7vzPJ99fTvwvSerA`)z(n+dbk(9Z#lVBUxEay2=yZP|U55TN;VCpF>sd}qQ z))x5gZ~3~|l>E;6&;Dc4hr&~Z68-l3Cu3HONbY7TD&zS8tGvL$!y7f?yWzmHp7nfA z==e*g;pcbRWM&1x-;b)M(BrbQvdT9%E!dv?>jBCN-vQ=bcWScQ)fy|c;U*h8MoYaNC&Z;Y|7+DD$g;heR-!F?7b1286zjUEM%2I3lN=x$2=^>4J+N3? z=%7pql|SLNh0_SSAMRhD?a;i#<6Ekn&Y!37xo^>pB6%UWbb7oA$|IEopcj-;nem9(PXt@$ zwqTM?(P}XWI*+4IiikXtQkS5hpgDuaPR@$uY;r$JAM1kGli)&-Sp{_nn~IS4?Q@LY+J6-s2oY7i1wYjWo2i zwH+BqWE#D_{2ON;OCv%ZhskM3BuI)yCo6>>xr!{EM>?^1Zz*1K`j` zRFJqP#)szvZE#Pc#MBmebI!ZFJ86t7g^l&~_0W)z4{2bJNMcf+_FxjO(|7Gql@AAn zo(GIU40TU;-wj-}AW-uV_d0&+)R?byjst#53@B;hyoRBwnVFepa0l+2xu7-4*_)mM zBVa3N&5n-RrN!I5bba!Q#`kh1^6>C*1NoU_{C++cjiAM}GJ!qW4t$sFlURRvU5*$J zVJ{sMftLC;ki`2S(4XjWeoNim-S+DdBr1MSGqQI~aiH%Db=AfuQJ=C7I|h8B07!%t>p|i1OYPm!?b18KUleoo8UVXEz-myo1r4E4v(7A!jCw%E zEiXe4n~AiUTWQ6K-m{@dhFk!qq(XQ1M>>>;8By>@$mVG>SPIfH!4x&1-uiv_z4N5$ zuB&ESlRT?MMsFP}bD_~USmCK5H3|X^$$mxLyuhz5{1a#0(2A&Yr#ev6%Qkm* zp0IZJ^7-9+!*9;_rayPqYw`=FI8&O)KTnx^#%bX%TIe4ZYYgOLWje07^`7jW#ZtAh zNkHg^C!zR~o_3lD!55#3$vMri30MF00h(*)3?^(g1$KJ4UwbH{P7i-pi9afuAO$Sy zqr^q^bD{rmK60%$u%H_F>LS3IXSB4mzD5porpdi>(=956(5VXTX&{eenwxT@$Hh~u z9R2Nc%jEfR?PO(T#lIrVfl-vuW&gzVeLgud$I)&|d6Z;|+s1j2J9F}&u@a#i-{8=Y z;MTu?JY>Y7JuaOqYh=bTmfy>DH<;tgbz8p1jV&L6Vrc?q_zUGO`Y4BlLs*xp^BuE4 zn#^Hn@Hf>U6<=T9*w)ro$(zwsc)71a@T62IFCR1HxQr*@#^=d zToZvDDIg5|T@_#y`ie&n$>UOplUolm$E2oz(*|~SfcQ7%%Z`DY$}>|b(e-6}431z>9QA&yRu z8>R+WaB}!wHCZ~(%wOX{&}7OX4h9etMN0$%8XB6P#O8u7+Y@&nHZm_KCznWn*D6!~ zk$=!gwBVV0yfkHTC0MMR7#fi_A0Uco^9u+>?W61O&MO#7bCYf5(rJ~J5{RRr`^3k9 zD8vXkNQcNGHa~wpv#sEJeQHU-Jij4krj=lBp0;~P3hfUB2!50S0~$9!KW~qQ7G@OY z^OE5sJssV>CIH6Cpv>DvzY&vdO8kxvc;gVu9k28Ymw=LERqd=HE-vom(WW3qDl7v< z^f_%`S5ewH{+|I{&8CTn=TzuaZR11EIy6F_L@Gcb6eCjT zUT)F_e)B=X{l268W@I`)+95xL+>2mq&jc z`VW5%UkScc&d+CgM@rl&j*UiV_(K8-8nZKgb^TjW1P2=fgM9bkKwk~}f?ZhHHxZ-` z7|s|{%iWdpl~SM*8qSxpnRYpeiG;MsX!)wlCrdsT3(wQm@W>$p{~Tx_c=6mw-BfOS zSfTd^JyE3W-bX#8Hvj`4V;<4W=}a6AM;e7zM(e^;$^6kVaQ+cfQ2asdV$eX|`VqM| z*LXqAWidwlF1R)r6Y6<1?{T!+GYs_QMrm}n<=xr3us@A<4`|G+(K6rg+7fRd)G%w5 z@UoT`ujcytdZ+S-leK}wO~5A)X6h|}(_@l3Zd;RxYK(k_kh^`#_+|NB5Sph8K2`dx z@aj(Uoc%yP>*dZ6tUfl~Z%GCa>S_br+SlPA+oHvE!~FE=)AK|{VT_JL zbm?!C#oW^51tnF^tH}*HGU{b!*`Mio2^0$E65i=sSL$rL#Xkw!8jV+IJtzlTB$`^t z(*_3z=Pqcjk8a{g=)yQMwt#xKQx33R2U%G?FPiH?{f_{#ie%Jvc}iGZT>PAV;T_6= zs;(KaE}6dQ`(0sGg-;-s^QRRbOs%-hnVP?mz_JoNTVk0QMSH!up_0ea_Bm6IqLg_* z&A2~CCgL!oH>UbW!5ubG2PS8CcWthKK`NYRgt6EAnvd_&(2eiWm}VhQ)T?WOzC(id zN%>wZxWxdp+2d3R463E5zBrmV$?J`@--k+ceEY;E^oPrpKYobX?Pmhv?aw6Wk4qCl zY$^{vZ4^ZH)}JKa_nN4aV=E?`bV{jxF`Zm~rv#&|65PI;jzt3AX?t2qN(v`{h_5)( z-`a1Gta$NYE|uXZD=Tv~Ns@OO{nB3-1-j~#3OY_3utDj&cOzUv(Sj>QzoO%Zq^70{ zP=~)?MX;nLJ~zz%@n$;0I3#d@=-r=WqO{|9&h3ZaMQqIIN@IqVtWxfBMHD?i`>6zM z%&zcyLQxDuV%QCgb0npeW?KHIOT*+N9Fim{sFV~@#c!5eysnPdF@cvIn_^?b_C>qR z`|6hruU?r4l#5C~fUNMN7|a?!A*67iTg8;t=k%9!@^raoq9nEy#g8>YT!vKQ{S^$g zEk0~HLB(Ls8hXY-*KSd{#-PM&6}4d{{rTw;5ZyRcvFr5o zoV9OVwBI&_k2u3X=E2%vD>ODbS}9%x=}=$1KYtgku$={ zr$Fm0#gY!IN?V3mE#w_Ye?lJJ=mn9rPRGY|7pk&c+ySFs0~#ob5B!r>G#whu{4hH8e}( zyvDds@AjyV=1K5rdXr1VE8|{ddMvgtsU$FG2hP3qzklB?jN^DecAap)BGx9n_~DxF zAFT76F5<65*ool%U;F6|G9<*{D9Io=lWAf}4`2ZIR9I(+xTkOC*^{*2bV96f*i7fRZlp zYgRBEUF{HIX1Z_LS zCE`;AwaknfTiDzLbfr50M3yiq<`6|=btIns084vaMoTAVhHac~gs(g5GXdPu8KN0~kLJ;4NM7@jVg}k^pQW#JR3KD5;0;TXt1dRchgr z)A?qnntpo^OORFOAffXhl5y?Pc z-k3(I>7lhxVbFe!@WcJ&Ss*9=4Gs>L7I$9)vSuXzslP)*oDs^RP{`oZkapJiXusKQC;G{pJj(hfA_!8c|e&=7BdPP%{u+fQ-# z#GITQF&Pt0jUmp6ljGxHB^IfH-}nX(XyA#lSStd|>MlS*+xrS#WOut)X?9%SO+f$c z?g9h0`ipNJy#W4%AOk-Od_E$YxcaO20VaS!GzK3sHgD5_{dOTuhh@0cDi$Jc_$z3$ zP^E-k6bTtIIS=cX_}Wl9=NtF&EZX3Uxq>%|gW;|IY%`M1LZ3`bO*K!~*u1>F+^o(a zAY5MPLW?5E#vsDYeHH>;GyyHmCt-i~Z9b-92?alxp1(WaD;%HC*`@wp%7>Fc;aCZhUjSA~RJOF74S=;(-y06n7?q@WJeNBT8;?FaPNXppv~ zl;bJL&DH;^*DMojQsk|>RS_1O@22cMctQDWNfBzzT1IU8= z0qvx5kp8Jv`zkvt%NvB>rqI)C_zO30-NnRe*s1Mho*CGyiBW~CztUOr`dTDv@pVEb z{&H=7T@8FVy^zpCx%M*?(-q;So%6l9bPb2JA>S06F@TItJK5DW@-WyUQ3@BLECnzn z{7jl6y^;Zg_x-oBf^R0DOFFulvJ%k`&u?eRBlRyf|1ko%oIbkUGm!gBHjgHWLHe~n z79A1MY`levgO2WwHHu4#GsGbF)X$zv^nEifFi=+BpTAxQ15z*YR6=vi&4!Z9gyu&g zV+jzDVUUjiN<|O32Zxkg1jK9KCIhG#Q|lb$7*=jG-&BLNT9SYlwN>buR&Q7a8uizY z119nnTSy?@{$YQ*N*{4m9}59Nh5;y>Rcr||CgSeKAc`U*YE~|4YlW8oj^-aQBzQx{ zia`&(hitKZ%vi4`F7vXw4|>sRP^raR45Gqe@6R0obt~5x*yJ5EhfuE}4_3Y_QjiZm z{^xqIc$Y+k7%TTAvI8+k=6na|9`qlOINggh)dNw2W$Uxb1s3pnJ9&mzpBPN$J zgbi$LcJ&{#?C^&dr4r~^jEdz83(VojsHk5FI=#A$KWu}GsSU45i^jzufT4s^qPqd> zi9rQDM!@}W8D9_=Ig*9q0YaOC)M1a?OR~72CCrj4)MPVT>mnlpym1T}rju$gz-z%) zYGn)NP5Joo7_o+zKZP9rwiORvHFN}^{5`(--_^`{b09p6c?Thi7R=zqF?yTof0l{~ zm^!5eAwf?g5cy+=P{MNVt9)=l5B;OUnCOANGThVGC-P}tIz6mrkQqzPOGRBnW9F&c z0h%(BIEVA**wMC_VyJGY9evp?=U-%@3M5>ymi^NuNNut-_9~-bs289}^MQuFB;dr`b-bkAbRiI(m z9tT4|>x_b!qX5=Z@1E>-A`oNKkH#$k2GLc9HE=iZ#nFu&9G#uZzX6TmS1{JEfocR& z6$Zh2$m};4Ydp|_?X0i-LCrPQ0|Pp&Ac&C>4#Bsl;lFGDF!wd^jc#02)D15P_Qq{j z$ub0T=}}PgTf^oXfPtZr7hJ zh_|@xoY%xJt^t>YO{?=&CIM_M^XXo@6(g_D^(kSBFjICCP=Urk8`=2Oxm{LGtx|t8 zCJYBNUrw+;JtqJZwi>^n*$13g8Jx~| zDD4pAhuYJO9avr%E`gR{Dejs0xc+a?)avBjhe$eCVYNUC2om3+14siKBsMVv5*$PxN96WoPWnpJ=bpSfBU0qy0Fce&P0k_(Z>@L|AW;$-S zC+kRwI+|9R*YNcRbz75DU~`hD+u1rkAz|GZu-RkdZT-db+#5i31b|6DU7TLzx-v1o z5t>BYcPUJw#;5EglHGJePD9hKB16)~)p>W6)876-bZZJyeyc2UI7ISfa+c^Y`|@bD zPKh158aE z$@f3yDPW0r@wJK)fK>->)9iQWt?>*QKOwkLmjZm$2b)HCe!8!(=reIM-tZr^Em4C# zB%MaRfgIp5u@Mmn@&SCk!xf4~WlOw3fiAx5Bt}Fex(1|NfmARH#Vv$T-LRKNg>P*7 zvR*rt!WOvkGlRnOPJ7-YGM;VJ&Xlh>IW`0VjoFv{$XqXdofa9Rbcu6X=us+62n*|b zBJMQ`bT0v^Q%wrG{AU}s(O3iY)CyOR!X0J}5@5utnIK1f33lNQ>@Fshz=ftRxyNN{ z5l<6n&Pxp`c;N>pxX9`1FcbTQE?Uzd-h1`bs1?NB}Fx3DF9V zCVRE2AuB6e4izA9rAuA{k>*1}CI$Pa8C3Cm`-HU9^;}UKFS4?;t+gU<+y%j6M-{(x zE_9&H2*aNb+v|`JmrvUT2HwS|#wA}boO>n(ajzvn$3@=CduohmI%{fh!H=K&uYt2) z8#WyTR$(7y7}giPPlgu&o%XT8p$k3tbv{`1sc!HddF*}g>pT|W3xryn4YBtbUmyNu z+TDiYQhkfirYHV$^N(b-NIuh*vZjnN?Zw`AR^Gs)kQ&u#5U}y(fA#99#9tug9XP%- zwQ|8%2KKUTzvvz-iwiyf;pRk1Vo_CjDU!^ah)Kzrhkwf6+@i6g%c1!E9!~iP;dQ8844E3Y0t<|4+Uy0XlQ#cAz;INMZyzGjky;vtos8Nsbvn> zI|*V3q!O0#An6Wu-C%x=LlCL*=?mpC-WR1K;oGR z94e}+7!#nhEgAw)U!hX3_1Y{az4Y8HxhDtTX%~r>nt8aZdx3Lu@zI-U1>Ou!kFdQx zx&QtBy*^m~BD(W7yw@B?OJRAg$Prc_8EAW--vBdliV7%fJYHTm%;I<0zz)a+=g}%e ze)-)9bNQt0w9g_dVTaZPf5Qu2hhKJTFq3ka4W;3La78oSrhDaNshV~uTF%|$nFK1; zCZ2q^Z+ZP)TAr5CfQwrj;2bX31E*Mbo`P~6?4vH%mAr*ZZ-7_XbP!|WS2~*U1kI@7 z-)4hYFKkGXiA6VioNKG;nk`u_fHKJ*NBO!|jy3x+yD9YL;VLO9=?ZXxvVwi@bD4`Q zm+U0{S3kN%XI(Wxk)vsLK>~GE5q&QeXz%2MJg{%#AaqkmxDvEwKndCa^V3fIt4(vV z+$a2F^Q)VK_6uR}%a=Gci6TS3w(^?l@1E+0>+z&q50dlQFYB>YsKBYl7avb9J%9H_ zrw69#Z@!tVY^bI$6t9%6fsG5l@m~oW99~*#kK@K>0LQ47$*yM_!!3l0JFOP|0=URjNkU6nWul|e>=9INzVDSQul#m6~D>w}Z zK3B;Il()9D+*AX}UH|96z-uVT_znPFl?A%;f*enY!RnKYMYRTmV+~uLQ!bI)W@e1p zHHU`Z*@B(=B}c+a?bBspI4%xS9&_>znXq?LALzY(s}a8%fYKcY{kAg}&T@SPj#1@^ zUO&;liuB1Sq)AmHArX4{3+ug(Yup!=s?2LgH&@s5CXjex1>ws-Mh9a}x+fsL6bFEn zT}RM#I*4@i(%+L6)>QRRWCyi8Y=*XSy$5rUZE<-N}vHUM!OEqc%0yY;C5S*48x+)^>-bUe_ePYSzm!+ zF{k=4X`*LYDrLCyDAn6o+Bch-|{n~ zs1YKloOq;UGrRDX-k96d-->%oARWH=hlVml{D@0L3Ndi5qg#(dE2Xt&tEr9j29 z15Eu9Zrk}weN{3<2K|JHU1p!yD60dsoDv7~M)+e;jmYVVxv6R4RHd#L(LL)M8Na2l zH}hf5Ov_Tfqeg-+kG)XQI58<*C7ZDKrU9r}^tn0zu(Pu>hb8e@z&8cH;Ad=XOfylc zwxfO4R){_5ljM$Q!tCEaG+&am{Y1VhB;Fdi7NE9k?>e(##1=4a=Q0oiX_b>(s^?Ua zBV3)FeqVXbUv<&Z(_bvNt2?TL-X#kf`93Gi$Q&_zvpc#*cb~!4-JTx=?0vE0unY8E z)NQP3ByoyUf-&||lr68Bk|zQzWbCKGJ-Q1F3}pTrp&)TPa15M`7fU#_`jRN+9cIwrCAXP$5Ow3LGyYW@p?L$&R!cjKZ z9E#z(Ctp4VUj%z>8-V-F3_{v$Mz-v>zll-zH$a^JEv!?$;O5!aGhXw{P;*gkE~G|I zPPm5Qd(W7v{*D-1Bq`KnOp3?oD-JGhTLm?HxgLm*+}P1eMe~Wj#^Z2KmXi;Trbg=q zIWHx1ptU-m2NyqKdLnYGY1eu-#UU8qDhf-Er55^zw`Jy#Zd5(yL<1r`=RjTAW;j0w z;r}%R>^Rl#+;fZb?^gtGr`+Z27@j`G`754#Ik+mjx6C5pQ<%9me%to;%&Y%Bb29tm z(d_}GuOEH&)Z8CYFU=oJK{ow1??{33Kr%unCByz?>=rGqGaaLVuPXvIFH&F45osYQHmNmpM#{RPK`XR<$%Gz25NDsU`} zijhYb!)Utl`2nFXTgKenTqD8w6V+!#>^EmSji_7HXdj#{Vu~p0nODq!-C_p}F+Xd+ zk>&wVCWqqK30#Pjui+vj6UhB4fYUG~JuT7+XCCzca?LMLxYv?40+aGn1}G?lPvuhV z!}`X;w9~DW#&O>Q!^XD@45`SpITjHSk&Uvdwm)Icyf`0QMkH5+-FbRSrbWRW7P=ASEauYUju+Z9q5bqm|M9LDk>Kp%qO25X@Ckv{_Om`6K^>I z9MxzQzvd1)4n933KJm3AR0M}V_Wy2eJuk*Y0Gbm!0Pb~oN0i^+N4J%#*I9wdp~Jn& zGj$vN_l@Er=sZt=1lGQgNB63Hh(-QEG9?ExzfqIW(-R=?;%#p zN8ciIwfaPZn2M@`{M~Wnj<9>FSedXLQ1nIW|7~Pu68*(EW`Crh+#JW9e}#wi9Mr=h zd9?YnG#}&KU6ZWZ!qCE;z+CkpWBd#f2CWTUK|4C&PDL6tg^v3p(cV#QatOY}iI-uB zHL|S&qlxD6m>C_1&WSARevsPlfjq#LXwbLhzZ4aTVBq2k%QoY_duwBIcXM%Zes+fQ zb!sCMOOaixezOsre&4S}aE}jzV_5Aepr`YA_mDVky-fLsiGk6~1=><>ZCxE_ITegu z?|YN$`R*)sX@#tSms$2rM|Ko!yT>U+oHiH4Yix7Ik{1I6P&(NS3R4FusHqnR02~Yj z6cPl_c?`nIz$ws?6mna+CvDd&VKk^3Ka~er-C4ojD7VR=Cc=!ye^3cE~s_}G* zxLYDuj=R*1P-E)x?*u&JxOo7QkgZW=K>X)<_hOnFMfhg6M;nMq{d?5c*^E4Z*7+B} z$5_&qo0rg$1aO*FR%xFe1jxbh4sZKVgvixU4U5J?L^EJ~hH9}0g4K_6G473i{YE}s zb6=u5ktPB{F`o7t%Si)zwNure1CApa`vMKe*m~DwKH3w2nT>EBTC|Rj*umeuM83K1 z@xzBc^n_dk#?$s>%UmyF)@L(om;;nLv-sRH_+tcrL`pDVv%FF77(*2{t3`nQWDYE% z?WuDer`h+9;lOcxdMQdK#{TqfGIMn5!0pDs8CEH=0?5|%;GiKNzFN@3$*2fB$d!D9 z@$+BnTklvr65Lx5pJFX&ap)(?eq(MnmoJHR0T#)X)JgkMeqIAciauSJc{WSP{cHC@ z_u~0J@V77)Nykw~0aUyJHpw^fQ@PrTn1!`off5gJ_&*BE)xE0-4o2(9NHh*puwRxi-2#D!;oIXV)A(dI7e35DVSmO=bu#blWxn5LMD=dl~qTqm+W~FMHF*lF{eU zjD{aiWh}@sCSCy#1GHqW?JyeOrqD~peojW+jEnEbAc}m5RFnFf)&-1!XKX5+l5dOO zyu^Td{?aKjD1|Z!2eyc9ORdh8D3It3ndm+q*|h=rI@X%7di$`yo$Bd@S+hq%)mrY4 zX-F|@YU<(cKMM0k45)i-1=>l8jl=LXkHT+?Glp2qS%ef6-+E-+$#!BJavK5CvqeBa z$Y(G5yp`)`Xo%Jv9+gDqkG5p%^nYr*4sWXe|Bq`Ydz5kA>=lxXx;BLd`~7~sp0DTgv94U%mumF3`@g_xa1P;p z?!O=VY}^@1ZQjVAe`3(!<0eJ+H%b0Uh>yFMq=3K%{rt?DOYw;;+2IvqATDs;>#Xy7 z`Q$=!1IRg_X#z^cY3SpVS3z<-H5Iyy;e(+@xzo(mXPd{u$uBCX>dQ4(4wOY zZ`cY5=)SM_`6zhYu?O|t6l*N)h2v;4Yc?+E=VkpIld@ODeu2V^ii>EX&IcAMF0q6AEn?~7zN$&s_IS9jo93Fm%)*8R_e0PFf$CL$u*egw9vFi=KP*pGj3 zxO*jF89w9fl%M{>-WlQ!L)PUfc28tZ|9lr~&wP?cn|dNEa99D_x0a3e<;gE_Je_d! zosJW^OcjB6n2g3L01b-pH5kgbbXcwOJw8$m^;NQ&5}Ci?zqX+(pVQ?&+x?C0jj|wy zMuqz-76*B-(`&I5Nkl?U?Xm@*iogAL!-xh>po2Z4De>P+iehvXHECpDLMXYJ|%JH%(8|E|8p zEY~=VIR4#x0_f3kp+%)#V-0s~CgLhZt!#{{zN?zvz0j6o0R$dPUli0(b zf**X10I!#6qp9OlA*6RPISn`m(Y4jRS0CHPdHc7`=ab;BJPDx!gHA*&1)d5 z8MTG`I1zg`e#c=l;+rO(j}>>}k11$s+d+3zwtsk-Sq0_x7MZIxWkCL%+-S|vO`D2l z1sxnq*-(5E!&@Z*@Bh?vS6;c-m?8L?`Y{qk}MQRmZ08PA&B{j$eH z9FXiWIS7eFIR?1F6ZW^*A9Eg%uJ|x6MV;vB&#oZz!F2WI4wWU)2#)E zSQT&$$jqCb>q=-`PHv&v_Qgb#g)YlKnqesldcNWxIJWCu`}#R#c{Vp*Y{lM;abInE zU~z-NdnD}DapGsub3HKt6gxBh4-ET3Tsb1T(kB7k`N+LDH&0tCLQ`5|uP4u2)5ldA z_1P^**Wdl$G~uF&WbW7u?A&r79KN0AHH7{_YP~pL%X{L^+oq>AkCdDNg`gGi)}18T zeb5{|&4T%>s6ecL(a8gG`l{wWv@hE*L^-jwOM3%4TmW0@{Pe3((Wr>>+Rk4mOVjkBqCb_$ZsFtO`-K$j3;Z#EUMq3kGQ_kpWk%?tC?%EA z2mM2t6*!a|zJqiiPu_kHMyV~Vt;_dzy3=bnGm^=O=Z}qnwkO-$-}nDAl$m(90E&Ij zK8Q>d0sY$%8@d?qHO{&9p5TJh=ZDQAcLxcGtk}5aZ{){+iHfy*VJ}G38nj3aISz8v zz>grz&mmjnOcK;D;m}yRn1c9N7VY6K-eDJs)zBO<^xt(Steno)oD7@ULsd+#KwrNt z_s>Z_twm+e(=8(wuap0@asI3~KD1m15FKi2{}XxJ;0`)XA&*t z*1e<9k(l=Rd0EjUVgT-jDuh;)j)EGYIUX-;BC8sxG;MTMa=fj@n#}>cSn{ku4usgf z$H2OI^5)uiPHj0&l1ZW&Uf+%qalN#GM0%9RaxV#%bz!GGtk{ND%b{z>wl6;8X2Egq zEAIP9fjDL6zWr1<5Y4aw5?BTf?Cp&wXRyS~*{1f?47$bKGx#a!t}jie&05~LBEa5i zRE%)y8c2GM7l!CBlG+cjZtssT2%7(jn+M&kZaH2f z=)Lkvd4g{yM|@mdT(svI&xmz?^ghKU+*E6q*6pWdN%F*elKZg)zKkk(E{?kooZu9A z1vaJ5S?O1bVP%!E&RP)_WBOh?pT2dEj*gxJuVTl{%-qBAE6(^!BnA@@6>z5)svHtp zjD?o43k+sgrUcX(ng7yC7?c$&2bt|7JU)>VTc-BE_<7}2$Gq=Fa^bCze2=fZSp&(> zDL8y?@8O&G6Bqmhf6iPCR7;zN`v*X9Kg2d4n64-$UZ@3O7iB=59}^Q3yJR+ z6&*iK^HjdPyHPHWQ3^v{Y+=v*@??<-=e9ILw!tZ3Igm(#@_H>59!EHH6d_kGf81{g za%qMfhLIeUJnLxD`vsdF*;MNAJ6+Uc2+Bx(pMw)eU@|iw_*fThXD>^SB?euvOuAME z8eAfI`xva$tbM0T{@95%A8nqoJs=Tvd_p?ZkxY#g7;Pb<8tEXq7!#zx6F)YDvcy;B zpjG~T>05h>zBG5v6Ur`Xfkkq?-*Pt$4~9WOnD(izZiGl}=itH;5QtnDCUL>ro5Wot zVU=Xh^2`o~GXu`XREceRL6&88=OyzK=F7FCgo$X~G(jcBHg=5rmVnQIObi8573s6% zkD<%R!K73>xc=mjeU2Z+GWd6chvCW+$rF`}fguF3c)0;RIm>(wQrw>hUKbnJIETQs z0*}QtLHDCK3O;Kr8 zN0CRB&A;qML13U$`Pr zqUasRPAp|PmuW;o@Ex}i88SIV6@Nm4g{Q?agyHG}FA=h;IMg@Py6!nfJYJZk?kvjw z`VB{xl=3_{BPWG|Z#zg4>#+kL=G3g26-Pisd5rW3ox{&@uPd{D?00~}Etlnn*V7UoAPhZowC)VdvES?<9!826Xn z)@Hl$5Gjyx{R7l{T^Ka{L;s9skg@a|F*3AzlV=<=bUmyNM$cias97nj{=6zmf24Lj zzaXe1-RuR+{L>_91R5ZN^?sRizX+nV#gp3wu9>&prf_C@o0^p^Xc_cyNO2;EgF6!D zZ{45x3^87a?EMRgDJe&IZ43H@;Lub4TZoe~9@GV5x~1jqZ5Ou)aNztijeH|28?JDJ zgv0NVrTvtgA-;sD%?*nzhU|wq^hvstJYMOqLgEi(b4X~oewcuvN9At6a~RuJZv^x^ zy`&Tr0l|-*UJmMF{ze-l5i+K=7`)pWh7vsU6o3eN1E+NU#2zL#YQECM6EP+v0vTok&5?2mQsiY}JXOS>-k+!J~87c1m}usW7J z%773}Zy=jbh0$6XyCOxhY&2vdBe>M==0Oi&Xq*nR{d*s9mGK6Pmf&Bs=t|axm%Lgk}i@4lc29GHsZ(*gExr zOAeRaL;V3I|1GG#CJ{#reHU3`b?EaZbPo$aNif-Brl+4S0C@Bg2*+;=m^Gx_+P$wm zXb}DQ!mD_KyOwhZ96ajy6D&bh2B9){j9pT|9ncP`apus1h>$hE{a~{fQzuS*ZA5w* zW;sP-&oZ_5V5C*txY=23RL!R;mB08lhkq>?f?h8KAu5==Kwo$~0Wnz234b4A+JZndPFP35aI6{$>h z>~yt%dvE}TsZ6$m7Ijq|5(&!Ka+b)0^~u^Qb)gJ!AD*a!$LZtSoa?1(hWWWX%41y5BiEZd3kwfe0+VAs;nnCI5^P2jSUum`Xu4J9b}ta zYl~}&ppp(uQ2H4?{bUPk&2#t<8^5>%7K_$?DCOtL_A_epzpS>)g03}lECefcni5+Y zVhp}4I!4d%YOMXFUT0|}{Zd0+fZ#}}Sq*4Jhc_d)Q(OI4^Kw7Kr0FT} zx20Bu6Vw9+?hs(OQsCMcVkWvGrCUap)#AuM2KV-9x3vgsMcV@y#4Uj-6DO&OvuS>k zuz$t~>BQD-uCb-;`lpAa`qJuYZ37gbtryK5o-Xjcj86jMs8ZgoDpvA4p5N6YIpaye_j+xLx*s zMEXOX#LkjIt-Fl_0Q$d-*4r{AJ(hpofiu?o+N@^UUc=q>5e{f}3%8e-M@)KmQeaa4 z4TaqN%DCjK!RcbhPSrr{JDd2}PZAk&1(O-a?eIK0QbkZWYnuJ-6QB8zpqfXXbhKlV ziUlG|xM$_^e=(vb+Mcge6^xgFmj9gQ5jQ`NhWm*lNCkE=b^hHQ?u?LUi9@VxO*#1E zQV;iJ1T|fF=?3<|7`kXGY5&X)_?W9AMfX%xR91m!iigdo*5hC9XtK7UAiTHsxKON2 z=lziP(GquiCJXmK(i<_IA zi8(6t8k1n(bE5@m(dKvpe0))n!-!=qW!RJ~jC6E~kz^62J#}g-akCbI8A7*Sy7))e zX8Z;?Tt}P;4NO_>0gTe6^0E50|85O6Z&c8`KzC*@G{VS@NPz^GcdP#()9<$m z0kqPN%jEAu!@^3A0hMN@MszD zcgrFZ#61egVZkMV5VocA#P+PWqQXpqrJ{(GWv9|69xM&wwR|=JLW@yn&(!#wS<5X? zijmW7?V=^cTaFfN*I}8yX4fh;kxT~nO|`&R@g`VT>OR4)3Bg28gRd`h;rrmo%FYK7 z=OB%=x1zr{D_2pLv2Xxe+DjS>rPy>G^f%5(pG)I5&JHVan8!5CqQbm*{k4Tr$H>9 zSSxL9Vlw#(Y)Zw78!v(h#Y+u|k=DM|EKAfkaIPh=eBp~|O)TPthwdE#?+s#+DJh8L zK}5bOys(1IyI6vm3OzK1}3&OEo$-ZTGLbi zl_J0;SGhJBL5jSTV+KZY-d8)rSlLw5-nU!zROe|CS2Pf4DB-agCl@A#+ai~sgxbcK>l29!l1BJI($l5l-*`7^x=kUQ2M}{7_CuLiM((?8$^qy%X-%=H{kG zo@(NBzOM&FjjR|~J64mf*%|L9wh;LQ`Vib14<_piuioJS^5X#n`Hd$H3oZ5}fcVU6 z4loh(D_(JmH(%#mWpGwPq)lsng4MW*)$^s#M?fZ)Y3H{GbRt`53h?zFk>k_P;Y-Cj zwCS513nIJFJ=Q&D8dAEy!>n1ids!%|&byaI4Xt^}{Wwf1?1(dy|kfsYTUhl>~o*z-p>J7%(1=4+n~iF*mqr!;>u0}kt$_*K zo^ARl)YrcfPi<7=+$aj6wJev-_Jr&AunSwyUeW$=uqhxw2%7rN{4=GBiVDmONaJ*s znQc^i2bUL-l!lNpdp`7U02FmI*oQ-nhwRK<=L4G~B$LzPXx3t2k2gB3n+{;Z;K1xe zau+J7U9&=gjcQL_-;J1+A;`R~1Il4v^%w!XG4d30UWBxggDfA>{*Y)u!^{Dx>q*|2TK92&c^^8cgQf4SV;Z82Ta8VVCk2CX)otC}Hl2 zOS8DJP}J6?b#TB~f6ZZk3J97Ktnj<3%eAgl<7+~KZoSjo94wGU&?47x$gBc7c^?Fr zpLPIB;Z;88G4kz0XnD%vP{wwjgwi8nRxDguT{Y;|k@*J(=ZM=Fq(6*<`R!?=QuaRf zxRuaHibEhvW6Vj&{K7&eOD@V3GI{6NB9Ch5YLg%E5^|!Exb@o{K z2hfajNw)Jq+j0O=g+`s)`JvJeCg@)iefM{LDg)8K(FB{oly&T{eP4M8`aBRSJ>(bR zWc=^0^gI;SzGx2$J1-A!?=t;y*4{+kzd(1jMT&3=th5-5OsY;WUSp1Yh>gx-SZNk4 zeP#f07ti1h&);nqe6GB`N9oRT4f|OLuFxf(q(BW$AIgyKO5|;kvHJ`CS_UlxQfz4Y z=3Ei9F_#(-!Mkuu=Y_lgc&>tN)!=1)914w86}?tDT%&K3Z`CgkU$DyEc06RWAktc2 zuZOxZc?=cJTu#Z(WK3(7^vY=?YbE5!RET-`-G20Q@nDdQSt2&%4jF>k5WUH-?9=Rn zM~-hTwWUxWG%z|^qvM$ZDnws$3U?xn!CQTgcoP%6x9@-+KyxeP7XKOctzCgFwS!uo z9@4IThJ+Aq2Jz1CN zwzISI1I|fibEYYijKr4BE#nOyEVyFp+r`(Jwq}|FqM#7? z4}Fpo*w^x)J(5ZWE5yvMySi3RxAEV`vt{X0jyRwWO zm1#X+)?N+1jJ*a6jql|4AQ0_Poq_yAzd=A}%!fk^-A1GyJ_`Kq!3sd``z6T7jVHhW zLn@dCy`rb*NrgzM!HIoVp&+(+oCM}G{($6p4e$_h4*XqA*J&?SwbB=K^D)yf_4-8KDW@Hu;E^}?abY5RBih+PWj;o z)l2{0!FMvWa|Ab%Uj4PiZVn@P?n#$?I6ngd4PVd@Ye*=Nqpy?C?mT>6aTF(ZgEY_V4{d=~fgDvk zA%!tj3~|M3-n=HhP@|}Zudqef2lbsSEk3E-h@{{kBdr1pl$DT{>TXuYG^6m4kHfeq zE0=>;>QqB&uk(n`FRmv@gZNMN$x&l7XLerGSjfN6=P6x2X3itIrwd9-O3YWIz?9fzQ#B?O?ENK=i-MK+YDMEA@cbVuDt1d+ z-!wKhvcS*Dv`@Sj_J6Ll_O;0%10OfrahhsHh6=0BO$y6+Z7lx}G80Xccn$xE^%E@u zSK~7J<41Ad6aY$nFJZ9sXOQvYoA!DjCp*M-bAk>xn-BiKx8Zs=RKTOg+YG+Cp$Iz_d4hNn1J!Db<(#~A?Ezb4g^xz# zdBrKK30qUaJ8!x7ttuh4;uN(@*UeIDOF)_U^j%)w(p#&Y>rOSVQQ_Ig>UG(Y3Tgup7dy>}*d!ipRM^QAy zcU_WuUQg+(tE+SNpJRop_pk3B-MscB;U<$WXTW^n4>6(7ddtpl-@a`E^1Pb+>?A#! z^?D+4S7kK538fr*vXWAiq?HnWYti`XpejhNO|%<_&k5{;uOfm z?w1nCxkQ5Rf~o7KzwydmMQJFu{GmEKu`ZYLr^JQl?3I_h*;?3bTXnUYXeH@~g!h)o z3bgN)2Jpb}owEk(4>x>TNiw{0(G7C{8_@UAHn0b8oYKo*MUu1lJ zeWhjK4DBDB?D#iCukt6VsD}&Vil=gq^?OvLT3$z6zM^bF5-$g99Nf^)pWu)lZ6lh3 znsG8RGBRy{=FaG#|Jh@p;Wu23YQCC9{(t)cq4ioG4y*64yRD;>#h$@oAp{D!CfZOd z(a4AxhO5%3?)U6hQE@&fl+NDbwUy_qSbL12&j8p0XTblyI^Gs>&ZgazQ+-JQ!Xff7UaCBl0OSB{4Oa{HBX@KGN zruUtK9Hiuhg#{Y0y88)zmWf7Cm3GjUcGKQt{mO>?R#Xt&>U&WnsQkm3Ed{egxh+WS zh5G#b#a}AS$+}!Y(Zt<1!R4Z)QKrolHAs;^J~_b}zMY^HJmN`_R=v8aZ=m;J%zwTI z-wIDo7C-lQAT1lU;A*l8iL#IJN1{FgMOg!MeYxJijKd%63&&wGf5$wRlqm5P6{A~t z{+Yb`BvhM~+3^ntmkKlgNQAHPARhZ7djmiIpR{U}in}Qn9O6N9%4a6%Y+)Pus89qY zWjqxL!{OK5$z-yZkvMpj!EJH8*Q3zg{n&rAYdKtMho4y{xWaxZFmT8G0bV)J4KZB! z{v<$wHKvL?F9ednQ3M?^eCHGP5B~q-D~rx1JTjbbhP~DA{NBHW@5;haQM#vCDsK_| Ef9U)dGynhq literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_tornado.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/login/weather/login_icon_weather_tornado.png new file mode 100644 index 0000000000000000000000000000000000000000..7991621fd783527369c4b3a3981fb830736fb3c1 GIT binary patch literal 37188 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_backup.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_backup.png new file mode 100644 index 0000000000000000000000000000000000000000..5ca546c49eafffbb73d1f11d509eb9b489d18704 GIT binary patch literal 5973 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 D70iYG literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_business.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_business.png new file mode 100644 index 0000000000000000000000000000000000000000..e2eaede308a9beceddc0270debe446905abaeec9 GIT binary patch literal 3767 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_dsm_apps.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_dsm_apps.png new file mode 100644 index 0000000000000000000000000000000000000000..434ac2671e79ac2f87164d52f160c4871e7145f5 GIT binary patch literal 5446 zcmV-M6}jq(P)x_jFgCITz5CTM)N+J+pE<`9ezX(h?#RXsS_Zfd! zct)E$#^^0=%;oKW_+d0b0uFiPyHeXh7;eH~K@j3+#KkmCSrX%Wu^Mx}lQ6acpO#93 zR8R=GR$Y=xo4(S|QGwA)nW4 zBqAsw0+a|Qw&_^{1f7d&gPcd?k(j23){vd<`Dsm>xIio}e1s2&=D5Y;8=%sJG^E7eCM1a^04K08(utpqRfUOCb})(($mww!Csqo5 zltjM=@dtR+Y70+#~M=LeL=U>3S|hvTtFg-lQ|+_PFNyx zqlkQe7I5#>AZeF#4075L_>Hkjj+Igi0yn(o1P4`94q@Ifzs^YyBP2Ar#c&;nu{ z$O*txW4M9d^%z*K`!wlMO0h*At zO>E5L2*UZIlavsu&WEidvtfJ$*I{Pmk{Q9Y<1f zFZ2;-mW*Ucxy}gZ01H*LtsqYgAy08T4)BQxn1wE}mcLJI;G1eE##GpHhK z(}k#VnR45PHhYlt1B~2cZ4+*#1ag`Gwd&`MH696BSX<7l`48HITP6W-N-;Hrfax8G z^wB(NoDzIC#j>>_*I2E3n*x zF+2rg5Q$d7{r=xvnQ0F2#d4bk0W+G>KRu7a)<`U#)r)v8Sk7W!INE0k=oAB5s3!Xw^?DslhJlbF7;?WL^`37fWi11Pr zGGts{1SXt9C?j2wnc=z=3y&t?fVZD$?UWN|&6Psq~1T*1rO8{0d zk{GV+Fm@nU;rtyI?E?`}k%$a=xQz-g8Pz$*00#YCR|)`+>tuzc@dcjrOV$fjAkP4K z-9hA^W~Orz2pC9!E06#!MW7PlDxkT;BUVBLtyyEBet7*EUtFq;Kz&L}inh_-L)oMC5s<8Tgqc;zW@M z1CmHV65h-L5eAV)&ciFIP>rWEz9c|rrm=-ls7l}sK%YT3&za8gO$~_KNekQxI_Lv( z_cB98D??EwMxw_vjsYux2=gwB%xQ{JNi9Y0b%0p?kdx|@rE^B$WFj3^$Ifb;WTCS- z3UxkknDSg!;fH%FgXh5Y8qI8oQag#TUIUn4%KV05IXGpoCJmn5uc$&u8R}?oEF{E{ z^QuH`s#ud(C(4Rof~S26CNHGF=j^G4x6`1PA0Q_U*=bn=`8*Na!jQ_EOc~yQ_ubl- zX12^K_4TJlPTm!q5MO5@dDhi|FW{w|N8~vm zFAlx{DL%B))bXL@3d*WUN>c&E@9YX8+B3K+y+8yj=llUg5B(mq>eII|jPRv(dhOy< z#_}S0z0wxKC{ALx%!cEF28{Xu0deqvaTsF%eh(1a0Kz_|5E{=(?VJG>*%kfX8b1Ke z?|)&>2kw(P;(2zlg@ui3s?%%q+?YPs!g%B4}Wv-r|ajKg1_u$(1 z07kJg_iL~Jpd_Jj;YDx^=J9c+F(1J9szd9Az*OExghB6_=szUYgPT|`rWe>ex=JVKt}?Av69%eJgg zNpP0U0&eZMb86(=Y?|cM#kg9(L&!}|p067*w|+En6Iy}2VKaud(k3c{$wt=V4ouuF;PhqqJK{r9F*tt;>xG_v<0s>?8EafjdIx;f z7WkISzr6nKvZ{nbo+e%A5=^pM)dN#fJup-~h$K(@=QI2p!Y$6pWChIJ1(t}4Uol}g z?33?c=?qy7NF|x7DXCZ7<^zV+k{&w0b}czu5ut6q?9A6CBd<RLW0xFc4`bbW*&{h8E-2I&QZs5-wW&JlsMB%_Q+9ch6`BV5Y3D@iW^@+h zkBo>s0q15!K2OBEhvvz1w)hhmUuy|2CIVlEaet`D*-q%eOG62*^-_zBk+--_DUW3;nj8Ot67Ph$E;1Jg~9DDZJ zXM^XTe}3tsk3RZ>**%mnQ%Y)v0AGQZU!T$H|1TDJhc>jSlb1Roo`LbS`{*HzU(`k3 z$1w1MM4X(WoP+m4rrmRC=yat;hXh`uAD6n2YIxzazoy z;IOI^Wpm)O783BToAj;2g*o%gq}u3Qst1Qvl~_CBAx{ku1hrG6eq_R}_0$IYk?9vSOE)y_r82qQ z#n3j*EfTH9BJY~1Ddqc-`Q3-HLshbxB*{*K{m3+{BqBqcb`<9qxe%w|vlai{hadf0 zwb>eMb!d0~HsNjalu#N)SV=*CW4>|YSwc} z;LhLJ{z%B$La@IlO;_Na7j#FdobKh-)xE$to{%#@y>|fy2w`zZ(3CJVYoc?FMm*6OCR0#%O^AQ`kf*&@$C&XxBZ>Ig}VQ{u3Vv zucNZr5B5C~*$($oxPD~w4>gASkui32G=Q7p*ky;_?W`9%Trl>{o(~GNG|Q1|8g-`jI6Gw(?4w^&_KJFW8$Yas9{=>QiI1 zp8p)s)aV9#tzwf7>`4~);qiy@ zJ4VXteq=f1v6&k7Wx^Ju`F>=$N6)Ow?#H&YGqwRv*4EB;g~Qgp5lRAE_m=k~n}9sR zv|ILP8U4)3yea)9pGy(z5|K^V8p!7ZGTQlj3JHuzZmTk(u|G#-1$AQ7kBn`ovVLTw z^VP^_y~y;SADPJaBdcrS#`Pon`+xdrN$g>J(kSY?YU3Q2(71kN`aU8|h{qmzJ=9>z zdPxTdcNFi~SZSz{4jg~*;%~Q`Qd$Hw?FxnJgxo}HqJX=S`jN4SGO{El%Z28*40$hA zZ8=C5&WFTVL$wy1w5kqaEfFks^8>Al3p;X+G?{N%RHoO)ZPkN50o&vu93c{le%oq! zstRV>g}`>REtk@{3G6!t*`4kE?)D}Nne$CUJX}m{cxt~BE;-?;%a&W+;b{=NhY+FK zZsy$fBOBbub%?e>I3Oj8)dSjJ$Xo^@q7f%ny1&r-KmFGU$qbp|JKFUldv)`V%BvDX z)dOMsh7q@FikkG@^$mj?K}eOJcUfgCa6yU}uoE#G*N@D$pAOCh&QjE!Y<_o4oD->? zuv9%rT|Uq@+(LEQ_XcyB)iP#Pfoh(7OS}nKCwRY%PLbdO(c>aW@*1s|&RQx0Haaej{>~gDI;ABI`#cndYt|T#Il^A8=&5vz7$EQ}t5K z{x|tRr6stPj*QQmO0r@)%2^93>R1?yr3Od-j4anZj8*)iW6Ic_jfB;6%E%Tfv>@PD zeiECk51H?9i;F3iXPRslhTUhBu~y-Zmw+uqT^m=*t5g1ie_Mr($J&Bh>WPP{2l^d& z4IzAe1tO2Hnr6?k_Tbw00LI()agfRK;I`lvyz}*c{Lns)hX5;k(n3#L0ya&7*On(E w8mZgj7Msad!TrN;{N8Ng#go2T<^Kd20Dc@*eVAo4NdN!<07*qoM6N<$f&$uPU;qFB literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_expansion.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_expansion.png new file mode 100644 index 0000000000000000000000000000000000000000..c13cd52971e40da72b8957b8a62f44d15ef6335b GIT binary patch literal 4339 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_external_devices.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_external_devices.png new file mode 100644 index 0000000000000000000000000000000000000000..68e06d6ba8023cdef43719482845de3808247880 GIT binary patch literal 4126 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�!OCnB49ko3W7yc#u5rWxy@QHL|z_TYR92%cerZlZy1PYR4?r5{E zoHm(N^8R=dXWu+2Qo;iq9&3~inCGy-0YfnBKg=cvXTlhc=a3Uc7d#bbfSN+IYS&qe zs0?#%xW$W_(E?@RD_o(KH(Q`_Q-ysC<9QpRi0mbq;Up|+VGGB)c@enyO z+3g&@`CYX907GG%1~Ped`;B5baTd$^#PjHA=kU%Ay|ojVh$z<%W0WQ zZus&M&beMj!$f!3{E;Ifrv&ES+Hzio{>=GtM}2~0tR5}p60ZULSFgBrm$c_h&pu^% z5Egg~+T$wAiD~$dQRQ`G+d)Z3t{37*-_eRpZeOI*Q-|UkjO(dLi;;k%&nMRljTJ4U z#1pRM73`z2O@X5jWPk1)xtPEFP|1^QnVxmQb#ECnc79Qa82_@kRVh%FTL2Ni%J__S7=Xwwqk_Uod z%cI3dARbV}Kfe>;S1Qub*{BaSYlcJ}MC>~%g#nL<4q@w9maYhvmOlV}RP~6Qi z%}cRP=Ed0Ja`B`d^HR8+gHqEYQClG(`R01YQGR2X)#!+}G%_0YEy^T764w(A`^d!` zpZD3~389h;W>L8qh|nq|^`->EJ-rY~7)2w?0?vuWgZEKmyoSyZ2aZ+S_xfz%gm7eO zuv$`|NWz)Zd(O*Au5=XvD+>&NF2%)g#f?gdkrtgUfEIlnS$*|GK3KX?ms8Axm3mgI zB!V%!rbjrvDU-IolcmH)Pbkd5?}9Ws)_35>PWH`Ed~oJ5(pBCv zUhAVJli;P%2}*jfu|Tt5G;f$9~hgP78pfx;99LvUT!+=9Jp3L;7<#Hx#z?nrs0YG zX#pq$Vp=(|KScl&ftY4a9KdHf>FX!(3$LWg>j+{kfVh5?bxP;NRUWg3Q_la%Ory^M z5Ui+)t@@leoR(imf-t^^%>qCj`3cVa_45Q!dVe8f946XdNHl2XCnmlz0Ll{I2mn=x zZvucy#LpW*W#Y*a9Is9{tuhxy(Hl)AHjB0)0Q>jv-w78UY9R54khZZpfbmolLkx=p z#({A<@P@gtiNwEAgagOKF_aIKwVn^{-B*c_i@)&c>G%PAJp9qic4poPjo)eq>#{!(|9kz>0zxZs#SO-rk4! zN_$S%G@L}+FvoK{cEd==b;930xxZvTGP7%|-NaFty%6gfw!h2;=bjnBeNFErYUEZ3 zgvf~YX6hG`+Z2BCqi5*`Qf_e&O~}XwdMthFytAobRuqJoH}UC)YIt1q@edXTk^fV~ zS&odIE(rvP6E-+BjR(U=pLni${m6{Mv8Vp@va-7%TkB_yiLlusYuNrm$qnjVyRn91 zJ?oTw)q7Ug_A91pAZ$M};q-r8m)t;G(Wa{2kgj9`P>CPl*PY+n=4lp$Na%v?7}49> z)^2CjBo5e?7PkG1O6(t$^h5oAWUQGYl=VK-xfa@AsEF!Hb}A`w$0Se|L}WhyArdda&tH^miRdCeB#{q5A-8zln9L@{(_I3 zIoyxTh|fHZk-w$1qG5^0a5sHDHVYZGZ+cNnQ^;_z3Hy;zx04aX698;jlIU2Hj&XS3 zDJk30q}Fy`>0C9IGM9Kfuq6?3E71ftfuNUpVQ?n1Ku%qRtoSIsw-zMZWBZX|+ZJk7 zopLm~sfeJaQpkRMO^6Xjm3|S?Ds4th@8Iz9eJ|!_L{c|h!{#^obzpRy2CsIQEDVP3z0~W?p{5H!m}Upm!pL#LhacPLXO&@e zyRWR$iAN2lY@1%5ARak{`h)sKP1Q<*$Zc(E&%#O{?HkHTEMp>GH<-fX!jF9*z|M;?wLcmamQ2C{+x!@YXNaWXdBBNh`~AqU zgGvAYG$#x7CQJGr3?tSP{NU_k)mmou?(Ml?j`1doKrtC(?~~Bm04Sx^zD=KPfZ0g z`jH`sKfd&Lyt!Y*XB2AVLf(@)VSz1IuJ+JEQX#fSc&tSOwlf&`3D)mN*6S}bEJDJF5KTs+%7EtCYk9qX zWFpa+c9b$tt(6gNnS|oxc{+Hb9m+D4Sn7s@x*wT7|G@62d@u%~?L}t$kqtaUtD*yi z0N9>=#(&rjyXnd4_aoE)_u$@VhaX}Q&r-^wa`>n zW*c^D)2uSB&V>EQXb+$I`jOe*mIg$!d0_6$TUv_jFErDBWagYo^d-y7&1>sN_RI@^ ptMvKLod2O}96i?e7y6$70|1McYjiY$;T`}0002ovPDHLkV1nc*Fj)Wq literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_general.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_general.png new file mode 100644 index 0000000000000000000000000000000000000000..ff5e6bb195f24fc3caaec6b8e9277dd02ca4c976 GIT binary patch literal 8754 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_groups.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_groups.png new file mode 100644 index 0000000000000000000000000000000000000000..db5cc80927ceebe040473d74e48574e1d6f73a9a GIT binary patch literal 7877 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 IM6N<$g4u;nTL1t6 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_hot_spare.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_hot_spare.png new file mode 100644 index 0000000000000000000000000000000000000000..6e157d45eef52767da3e44fc3b791d69a2ea8cbd GIT binary patch literal 4823 zcmV;|5-9D7P)n0~UXK{F;NGE=N9(G<@p- zSJbwHPkicdtLKmY>?f_Bm!m6i`Jt=#%Rt^OWw1|5YBJ+F)&fb?T0N(gzVYV|-T%AN z6$qo~Xc&ddK@f@{kaNL+Qg|o(k~ldEADmUnK!2&f9QAs@NDmkYgp{*o03}2zC6ah3 z;^A<)QU{`5ADN(kkpVGd1_Uz@4})B37-Jv^Lz;aMCHi{~=od0cXeEL;slz~En1CDq zZMxhzqGs70!3#5gFe6RH5?kXcAZ=sxikx940UsnDkU}I$vXaEH1bLP5fN%I4Kf~{^ zO=H_54LP!o2u-SJL_92UlEmu@mK%Vq~G4((YA`ii5{sI_9PrydRtP{YzKW_Mt z-HDJT9u?Fl9^=BZ*QRGkoe1msrtvcp=;tdAcNCXg2_A>)45?5Ocj*P}Wc}0htxp-s0KTY<*R} z%pwEW53EFx7|$|~J{-d^m)eQ6KhaJHtYPx6A&7+IT%^X&C*J=|(qtrsv#V4yUny#e z^CAa4h&x9+Lec|CEQ1OB@fdMXxs>y=kwF^l8DxbG8Ta@zv2ixdy(k%m%NGS zPzPvUiTKbFj1HP2cUil*m2e&zOAPL(P|C!IhEU^?+IU-1_QSf{I0iA%%9RjV7}Pw2 z0W*LDM5^b(ED#?jDy4-G@=p!j-T~N^UVT zVmi|f`jQ|uQW%6wk$Cejcm+Ztz6VT%y~xvntZv8#adRUbpu`spphuL?LTRF`g&hs5 zjnN{-g_%d4WbYWXV?b7K;~H97;j@#(9t*G{y6(4XFaZ$_?=c|Rhy(1 zZK|;98f@=O2)Q<69r3$3!QSm?h=~?nHiJ>ka;j>qKx|{;CJZp~fT`l)2Y*zm$@F3) zC`QCeOMJ!QYgcC#F4h@4Ds$Qbj=&CG^?3?ZbWYaI1~`+7(4o(KAtOS@vo&e>p7)|r zHg)FAAR!r_NcUNhx=GMd-@-6~cEc*Ml-j+UCLfAik1#`5^$KY5Z|Lc4=juY78dCV! zcdkK4uAj)ufu@ruNx?&o84|KfKwA|9pfrbJ86SX|Shlkh5>oK&PkV2Oj-IbFJfnw}1AbR?q+U$A`KVp|>4*c)yU* z-JrGmgbc(yY_}1Jeo8$jbbRB<`#xE|Ur0o|j_Rnttiv9LRrA4s!d%mEpNt39`-Rlf z-euk2Eky4OK}^UQs|n0L5HIv_Tgbs?^?o6}vBf5E?}u;5*zsA zOohfxLScVhL;wy^-yqy{w%eq0qZ=?F6%ZV63$gPCq6IJlp{C;3vbgl1TclSeRcCao zCjGL6mMA|bBuaBJc~B={#%Tq1Hbk)Vx{$*y`iw4^ecjtd@0(#2jBX)QI;g+GTC{sd zRt0rZgKVoI%{&s1tAOYsSOKXW5|3?kQZHe4DwDfJ4JH9lNpa>8`j`PC6hFi7uuX>! zaDHCM`>#Ir_BQz&nR(v+tvcwxI;1RUpT&9U%OlP->Of*5+|n<|TMyRtnl+ zTY3hb^)Kuj#}F#bhn7r!8I0;Ij4Jj=?9BNy@cMsJJAeiZy+$O|&tR}eNep6JXhUv6 zjv>P_oH%j5XpEkTM9BE$;|y%SmUfOJ!Xo7Bh~%BU5}h$*EEr_64jBe`1x2VQMWOL! zGfD}|s^XmN?gqE$iUH zm*m)?vqzz1O@9{<+sjVU z1VMkTEoWIqc$hg%~)#<(-9F zZhE)BkYP?b1DB17Dd3mp2NM2%q2X=k7SHaT|D+h%#0L$1A;}Ke@ayN4?iUImwrz-2 z6>ytgIB~siyja>UD$2=g8y;54;Ks@3O3$tX`aHXCIH6tE8OGhZ=K`4xn0AbHFW4oJ z8`NudjYT}Dp3#xaLOq>F*E}>Ziw>L&dE#>RCm{`yG%-lz~nDlPG@>zA|o?lbN-EF zC>5dI*REwm$fRC`aXLu;aO#}H|$~) z12DG2e{uJU7Ip1_ru{;uV~C<4PDK}iLPni*C?Ez#N8f@H0^(=ne)Q89jmD@}?-v3w zISkR%128+wZmH4ygCc3&=*83IewE}9)`M4|=@q0c=jBQ}f}&fVZ}oh9=X=_|9a`)c zn&}m#$T^vN+ja%pjvM5Bu^;Ydb}bKBU7Q52elfj#ig=9B`O z-O%60v|)5}iXy$aP~rsx^UeS$&(yNjlk~lC<`z1zU|_+(f`PeXV0FUp<|e40>b0-~ z3kEvADl>B!r(S&V#ebRwagRU#_=gT2JosQMC9V^wPxBg$ktfNGzEl?KbpTpAk3btE zccBBDGhBep);e$saJ`j?1~p`Gb%yd^IrhR5&z&KQ8ae|B=yJ&P|cr+NhYP}r0^ie+nZ<*SL!86R$^O^%)ebdGTj)m%V_Gb9+~E9 zK*@T-^~n6+6Z49$Ypyoe6+Cz5^Vk9kbZ9VD1xhmIyv(865gpxc4xsD?AUZod-j*{O zQl+1PD{)~NK;lUuxn4(;lkYpJ#Z*0jV!SqGEU2Iwm-Dj408QBoC2Wn3xe_7Y=ooQQ znL~$Fpt5=~t%$6Z$)7^oiF81e)g#OK+ZB@XYcUDG2#Kvnrl?JbZSj-?|0j$kc0zaY zbKJBZnOZsj1MhY}PdxGL^G^1uj9tM%^sG4!UD~QzsK^(5F#QF`(|`W^0r+f+^~hjg zpLo2?IqHKHd0ag*J+9=e;Mf+Q8H}90j(sQgto2Uok$GY=dTni)GlO_`sT`L%+{K>( zQI zHb6;2A?a<6%pMl6Edt@^k39Ai{Y#-NpLQQiqnMOnXv2YQ=xIw_n6ekfPEc`8k(O|A zj|Z+C0M{Io=>hVt))^lb-=>&U5sXS+0W5}tOCNbPF)Z%T9aG=+*F6gBi&?1giO`9G^hz}K{eaASF~Ze^~h|k z;Sp!f5N~HS|8yJ4OxUtUzOkA#=x<(+tY8qFO)J-V1o(>VYLZQ-9+{Y|UYLDW;xdqnk(t$Rl_neA2!DMQx_9^Wgm^Q z2brvdh0q`jJ53mOmR3pagegr#<*t3v%9OT~jk0qS*@4jq$_8}5i?+2TNo>MwJuCF_9je`WjtTVBksbFyuXlw^I}MiWGQXs3{X8Xr5=D4SPneP8jNIsjh?TD1vg?^cNGk%C)J^kURl!I;3wNtGq>&Lo}*o+Zh05)rIQj4|j5 z2_CAjyq(y=8W$`}ckQ z_4luP`*W01;t%=dv`WA~-1JG?m2e#Mll`IMWyjJF{qytBe!ZpfQ>}8qbzMT71?X95 zy&&UK{QF|i(1TxR%*P4D{&cIE#Eb0dVi_iuf*98$SbKi9x zB1+hKP=@VNDxL+Uq)<}kq?E&G>z@7Ax@~8bfSYewG}HCGm1w=L>j}^EgzLG2eg+{- z01;CzK2j4P>FEpUOX2&z`Ptuzwru^k*1d8@2>{2Z0qi3HKA1|SglC(VVo@R@>@4s) zuxmkC&TH-ycyJyBl!RZ>t%L?5HiD>oF(YrZoq(G^ac3XEZ}8ITu2d>5QfV}RcbWSh z6JUW`@RcH@B8>=;K69VJmx@I^i^4A!M?u7b^-r(e-ZldM@zzf-_EPDgbUN*&G8TN= zh>jK;#wD#DoZ`}NfAfjeEfetZ+wK|y;JeeA zjG#u~JqzA&U0AMHs7!8B9>jAA+8(?;37_i&!9)1?L?YRIhKcYE5ye7*8-8B(%u{QY zHcbG)FHU7Lk7XEqhe#0tR&44355cpn?*Oomg3CGjHxI~*-tESM{|VMi7cX|22{Rik zPE0^v6o`mIVF`#>otOZC?*rhMG94XWrVM3h&t8aondDtyioQ6M7nc^^Mt2O_q|CgA2ze0o|slir=_=)5dXxYI zeiQ&E7xUm|vB2*U1zyVI{?Km^W_2Gi#WAADSkQc^R=-$cF#-W-W241F@v8MtKk-H^ zOPorl9>XAA>5fbpcp7Njm(ef~9Y2s~BB12+3`m*c#jfo~N=VEo1Tu6%&^-D_+OByP z$1V`}82))fl_yXoI=6pj5K}uqGM`Row4RR(zD#AxDG-P5K-crrH(IAe2CR?Qg$kUb zP%JPOjY(q@23~)_MA*h90P67p`jXZ*dcleYA~Oypk4OBWs6%%#+Wn37qr+np2ExLa zfUO|`x7_~Oete-vTi0@~s|rI@uW6mH0pR<60I?f=(Q^`>7o*(<@!1DOFoo5qu@F`L zL}$YgLf8mn-8Fy(c87Hltg3X9a-W?!Jt%QbNkv}i%PzDFbwzTojiDZ+(q}5~%3%!3 z&IFndjQG{IDlPQ!+dh-+$aWs-=*(s_ot=TcPb@j*YBX>WBopAU8fI4{la9TfJh#XC^G;0J4}c@mg6>}qwKxKq-^(JzL5uct_;ak{x$i-{R+7xB zqm=^B8ey$k#Q4SZz$H#7^RQX#q1V?(gA@iXwNWD;YWe5k=FvFxy(D7lL_~?ORuSO1 z&Q!u2EP6B55ROWR?@@nb(xZ>(?_QRQ2!wxth zr7>r~iO8oLdZ@cpB-)~Z+1p`_Bj#Bp;Uu&%Wg%)r$lb^XPKqXsRL;g~0@W&nfz7OgAE)N1V#kxj=Tmvh*1NLgO-XPiDF!YT9rRZ~Wi zuvX0g-u_k6g%u6rbv!I6=or;5u!S_LGB>A?*rucZ&Ro~%_7&_zXl{+8&7;S zhmMEY{3o0NlcX}@<45G*HRj)KS^k;(I=4DZSZf9}0P&PGzDpb~m1Wr^rv;?G4B>#p>I#Z`-V9?b; zO9A~ZME{qeJ)DRLWs|~kKVfVb6GM(4WKPBiA0<0-oTS~Tb3cBtfUU!cc^JT_3;5l9 z1SMNI|5+;a1`c2BaeT%$ZcxAOv47u)!L~``%QT)=sX_R1mv!8<^QMfkay)$MZT#+9 z5IJlz(GQ{T-neTm;+AY9Y_ak}801dq>{l`UliUVwuND`c+TWNdE|WYE>Er$RoYW$M zJvD$K?{nSwmfm=~#|Tr+9im!qg3>qeg#{SguPdu|ze{rPGF2OzaPLb*_X4zN4dOH3 zjRrGL9Jc`&2n%6~O#r=~82a)y1msI;+8fHM&X=#i&t6n0wBh8>OhH?Vw>Dr=XQHZ9 zHA>e|c2DmcEF&y+_vji;;hL|0X*I}SCAH6AEUqZk=3!;~W&c6tjw;#{7 zcpgF|wun;lDU%xEoKpjPV8xNf28LBFZ*bgo&%Z3jz(X!uBPU42@*pPvNl92vpOk!_ z6(Y>@Oa>ydqr*8T*R7dKvHlLZCD2$)*L>xn);BmpBJS@8ho1w7yPSwSEVX(o%l`;N z0Of!vk)?^y@q>TQUizfo|0;hL{}Db~(qqD{U}Fa6v!fLRF!1;fFUTDfEzhOO3n?nizT^UpHSP`EI z|9<=Hx1U=Pf`t;wakEhHv(TVcT|O^_XW4ln2tF@jJV(%WqU~^$Jh$hC-hJn@{lZNx zQeJ8R&#d6|p+^K!Izp74_Mjl2cO`v_UC~N82QdPk>wdTPrn9R?-+kwEGliF4sZyC< z;bq|Gr!f<0{R9!pO&J25h-(T0WQoB$ei1=O(L4*nDHV3&-^+ftcHx;dWZ?KT0DeTJ zItI~%NOuZF4Mb=H06YNiin1wS?n~l4fR_vb0ACyv0?jGqsci&7_hLrc?@CO*YeSz% zWj3gEwhK+D%mfXd2yqQ~0?lINmbu(vMont*q1hlJWKjbr0t%<`%uyQ^rNV+EYZkQc zywK#kHZBI}A=NR#Q5(;qt-I5cKl|Mw0KQvwoF`<*yTJJ@L?>&+hJc%$#=T@)Znn1Mo0xcL(x;uI0I>d4pTH-BCT;1`4Ak1_C00)L+7JjpxD zdL?jCCMp26104P+IGkhc!!aN)_HNAHPtZpfiyS2mq*)g%P5?i4LK9LrwFE>YKQGkv z+3)rN@Jq7ue2>9*OoY5!@LnBbC4$AOWjpslh{K3e%CXGzNF;V7f|&{TKrC0X2wJa| zW`l?*fr$J`O~lx7A4FU?`nCD-&kJ?kwQ(9mX1D4*ze{#b(%`MOsmJvQ0S?P_Zqyk& zKG})`0b_c>1W7a5d47-ToVbq_g4J9~X9TTwA|l+eV<6=CDEhc+bj@JA^FrwKF_oFv z#iG-3UI^ZG$4Q2m1xw;n%KNNYNS2A4B;ynpU?$kfqnS)YgK@tpyH!do#Y|;_wM6^P zu9RKy0^^+*>RSB5AQtKXbDcPqN&r5p^QAw&=gB(8_Ap}O=G-)ME`Lv>2W+W=0HuP2RbjL?yujY&|}hx zu5_oyLYRQ9ApsXI+1!r>*29Yot_^DpQj_$t5W_gl(VurxBqn{z>)Z`vhiAtmaP(q4 zZ-dzEQ*L^SqR$93vz7heeIA=I0E@Og6M6_^-8Fy#?ofey5Y;xxwn5n+g0_(u)RjJ; z7ZP4kuK`$YURPvK*m`>n`(g~FsR&aEt=L)nywC-UU&zYr1xMtBuB^(QFIYR!7ezt> zwDHnTn$hVl43ySFu4W9oB5{?2Vr$KAM(((9Pmku@+|kKLSAVShybz{p7N$1K+5uCm ztk{Sq_OtjnK+0&E2|^N=i73ZtADRVL$zJGgHyB45k#yMW1xCVJdE5q^>D3*ljYsLk zhAUJUZE2rhjlj=2$ia&c2O&};;Qk&K2``OxkUqq2NYwEgS1eO{_B6)cS_Je+<08;5 zrHVs*B8~Lj+;OOjMs2LdVl>G^MOo zXgGw5`Y`KZeb=+GGJ%Q>UIJZDa_)7|cjoDFjP;F424musji<3zX(88}8u;=F&I_3c z>vAlzwJ=cKci zCuUDf`g8P5UA!FeI&gob6@ z3E+b?CXn~^&r0mFaW6S_dT)$060H|!p0I{d#2+WXry86W0+&vPzi<*5Ems4y(V627 zN8M`8IpP}3sh1gG&(nIJiEK;+8)L0p#B^RrBs(v}+$GM#gOpg5uH*R-!C~H~xA`m5 zHu#KmQ+<&CED<0BMUnhej1YCs3*p_!d7+pc+XWvsJ}*?J!CbTOy!3#wnG2_x1Le{9 zy2g1ShcahnDZqrCleqY$O%!=KGNNU)+VcQ@uCl(rn^b&4?w4bYijeeo2@3n@2ml8d zamC2SzeOLh?FbB>b9I%i|XvFt7w zvfpYWre{Ed_h@ksa0ZVTZt-dr^pqsr=!L_Nn$=HN}Qb9$YCQ}V4uar zXrJled=LGMc|E4jSKI#MomNriWQ)*Au&3%qWVwfDVg`!)+4+ijUPwD_#l7G@IdsNx zvl@ua{vdmulwz0uLbS^;OAjX!Rn|N_&VI(&C?N+R2OQvT!byE&KTAg~q;o1&P8o(j+`}mmR%&eMb`mEIuSU`E86XPF@J1;GOWf zUxoFVq(q%XM~q{+q#RJ`H!ME%b3_3+Qu)dU=Zgj294zv9X_@P!2s3BSxJ)lh4!g;Z&(6KF3L?8sQXZQ_GLVb2Tk0yp+xoYYK6|`HXg3UfBG;%^sL0gM8u>smB6YS_X4f3nj8zA*u z99u?Mnoh5$A2={1GugWpO?%V@FbQ0@a7uW&cZ8cewjDn|i1%K>;FNW~6hH?N2izjl zomtut(a9;ZF;dxI6g=zuBKpp)Dn9su=F{r|5ubm3u}pOg!I$xZ$jEAjqR!`gV<+?m z1=#}XQ(IsLt3gwyFB@hgYJs;gHpB+nYH9I{m$dJ^5N4tuoO}+Jwae&ry#`2qQu@4b zT4)tn&@Qi|6H+pzx1qvhS-S3qh_)%EQS`GAoNxbmq4dALHVq;{yOZ;j6CuKE*l{u| zY6r|Lm`x464OPkcFtb6-*o3%xS@GZg;>?~GN6 zcJNt)1>3JXA$rS74}Re6o)_{y|9U^TyGXh2T!74!an^#a*zj|L4L?U^!-04@t6n|*$dS;OYwOj_hLcMvVCF&A4?u~`04LpuKUH4#V`Hkxjif4=8lq9 zIf=FfnrBOpF04!$+P$;LuB2Y@;@lG8oqk6zP`m9K$b9)x11BJWT#k|@ZeJ9!uilJH_yA=-NyZvYz z&`zu5uhZtc{b!v3d}k)wk5&6#)Yr^2P5?eT&2a5Zy{PYLXM_NJt`F^qI`c0Yqpz(5 z;4_QSO6u&rXspF;AppN0Y6Z#I*x3IJ4-emd@;ZdR zvt|<7^aBSDtVkeEeTfJ#+NPxiOB_a5e`>9L#orfXo_zAj>k}^QX|)KbmzAKiIbAKf zDHNK$rD|{pZxy<`yN@O4tIJ>--rly5iD-@b+f7~iJduYE=#Od{ZDx1k+vp}+n{1U#pH|6kA5bf@tom-vWrjennC zv^z5ym~)j{Xx1M9_-O1=mE7%Z*9iH1{#Qqj9^H26(4jTEckjOU>8GEb4~}(HTfThx zN7^t%Z&gqa!*egd-i-~|Ni~I`qZaBb)eB_Z@u-_*{z}{thKTd)0^$^ z%{SkC@#?Fu{$4aYU)jj7GYjuSZJ2@SRY5&G#CKfRy`Y)iPMkRLqjWm`-)Pf4&-*#v zTGGIx{;%nmT4ipS->;h2JTSc{=PcDyBY1-?^-U3R7nt92!y zw|~&8jX!?;I3=vkuj7F}-Y#E)uvWzbr%s(Z&?;wOxG2wms#XpdgMF-Bav#MS5b)Mp zZ@tp0_&opo^P81Ywf@HT8p!{9+C@MaRx3jD=g)sH7Dujy0Dd>RxuA~ttZ0|`5JtjU z%bh;&$dMykn(df^bh7NV2!N4%t!-H^U?i-yV&c<#_wM~pv(vhH^X3;Qmak>@VRSxd z)ZYnm^jZ-ggYk5|nD|d}x!l2|T)}rJWqx5D@wv}TePQd?t#?eGJoy7y>}#9hK4Bw_ zjj|HQfA+JVtxn37U;p~oTgfG=V|{NR)4zTD_QkVj&)xwarT`+YY=-*=+wt*sSl&na zJW=HS^2;~X;l2m1z4+|2&)$fB|D0sE*#&KE%=_Xbw%$cKOf0!;GlS&3wF@})MSU9J@2@BG?bs(y8?`vYiWNCmr?Y0{(_9UUF->Fn&B5&gp0 z*w`=N$h~>&*s)){{`%{$tXQ#P&kuk2!_$#`CxwY)XZx(g1heNwe-_ou-;~fF^BgPl zF3-hb4@cj@pEa$+Wc)fRQ>GM;n&rMtDX4kAEoLPeE zkvYz#kcx}3Br47e(dA%*E(seERF6!k9ZIU)jq_SdR<}gJh8MQ=J3&1%C+k*J!YaEP zrtAV#z9@|AkwKrXTkx^|vwQ4v!{#5%1n8Bn=k|JTSc}YF5EfiV7*RJOxF9UJqgU4? z)6boFZ`p#me|u&RzJlY^0QM2jOAQ8XF5`j=y3%Hz0^-fiA=@MQV~2OQ5N^bnx%~w)Nxp z8((~R2!QX-aP62(73ZDEeTtQUO{=a)<~T#P2tp+J70yJFDq->UpQ{FM_?zbc0OC6@ zZePrWr2ssWiIg|8A|phDdSomnx*nPIb9|w^(08$8=DNXvpFo2Jcb5htW$rF5m?Bh| zjU|77Ltpayg~0i~bUOV~Cez_@HMj`)hS$wTZt13aWZ>vXw2+P$)>pbGr7J6zeb*9E zv^U8X@;-jP4l@z|ejzN_X#l)C-I3|aa8;~yS!JMD^~g%4Q2>}+ATB~22$*9EL{Wd3 z(VkQ$z0X!uj9%$!EB_RECi0?~FO1^ntFW+R)+0;ldSsb&CK32x3n;ud*A@w6y-yCS z-HUcj*$Xdn2el=F-jDpLIT@1p^~fOigOK|HQ+6&a=@k=vL`_aX>t;ixuiXzgYwn@$ zt5xs7ju9>8rCVx%u#HOqIP^f}4aIT6*LYRcBQvjt^~eGuOx>oGB?Q4un1xP-Lw0jrGP(xcb-5lH{=E;sn^I<_>(wK399u++>yZ)0x@!Pt z>JF|W#++}yUWRM@A?gQi1K%$s&7W@RGIdro8{Z;g{VJt2CeluXQPjF$2=bN9baWi) z==k!AIDWe6b*Vd?M|aBIoO>yK1%Azu*rv9VkspPvldP@^7MDwVZ$ z!dfZz5qP9#@e`-H8lvel03M^xN4Oq5YeTYbsZ@Qx5EVy`icI13)Q>ieO%d$E-u&BBU8qG(0{4Q zy4>T^F7xydPE(q#Rvoj*{X)*k#4;&_t@LAS<c5+ zO#Ev&W9pGr6jak(@6)B=Td2p>s2&;J*`u1MM;4u4ymURX=v6wVYdOTUANDnK5+Vwd;`y)ihf;fbo4zfG#Ly6$5jfs-#?G zi-)u_1DeM*>XBj4?Nkh0dS2E^pra!-IJh2}G}rP=u199;Za4!`t~V?HrWzKdB&+Wi zntNSuPEtLxgo`*#6^7iG(Z%aV3aYhIk1Vu1!-TbFK!d>()gv>G8*`iLkx5exE?SR| z%s!R?`&ka(FVtc^GGMG5kqz`+t?Q8`?cA4pAvTAlsRXKoso?3d{vR|Pr;WgcXvyo5 zg(9?{FgA>dgL-5^b*lz-!btYD{BJCo1g(q$(}m&agi67;^~j2mdSr2Gk(K9A$G>0b z`o61mJu)d{OsnZ!`e8jX`#mk|9u;}udSucc)){F3ArRdg^;Bbdyud`*V&#Q`dSs3> zsgdE)S48M~WSUd<&fI)LlGY;wrEmD9V&i&bp~FM} zPc5sj5!sQkbt<_YnTXUQi;>L^>yZ@~5T@7!&}+`DncJu$RT!W&Tn}82tQ>z(9lER@ znd^po2#w_4CI*0E8DXg#BQ%n|*&n`YHKuNrG#9>9%|yh~LgZd@Ja?AoxmizF0qw_o zYwhLI zSDw53g}(n^KP3^FNY&v0dKQT3al)%fqAvtY;;_=b)(+;nlqawM$X~ZKejDnMNt?+@hFtX{~=)l*DucX-jFlqzNlYD@!ULp-n*88Y~h+ zc!&^JF@&06O$mv*AtrnXLKa)ze%!Aa&zYHf-|K$8``(@V?kjz_xp}X-I1vP zw&QGe3I$@@HUUAj0FBQ83IL3gAP9(0z0H{m0L*t4ibeQz2+jgcX#;|D!kv&X&&U6E zWp2clWx*`q=sWVeoPiW3AZH+CdM1MGy%4Gm1ICeg%eIYq6V5G3JM)DMypO)AIadg@ zBDzgkiD??oxd_2V$=MC~4XLj}>#vC`q9urE&J47{Tw8!NHXy_qw;3B~oL>EIRJsgm zekjqEHsFiqq0xcwZRrP;ISf8|HP!wSK^v~VPN7JO9Ua6e7UW873Q7Z*gH_lkzUvWp zc9!^_O9DTTKUa7OXNkWAsCDPj#~&VFQiWi39fK9ITj3lvD)+bMJ-+N2hX1;Ejk5L)9O5jk)ZHlSDI zNB{=?a_&?F2)RV7lzNjjjTmNN&~cm>?1IzDVARzzPo>(+QPMGhX()jmMBq>etFpLZ zybvPuvIILLQKpR6+euhVI%1wsC+-*JM`z=PqbO#mFH9H@E%bp1VekWhJ(4-@O*}aSS}g z3Yvis6@v{Y!!X=9I63qO&a{g=w*tht z4~)A|k8xKSs|NzyIy$oV!KS4a=UzYl*{*)@P{)!Q_Zh|-1RG$~$8!y6VCu(}aR(=B z8Fv*lIEihrZSD~n!e4LJod9O81tTnh3nY<&pP}z)sPH>{2A{@L6nwZJQoa&b?qnW21!6&=F!tIQENR+}pt(uF|S=0*rMe z^n;QQ&w~)e_q~QviN*y$CSo-a3Nu+eELm1qiXt|pKIkq3$v6s)?Qm9d7a-PmUQrb* zs6g)soP|<_6yumq2e@NoAxtem#Druhs2HmXe6#>Up-Ubac$IzRE&u}5II4=ELCEEd zP|6ofn<&AAk>tj_h3q>6oBDy7d!Un5w9YJU%n*$dB(y4{T8W|S8~8XYaU6IZ`pwZJ zHL?;4GIz6#LdO&V&MHvBBv}b3#LNJuQKGB_p?Psm;;aOEG4NhtO&fsG-vZd?Fa*}! zCf-6Cf!mDZAifK;u*Eo-`_WJDNY(yZgAeM7>d7;m2{Z#>$=sRJ>+XPsnhos!CqJR#68xY_TSaSD%@Zk5e-7iG!;vQia zZ^w}r%*MQUTA)KH4|*Wl*+Bz0`~5m42vv%g({czo zUZOnQIr;F-OK0W)q>aG}+bt01%e*I*j3RIo&T_f>3ThG48%HHgOZB1R4ET-$pk8qR ze4)RZgkJ5;9AKPDUid_}usc++LL=g~V&3VH-;HiNLt03mbP!AjQ@~pUx7YyClcOK{ zfLLb<^QLO=7vffNkUPs?06{tx?qOQ*wIDbfk?ELxTTd_-i!?0}jbwi1n-JgdJrutxnN;C{&kCE2%AT6Ycw6Tv&vCzz2U{G#(J@IEpVZ>mC59Mpr z`u7WQ*%oO?T0m3M&N?$!eHHgjYz4cxPcWxYmvKkN%6$(;{#JKaZ+`oQihKUq&z<5i z!kiT%Nnjr7JNGA|V5Y>}DQHthXsi;t zxeE}uQootpg%V2iC>*~8-l-%kMPBPYFg&do2cZ$)17v6c0k{e}sP^qrfY4KU(2N=x_C12JRiy4exuR#JUPQcWNa(1AS0#cH zPq7MjI6qEAF!a%p!5Uc!dx5NkfxK0!)+#HpiYCcQKtLaIOrPL8u;?XTj{Al5OF-#z znLk~7zYvW67GVA`cb0X_H<2{&b0ZM7`ncl0D|ldjzmUE2WUBVT@E7y-LNKj4&ro~6 zP+Nd=TL8O~Aa2arr?sK9{hoU&1d&^P(le9Q@+LR#lgUc$+7{lTSXmgL6LJ zYRn@~$Xk+t=5q%R9{i^3y8jj}av?9s6Y@5X?*#=XOe zJXnjWevP0WeJjSOE1!AhnZY0k{+BuD&eQ(}nPwhoYGb`j_eD$#fET`!yySulF1P{=>`{Zp`Y6)W z#_A+o)EW{XGHyKad*z7}CwAc(L5(twZIOmnnI2Ndd)G7qM3*$~r=EK1=0=Pg+hE%& zV{I&>nDT^;Ps4pV8s5yz%s-MckI!mjyiV52D7kT_cc>eu4&!_6w+~MgJ!k8kT)(Z>e zlLQqFNSH_GtlfAX!LsG*t4nH-?ZU|d`K|&MRCCm+t|q1+ zI$)JFs~(x9t20FPI8q`^UA96HtAR6k>lPrYMaC?1HTmSga4uk0Xttwg3 z2sPG7hne~G=AAEe7T02GgSoZ<25f+2U<0ISHb7~H=L;FAM>ck>R8^0RYRJrF(M!iE zkYYzse&T9uwjP-}8Q-0C_0j&Ju16MmDOHbbN*CS&Vll91$USL>UYRiu6u^KO| zsnIR=A^Bh+KvZl*sCr~P6TuW)s7iC3iwauh zp{x)W&>%rQGRso+$Q--V()GxqWj-4DEUH3BG^vAy)U5chc~yKiz$4Vl@IBf2LZ$J) zUI{`x4YSc(4cMyHCW~533q)#>eN6bif8+K2*Cab%2pHCWh~ozWSnD(qmAFV?#pJ+7ea!~sz;WT`MROR+Uu@{ z4ub6JkpXS&BU3E2cJE6^c4j04yLFj^H!+tg1)mr53<8phA_9 zkc-gfVo2Cnk4$Wbz)002<5-UjnU|#-WjQZdm#h`)k;%-m-ul2R>Qb_8t5jVLD+odz zb@{TaS0L+=wZQ2%Qs0Tj?NL242sZp|Rnm?Gx|XFX>(vVN$mHQIgoJ|YqH2|N zIaZd|DikkVlKDvGNK4cs(~*=u%10GXQ-V=WVu(1t#%q)i=G>S&8E?2tz*@_*Si~gawe<>Sl2%uY9XvMXCk{zY1J& zlB|RiI*u*tkxBJv0Rf__ioPGzK3~YP*cM>^FnE%dsYgatf-9SPWY7Nbc&hd{tXY+> p7c#M$8udbF+jZ8zANaoj0|1!5#dY8~T>$_9002ovPDHLkV1g=n*J}U( literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_iscsi_lun.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_iscsi_lun.png new file mode 100644 index 0000000000000000000000000000000000000000..8698a8336ede41dff7d9b58fd97bd3662483feba GIT binary patch literal 7993 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_media_library.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_media_library.png new file mode 100644 index 0000000000000000000000000000000000000000..7e1477f6053ecc85befedc68a07c485d14b56fde GIT binary patch literal 10244 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 KMNUMnLSTZ17&n3d literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_network.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_network.png new file mode 100644 index 0000000000000000000000000000000000000000..4914a1a4b9a9e5e0c47bddd24ecfb60fdc334229 GIT binary patch literal 5374 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_networkmap.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_networkmap.png new file mode 100644 index 0000000000000000000000000000000000000000..85b699ccef297774e5074a21998f45d2099ce54a GIT binary patch literal 5660 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 S>Z@D;0000A7X3rUy@P zy63&BSMPi8RdqcH0OBkkN}TcI%rg+5^Z}23V(U~1CXu&N52FnH+9$U+rIJresrpjV z71^u>lHO^N&V&P)+hE{2o_CFbl7T3W2T>fYD-{W)WMc+SvF!yBY>e*fTn~)SFA8Bw z26`*K^*Bk8kpvk~LdxZ0fJDa_BXpjLJj>S8AzjN$21pc;2|g18V#yc~j)6Q=EFD@K z>Wz{C6-C_oC`$Z!3F#M7Ywih^Yk}jHr6gcLSthX1c^MCCQ|bk#Rob3V<(E>lP(BOe zKss9apB%#ha9suVKc{J7;Z)m(m6op8xa@e!Ed$T>JbN=199GUZPS# z#R3+@prjRG42j)HZ*vTX$8&9a(uh{U#N}wNGbKD{21k3-R&VJ!2 z(LiLCrwUt(L1?TS9P!T95d&<-i(aYFbuZrcY)(_lqph?P$H_*VShQBIMT`@>Jj*Z3 zJloNEeg*$d89kADVm9d|n#>eNdT(pVKy(UQCl|R&b(UI&W|;(y8NeUjPLke6!uC=k z;y4a_K;-ztD$0Z$$_>15>_(^FEeBc3Cv=Z(D;zd5Q~|Vl_F#@$gswt zdn{k7Ap_3-sg)rqzm5MtR9Hu2bzrpao^9aLJaM8WlvcL!D|!H29nUl|3XvD9QTn`A zY7>=s_Jnmw&EE1hQG%CXF`ry2_=30?^c1WzxmP^_p>a!f`mSa1nwHg z2!4KzuF-eMz&<(NB*WYg(i&wrz_-w4JwPC29AR~wjD2R8HaVcWR#C|AM93e1{pWw2 z;^{A35x?X2hO*vEvh3a^puv*yrxB5V_y5*7;#UyCG^AQ#f-tltxd7LSnu2*!fZ#(|JC1Bf|k zaex?Axy6A>W6t4#xhEXB$3vsoxR9SHG!I#u{)Y>MCc-QVR|Uef0AN z8Y~Wkj#fxtwNpPm3axGIG@eWBbi^OX6bf6)f6LDNfx@1TtyeV{1~mHvDF0iUY^E-) z(SP{6zpT{bzkcnh<(Q!feNJc*jmxsM)9ABycw!t75)^`f3HrRFbaEUxJnU-zq7WmG zC#;VR`q*@&CQ3Se??H2sofLX`@rQh~(QHwp&B7T7hAr64p z$Nw);MZjiAT;zdaeL*4iFu1E+6hvG1bl-cmae#tbSZ+#V*1glN$XN#vi&~CgMcT?f z6=x?M5Utkk;;_rfi2KavK0oIf898EVP{<`4rXn23 z91rq*waPgI=M0?f9i=TrYh}Q-X_tqgw$eI$%xL%0D8d7I{nWqEDhZm*D0#jn;{&ncxCq%L; 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 FV1lkHDbfG{ literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_performance.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_performance.png new file mode 100644 index 0000000000000000000000000000000000000000..68ceedf0715bb1ee6f2168ba21a273bb69f38f62 GIT binary patch literal 8245 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_portal.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_portal.png new file mode 100644 index 0000000000000000000000000000000000000000..1a717dc6b5a31babac35a9bb14a139feee79e5cf GIT binary patch literal 5136 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 M07*qoM6N<$f<9&RfdBvi literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_process.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_process.png new file mode 100644 index 0000000000000000000000000000000000000000..fd1d6061a176d9a1d02ec429282343cb063e341c GIT binary patch literal 6985 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 b{}W&UyUI}$wk?2C00000NkvXXu0mjfJcXBA literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_public_access.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_public_access.png new file mode 100644 index 0000000000000000000000000000000000000000..4933fe14cfccf8b2f2d08611abc3a0286d3103ad GIT binary patch literal 10097 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 TLr0ztU7!z`>-z1ONayN{X`DPc6^W*^Lf*y2>PP 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_quickconnect.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_quickconnect.png new file mode 100644 index 0000000000000000000000000000000000000000..c3045a6a664ab2aca8f0244bc8219d3f6ec7d6db GIT binary patch literal 6400 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_recommend.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_recommend.png new file mode 100644 index 0000000000000000000000000000000000000000..37a41fda29042e848937798a1dbd05d0058699fd GIT binary patch literal 5128 zcmV+j6!+_iP)R22;$0W|3V^d3hD={69_T1#kT6OKtOSd ziRG;gE^Zw;UCE6LGNP!m<)LoXy0N`@zh>sWd;2@*-uLG1$E@G(%(Cyc^Y8rb z7o7#e0B9%Th3z;!uIKGWd)sl{llS&LymA3BfZo@{3lQGz`M&UTIpO)aPP~6-%Y9#7 z(Gmv845w+h(uj}aFasdo&*g=m2NRy(j!z$Li5X2VK1Ti>rwa_U`+g3uZ6T%P&%tDO zW*M-m$}1cf^6$FB@jT%`oQMG$AsL2+?2dqCMu2p{b~ch8IOu(1fIgRwOP`<1tP*SS zA>!@j5S#Th67=4(tyr|sjuCvK?y*;p>u$C@=CbZ>YC6+S$TFau*S~3(_ z9`tyx=X(8~=fUu}vEq{as4x^V2nKd+e`=s*45%7PE7jdC_f>=n?G!dJ0}vlFr6m256gLb{@7Vt2(ToLi>}`qICp_OhmpDc$F$v5Z%%yoJ@?0=qeBI^4L$y@pU-ztuom?`i;gj!M0`-Gh)Ss> zO5@|AQZAneg8(Wam*SERoi~Wd3=g7he(mL*#fFCxaiC_i=zzTc%4R?EFzgZL>-%y3Ooi7kq!Yi#c%wL8@aKqQJFsxvl&_-EWdHn0O=i&J1$jpzzkm)1SnfJ1)xrh$)gt zutIY9s~r$*u?Vdo7Axv;Tgzvxe2tzkp71J>wZ9nTS3`Csj_v;IZyrg-00=FbfNO%Sjy!2Rs#7Mg zn!o@(TXNo<-U{KSVoXr07eS&9lB)NVac51kO5Atd}?nG*whUVL^i5sFN2 zse-^VNnQcH)n$@$ni5$75B@M-cco=0wrpn9(Q$`C{A0VG-~N8n=7oZwqQh({$3XCL z6L1~Zb42ztc-@Owst4yDK?#x&ZMZGzjA%~iJ*6op-*Xo2Jv{H&3*UI^aMLHY%B7MH z_9*C!7cIr{~*_U5g81+JmrpO&I;4kWy`8FZ*ON7c_)rt4-EPLd;Evgqv`;V4} zAwtUa9mxzV5pvPhA}q8EnQLoTUjEUHD>2Ew3-R&0AUf?TcNJcH!U_XgD4@KzJHrfE zT7e-#%4PW%%3DOELGifG_<~ZF>xC@c%NPNS!ba8uG~woi3ZWNnnMUSZW*JZ{KCHyc zrQ@wvj;j@#853NVpfX!8BrHQ9zRK~pp*cJfG$NF}(fyR3$}H9kvFWtgbV6LVz~*m* z4(RukBk+s|a%ve44*l7$9&gDAs2LU4V!4NWZ-V0PkzU?GV`s*HXW|3sL8XQDLenKg zR+V`4d@meTzw#G5IFlF|@e$gDR!Rex{^XbDTrXrd&1{mAx_*cBKzy#vhqKbA6AUO8 zAL@OiqhYzOq`2W$NSR_Mm`Mj>^Qz1(hSORsq))a#7tbBB{SV5ghyVDK8LJnfaDf6g zH~)n4+g79Zh4j$-Zo$aDt;LSk+k$fI>xCxvzRlqROw z3Q37Om;BKY|Kq1`pHeTh^o!rA)(a_h`25cMno}>d^!^tUJr9fH<=fEf@5(}Zhs?JN z#j>B*3QY`<^@s9Wl`&zBUlR7%MPZkQPgubi%_A-qJga9ykGN+-vQ~rm`{oNf`x;*_ zq^%CwduCth)zsAogJIYXeKOUS@C}fadTOqREVgxJlfcLA(n9$ za-VDK($1=oAl{le!H+CgJUZ6&u`J~a6oT9C@W;*{^AgT!BI$0bXmkDA^0Xej&1={z7B=3eHl_b8A zv)=KVwD8f=)eAwki`28q5XK&q98fTh7^cL^tFOyznb$Jf@R_${bgP}EldfI}1f8X% zo4qK>H80{-^dbdcpcnasA)XnUP+!;Bl+=p7bIN)l3{_DH*mq9GwK*hfK=1kYFh+eO z7jv6}?pZ5s$^lT4ms^#T$40iVJ(5a^Eh&qF1Fj6zs<7qbQBQA$KzxyU+!87yOmOtt zyLjtAIO!aj42udkDakj22RrrymZ?~YEJSlFwkVi0ohaoBG+Ls4|FR=6`pw@M!^P)n z=DqWL@C=5KL+H$6`izV&j;u|~q=yM75gI~=ZXS8AH+{X3#SBC`pjxKDUKV1!vnxq5Kyb*c*N@@1>LRKt7EwV()q@Q7Vtn?SFXJ0QA z>ws#F_;5Bx`EXd7TfGo&ELtH?KIt%lNDAn@d;u|0mq`aZ5PGaYWco19T^xkX$k4AT z%d*0SHUd3pRBZP)+DS06azQZ=1VK;YErk{DfQc0gg#ic0t&=`$M|*UkFwg~=UowqJ z{M15Wpr?jdwJit+!Z7@;={_%&N*5Ob1Ir=*cTD$(3l}c@>q1~)8!7R0e>idC#NjzT zQPnv$n0A*lv@K|Xn&uc88TmInYH5~Zp-pIeYW4onqeq{`X*8=N(2G`5HIAX7p?@-A zMJA(BD%j{p^J`sj=+L3(ar#MJF?Ewhz(M;LHNyeZ`4Jwmq8{3tIRa0ht)A(E;o;$T zaXO#HaGKU~AHUp1ix)5cS@dE!T~>zA6Z;E^!?-40y-)*EN(u?yHS(YKI6+R@n9^GJ zQFYg5&{v%B-A&MeJ*s)f$!6<7pJ`2tWI^=x%?c$bG1;+DlX|NB*lXm!smI{p;7Bw4 zz-~1U2SV|Yq~)aVc4r`L)bwnv;|609PR-Kd%=s7}AOCm3OP1+Gs5pyoVP1|xq3}s` z?5(L7xOC~#|IPHUVzD^yb4nO-D*b&j6$6z@=%Wj7iDyL%L;K75Zv&Mkq zILpPvEgfd`#6C3sC$+rdnKNf@H22Tj0Z;rfPHkzU(Mpyqk(Bb%z`(#(_=0pIL=3_g zoXrXYyLRpB>+S9RXL1FpqtSA?oEc~K=9_PlRs65XvCxd+fSEOD`2krU-?wic6?~Lt zl@B2L%Y-k01EW;3GV6o}j^j)gl()aX|7(*)C+)1nRcJq5{oV z{W*Gl(@i)1%r)0s^HVq8c;j#9a=Dx8@Vr0Ty?ghc;<;3@`_XjC)a4k+i`w&+6Bwv< zy!F;wYi_>z=2h2Td+jPbI}c~H2uyV(h^UN>jeQu&I`r;;&YwU3;Rhdl@Z&r0yz@t< z=RcZG{?jm!dS1xVH|EU8o-q)#c<0w6{%HRz^d?Hvez)5|OF^8BNBVEh7r@tIlbTYC zejt`)N+o(%nNcm7XIys5y>13ljM#{2nVwc@+2Pib=>^NcY>!v=9;oa7d+*wCMTF-4 zXyh(u_Iwl0d(m0;Ip<4&+%1n=dz&ZC)EV*UXg;gPv6 zL%YxxhRUEpWPE?21jvZv^w4(bu7S8nY|WW*JTg00;EmCK?F^_!QzKzWuQQBCX8ys1 zE(hW3BXG3{9fcUfpIfuP&}CyMv%je6{cWVgmibIowWx ztO6+T;D)ug9?u*D(eAJ4^i8hg?xA|i37AY(NTb&6FH}o}w3ui-GEm)*<`C)+%ezS6 zF@@p4`rB4zYk#2_3C?jk(Bu8S4}Tj$yqGO)H3K0n8D$WUOe-vj%c~%~ox%psfa}<1 ze<8iEv^@Rk+g4?5e<2Z}Vm$$(S4WUuk2)8Ubsa6$-wC7D)b_7~FEC+0^(DMA^phQ(?;9$7Skwhj;aFamuH9vh*+ zO+rvfqFx!SVi92#GY(lkFLDMpsoHWJcEb*Lz4peT#^RC1R>$Cxc}8KQXtSpEFrZV! zxSWhKF&WM)40(@tEq)EgBO|4SZ7+b}y&%3VvN~1`(TSMm1v$QYdTBmm zJTkk%cw`LI%Q$>qmuFD2oJr_GGtEq-#Us-j(L2L;eQr%U244Q&fl=GG3NgrE+)FC@ z9sLbk?%q&@%%1`S9Zb06#t@Fp0hCg+!6S1B&I<~plW%T0U&D798Q0gj+Ts{EuSo72 zj?JW>x9a-`j-=aP2!s~lh&nlTaf~I=Xr56JrXOI4zZ?!0(+oso(gf~TeVmKL<5|7NX&N{}?#CT+cj3pu>^?Gv>?yG4%pHO&Mz30+0 zP_*nS6h#~c7$k>iqa=GC@W>L!vETg6Z7K1{l*S`Vde2s1F-5VH)UYnIz$24{I;AqP zvrR$=diU=C$Mkq)QmU4(*i0Jz75G0L9@!T*+&+do&MA?hWhbSEK+0_J$W##_?sc_( zW->X-Y#JV!-d$%1^laYr`E}{{7ZS>#ueAzHD(WQ3698*AuK%^!;gLxLESR)9^Uj1p zW<>fq2RyPQGGdDkojZqPpTDDf_WKKwFHlJg$`*)_nYo+W{zAw_i=0GE!Xpc7;gOle zis{0DITIg-L%|GqWOdIyvQ{9>cvuh~S#tZ?8VpUQgJeGl z!^4$w`7wx3^YF+*(ckem-`@Zv?bI-f;-gy3*6)Mjh z-kW#tJ?Hzr^Zh^PoloEP@onnu{K{wlh@R$}TOhFf7+QvMu6y5RrX3n%l*zLGEHm5D z4x=gGvKP>X@p+K$(LAc2GvL$*`s&Z}Y8#*3 z)oQkMSrpVSk5faS6BV+}=x6{_No=Apow#oJVF0AcvScW5-O*qK3|%V;fudBUEvF*m z5gPL|C*x!WtJzeO6BC-=35h8P5a8%+Jsx@pzzq4$a>eg?Lj|hP zeGFh(pd&$`kvqPZ1|*6J(EdIk;_u~mzGkhTIg>f+Kd1g{<5aWlQ~~NYC!1>G!g<}A zoK!`tMSWCSh=KQ*e+Qi{&4~hyJW|4UYIsTsbGpA!N_de0Q2`LTW;2WXEDsWpDT;#G zfCev1KX`bi(bGtP_v2_*27n)9Sd3}1LKz)|xLuHQ%~GGMMx$qGqqm3N1^B>==!|$3 z|13|b^{f`AkUnc8_xX1cJRV$-$% zfG{I!5G5Mutic^NgbF$~1{VCNyJ>BaAtlH;D5ro-kR9bJ8Kzk#1R7|8J#`(z8EE62 zur@La1b8mfsXBEy8;zbKgYKwLnmq#|1lCJuZJw4``{@gYNB~czJy=Aq4w*^fJwZj* z@1NELzg|2RiwTjeI^Pu|wkC#zz^Vi!RfjqL6b8W2~uh#FG(Q{-I__}5F zN_Vl5Bbg)1N?IskU!BNc?ANu+#5~;T*$ZfF){T-TA^_ltTnj+Q320;ODtzuiTc5Ok z$M-IHJTPm(&%mvC6cqm&-cK+BWYJYQUWi$M8a?WjpE&}+A0|(f{3P6W50JRV&zgH{ z5b)E@Ei$OCjt0PXh+4V+X~=!f|7%ty-gCs@v}?uk=k{b znNOEmj{$*Q=xh(JeFnbNi1%uz!nYtZ;8MyH&_!_r06&E`2ml_(wILrnkg!%(KKecp zksz>c5dA!cnc4xsx1qlyJ`S*#iiP~ZwkXB{^z|6t}aGXO*Q-G)?q( z2yTj1=4415-13-NG`If!-# z5Lk`&TbKcA^!X0V(9`vx20jxJ;0fS+U0uzJ9S{khg&k0dUqX~pK2UiO)BHSwm#YB$ zw=rmsmcXC9Q4IPtp1BL{MYabn@o89iH3{%uye~)F4J0>s5ha<*du&$zK$mtkT;dm< zT__oFA?PSi;;&t-BEjLVju6;H}Xn1EG?^H~m__%~)kP~?BdOSBw*$!OG zM8OQ8L7wb~@ki-{GB+Otgzwos)_;lrHSyh6K(mpfGyxv>dj&i<3h2wV?QMJn}NG zZP&UMcj%bbq2$?dbapTL&wL`wp2Ft?I$<#&b0d$V^jv4aRqE5(qs($z4F%Sb{Ln~A zJYP~C$CiW~g7+n8f1Txx=khFHZzOR*pF!E@&~~FO@o5$PDEj#W%)&V!F~aO3f=+A| zk^p%K(PrgNTc4fq0<2DG2rV#J$-s+6CF@CoOYDJ1j$pvmXuEOa5RhI4w)>fJ_Jkz4 zmXo>_y?+G6xEtdf@z1iX90B$*aR5TCRNBl>jV6em6-_drVm6s`LgVDW1f7lRMrNq{9jEotV4fKyd~f!7%UB8z^F zQ!+zgmT-kK5{?Gf`+x{|I{y_eTq9kM1DW?jDVzhh1!3lqm@P{HYIEghnrAG^jhV9u zs2IwHZ_gwWPP21Odxp;20B^(`RIk1h>~e}4ea3g^;7dW>wm27Bu-f%D17_>0Xt_Nb zozaq|%j+)k#buyVsOMAbq`MRL8X~vBTW9Zbg!DKemb=C%LdmO@gqL+g$C^!hLAAcG z=)Uk+LO?T5A39oO{O?)*QpeQbmWrjUPxt~jqHL?_soZK#O7q{*HOiru-na5uJ{ANe-ba?WaO6^#H6`JuB!oTkw04jWXN|`F)JL!Zcz%?|h^%H^ zWr@)%bg{iA0ENHFgzqQ7fxr<@v4TBHzfe(iVzn1gv=WZiHca z;!q(1&&E)m%~>$W0y2-;xVTmcr|^5o6xc-fw}}lIqhz^8sZjty4&38tLj;f)Y`=n; z5+L|EnUQ6!5L1vtXPIrrg1zw8*~S!0&Wm-WUo|0MD|P20;6c50U$iEKJrZTx%8nZY zH9v%z*aCod5}P;*N(6Y9tR#hn6^Wt8aCH~P--~Fd^zKEA7Ypm_#CZf%^lzKa??CP8 zV`NW+)JEip_`ybdK-E1^jq5PRCJlccx2!@Nz*851@-cGDsp0PtjC;tt7eQ$>qwLjF zj8$r})V0kOv){boyc?>@XhST^k}Z8+2uK_PpC76(==u1#vN={{k7cSz{iCVG%CKiYP* z!)S_I-gp6R7@r4~$@xAd5!0*zPsho7w!3^0#_6T8*2jM9kNx(x|J9ue(y24qDgd_w zomBgUoMowZ$$lY?Km*LX9~xo5w&j>|HpUDcXQsRgvi$ZrcVaM2x^z#HAh z$$EHpeJl;NTwG9Q^1P;ZAfuG6BfwKme`N_38k^ye3}6Z&Dd@1V$lphR*h1-|G~ zI$|AXGND!z*CsJ&tAzK5wm0}{|h(|_iB z>6r;anvmDB-^PK*1>i;Pdj~lzH=2ttVbr8h>ME6E#YFOv2ab`woCv z${jZPd`AKp*n|f36d@zTl#xz|`ZOQ`p=nnKo}n3P6csY92|qA3Lc-4+jj3$UGh+G6VpO*r!d)h~}UvXF_=Y z+E24x`H33apNt%h4xpFAC0U94`xGy7m}9iv05)L+e;)z@yk7{<4CCINJcAu(Bwtu|v7WlNI0>ik zCh+%B_D;*@RtCb^LAE!Usayn(>S@1__4|cv>(lstOzUhHI^2W4J_CnvL7%k~1v<(R46n6(Xln?J3> zls&d={lM7PYDLeNl`zlUkX31E3UGM85Qmz!cpN}1^YKKl2VSWMbWwaZMspOha!-`3Y^8bk=c_FXk(pemRj4^h$U_AC|_R|NBOhTLj<_v1Q#WvCPqMg1tUcFmZU;$ z-n+y$7X7u&7d;35UQdS2az+E6^S?}@&N>=%L_A5hUPV8b@f{B8Zh8D`)p zcy|pD-K=Q8kSmv=kL7{@5#S`)g!c=1f2!s4Pu}eqPg6VqehDK&`-Q3)W9C{Y-s5wW zXXsZ-Kq-rPd}gl}vlwUNwDQS<5&-1+J^*t7gSYJ$0x{kXik~CEgRS6MW}qc^rDesQ zSXIpFoP{`8V_jv6&!j#TX5ktUa!EB#a$ZxHlVrUi+4@c(a*7&##&_rF9@1E5QW|CS z=-IM$Rpm-EE1d~>r1=@L_SE??*+L&)L+tCgvSK$$jT?HT;YL;Fc)t*QiIbHrbrOc(h&foDhcBQQdK5Lz2PUkm!TKm0s80$$j`<=U09H866#~6hj z0^f(+KdD3VW4^5DJs{yjP0u2j4b$|^vrbc3&85IoKf9q~dz@^!QMA55V@c-P%qCPM zEdhag6w|vV^0o)wubh;{E}v1(yfc?C+DINHtH5gY-dl0fQ01hwLX<(`+_BZ|y^s3{ z$zR23{at>Q#%DM3`fmcla%V+t4)u=W!LO@wavyl~EPIrN=y>*rOjz{T3xH{LXDtKG z4p{3xV~f&S`v4EjfR(T%K?G4R8%%=ee%|A^Ja^P@C|Vvp8`n0d8sg>aC5^2C(o zUn8I6C84tQbp+Z+c#5GRO!I;WnnytMf^ZSkBzo-K2AzKx(?3AY7hHEtM|nR$Tc=v) zPV{xMTBu9%&CD_k{0i6T{i^M`e1q-j_bWK;mfLZRaR-Q3rtySNtFU0S?!<-1bYY;E z3jkg0gEx6rC!V4q6-R<5%SM4`SvcuCAZN1PF>CT$K*6VAd3&t8EG&c|!pdGkUzFV1 zt5{x~>=)95cyJJu-h$^gy2fR^USWGKlcg=y#B(19flhnpa5A{^O80L?kkgBs7cKUS z99fTOmqG=q2N&2Il|cDYv_;_g1`lX^ui(C1&*jAb-@{G)UT7(xIWK*+d`zHZZxXRi zmIuB^Ky#U_Q}DVQ$=xkbu}^0c&|H(R3kMXezH{bd>Xg(N392j;1z;n#ET~1)JgRNi z2qB~V>}da+8C)4v4YwLVJq|>MwD7jhW$}+^Ph>$$#)8Apo+^%ZaOleB9jbMH%-f7} z%JY8_Q!Kgn948r;4DWGu(3Tzv9;iqJx`XtIdZeh*v?^a89`KlIEcy_D+5&)fx}Izh zQ{=r^Tay731eiVAG4u&-)7*YA2pYT1Gf8)8 z9}AGipfxvQ17ay=hee*UCSQl!HhDM0?-xS1fJ(*vLil?`lb#p%!ie=Y!uyg$ND$ck zHPHgHP$xO~j!R4z-|!$vWWox)9H57Fx44wbfscv#9UYBinaJLxiiv>Woz{R)5?kJ< z*7H7{#&MwSV*n3OhR+TF*svJxXF_H@?y-m&xv;u#0??u|Ju9nAncQvLn_syFKJfSQ z71okXR?R@ji&`rgzM@hZK~*~2HQlM5bL#E!M0iuRhTUg28$qThWDqYcim-^i?XAutzYE;dem zyo(~xjS90x;9|(kbew4sNQIdA>>)8SGgJC=*<3pR=ela4f2jrKZ#x9uYCzsW;2i|s zLEs$(-a+8s7y_@q{`&u3ym;{+(dT>bz4yak`qGzPq0is=#y8&A*Vorry?XV~(xprP z@QN$0pr4#yHWLKYEPa|;`$9!gy!M;l{N@{<``qWQ!*K6S7Es>Xt=)LzjUW8wFMs(^ ztJOL+8)t4o5wO-afAys#Nt z^({l-!i5XR?z-!)4`JZa^V=}j|<2j-=P2>#u>ci-}U72VrmJc`^_ToM){p@qg+2>^QW=Tr3?f!tpuKwgWs7;TYc zMT~r2EZ6uxB8X_8HkqI^R~8%ru)|+q&@1tAYyBotr3v7Ti)AM0o`47;-eKIW3yJ{L zdO0j(9D_?ov?YH0lhtx-1#V#lUuf6u#PXXY& z@Of?BknP;L^CP&nMDC@tRQhHBJRL>#MPi?_EMFnHp}uNkuUjw#pi%xi@i9JsKD`Jv z`Xudzko(pOKffwDpl-nLkb7c63$y!P>Z>;P=NAltLx&E1%<=Kc#ZS|VhYugVSE;xP zI#d(L=g`(CW3QL*;_H=HUiscV_uR9FWP)@m9OZB!z4*ybe)8QZ0zp0g;upX8 zucUT6`A>8$QMdmt%%JquCSMDNKv0c!K?4;R*VH4emo6jVKJbAL{C?^x)8~(Tjy2L3g@I59Eto-TU+3Sx~P{pd&A0r+WZ^jX;DicZhKLHwPX4E*at z8ZvG$|39w{@~6`nD;-?rl-Il6kG^iJxg|dj*B0zoOmNbkZ(BJrX3I2d5`+bXlZ7-A zO54?Ir1OQ^L(`)R>CADHXsc}!Iyql+Xk-8<(~f1Vg=HbUt^(g5uif)h-T9hBd#WZ| z$1&D#&j|tO-#5v?bPDnC>U-vyXLfdY?EZNGe_y>b8iU4~6#^6{KL7mlpQUU;5WG$U zzWd$p{=GNfeDnWyV5Q+X06$!ZgB&{=qoXrdOJTH8JJA*^#K0`-qFok$;R|2*D4u=2 z108-W{CqLMSIE7tOSrnYBLYD$ccM1h@1XtGbgC{vV%ZOW_`^Foc#x@FY)1Q_c%J?8 zd2^>=C>XBqfB*Y`k~oJ`5vb|qi&A?U1Sk$(K?I>$oNq)=eLVT(liLKoY&rxkmz!ox z?P-vpwBUP)ogfqcG*{s1S?YuON(FbO>%{YFLXZ^{k&));pklke=w5n8qB-J(%Vv^R zS@0Jf2rnz2__Chv-e+jG&r-^$%8K%`GLax4<}T6VLlNwk*u zMd!%$%(&0D`*xeR{cBc77<}izkNUM%x8viE+yD5Z6mYBW{_T%nfIirdkNff6*g^oc z|8Fsl(zk=>cKG8G-G4*hf8P;-eShIwrhWQ5j}r<@@!nH^f-?DPI-IdM1%Ylyc$tkIcjq0>dGa z;e@h)j4!T6O);BIH%^KGRnPJVtTwejo3v;<_M8zg{%l*Sd-qVN%9hEIYPmljE}VOq zoE2JVLWmFum9xV2wqp+ED8%r&sz+vARcoMq93%CaXhxa(Qc$hgoQ$W!#%-6nDj4{k zypb>UMWynD5?Q$JDPI)wLkizXJiWWoV4;ZT#U(90@GcyOXas03=~Wvio;xZ(Gbzn9 z$Ma};sL^OFZAfjfaIj-&@icn^h|hs86M0ebI^Q4S>`*+15D?%Bx-P%e_BGI|Q!UeR zf;?LJHAg&)w1d*j!+GXh8;t6aNqsPr)FX@9Vw$7Z>i0T1nVuakW2UTO@hs<6X$#$< zJjG02Id63ihqC7tPtK*YIzkbdzReAN9GUd)wP4@rq&~yTP>z!B{1!*t&iF6 zX-#(ShRSVv-c)}(Y(0JlfrWnMZG}T-P(Y#X-_&c^Tutb7H3LZJ_-x` zHJj8UgO@X&Q2VIZ5vfN8PgEOnrSGxy<2>cMZidJ&A>d8=`5~zPa7lHVyeCODnl|B% z<(AGEQfehFy=tyUrjBVkqD1QvV>F%3EA`0AVK{?3yJg>VMPFpe`LxURulb z$oz4&mg|w>`d}y@8SC!(UlJ~LQjZLc>ya5P5 z!XJ8E#d>5Wb=%vjk0zDmd_6Mf9;0<*^tY|xdSte(klTVHkj%h1fWIEVpGLb5Up}F@ z9+_c)jq&FRb@O}J<#7IlV>#MMlh+vUvD>s7L03UxxvoBH*Rwwwz+` z>yc6IF{(!5ivehN>lMHZo8ZmeS&!`Fdpbc_48W zzW+7`<$7eM@-&lrWbNblT4dZ}Ju=XCgW=zZQgJEUW6JUecwddKUQFx2&Tj_d(f{R1 zXqjDnI=6C<1NdcWbOnH@9@+Kay1)-!x*~7H3;~sK&YT1r+A0MwJMfs?{SiQmIEtJ+g9FA;m(9BG&1yj&xA%Ri?8% z*5glAS7#h~I2n7Tk)m32r_VviJ{5b%!KIVb&InNvTj_Q%oJ-!~9rFvx6 z*CVUKQX}=qd|}SKIv8mdrA_5Td+STKpKuxf1bwAS>XiZbBV1dl-KtN%DtaUda+Q)nd6_y6KmScsVwG+g65j1A*-?5nOer- znyQ3XRSnCRf^>Yo5D+>=jn5ha@C10Oa)S)vnX6Q)a+N+4GIjH?12*wM(|Tkv0X(E) zJ+cH5I*lV|12hWiULEqOMOtrz%T_pFkBKvap&nTz&avRV&eNGo4oGtDS(hAqNA<{3 zt1ZQPJcX(L7}X_fg^E~BsWH>462UGleVW!IW0qXVdSub97>P$E#Cl}eis(U#^#XsXS5@E1z4g5vG!QWcX*ym!U@qE98r%wJBV%e`jvs*kDm>8*y!g>pkIdddW0X>jPRjebQ2mNJe+*YoL2-Q@-|s7_9+}T7RON+; zUCL_7NE|n2C9X$ivN6+EkE{_ELN*kIuSW)?_R7MaKVL}eK>$Apmf1oj?BdEzRnm)6 zG#@XD*6C0UE0hDvRjiR$jOvz7>XEhcDI>rq_*q$vtWMkTg|NJ(B~_?7?o~GdnW`R{ zxY_WoH=^&2RcSD(zo-2QO`b>An^KRAiq!`G585v;tv|4<*<^zup;|!7#sDM@Lc+lD zKzFD4gt?-q*a25Z0Yg=fj9G!Sla0<`dR}TMbHqhvO z9Ico-=SwTb0G?uwDM!3W z9q$6A_fkL<>i|lDsQ|psN)V8$6k#-pzIPp|Jzb0}?sc3AiP%cl$oGJ%djKF+cINYi z3?+2^sy~IKRXs8;(CH2ll?!H>mb|x9zAe43tOp?M8fZ(M&oa=jkVx%F8S2g-0^o=0 ziLE57R~fo8_(r7)EA*TU=yW_!Rq1p7TWA`J;GGcj7G=p$tyI<;D7Oq8cJH5v`6vGJ#^6DdLBOK~JvwF5>QO&KuS#26+s zfnX;}szW7FsV`t3(qfV4P@jUxeeb?|e)jHK`{$f}e(vA9_wlYX9z34&?ma)>T6?Xv z*IIkuy(s6Le2_QVDgjsYU6*_yr8TclzwgP%zjtB@xbo^R+W>JsAe{xrnM4AfLkaC6 zl-Tgd`HF_=u+LVv?T7uCd==kKI0-r7CHP|yD1tx9VK@%KarYCO9tqn@z_P2qJQKLO zfKqD#5l7f9Y9pud9}*w|n@9XS&3es!P81>XC$t$20*9j*KuS&l#M< z@c*M6?^?1bZ0x#PV$7Q?EC|txo`WSSS{W14KBs9m#nfVEFGC2#w(T4P5$bjvM~D!@ zR3!D=t8l*^*2O=ZLvA!yrmNI`+JX&rH@Ll7Rh!UtH7 zWe9-xmJ;%ZG8cl<`2LJqFDQ?WBrOZ#2kxUWaDXt|v|ugv`cX?G)-(awQ<}!E(di|jg)XVT2dR+Sc|{Vq^m3-DnH1pbfBhNq}FL0FRjBr?;R!=KDnHeEfl zEnD1c59hQ1KVq^ zm~dX99S%SG(0ySw0?=`r%asyKhs;7pZx6Hr`r@K=2MfjtaS zuY3RzG~|s&E{gBZMNd`-QH)1%!C+MafLjN(4p1cu_z>Yu+Kz~d8gXn)g_Dt#FMIVS zyrK{Y&_NVUSfLs%0ACK8)&f09TOCo>BX_w00;D4t2=L(13eT1|(0Z|t70$KsdgYrL zmaKXUKniHP?Z4H z{4Y&*zSN@DLd^hTS|Grdxi;$_vt6zBnk^@6Evq+5;ZPZyt0-|-T>?bnNate=*J8Z8 zj?{EIBeSQrtN!w<%fVbwkayit-X+) zDkHYK1b`x!f%DtA;{L?SiadON*_V2j{lyKN9mieixUT4XER~xgaR;^yvDGC&wnA_l z+%P<0L{OQzKrVk_*>&>)_$yAK(B~G51ha#V>xf=Iio^g5V#-zcybmAwr+W{8-*Yi^ zCP&z~bs-y0ik{d=1_PIGvR(H@06p6+6lGe|bwxr9uTg!-5yXO+8YTd@@7}*=7xbWu zpi>%Zk5!_PRRQkKvK@CT0DrJhEEX`ODbkv5K_tXbbd>TAK?k@9u~ap=wO;wqKYn{4 z@V)bZ3(t>RoHWO^XX`k9;KA;3i-ijd#V!Hd72su7T!RP3J&*533^n_Vdhg$G-?xXL zB^Cn_>$G`olJ7cC3S4)#0GBrd;OWH_c%9M|3JdSTcjCL-I!5-@TUT5TARYrQ_0UwX zk#ft01Lu1c;*E__aO(QN(_IhuO~;g@PT>n>wG3+mt^zRX+V$)1{?UXD@-4sR&N)ED zMi7T{sbQ>9Yy{5E zH$^J${+V>G2^aEhj;|@M4*;Q8ZCH2rzzG{C&TkC|TEmW7BbmqHnSl$*bp~7y#>Mrf ztWdoTlr;1zmHxo<&H<%cc?K=BGF|IY08ZA=j2O_tGNBq0lWY>f!@nmlw5^(DE z|B{SOq7IGbk4{AIlgHtI{^E%x;FKFSi#b6!UkHwBz7U-QN6cVj7du}@EHpV^i1TAA zH?kX52Q%UD$DkUE67z*{F3~#=U)A3ELZ{sDIDoVkfFmR33lVBB;L-z=+@_Wav8Wu~ zB*tgy7T`=AX_VnppK*Dl!rcwUd?CE{xAvct8^a#~naW{(PZRZUjzS z?i1X0d%@!(aD;Ci5}gBR0o-;Z5mWGz5!@*%S+`>k(gX|^1-J#W$oIn2 z#VkZPiuppyJnjYexhx2<9WI%Wqu4Z))HPa16C`(zEnpW2L${o>><|-(%`sl+?&fYc zoEMZ>2>AphV!H)k1k1wR$N%o5QHtZFyZ0%p!eY5b{XpWO6*=z~ssvOtFx|$uhDu*E zGBQFZEg@n&sAOlWfXI|kY`B(pR4!rF{EJF|b6V9fkB%OZ7DRJPv;e#vn1IY6T|^F0 z2#YnI44BbDq5%;Y-D7#qTuC|Y3Op!K;1TML)|@M0mEKk6(XcS6JD^86u0`x3Fr*+k z$XoH=_45_h3<0{Q)bfXl6I6hJk($$Otjh6}b>R{$iXUwGld|)LI1i7=$wc@lk9qwgAq-VJwz2tq+XPsMn&opHnh_!N`V3D|y8~oA^Mz85o4Jp7)7XRvg+qBF zbTINoqOK5I!J5@sA|#YKOThd0UN9^Nxn)v{YZ0Q>jOkzhc~2c)pMYIY*B9Ph{(K?m zeQ~nK+{kvL5@WAwIaTKiaVsY?W4W;>iq8sFuil^tanmhV=Q7~Is4YDF{@O+P^MwdH zZk)}P;Hd)dqIbGy`d@E@POB_~4Rb3@$sqvl0~bO>Y%HWStf(YXHjy=Y=b5=gbl>yV zCGear!Y`vn=gL`)*(#vOqJ^;QSAh#f&lErkXA;h7nt*B?)Nuq}?~Ou(jKzUZBU@0O zE8Kc9iP(xlPtJqtvsIvZ4pNbvl~Y_OhL8}QF>FHMD23>#Axpw_bE7K)5fv-TxVH%_ zL@T3ng*%NCesJ=X?7&czskr^+_% z=B+lFGGh+WBcn=z5gR=B7R2p><=7!Q4Z?I^I- zCm;-d0rFZVO^(R7V>{_9Pu&Hv^m^iS*&M7M(LddiX~(j_R*!&@wda?i$J{2m|1fAx zj8q()m=&LK836c~Hug-r@rRq4+r2V$yGiI2rO^;+73GQmCV{PyK|ZkAw?U^hEYf@v zAVysGEug3;UAJjIcc;9<3O#)yu~z62=@^-tr7COf40#WV*zyMefQ&YpNV|V}IF5-_aB4K3+ zZMgQ4c$5DkXPCwbF5vDgR_NXu7N0$Rr2vbA0xKg6O9q%I%2-?eK2chj~=CP-UmL>dSctt z8FCr`g9sVQs_Z=rN+9po`m5$l+B%!yb&Pc{ii`3 zE)(&!;}Q@b2^>wONI^YDrYOUK?l7_Z zG3iQUmRpLEh%cfcE9tv<0Dd*~$JY3F&pWa6h1_rc*F5GFHv*XXiPqpMm=Qxm(zOP#7*z!xD04qvgV&0C;NDiZmZ#eQ7$NUWL|B2xTz>^9`1iTx-bpQciBjrk zz@O;{Mcr>sB-lznR=V9v;o<5vz z(-8#FaV(b*CyZNTK&$U|#&Hu0_Ix6LraLoAgAgL;3(4K3f+PaL?=*M7cDPmxWC(!2=fR=Z0DI;ni}?YApdEm9AR)fS zsvI+6e~x$l_MDQ6WDCG?JAAg}17duh0nAI&1mGw{;R8Z|2bhZqE5z}q*A1F9#@O+4 zxxBAbD(xR09)2whL$)8bk&zKG8T$VF@Bith0Jlr&BR@zg<0XJ6qs*-o=X-FGj#`b&>`H z0ql!jS!HWtx_rtc1jBXVYzyj#+V>raBy&-6ToBc$#I-q5qkag*I%ub z7wQ31`hVd6Olc=Gn-w8t_4ee&0njh~j*3r&6-ti}R3O&!n_X^wn|kILO%&& z-&Z@p+x%?a=L(x&ivaT0TW>u-$@0G(#N_jN-{oRUcTksJdg(_&*2-<{JZmqYl*DpZ zwTB=k#FoLH)5A`MrrLfY2|!;9_RX~(f|w9nnt;4PzR?FBc;Fv!X`T}#GMJ8k1@^ug zI&lOsA-1|Aq_)#GZQ67>1kdkHa0}doDb1R$CtyGu_#Op6CmOPyz!P>ZaE*i?_al(fIiskwk*CA->txRRdeO*W!7*8((lcl zJ^Pb~4jp>5MFNoPTN=3m--YkQcPk8JyaZ^E70uV#FTC)=*J?y-cPZ2fj5X$7vVGU*$Vurq=BD~Hba2krole@F5@T;{-)+^v=HE6?Hw<8xOY%lnX}b13r+SR zEv3gX<@oXOv_^{SA6L&BPbb)NejhEw$Bfn(Y?A9At7T!cmwtx-~@j)lU z{#zt}br{SlziW=4wfgRs38=EUiVz)JqZj#ZI+|*OCrc)EY1(!W(DH<*C!XF$XlB8S zT1%6dGR4W2mtELe%A;8Vp8UynEGaV|K+gi8GmZSGm@kCisYj>g3(1uT;C0b_p=cDJ z^TSwE0KdE9&zH7$eW8EdvVA6i#j;)t0Gy~x27ql{YssuVMvbaiwTek`V-*CREbkS{ zI%EV(ckP7FcYfj0rOmA`1c2uO$fzEfWm#wH3Rto(S+cm4xkO=N1cI!U9zZ*mtLls zr|Of59ha59Qn!p*OiI)v6E&1%y(0-)*C8{(6B4h=ZP;?!pc3URX`;YN&T>y zSiVYKmHkP&W!uMq``x0XonFwCsInG}?S{t=h$H8_FZj$SqvQ6H&Z(YVm%zgX zQpNMF#^#x)%i~1~AFWdgHkgGu^~fx{6e+KIh*Fx1&j0i$st$aNiF#zo0)bT5BUAH_ zXilAuCI&jU7fKjkO5Pun?Z#nA=88yD*N?5o;YrT48VbaCXB`4GZ z*hE*xYKP~UgVk(-BW6uKqD&c>uyNEQn=toN6Ovbtj2+JW`dW6EGaBZM;boe?=q7Ef z#iaBzJ70(^s(2=!)j9RZcnWKBhzZN<@^n2i+Hv*BREy@+BjdvB%en*|M1bM74&~?o zKPcTzt17<^p*H`@Y#w&ah8&4QKjqSw}pr?)=W(-EShx~J;( z$QV1wu^yQrLeibKtJfpT>0Msns2*9WldQGA5IcaJifX7z z5fX(CL_IR>T^s4Rj8GGw=X*Z56=74gWx)rVD+1q&RRN||#P1GZ^ z?PzrmBMhzC0`cdwXB8#h*hFc=vC7PsvcRR1xSAUvuEvMF|J3ZF^QPCRz0#y zmMlELjna&R#_Xb)qb7MoWmXDgo-smpGZ+oGF;@g;X&i@{FaC zslUDu!~wg^jKHK2V5jPl=@tZRbqN4D+rhL;(PAw!RS2`;={C6i@TdQ_98C8WnSvyu zVs!)c$lzjGk8Bb+|KyhKciFbH-gZ*;$fSiVBeuE(KsS8?>yb%-kN@arJx~5*yQoLz zs>GVk21bz~U_xwl2@rY^hPQ#a8lF%hl%MtZQ(NcTuJelHx>#gN)FZQ1Hba9)EQl#r zU-CZu)5Qx8fZx+%J+c}yFRGrZdStf!qU*S`3jkbz7u=^&AA%SV3u0=R0NgHGbnY&! z1=g;5WM+Q?Ah9ymR=40r^~kWmR8-Q7ChL(QmZ}!3)=Mw!{mcM7;5@7i##$98-4WV$ zANW^$fZG=Wa#_*~%h*LJO`{$eyc;ppG`aQO`?(9w8S;I9F+6Y`Yo>pQQtq-InJuco z*;@eYX19R#$P{?jHR_Sc)jvRN)&cm%`0lojk!}C?mo5hoj{%qJ*CPYp$M>+Dm##;~ zRXs9CfVNdhFCa{CUENm#MqRt~{7+BZ`a(bd<*(8wZFB%3@J9|LIWIBSZIG z*CSJ=GEt8#46gyMPyG5qTc6v7v&-**E`KG&3587Pr}C=0Dz1$1h*6I$<~oRs$3nIm zu3H1jdScfXg4UR)s>4;UN2c^fI%hP=b#pd znN(7v9+@|w?`w5yy&joYF(WJwlzWBEn5;);Sxb~ZBkPfc;eHWbLadBOtVuTM1c=(( zOpWELVJRSDKbYA>Ju)?1rFLKBm>B!89vS(60R{j^i{w)O$=|pD0000L)p>vK&CKqdfg}X1 zuGK423yB()RKaR5ige`EsI(wNQbkD|yEL+~lM-;70_}w~R~nk5wyv$?214pm2MMLl zUFtvrqygHRUWqJWrNxyifrLn*1obQvr-1Fd-I@1Zzwdi*X5a42?#}M)-R_Z_^YiY` z&Y$ml-}n9A_kHvBeOznJ*77FU8sGe)7x>uL8w#EO&2M~dunY*%UWlloMoaZzB(U}R zPfc>cXE_(+oZ}wec!8kQigY4eYjsR3Jq51|O6k5c(vbnr_vbv{s|eviZ}SubZTg-e z!Ai+-8Ob>%qfLw{_}pJ-*>07e2*7tZrBfU2W_S{a2b3d2gRiu)osU$TAz zUq=Q|MSuxA*Cr=%JO zdzynin;IDS_-}u567DxkI3vW=p$85u7|h`;1AKCAXfK{+n%)EPs6M@n{u)6+qD@7h zmbFSsg%E83Wh(Y=35UH9?lQnE6EQPLNG~9y6PpUNZ2*v_689F|q~eM$9*lbOo2=0w z0BF&>=RztdCA|ueLW+T)WDGSvxSSt^85Fbudb$Jy{~aVI#P zT4%r_4WUN^)x*R=n{hxVSlei0+JV7A#|~L^_=E1jgqZl%sz+Yi8)!g7V}epOCFQh~ zats^3$9;L-4S$ftE5vpgO@Han|Ku;6ukO0#kH08|=kGyRgm-{m;rbdn{&RG!*#`R2 z$V;_@QmtD1+h(G|T6hq>SUgVIk-M?2fC|xtjY`y8lhMb=fSN4HFgyq@!4+Tmt1rHm zVj!$BDf77;q924SL(~H3@Q0!(8iTe0-d_Xz{s~&rlkk2KzMF=g9}B~9S6HhZ&vXK% z+@5qm2PXUmf3+DA?E6+Q>JYyd+UJz*dFv2921xQ4xDYb{DIb7ce+}Oq2De&5ga$o~ zPFeJx-??G;Zg9{}fQvnk-YN{H+e#xNGY$8&_ig@M$cWvZhaSaVC8E${jC~(+#f3M` z1-FJvae)WNd<4$j4Mb1WojkE0&q0sCqw_@Kf~*J%5d)weNPJkUN>B&vQ6$hXz)c)M zjUqX=5vcqWe6<^$MMF3eYrrEu2jXuN{aFt-|48gucM64AqYA~uqi+s`pQu%4!TT1MnvzEa1j~M zKn$o2I=O~mZdIf%8COk+8MozdzeQ2l1Sa0CWel5j%w|ek45xidaLO1EJPm{|5)*-M zmmffE1j-fiH3o~apzq1Nj2jFB4T)nXl?SrL|*md;O`W?zYBJZ!RyE2_4{qF z-JunhfDtqG)FkNojIjF4Z0^gd0P6hR@ct>-y9FfTN!p@$P`N8*7+rw_8mQiFIDV|2 zFGR#~BAAfG4{itI-Ur|8<4PTa*V91sBpB-*z}y6>1>+L{ql-Z7J~;NE5b`vffBe9g z_wH)C`dz;_^#$;Syj;GJU!?a5@>CFu6bKfR@i@SVIggNtbQ=B;KH=C|E#;li(}!T! zJ#c7hGzMrs2!!q7gt59UoQh6?iyP3VzULwdMT0VC@J3i^q+D<1GVF&|Dl@-S0z(Z< zZi%x|Fz%fojc2akar4HsGgl)-YvsuGC7>akx8e;f<||(%Fp3gNus(_Sl*#Q#gj~!p zgh>%!IZ!L0Dva$HnuQ0D@XLMo3_eM}{$_XSaUhMjROD z@mN3b$rmb^8_gfo$3$w4gzB`hJH4mrIGxxKeh+7q;1>I3B=+N>CJXL$?+eA49N%!) z&3|~cNw);{VMUIhKI3N1=g{>La`DSKpYx9;PgtQI{;+$>UD=X`L0s zM2s-Wg?RrHTy$Mj+X88o26sAvEVsv9BV5VERujQl_iFD8Y4%EtIdQKi>cfX5y%=}0 zrL{o&|Dj>R#}Do(K+pxDjIuQc&wZGLJ(##F2ivi)#h|m-Nadlk3jp% zL`Mcx`TUA5ZGgacgb@>YV*?-(h-W%nX1sQe+!GzaJ|uoM=L_lbdC)Fk!~`&)b2@e$ zy+&Yw`%4soffoaihp`l=Nl&ZCfL~&&G-?^}fdP?|0o4D1f_;p9g^EaVIH;jkbp|fF z`N8}uNjX<}jB7dd>Va+f<_l>7YU7nm?|Y^E&LeT*8J!R4!3Oj^gpmFS*+wtkC|40< zG8$*Hnw~Fo@hATt&_>J}qP?jf|INo1;^dVfsFw*t0;j>ixf_go?t>&%*c+T$o8n+o zEIgNm?e4%0!hTvKdoclJV;z>hDZxe=$O?l@iA&?GeO6OH#72(c& zp=1t4uX80R_XDbgQ)E1CjJv0R26PeB8P8`?H6td50STmFkCkn6Jza8O<7~$^3Z!G8 zrwyEEs1PtQYCgy)cV=#t!x!5j855o~p-kGZ!Hl7H{stTvJ1v!3B(%1CitKZSkN!c= z7s{9&5ZfHjH&0tMz*Nfz94pZjz#@Q!3~MZ`PP1@%%rtlp`!vl^RM`*s20vpYZyoDG2jv`!C-Um8gJ{i=g=T@TmG#@M%tq+SzQhm$mI&h30u1C7g3fAR8rH zqiEclIKd;_3q*Ymovp;v6y9T6_>VE+C-a4viVnju5{_lqSnb?<-tznZxEq)`0iNbO z9FK$PHa+^b8Qp=Vv;-O^j_Q=yQz}BJUmB45fkLm`etDCf@v-6!xBZP z0fKh}vlHYiQMl^w*BEbryNxb9o?rJrbQ3Lw#{sK0AZ8-I`i2zMGvMkjIShCd zM_@oi#Bjb5Zcg)sz#*$pVC0wKO6A1C!*ew5!$biw)x{H#)AclwxsdRYiCdJ z3cdUzi0DeOWU#lHutu5;UY^;H--}Y>88l0vFY|>=#vw99 zW6$Gj)WiV3C!5eF97TfBX~d|^vueUcGU}34u+g(;uj3d{XdE!v1&IW|8xaEuC*otM z#2iq4AI%p6f~U1tUPLuf0Yqm`qtB>5vC8EjzJY;OLp5ufa@Kqtyw1Rjmzq-%&lgJE z6z0qqVrITjFD?k{(|jQmw>COE3Fipes+*5GI7LW!YP)&+xc^=g6 zN@!Pr>K%mF+eElD1}HWL-%rDFHS>!(-Gvc%GY-(xcF!0i=(7r{w+k7)4{o^+f+3nO z1S&8IaCiq8@Px*|o{I^M16jC?#~kFI565`Nm+#t~nlDtE`C(gMsKq$o;A@_7fEoNo z-DO74C%Nz@6BtFK^-3|uTOuIV)^e6d(Va~4L!9x<`9kOmu|V%JFzeSNunanSR3UCK z8wVUT!14u5jl7kq(YG2eHTJDR&fX*v3ZRI+Jg?lh+?+Q?^*T^*-eI;Yedb3g4fb#YpRn_o-eKQMS6g-$YggH7do z`E4K>bZ98|lKDbptTq|g&u7Xe}Dc zpw-s|mzlLi=7LP11md6WTD#HKC+Z|tzd4(1U0?e+$)bttG4`7Y%$zZVAP=?lK2Ec*Z1>xTPfX9_# z{rw~kfI#CS(OQ2NSFBgPKYgyy`SQ+RT-k?w9T`}DZLm^VpD(n|z)v{?z8R}}hs~lk zRP^3&eiZ^PC!sy9TWlF2Pjh=3+T@DDXge{&_x}qom4f$KWXY5N{;E(O2KqHn@O2v) zFpOr}NDmv@<778BFpR#&BGA04L4_Q&Y2a{3w@OL^O=v?L4zUD~X5N58&4hBRSHsT0 zItr~bu+G4nAs!gy21pXV@WKmUx%b|CX$tR6H{JB%OE10jW&oL>tAHfKP0rlk@9nwg zp2Nwu?{wSq&p-c{oz6>WA2b8kU3cAPxXs(GHeh@EjvYJRo0kE9Kx(sm>eQ)6AAb1Z zuRrq0BmWJ%e&T$6`tr*!|4G*|ZBYrFIdkUeC!c)s##?T=<;u;QH~;eEk3YWi_19nj zzI#j%^?6c4A!SMqd zN=f1RLIZFmP!b=sSdN5Wl>wEAK!0@Lz=2CF>}HM~Yrz*fhXWW6WH_KfyRcVZXi)J0 z!s^bku`x{HDC-MFwhhJ?DzJT~h%YqofCjc%OV7Ohj1!>#tn2jpTFndjZB*;(wGb1x zl)%svzMh#|XQ0mvL{W5dtq|?fnlNzW$dS*(7q6}X;$KBtQz&G;M1QRa0oo6nQRt-o zVl5DVGUW@c#qCWo4)|+b3hU1YzVYDq3Z1|8!`BR!0U^9jmX`crK@Vbmp>KZYiAm1I ztPp%Wo^aw$O$dUZWt3-2dL4tPaY`$_K)?FXt6Y!F_k%gl!+K=GE+&~5;#j;o-?)@= zPDartT9UKROmt)bdbr}_D&3ynQ#miYOut$3BnoK-{MD5J5KpTX+j3srY`CJ0TaS#~ z7AC3o#;P%ZM(WvRWV@{hN5>|rB*~m5u4U>-;aiU$>3l8cC+VghnV#D6TfdRB9+?oy zO7&is5{MUFMFMFhBP;e>f@JC2AfO-4Y2Et@Ev9ILmu&-Jq!njS zs<@mNsl`-ZXPW0;V65GB$OCl-&w4$wpp@u%KkJdX=l5gjTVWTZPpgnc8pA;SN0`G^ zj?CI4%UGfcxk~Dhso}0cmOT#WM&xb4;329<#)h^YSsU9K%7Df}wsbu**q2x01C@X+ zg)}`metE#TA~+h$^W7Ppy_wkIYm?X;Y6(_g97T)Qo9h0PB%S zN%hFCn%MkWM)uA4OgT!qh<*{@svcR~2jnhKqS$W6Ipet zM+QB$SH|_o>U9K?dSvkW0iDz%!-8b>dSnlN_sQLnj81@?JdaCzg5$TXTrSVFRcF@k zdSs?oZ852OAp~2KY&xzWVXL5ca30kogFO>eU`o^PiTB5`M_kH_cO!wGbRG)>0`Xz3 zCPOT!W(_Z4z_X>hjPHWe3}}5J=)j6uNYyirnP10#x3CoNb$y{ui-aY`)UX~|7@oi) zfVEo4OeMo+2~aRJ3N5Kemed`Ki#53Ayig*dO+B)Hjl|mGxJ+u1g;X3TuKr8`45^2r zwS`1XTvE16PzAW=fGH{7u+k%OT(uDEktJ0R;}wl#!&j!%JJloOd<^UJd03AO81Ow? zkIa@rir)*T`bi!pL?^V#F)+>4=L==jHLI@)MC%J_TaQfly1r1q3Twt<#tK*nm99=Z z<-SVrdN+Kc^@TLnBa0%0(RqN*E8+bW&|p9dZ$gF=ea!0_>Fe(k-f^@aZB=<(dXkY7Xsq{~?O+!*d8 z7Ew!JRPdxojvH&c^~m7(?0RG%6{<&;BO}t2Gv_$%mWhCBNt&8u<)j5A_>5V-AV>_A z#stnrfzh2n=re~OJ+d*wnPU-^M3o(D^7XGC87@z*{Kk?*7VndKWQ10pNsn+dj)3&i z^~jRitSkI{AXSgdUGC6kvfV;dv;eBY^kThiBM>?}|LrFbhD|*(-`@t(D_V~%MQP_u zL7Sy?cv6SVBc&xbqF$~GXY=ltO717;A|49}P>mB5t)8BeOUi+J_F7WUXu0z9clCX#w&qR;i1;-YGP0>@4D$SlJ3RF5n!s^;4y z7q>N4S0qt|gi;Mx)v)L>=c4;^UhYMa-Z+m*`pWyCyl6~0dOfFAGHrke7CLpI)l6*l zP>)Q%;^snmlb=2mTYasq^?GE<_V~a3pwRih`Tk$&Q*yV*tyZfIHs!v)zR-ZT{}*5Y X@E|_E@$69`00000NkvXXu0mjfVhMo+ literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_speed.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_speed.png new file mode 100644 index 0000000000000000000000000000000000000000..4d3a18c0159b8be102a437166c793cadf65c2a56 GIT binary patch literal 10382 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 O0000N=ZaPRCwC#U4M*RMIE1+H@hd&64Ge0 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 O00000S literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_update_and_reset.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_update_and_reset.png new file mode 100644 index 0000000000000000000000000000000000000000..33e9b7091cec2c1f4c06e17b27c981134d3c00f4 GIT binary patch literal 8440 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 Hu0mjfF4c8W literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_volume.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_volume.png new file mode 100644 index 0000000000000000000000000000000000000000..fad9aa6d08b4cdd88a1b5418fb4c8366773b934d GIT binary patch literal 8423 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 JPDHLkV1hE_jOYLW literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_web_server.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/module_list_icon/c_icon_web_server.png new file mode 100644 index 0000000000000000000000000000000000000000..101e5e7b34f8f4453a3ca9780793487f08e5afb4 GIT binary patch literal 9096 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

QlcP__cki=`+rn|c8RSQdy; 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/rt_button.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/rt_button.png new file mode 100644 index 0000000000000000000000000000000000000000..3d4f4d68aa9b7e7b20b7d2a0f894c09b62a886cc GIT binary patch literal 7805 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/taskbar/more_apps.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/taskbar/more_apps.png new file mode 100644 index 0000000000000000000000000000000000000000..e533d7c2da231895486c2fe3188447716f8c75ad GIT binary patch literal 1915 zcma)7`BxGM7sX?fTb4_k3zI47Fm9O(Xqx5D7`Tj@rR5SxDroLIGNx&bm7{67=8|QK zQl{b-t|dsygqqtRIhs_Eh7yY?efIqW%{}M6`@_5Eo_EfB=e--A2v=oAO+^3zpbT?! z^4{UoJJBz{dndQeqP~+xyt9A&@6loLNg=T)z!_w8C`t#04MC&4Q6b2b7%IvZ0FVR1 zoX+?p&v7eQkwEADBWQFcldrEl*LFdvR!4VkvZL);jeQ{`0PN=MR{x=#w4X;MWqD+I zoN{qkD)+`5m3Nr>^m~A!F+cZZz?N)wMAHF_u{-6=N)37`bN-)4ux_j%%2Wh|au-VD z635fS634kY8Y74Gq;#sxPK!SRrMzSHa4JE$GnI$w0yGSmTqfKsez(p$?m)MIL2 z@vd!CRrrPund(=>N3=8$=boqd+Om5g_1LKUGXwde99c@LRCYv_)5vUEBQz$`{rr5{ zodh#;;P_dO1h@xW@b{ARA%TAABh~x!#_e5eM_p)%(+QHzD%?s~J>x+8!Fb;uEu*Qa z7ZaptDH#EN>BtYwoi!~(F1+n&`KK*$`+9(qVKhAOl?`D&Twu7{vsu8u9&!v<@H6LW z)Z!C6jmf#{KSZ96=t&UbsJ(q1N_Y z!@2HY0nMmhNvw&%<@Y+R2hv6;#C>A3jZQ8v^GCz^ul4@caC+5rPBnVwaa-Ua;+X1q zR+E3Q@Tq`3zU^;+QhaL)UGd{oEAN&@tG0?TR(rPtD zdwDTLm}gw~a~RWU@O=y0=^eAydOzgKP$<- z`}<2Q2yVMqS+jB4!jRmggDIVgK_MLj&0oiu?)aEfw|IkHq2cqekr`o&FO>e8^S1mp z$)Yx0qATP1lL7ec!Z}_>D8bwSYZP5vxZ_yubHc@}qXoKP;%&yBZFQPDf3C^G>T#_* z$yB@Fg9UfmA0+f5G#kJ$hLJWDVFj8-KxqG^zI?xRP*`!U#7;8TQU7HDvX7Akf;yOQ z$du*eww@Q+TAw(xH~(c^oT`GUTLYwUMRV}_6CHxQ>7KcW%*}cA&jE_2B@4-%f=Ybn zJs<6Wk;|NPqkKk^ULHqm<-)qfG9fNktZc1Q1gy+B?FU2ub#Z>E^914B*D{N-aS+}4 z4Ki2yEk3u7(z3ypvu)fC3hE6o!IS5Br=hL-50mK9jG7{a5PoN!FH$R*pH=oSVaAQr zEFg{SYmc7rVJ#9Nhapf@Z}9W0+mm1pz`7}P5%k8=)mcI<)yg7~AzA~ey%Pbc^)swf z0tAmON3c%URl&V)<@IdBvUv^*^pb;(*}pzeN7&N555-*8vQ}%i!fTsON!KpR{b^_4 zpIls~(70{GRn_-DmLIf;Wro-I`NTLvEo|!bBtX50<*i?YH{lFJ)+x4Frc35Z--*z{ zs2Z3kf~)dc`}n9|R8ryu$YqU}=fi8DAn+;-QzkhX5CyG%VG^7Dq30;vF`bx}=`T6G=+dGGi(M;!zS`d+ve`W4tJo@~f68n5tXo#C7 zy``wyuHH>b33Rd9pDR9nMC(EG7dv(_GCBi0?G1&dT2_~eLXs1-A>u z3P93ujABTL?}zG>7b(fwqYNlnO|o2cOQik%IsOQgBB^>XV3Q%*7JIFrzpG)+2&Wc@ H;H>`vmk4Y# literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/taskbar/showdesktop.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/taskbar/showdesktop.png new file mode 100644 index 0000000000000000000000000000000000000000..7838c6bed447d1ed8c80c82efd23403d87a723d1 GIT binary patch literal 1445 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 T85zLsA0E~g_SlCQ@A&@#vSsGi literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/taskbar/taskbar_bt_apps.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/taskbar/taskbar_bt_apps.png new file mode 100644 index 0000000000000000000000000000000000000000..7be67834d74fd16bcc1e51827cf0b289a1e0e328 GIT binary patch literal 10062 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/taskbar/taskbar_bt_widgets_shadow.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/taskbar/taskbar_bt_widgets_shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..f17628080b1317af710330f475ee753ab77de742 GIT binary patch literal 506 zcmV5MtVG*JK-nZLt3G?Q7C@6GCWeu1z%{#&?V%hK1;2xEMb% ze2m{1DN7IU7RILMX4_O=93ViP4VbN9YQ~_hU@V%|6f8FjxyD}QSNxTyM zYL%Egcpx4a;)Nyu9#j%c7(ieE zP7UyiPT?LZ4+Dy3iU3|RfMaGwk_SAK^}rB-%a|w!ctikhN3vthR1G+g-N=xE`hYuR z7T3;f6Nv(DGYg6}1iA=oQk#>MNqTz?CBI|q(%^w~f2l;Pl|7i7R cbZB5?5Z7XFjC!(pEl>x8r>mdKI;Vst0L)e=0{{R3 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/taskbar/taskbar_split.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/taskbar/taskbar_split.png new file mode 100644 index 0000000000000000000000000000000000000000..b731ff8f5c937bc1f1baa101b70ff3f425e6cbd5 GIT binary patch literal 183 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/taskbar/tray_icon_pilot_view.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/taskbar/tray_icon_pilot_view.png new file mode 100644 index 0000000000000000000000000000000000000000..5c1672c806f3ebdcfee43905670e82e744b1bf28 GIT binary patch literal 6852 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/taskbar/tray_icon_search.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/taskbar/tray_icon_search.png new file mode 100644 index 0000000000000000000000000000000000000000..665d12961ef2fcb91bbee568ba58a901f02a6f68 GIT binary patch literal 7569 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

    wdjA~xFR)~!|8nhu{r?%G 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/taskbar/user_menu_about.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/taskbar/user_menu_about.png new file mode 100644 index 0000000000000000000000000000000000000000..905febfedcc47374fcb1cc2d7eb14d76cb9097d0 GIT binary patch literal 3622 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 literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/taskbar/user_menu_restart.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/taskbar/user_menu_restart.png new file mode 100644 index 0000000000000000000000000000000000000000..8a0d37d58a62df96f0c75c14481733e7062e8bfb GIT binary patch literal 4950 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 U@amOpl>h($07*qoM6N<$f*$^YE&u=k literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/taskbar/user_menu_shutdown.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/taskbar/user_menu_shutdown.png new file mode 100644 index 0000000000000000000000000000000000000000..41928003010358d004fdbd2a9436fa378dd623d0 GIT binary patch literal 5475 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 ZFaVw~)rjs=iMjv)002ovPDHLkV1nb`iyQy| literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/widget_window/widget_rt_button.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/dsm/resources/images/widget_window/widget_rt_button.png new file mode 100644 index 0000000000000000000000000000000000000000..828bd5e2aa256fc26902ed11dfab6da0973cea99 GIT binary patch literal 9577 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

    tv;PXIt?e`T_~DXWPkf?d-PDhlh`%n5fQ+Ye+7a zBHPGg4P49cfKzep@zwn2#ymWagY=);E&j3%l`2YKwUnIAZ>)AqIYb*

    bwo@+jdM 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 Eg4mKjNB{r; literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/scrollbar/scrollbar_black_h.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/scrollbar/scrollbar_black_h.png new file mode 100644 index 0000000000000000000000000000000000000000..33ccb47515ac57ef316517f65d86487564188ff7 GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eM!3HFEez+qDq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6=`_7IEGZ*O8WEvzdf^NLuaGQfkl})zvnMA>&cS1YEWWg gaLML4BZ~w>8U}fi7AzZCsS>JinKgk978H@CH?vT-=3KxL+ZAZL`u`^bbjNe3^g{b=0Ik5 hUK!H~5)1+f3?EC`MZL~ke-G5f;OXk;vd$@?2>?$@Cqe)K literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/scrollbar/scrollbar_white_h.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/scrollbar/scrollbar_white_h.png new file mode 100644 index 0000000000000000000000000000000000000000..f3680b1eb79ebefbd5d5cf6dbb35e1030355446e GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eM!3HFEez+qDq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6={09IEGZ*O8WEvzdf^NLuaGQ0j4AWGqVn_Xba?Zc4yYG gH@I|#t$~4=K`)&}^MH?^3{Vq;r>mdKI;Vst0Jw%Ij{pDw literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/scrollbar/scrollbar_white_v.png b/salt/idh/skins/http/opencanary/nasLogin/static/img/synohdpack/images/scrollbar/scrollbar_white_v.png new file mode 100644 index 0000000000000000000000000000000000000000..4991e7d54eb8e66f93b461912ec57d8994abddea GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^B0$W;!3HFgc;@~FQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiWEIv978H@CH?vT-=10IfMg1jn}K20gB6X7+4x!-85r3Z Ywx;X9JS%Hu2vp4A>FVdQ&MBb@00S%}hX4Qo literal 0 HcmV?d00001 diff --git a/salt/idh/skins/http/opencanary/nasLogin/static/js/misc.js b/salt/idh/skins/http/opencanary/nasLogin/static/js/misc.js new file mode 100644 index 000000000..d602a0e4c --- /dev/null +++ b/salt/idh/skins/http/opencanary/nasLogin/static/js/misc.js @@ -0,0 +1,53 @@ +"use strict"; + +var montharray = new Array(); +montharray[0] = "Jan"; +montharray[1] = "Feb"; +montharray[2] = "Mar"; +montharray[3] = "Apr"; +montharray[4] = "May"; +montharray[5] = "Jun"; +montharray[6] = "Jul"; +montharray[7] = "Aug"; +montharray[8] = "Sep"; +montharray[9] = "Oct"; +montharray[10] = "Nov"; +montharray[11] = "Dec"; + +var dayarray = new Array(); +dayarray[0] = "Sun"; +dayarray[1] = "Mon"; +dayarray[2] = "Tue"; +dayarray[3] = "Wed"; +dayarray[4] = "Thu"; +dayarray[5] = "Fri"; +dayarray[6] = "Sat"; + + +function updateTime() { +var d = new Date(); +var h = d.getHours(); +var m = d.getMinutes(); +m = new String(m); +if (m.length == 1) + m = "0" + m; + +var pms = "AM"; +if (h > 12) +{ +pms = "PM" +h = h % 12; +} + +document.getElementById('ext-comp-1007').innerHTML = h + ":" + m + '' + pms + ''; + +var month = montharray[d.getMonth()]; +var wkday = dayarray[d.getDay()]; +var day = d.getDate(); + +document.getElementById('ext-comp-1008').innerHTML = wkday + ", " + month + " " + day; + +} + +updateTime(); +window.setInterval(updateTime, 2000); From 1463b35e2ef1bc8e9410ac264d0c158845b35435 Mon Sep 17 00:00:00 2001 From: Wes Date: Thu, 12 Sep 2024 15:31:12 +0000 Subject: [PATCH 457/507] Change name --- salt/idh/config.sls | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/salt/idh/config.sls b/salt/idh/config.sls index 8d1bd25d5..91f809f9e 100644 --- a/salt/idh/config.sls +++ b/salt/idh/config.sls @@ -51,7 +51,7 @@ idhhttpskinsdir: - makedirs: True # Copy over default http skins -copyoverhttpskins: +idhhttpskins: file.recurse: - name: /opt/so/conf/idh/http-skins - user: 939 @@ -59,7 +59,7 @@ copyoverhttpskins: - source: salt://idh/skins/http/opencanary # Copy over custom http skins -copyovercustomhttpskins: +idhcustomhttpskins: file.recurse: - name: /opt/so/conf/idh/http-skins - user: 939 From cac153909481e5538f33738f9846c48caa47919b Mon Sep 17 00:00:00 2001 From: Mike Reeves Date: Thu, 12 Sep 2024 13:08:01 -0400 Subject: [PATCH 458/507] Add to firewall settings and annotations --- salt/firewall/defaults.yaml | 20 ++++++++++++++++++++ salt/firewall/soc_firewall.yaml | 14 ++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/salt/firewall/defaults.yaml b/salt/firewall/defaults.yaml index fc5368e12..b9bfdbf63 100644 --- a/salt/firewall/defaults.yaml +++ b/salt/firewall/defaults.yaml @@ -10,6 +10,7 @@ firewall: elasticsearch_rest: [] endgame: [] eval: [] + external_suricata: [] fleet: [] heavynode: [] idh: [] @@ -86,6 +87,10 @@ firewall: tcp: - 3765 udp: [] + external_suricata: + tcp: + - 7789 + udp: [] influxdb: tcp: - 8086 @@ -216,6 +221,9 @@ firewall: analyst: portgroups: - nginx + external_suricata: + portgroups: + - external_suricata customhostgroup0: portgroups: [] customhostgroup1: @@ -462,6 +470,9 @@ firewall: endgame: portgroups: - endgame + external_suricata: + portgroups: + - external_suricata desktop: portgroups: - docker_registry @@ -654,6 +665,9 @@ firewall: endgame: portgroups: - endgame + external_suricata: + portgroups: + - external_suricata desktop: portgroups: - docker_registry @@ -850,6 +864,9 @@ firewall: endgame: portgroups: - endgame + external_suricata: + portgroups: + - external_suricata strelka_frontend: portgroups: - strelka_frontend @@ -1216,6 +1233,9 @@ firewall: - elastic_agent_control - elastic_agent_data - elastic_agent_update + external_suricata: + portgroups: + - external_suricata analyst: portgroups: - nginx diff --git a/salt/firewall/soc_firewall.yaml b/salt/firewall/soc_firewall.yaml index 3a8b4d3a0..222bcc8a2 100644 --- a/salt/firewall/soc_firewall.yaml +++ b/salt/firewall/soc_firewall.yaml @@ -32,6 +32,7 @@ firewall: elasticsearch_rest: *hostgroupsettingsadv endgame: *hostgroupsettingsadv eval: *hostgroupsettings + external_suricata: *hostgroupsettings fleet: *hostgroupsettings heavynode: *hostgroupsettings idh: *hostgroupsettings @@ -117,6 +118,9 @@ firewall: endgame: tcp: *tcpsettings udp: *udpsettings + external_suricata: + tcp: *tcpsettings + udp: *udpsettings influxdb: tcp: *tcpsettings udp: *udpsettings @@ -215,6 +219,8 @@ firewall: portgroups: *portgroupsdocker elastic_agent_endpoint: portgroups: *portgroupsdocker + external_suricata: + portgroups: *portgroupsdocker strelka_frontend: portgroups: *portgroupsdocker syslog: @@ -370,6 +376,8 @@ firewall: portgroups: *portgroupsdocker endgame: portgroups: *portgroupsdocker + external_suricata: + portgroups: *portgroupsdocker analyst: portgroups: *portgroupsdocker desktop: @@ -463,6 +471,8 @@ firewall: portgroups: *portgroupsdocker analyst: portgroups: *portgroupsdocker + external_suricata: + portgroups: *portgroupsdocker desktop: portgroups: *portgroupsdocker customhostgroup0: @@ -554,6 +564,8 @@ firewall: portgroups: *portgroupsdocker endgame: portgroups: *portgroupsdocker + external_suricata: + portgroups: *portgroupsdocker strelka_frontend: portgroups: *portgroupsdocker syslog: @@ -828,6 +840,8 @@ firewall: portgroups: *portgroupsdocker analyst: portgroups: *portgroupsdocker + external_suricata: + portgroups: *portgroupsdocker desktop: portgroups: *portgroupsdocker customhostgroup0: From 2ec3f52ea66d2418cc7874029e17cf2c1075e02b Mon Sep 17 00:00:00 2001 From: weslambert Date: Thu, 12 Sep 2024 17:57:41 -0400 Subject: [PATCH 459/507] Don't use state; set IFS --- .../sbin/so-elastic-fleet-integration-upgrade | 29 +++++++------------ 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade b/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade index d7f4257a9..4486e1244 100644 --- a/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade +++ b/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade @@ -6,17 +6,14 @@ . /usr/sbin/so-elastic-fleet-common -RETURN_CODE=0 +# Let's snag a cookie from Kibana +SESSIONCOOKIE=$(curl -s -K /opt/so/conf/elasticsearch/curl.config -c - -X GET http://localhost:5601/ | grep sid | awk '{print $7}') -if [ ! -f /opt/so/state/eaintegrationupgrade.txt ]; then - # Let's snag a cookie from Kibana - SESSIONCOOKIE=$(curl -s -K /opt/so/conf/elasticsearch/curl.config -c - -X GET http://localhost:5601/ | grep sid | awk '{print $7}') - - # List agent policies - for AGENT_POLICY in $(elastic_fleet_agent_policy_names); do - IFS=$'\n' - for INTEGRATION in $(elastic_fleet_integration_policy_names "$AGENT_POLICY"); do - if ! [[ "$INTEGRATION" == "elastic-defend-endpoints" ]] && ! [[ "$INTEGRATION" == "fleet_server-"* ]]; then +# List agent policies +for AGENT_POLICY in $(elastic_fleet_agent_policy_names); do + IFS=$'\n' + for INTEGRATION in $(elastic_fleet_integration_policy_names "$AGENT_POLICY"); do + if ! [[ "$INTEGRATION" == "elastic-defend-endpoints" ]] && ! [[ "$INTEGRATION" == "fleet_server-"* ]]; then # Get package name so we know what package to look for when checking the current and latest available version PACKAGE_NAME=$(elastic_fleet_integration_policy_package_name "$AGENT_POLICY" "$INTEGRATION") # Get currently installed version of package @@ -39,13 +36,7 @@ if [ ! -f /opt/so/state/eaintegrationupgrade.txt ]; then exit 1 fi fi - fi - done + fi done - if [[ "$RETURN_CODE" != "1" ]]; then - touch /opt/so/state/eaintegrationupgrade.txt - fi - echo -else - exit $RETURN_CODE -fi +done +echo From 2e85dcc36afd285cd9099052149ed1dba2bf321e Mon Sep 17 00:00:00 2001 From: weslambert Date: Thu, 12 Sep 2024 17:59:39 -0400 Subject: [PATCH 460/507] Set IFS --- .../elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade | 1 + 1 file changed, 1 insertion(+) diff --git a/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade b/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade index 4486e1244..d4463e7f3 100644 --- a/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade +++ b/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade @@ -10,6 +10,7 @@ SESSIONCOOKIE=$(curl -s -K /opt/so/conf/elasticsearch/curl.config -c - -X GET http://localhost:5601/ | grep sid | awk '{print $7}') # List agent policies +IFS=$'\n' for AGENT_POLICY in $(elastic_fleet_agent_policy_names); do IFS=$'\n' for INTEGRATION in $(elastic_fleet_integration_policy_names "$AGENT_POLICY"); do From 662f906f9d3710ff61532da61df0679e367b25f0 Mon Sep 17 00:00:00 2001 From: weslambert Date: Fri, 13 Sep 2024 09:16:53 -0400 Subject: [PATCH 461/507] Remove IFS --- .../elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade | 1 - 1 file changed, 1 deletion(-) diff --git a/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade b/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade index d4463e7f3..eb812ebf6 100644 --- a/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade +++ b/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade @@ -12,7 +12,6 @@ SESSIONCOOKIE=$(curl -s -K /opt/so/conf/elasticsearch/curl.config -c - -X GET ht # List agent policies IFS=$'\n' for AGENT_POLICY in $(elastic_fleet_agent_policy_names); do - IFS=$'\n' for INTEGRATION in $(elastic_fleet_integration_policy_names "$AGENT_POLICY"); do if ! [[ "$INTEGRATION" == "elastic-defend-endpoints" ]] && ! [[ "$INTEGRATION" == "fleet_server-"* ]]; then # Get package name so we know what package to look for when checking the current and latest available version From 06c0d5b0f53b6a7281fda18789657517b83916fa Mon Sep 17 00:00:00 2001 From: Josh Patterson Date: Fri, 13 Sep 2024 10:13:11 -0400 Subject: [PATCH 462/507] Update so-elastic-fleet-integration-upgrade --- .../sbin/so-elastic-fleet-integration-upgrade | 108 +++++++++++++----- 1 file changed, 79 insertions(+), 29 deletions(-) diff --git a/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade b/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade index eb812ebf6..99d0b82a9 100644 --- a/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade +++ b/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade @@ -6,37 +6,87 @@ . /usr/sbin/so-elastic-fleet-common -# Let's snag a cookie from Kibana -SESSIONCOOKIE=$(curl -s -K /opt/so/conf/elasticsearch/curl.config -c - -X GET http://localhost:5601/ | grep sid | awk '{print $7}') +curl_output=$(curl -s -K /opt/so/conf/elasticsearch/curl.config -c - -X GET http://localhost:5601/) +if [ $? -ne 0 ]; then + echo "Error: Failed to connect to localhost:5601 to obtain session cookie." + exit 1 +fi + +SESSIONCOOKIE=$(echo "$curl_output" | grep sid | awk '{print $7}') +if [ -z "$SESSIONCOOKIE" ]; then + echo "Warning: Session cookie is empty." +fi -# List agent policies IFS=$'\n' -for AGENT_POLICY in $(elastic_fleet_agent_policy_names); do - for INTEGRATION in $(elastic_fleet_integration_policy_names "$AGENT_POLICY"); do - if ! [[ "$INTEGRATION" == "elastic-defend-endpoints" ]] && ! [[ "$INTEGRATION" == "fleet_server-"* ]]; then - # Get package name so we know what package to look for when checking the current and latest available version - PACKAGE_NAME=$(elastic_fleet_integration_policy_package_name "$AGENT_POLICY" "$INTEGRATION") - # Get currently installed version of package - PACKAGE_VERSION=$(elastic_fleet_integration_policy_package_version "$AGENT_POLICY" "$INTEGRATION") - # Get latest available version of package - AVAILABLE_VERSION=$(elastic_fleet_package_latest_version_check "$PACKAGE_NAME") - INTEGRATION_ID=$(elastic_fleet_integration_id "$AGENT_POLICY" "$INTEGRATION" ) - if [[ "$PACKAGE_VERSION" != "$AVAILABLE_VERSION" ]]; then - # Dry run of upgrade - echo "Current $PACKAGE_NAME package version ($PACKAGE_VERSION) is not the same as the latest available package ($AVAILABLE_VERSION)..." - echo "Upgrading $INTEGRATION..." - echo "Starting dry run..." - DRYRUN_ERRORS=$(elastic_fleet_integration_policy_dryrun_upgrade "$INTEGRATION_ID" | jq .[].hasErrors) - # If no errors with dry run, proceed with actual upgrade - if [[ "$DRYRUN_ERRORS" == "false" ]]; then - echo "No errors detected. Proceeding with upgrade..." - elastic_fleet_integration_policy_upgrade "$INTEGRATION_ID" - else - echo "Errors detected. Stopping upgrade..." - exit 1 - fi - fi +agent_policies=$(elastic_fleet_agent_policy_names) +if [ $? -ne 0 ]; then + echo "Error: Failed to retrieve agent policies." + exit 1 +fi + +for AGENT_POLICY in $agent_policies; do + integrations=$(elastic_fleet_integration_policy_names "$AGENT_POLICY") + if [ $? -ne 0 ]; then + echo "Error: Failed to retrieve integration policies for agent policy '$AGENT_POLICY'." + exit 1 fi - done + + for INTEGRATION in $integrations; do + if ! [[ "$INTEGRATION" == "elastic-defend-endpoints" ]] && ! [[ "$INTEGRATION" == "fleet_server-"* ]]; then + # Get package name so we know what package to look for when checking the current and latest available version + PACKAGE_NAME=$(elastic_fleet_integration_policy_package_name "$AGENT_POLICY" "$INTEGRATION") + if [ $? -ne 0 ]; then + echo "Error: Failed to retrieve package name for integration '$INTEGRATION' in agent policy '$AGENT_POLICY'." + exit 1 + fi + + # Get currently installed version of package + PACKAGE_VERSION=$(elastic_fleet_integration_policy_package_version "$AGENT_POLICY" "$INTEGRATION") + if [ $? -ne 0 ]; then + echo "Error: Failed to retrieve package version for integration '$INTEGRATION' in agent policy '$AGENT_POLICY'." + exit 1 + fi + + # Get latest available version of package + AVAILABLE_VERSION=$(elastic_fleet_package_latest_version_check "$PACKAGE_NAME") + if [ $? -ne 0 ]; then + echo "Error: Failed to retrieve latest available version for package '$PACKAGE_NAME'." + exit 1 + fi + + INTEGRATION_ID=$(elastic_fleet_integration_id "$AGENT_POLICY" "$INTEGRATION") + if [ $? -ne 0 ]; then + echo "Error: Failed to retrieve integration ID for '$INTEGRATION' in agent policy '$AGENT_POLICY'." + exit 1 + fi + + if [[ "$PACKAGE_VERSION" != "$AVAILABLE_VERSION" ]]; then + # Dry run of the upgrade + echo "Current $PACKAGE_NAME package version ($PACKAGE_VERSION) is not the same as the latest available package ($AVAILABLE_VERSION)..." + echo "Upgrading $INTEGRATION..." + echo "Starting dry run..." + + DRYRUN_OUTPUT=$(elastic_fleet_integration_policy_dryrun_upgrade "$INTEGRATION_ID") + if [ $? -ne 0 ]; then + echo "Error: Dry run upgrade failed for integration ID '$INTEGRATION_ID'." + exit 1 + fi + + DRYRUN_ERRORS=$(echo "$DRYRUN_OUTPUT" | jq .[].hasErrors) + # If no errors with dry run, proceed with actual upgrade + if [[ "$DRYRUN_ERRORS" == "false" ]]; then + echo "No errors detected. Proceeding with upgrade..." + elastic_fleet_integration_policy_upgrade "$INTEGRATION_ID" + if [ $? -ne 0 ]; then + echo "Error: Upgrade failed for integration ID '$INTEGRATION_ID'." + exit 1 + fi + else + echo "Errors detected during dry run. Stopping upgrade..." + exit 1 + fi + fi + fi + done done echo From da47d247c98e7fcc37f886a4709e3dfeeede6a36 Mon Sep 17 00:00:00 2001 From: weslambert Date: Fri, 13 Sep 2024 13:24:55 -0400 Subject: [PATCH 463/507] Remove check for cookie --- .../tools/sbin/so-elastic-fleet-integration-upgrade | 5 ----- 1 file changed, 5 deletions(-) diff --git a/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade b/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade index 99d0b82a9..a8f8df27b 100644 --- a/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade +++ b/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade @@ -12,11 +12,6 @@ if [ $? -ne 0 ]; then exit 1 fi -SESSIONCOOKIE=$(echo "$curl_output" | grep sid | awk '{print $7}') -if [ -z "$SESSIONCOOKIE" ]; then - echo "Warning: Session cookie is empty." -fi - IFS=$'\n' agent_policies=$(elastic_fleet_agent_policy_names) if [ $? -ne 0 ]; then From fa333489104b4f88e4af052b4bfeafcf96368aee Mon Sep 17 00:00:00 2001 From: weslambert Date: Fri, 13 Sep 2024 13:26:17 -0400 Subject: [PATCH 464/507] Change message --- .../tools/sbin/so-elastic-fleet-integration-upgrade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade b/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade index a8f8df27b..5e2b95d5b 100644 --- a/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade +++ b/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade @@ -8,7 +8,7 @@ curl_output=$(curl -s -K /opt/so/conf/elasticsearch/curl.config -c - -X GET http://localhost:5601/) if [ $? -ne 0 ]; then - echo "Error: Failed to connect to localhost:5601 to obtain session cookie." + echo "Error: Failed to connect to Kibana." exit 1 fi From bc71af7a1fbc1995df388044fe88a83ebe5b8a6e Mon Sep 17 00:00:00 2001 From: weslambert Date: Fri, 13 Sep 2024 13:27:26 -0400 Subject: [PATCH 465/507] Check status --- .../tools/sbin/so-elastic-fleet-common | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/salt/elasticfleet/tools/sbin/so-elastic-fleet-common b/salt/elasticfleet/tools/sbin/so-elastic-fleet-common index d5b27c315..a07c7c8bc 100644 --- a/salt/elasticfleet/tools/sbin/so-elastic-fleet-common +++ b/salt/elasticfleet/tools/sbin/so-elastic-fleet-common @@ -104,34 +104,58 @@ elastic_fleet_package_is_installed() { elastic_fleet_agent_policy_names() { curl -s -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET "localhost:5601/api/fleet/agent_policies" | jq -r .items[].name + if [ $? -ne 0 ]; then + echo "Error: Failed to retrieve agent policies." + exit 1 + fi } elastic_fleet_integration_policy_names() { AGENT_POLICY=$1 curl -s -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET "localhost:5601/api/fleet/agent_policies/$AGENT_POLICY" | jq -r .item.package_policies[].name + if [ $? -ne 0 ]; then + echo "Error: Failed to retrieve integrations." + exit 1 + fi } elastic_fleet_integration_policy_package_name() { AGENT_POLICY=$1 INTEGRATION=$2 curl -s -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET "localhost:5601/api/fleet/agent_policies/$AGENT_POLICY" | jq -r --arg INTEGRATION "$INTEGRATION" '.item.package_policies[] | select(.name==$INTEGRATION)| .package.name' + if [ $? -ne 0 ]; then + echo "Error: Failed to retrieve package name." + exit 1 + fi } elastic_fleet_integration_policy_package_version() { AGENT_POLICY=$1 INTEGRATION=$2 curl -s -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET "localhost:5601/api/fleet/agent_policies/$AGENT_POLICY" | jq -r --arg INTEGRATION "$INTEGRATION" '.item.package_policies[] | select(.name==$INTEGRATION)| .package.version' + if [ $? -ne 0 ]; then + echo "Error: Failed to retrieve package version." + exit 1 + fi } elastic_fleet_integration_id() { AGENT_POLICY=$1 INTEGRATION=$2 curl -s -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET "localhost:5601/api/fleet/agent_policies/$AGENT_POLICY" | jq -r --arg INTEGRATION "$INTEGRATION" '.item.package_policies[] | select(.name==$INTEGRATION)| .id' + if [ $? -ne 0 ]; then + echo "Error: Failed to retrieve integration ID." + exit 1 + fi } elastic_fleet_integration_policy_dryrun_upgrade() { INTEGRATION_ID=$1 curl -s -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -H "Content-Type: application/json" -H 'kbn-xsrf: true' -L -X POST "localhost:5601/api/fleet/package_policies/upgrade/dryrun" -d "{\"packagePolicyIds\":[\"$INTEGRATION_ID\"]}" + if [ $? -ne 0 ]; then + echo "Error: Failed to complete dry run." + exit 1 + fi } elastic_fleet_policy_create() { From 973b93e33218828cf1de146d8e9d06f3b305d272 Mon Sep 17 00:00:00 2001 From: weslambert Date: Fri, 13 Sep 2024 13:49:53 -0400 Subject: [PATCH 466/507] Remove check for error --- .../sbin/so-elastic-fleet-integration-upgrade | 29 ++----------------- 1 file changed, 2 insertions(+), 27 deletions(-) diff --git a/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade b/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade index 5e2b95d5b..bdf93bad3 100644 --- a/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade +++ b/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade @@ -21,53 +21,28 @@ fi for AGENT_POLICY in $agent_policies; do integrations=$(elastic_fleet_integration_policy_names "$AGENT_POLICY") - if [ $? -ne 0 ]; then - echo "Error: Failed to retrieve integration policies for agent policy '$AGENT_POLICY'." - exit 1 - fi - for INTEGRATION in $integrations; do if ! [[ "$INTEGRATION" == "elastic-defend-endpoints" ]] && ! [[ "$INTEGRATION" == "fleet_server-"* ]]; then # Get package name so we know what package to look for when checking the current and latest available version PACKAGE_NAME=$(elastic_fleet_integration_policy_package_name "$AGENT_POLICY" "$INTEGRATION") - if [ $? -ne 0 ]; then - echo "Error: Failed to retrieve package name for integration '$INTEGRATION' in agent policy '$AGENT_POLICY'." - exit 1 - fi # Get currently installed version of package PACKAGE_VERSION=$(elastic_fleet_integration_policy_package_version "$AGENT_POLICY" "$INTEGRATION") - if [ $? -ne 0 ]; then - echo "Error: Failed to retrieve package version for integration '$INTEGRATION' in agent policy '$AGENT_POLICY'." - exit 1 - fi # Get latest available version of package AVAILABLE_VERSION=$(elastic_fleet_package_latest_version_check "$PACKAGE_NAME") - if [ $? -ne 0 ]; then - echo "Error: Failed to retrieve latest available version for package '$PACKAGE_NAME'." - exit 1 - fi + # Get integration ID INTEGRATION_ID=$(elastic_fleet_integration_id "$AGENT_POLICY" "$INTEGRATION") - if [ $? -ne 0 ]; then - echo "Error: Failed to retrieve integration ID for '$INTEGRATION' in agent policy '$AGENT_POLICY'." - exit 1 - fi if [[ "$PACKAGE_VERSION" != "$AVAILABLE_VERSION" ]]; then # Dry run of the upgrade echo "Current $PACKAGE_NAME package version ($PACKAGE_VERSION) is not the same as the latest available package ($AVAILABLE_VERSION)..." echo "Upgrading $INTEGRATION..." echo "Starting dry run..." - DRYRUN_OUTPUT=$(elastic_fleet_integration_policy_dryrun_upgrade "$INTEGRATION_ID") - if [ $? -ne 0 ]; then - echo "Error: Dry run upgrade failed for integration ID '$INTEGRATION_ID'." - exit 1 - fi - DRYRUN_ERRORS=$(echo "$DRYRUN_OUTPUT" | jq .[].hasErrors) + # If no errors with dry run, proceed with actual upgrade if [[ "$DRYRUN_ERRORS" == "false" ]]; then echo "No errors detected. Proceeding with upgrade..." From 57e06dced292004912f2a2853ada3a81828fc8ef Mon Sep 17 00:00:00 2001 From: weslambert Date: Fri, 13 Sep 2024 13:52:01 -0400 Subject: [PATCH 467/507] Change message --- salt/elasticfleet/tools/sbin/so-elastic-fleet-common | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/salt/elasticfleet/tools/sbin/so-elastic-fleet-common b/salt/elasticfleet/tools/sbin/so-elastic-fleet-common index a07c7c8bc..fadf18b5f 100644 --- a/salt/elasticfleet/tools/sbin/so-elastic-fleet-common +++ b/salt/elasticfleet/tools/sbin/so-elastic-fleet-common @@ -114,7 +114,7 @@ elastic_fleet_integration_policy_names() { AGENT_POLICY=$1 curl -s -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET "localhost:5601/api/fleet/agent_policies/$AGENT_POLICY" | jq -r .item.package_policies[].name if [ $? -ne 0 ]; then - echo "Error: Failed to retrieve integrations." + echo "Error: Failed to retrieve integrations for '$AGENT_POLICY'." exit 1 fi } @@ -124,7 +124,7 @@ elastic_fleet_integration_policy_package_name() { INTEGRATION=$2 curl -s -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET "localhost:5601/api/fleet/agent_policies/$AGENT_POLICY" | jq -r --arg INTEGRATION "$INTEGRATION" '.item.package_policies[] | select(.name==$INTEGRATION)| .package.name' if [ $? -ne 0 ]; then - echo "Error: Failed to retrieve package name." + echo "Error: Failed to retrieve package name for '$INTEGRATION' in '$AGENT_POLICY'." exit 1 fi } @@ -134,7 +134,7 @@ elastic_fleet_integration_policy_package_version() { INTEGRATION=$2 curl -s -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET "localhost:5601/api/fleet/agent_policies/$AGENT_POLICY" | jq -r --arg INTEGRATION "$INTEGRATION" '.item.package_policies[] | select(.name==$INTEGRATION)| .package.version' if [ $? -ne 0 ]; then - echo "Error: Failed to retrieve package version." + echo "Error: Failed to retrieve package version for '$INTEGRATION' in '$AGENT_POLICY'." exit 1 fi } @@ -144,7 +144,7 @@ elastic_fleet_integration_id() { INTEGRATION=$2 curl -s -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET "localhost:5601/api/fleet/agent_policies/$AGENT_POLICY" | jq -r --arg INTEGRATION "$INTEGRATION" '.item.package_policies[] | select(.name==$INTEGRATION)| .id' if [ $? -ne 0 ]; then - echo "Error: Failed to retrieve integration ID." + echo "Error: Failed to retrieve integration ID for '$INTEGRATION' in '$AGENT_POLICY'." exit 1 fi } @@ -153,7 +153,7 @@ elastic_fleet_integration_policy_dryrun_upgrade() { INTEGRATION_ID=$1 curl -s -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -H "Content-Type: application/json" -H 'kbn-xsrf: true' -L -X POST "localhost:5601/api/fleet/package_policies/upgrade/dryrun" -d "{\"packagePolicyIds\":[\"$INTEGRATION_ID\"]}" if [ $? -ne 0 ]; then - echo "Error: Failed to complete dry run." + echo "Error: Failed to complete dry run for '$INTEGRATION_ID'." exit 1 fi } From 217bb388a05d21151995f9c7e0ed3bb81bd25d40 Mon Sep 17 00:00:00 2001 From: Jason Ertel Date: Mon, 16 Sep 2024 10:05:17 -0400 Subject: [PATCH 468/507] Clarify enabled settings --- salt/elastalert/soc_elastalert.yaml | 2 +- .../soc_elastic-fleet-package-registry.yaml | 2 +- salt/elasticfleet/soc_elasticfleet.yaml | 2 +- salt/elasticsearch/soc_elasticsearch.yaml | 3 ++- salt/idh/soc_idh.yaml | 2 +- salt/idstools/soc_idstools.yaml | 2 +- salt/influxdb/soc_influxdb.yaml | 2 +- salt/kibana/soc_kibana.yaml | 2 +- salt/kratos/soc_kratos.yaml | 2 +- salt/logstash/soc_logstash.yaml | 2 +- salt/manager/soc_manager.yaml | 2 +- salt/nginx/soc_nginx.yaml | 2 +- salt/patch/soc_patch.yaml | 2 +- salt/pcap/soc_pcap.yaml | 2 +- salt/redis/soc_redis.yaml | 2 +- salt/registry/soc_registry.yaml | 2 +- salt/sensoroni/soc_sensoroni.yaml | 2 +- salt/soc/soc_soc.yaml | 2 +- salt/stig/soc_stig.yaml | 2 +- salt/strelka/soc_strelka.yaml | 2 +- salt/suricata/soc_suricata.yaml | 2 +- salt/telegraf/soc_telegraf.yaml | 3 ++- salt/zeek/soc_zeek.yaml | 2 +- 23 files changed, 25 insertions(+), 23 deletions(-) diff --git a/salt/elastalert/soc_elastalert.yaml b/salt/elastalert/soc_elastalert.yaml index 905fd3884..764ec87fc 100644 --- a/salt/elastalert/soc_elastalert.yaml +++ b/salt/elastalert/soc_elastalert.yaml @@ -1,6 +1,6 @@ elastalert: enabled: - description: You can enable or disable Elastalert. + description: Enables or disables the ElastAlert 2 process. This process is critical for ensuring alerts arrive in SOC, and for outbound notification delivery. helpLink: elastalert.html alerter_parameters: title: Custom Configuration Parameters diff --git a/salt/elastic-fleet-package-registry/soc_elastic-fleet-package-registry.yaml b/salt/elastic-fleet-package-registry/soc_elastic-fleet-package-registry.yaml index 70886c447..84303fd30 100644 --- a/salt/elastic-fleet-package-registry/soc_elastic-fleet-package-registry.yaml +++ b/salt/elastic-fleet-package-registry/soc_elastic-fleet-package-registry.yaml @@ -1,4 +1,4 @@ elastic_fleet_package_registry: enabled: - description: You can enable or disable Elastic Fleet Package Registry. + description: Enables or disables the Fleet package registry process. This process must remain enabled for proper HIDS functionality. advanced: True diff --git a/salt/elasticfleet/soc_elasticfleet.yaml b/salt/elasticfleet/soc_elasticfleet.yaml index 7ed97e6ec..b29d228a1 100644 --- a/salt/elasticfleet/soc_elasticfleet.yaml +++ b/salt/elasticfleet/soc_elasticfleet.yaml @@ -1,6 +1,6 @@ elasticfleet: enabled: - description: You can enable or disable Elastic Fleet. + description: Enables or disables the Elatic Fleet process. This process is critical for ensuring HIDS events are made available in SOC. advanced: True helpLink: elastic-fleet.html enable_manager_output: diff --git a/salt/elasticsearch/soc_elasticsearch.yaml b/salt/elasticsearch/soc_elasticsearch.yaml index b489bfe78..8c28d256a 100644 --- a/salt/elasticsearch/soc_elasticsearch.yaml +++ b/salt/elasticsearch/soc_elasticsearch.yaml @@ -1,6 +1,7 @@ elasticsearch: enabled: - description: You can enable or disable Elasticsearch. + description: Enables or disables the Elasticsearch process. This process provides the log event storage system. WARNING: Disabling this process is unsupported. + advanced: True helpLink: elasticsearch.html version: description: "This specifies the version of the following containers: so-elastic-fleet-package-registry, so-elastic-agent, so-elastic-fleet, so-kibana, so-logstash and so-elasticsearch. Modifying this value in the Elasticsearch defaults.yaml will result in catastrophic grid failure." diff --git a/salt/idh/soc_idh.yaml b/salt/idh/soc_idh.yaml index d3baaaab5..ecbc7cc43 100644 --- a/salt/idh/soc_idh.yaml +++ b/salt/idh/soc_idh.yaml @@ -1,6 +1,6 @@ idh: enabled: - description: You can enable or disable IDH. + description: Enables or disables the Intrustion Detection Honeypot (IDH) process. helpLink: idh.html opencanary: config: diff --git a/salt/idstools/soc_idstools.yaml b/salt/idstools/soc_idstools.yaml index 993abfd51..a27a0e683 100644 --- a/salt/idstools/soc_idstools.yaml +++ b/salt/idstools/soc_idstools.yaml @@ -1,6 +1,6 @@ idstools: enabled: - description: You can enable or disable IDSTools. + description: Enables or disables the IDS tools process, which is used by the Detection system. config: oinkcode: description: Enter your registration code or oinkcode for paid NIDS rulesets. diff --git a/salt/influxdb/soc_influxdb.yaml b/salt/influxdb/soc_influxdb.yaml index 42566a0a8..6234d17ac 100644 --- a/salt/influxdb/soc_influxdb.yaml +++ b/salt/influxdb/soc_influxdb.yaml @@ -1,6 +1,6 @@ influxdb: enabled: - description: You can enable or disable InfluxDB. + description: Enables the grid metrics collection storage system. Security Onion grid health monitoring requires this process to remain enabled. WARNING: Disabling the process is unsupported, and will cause unexpected results. helpLink: influxdb.html config: assets-path: diff --git a/salt/kibana/soc_kibana.yaml b/salt/kibana/soc_kibana.yaml index c95512b58..8ac0e8e47 100644 --- a/salt/kibana/soc_kibana.yaml +++ b/salt/kibana/soc_kibana.yaml @@ -1,6 +1,6 @@ kibana: enabled: - description: You can enable or disable Kibana. + description: Enables or disables the Kibana front-end interface to Elasticsearch. Due to Kibana being used for loading certain configuration details in Elasticsearch, this process should remain enabled. WARNING: Disabling the process is unsupported, and will cause unexpected results. helpLink: kibana.html config: elasticsearch: diff --git a/salt/kratos/soc_kratos.yaml b/salt/kratos/soc_kratos.yaml index 6285bf1ad..6e354e574 100644 --- a/salt/kratos/soc_kratos.yaml +++ b/salt/kratos/soc_kratos.yaml @@ -1,6 +1,6 @@ kratos: enabled: - description: You can enable or disable Kratos. + description: Enables or disables the Kratos authentication system. WARNING: Disabling this process will cause the grid to malfunction. Re-enabling this setting will require manual effort via SSH. advanced: True helpLink: kratos.html diff --git a/salt/logstash/soc_logstash.yaml b/salt/logstash/soc_logstash.yaml index cc81d3103..b617abfdd 100644 --- a/salt/logstash/soc_logstash.yaml +++ b/salt/logstash/soc_logstash.yaml @@ -1,6 +1,6 @@ logstash: enabled: - description: You can enable or disable Logstash. + description: Enables or disables the Logstash log event forwarding process. On most grid installations, when this process is disabled log events are unable to be ingested into the SOC backend. helpLink: logstash.html assigned_pipelines: roles: diff --git a/salt/manager/soc_manager.yaml b/salt/manager/soc_manager.yaml index 076725691..cf78658de 100644 --- a/salt/manager/soc_manager.yaml +++ b/salt/manager/soc_manager.yaml @@ -1,7 +1,7 @@ manager: reposync: enabled: - description: This is the daily task of syncing the Security Onion OS packages. It is recommended that you leave this enabled. + description: This is the daily task of syncing the Security Onion OS packages. It is recommended that this setting remain enabled to ensure important updates are applied to the grid on an automated, scheduled basis. global: True helpLink: soup.html hour: diff --git a/salt/nginx/soc_nginx.yaml b/salt/nginx/soc_nginx.yaml index 56bbd888f..4dcf5b3b9 100644 --- a/salt/nginx/soc_nginx.yaml +++ b/salt/nginx/soc_nginx.yaml @@ -1,6 +1,6 @@ nginx: enabled: - description: You can enable or disable Nginx. + description: Enables or disables the Nginx web server and reverse proxy. WARNING: Disabling this process will prevent access to SOC and other important web interfaces and APIs. Re-enabling the process is a manual effort. Do not change this setting without instruction from Security Onion support. advanced: True helpLink: nginx.html external_suricata: diff --git a/salt/patch/soc_patch.yaml b/salt/patch/soc_patch.yaml index ba9b5a4b3..26cfc695e 100644 --- a/salt/patch/soc_patch.yaml +++ b/salt/patch/soc_patch.yaml @@ -1,7 +1,7 @@ patch: os: enabled: - description: Enable OS updates. + description: Enable OS updates. WARNING: Disabling this setting will prevent important operating system updates from being applied on a scheduled basis. helpLink: soup.html schedule_to_run: description: Currently running schedule for updates. diff --git a/salt/pcap/soc_pcap.yaml b/salt/pcap/soc_pcap.yaml index 65fb99d86..c9136512f 100644 --- a/salt/pcap/soc_pcap.yaml +++ b/salt/pcap/soc_pcap.yaml @@ -1,6 +1,6 @@ pcap: enabled: - description: You can enable or disable Stenographer on all sensors or a single sensor. + description: Enables or disables the Stenographer packet recording process. This process may already be disabled if Suricata is being used as the packet capture process. helpLink: stenographer.html config: maxdirectoryfiles: diff --git a/salt/redis/soc_redis.yaml b/salt/redis/soc_redis.yaml index 45c63ffd3..76b7a1175 100644 --- a/salt/redis/soc_redis.yaml +++ b/salt/redis/soc_redis.yaml @@ -1,6 +1,6 @@ redis: enabled: - description: You can enable or disable Redis. + description: Enables the log event in-memory buffering process. Thsi may already be disabled on some installation types. Disabling this process on distributed-capable grids can result in loss of log events. helpLink: redis.html config: bind: diff --git a/salt/registry/soc_registry.yaml b/salt/registry/soc_registry.yaml index 7fc3a161f..b1d51c827 100644 --- a/salt/registry/soc_registry.yaml +++ b/salt/registry/soc_registry.yaml @@ -1,4 +1,4 @@ registry: enabled: - description: You can enable or disable the registry. + description: Enables or disables the Docker registry on the manager node. WARNING: If this process is disabled the grid will malfunction and a manual effort may be needed to re-enable the setting. advanced: True diff --git a/salt/sensoroni/soc_sensoroni.yaml b/salt/sensoroni/soc_sensoroni.yaml index 7b8495dc5..71a2c779b 100644 --- a/salt/sensoroni/soc_sensoroni.yaml +++ b/salt/sensoroni/soc_sensoroni.yaml @@ -1,6 +1,6 @@ sensoroni: enabled: - description: Enable or disable Sensoroni. + description: Enable or disable the per-node SOC agent process. This process is used for performing node-related jobs and reporting node metrics back to SOC. Disabling this process is unsupported and will result in an improperly functioning grid. advanced: True helpLink: grid.html config: diff --git a/salt/soc/soc_soc.yaml b/salt/soc/soc_soc.yaml index 760001120..2f0464779 100644 --- a/salt/soc/soc_soc.yaml +++ b/salt/soc/soc_soc.yaml @@ -1,6 +1,6 @@ soc: enabled: - description: You can enable or disable SOC. + description: Enables or disables SOC. WARNING: Disabling this setting is unsupported and will cause the grid to malfunction. Re-enabling this setting is a manual effort via SSH. advanced: True telemetryEnabled: title: SOC Telemetry diff --git a/salt/stig/soc_stig.yaml b/salt/stig/soc_stig.yaml index 597aab809..81794c5de 100644 --- a/salt/stig/soc_stig.yaml +++ b/salt/stig/soc_stig.yaml @@ -1,6 +1,6 @@ stig: enabled: - description: You can enable or disable the application of STIGS using oscap. Note that the actions performed by OSCAP are not automatically reversible. Requires a valid Security Onion license key. + description: Enables or disables the application of STIGS using oscap. Note that the actions performed by OSCAP are not automatically reversible. Requires a valid Security Onion license key. forcedType: bool advanced: True run_interval: diff --git a/salt/strelka/soc_strelka.yaml b/salt/strelka/soc_strelka.yaml index 947215bd5..1dc4fa455 100644 --- a/salt/strelka/soc_strelka.yaml +++ b/salt/strelka/soc_strelka.yaml @@ -1,7 +1,7 @@ strelka: backend: enabled: - description: You can enable or disable Strelka backend. + description: Enables or disables the Strelka file analysis process. helpLink: strelka.html config: backend: diff --git a/salt/suricata/soc_suricata.yaml b/salt/suricata/soc_suricata.yaml index f865468e1..35a9f6ce5 100644 --- a/salt/suricata/soc_suricata.yaml +++ b/salt/suricata/soc_suricata.yaml @@ -1,6 +1,6 @@ suricata: enabled: - description: You can enable or disable Suricata. + description: Enables or disables the Suricata process. This process is used for triggering alerts and optionally for packet meta-data collection and network packet recording. helpLink: suricata.html thresholding: sids__yaml: diff --git a/salt/telegraf/soc_telegraf.yaml b/salt/telegraf/soc_telegraf.yaml index e6e7ea9a2..9a7090fe6 100644 --- a/salt/telegraf/soc_telegraf.yaml +++ b/salt/telegraf/soc_telegraf.yaml @@ -1,6 +1,7 @@ telegraf: enabled: - description: You can enable or disable Telegraf. + description: Enables the grid metrics collection process. WARNING: Security Onion grid health monitoring requires this process to remain enabled. Disabling it will cause unexpected and unsupported results. + advanced: True helpLink: influxdb.html config: interval: diff --git a/salt/zeek/soc_zeek.yaml b/salt/zeek/soc_zeek.yaml index 1594eed58..47205bd69 100644 --- a/salt/zeek/soc_zeek.yaml +++ b/salt/zeek/soc_zeek.yaml @@ -1,6 +1,6 @@ zeek: enabled: - description: You can enable or disable ZEEK on all sensors or a single sensor. + description: Controls whether the Zeek (network packet inspection) process runs. Disabling this process could result in missed alerts and other important NIDS-related information. If Suricata was selected as the packet meta-data engine during setup then this will already be disabled. helpLink: zeek.html config: local: From e0c499645d699fdcd471125cd36537369fe855a9 Mon Sep 17 00:00:00 2001 From: Jason Ertel Date: Mon, 16 Sep 2024 10:12:09 -0400 Subject: [PATCH 469/507] Clarify enabled settings --- salt/elasticfleet/soc_elasticfleet.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/elasticfleet/soc_elasticfleet.yaml b/salt/elasticfleet/soc_elasticfleet.yaml index b29d228a1..1c25e9d04 100644 --- a/salt/elasticfleet/soc_elasticfleet.yaml +++ b/salt/elasticfleet/soc_elasticfleet.yaml @@ -1,6 +1,6 @@ elasticfleet: enabled: - description: Enables or disables the Elatic Fleet process. This process is critical for ensuring HIDS events are made available in SOC. + description: Enables or disables the Elastic Fleet process. This process is critical for ensuring HIDS events are made available in SOC. advanced: True helpLink: elastic-fleet.html enable_manager_output: From 1f6735a14de27ca6a29c939ff421707e6e140cad Mon Sep 17 00:00:00 2001 From: Jason Ertel Date: Mon, 16 Sep 2024 10:12:54 -0400 Subject: [PATCH 470/507] Clarify enabled settings --- salt/idh/soc_idh.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/idh/soc_idh.yaml b/salt/idh/soc_idh.yaml index ecbc7cc43..0d8ccb393 100644 --- a/salt/idh/soc_idh.yaml +++ b/salt/idh/soc_idh.yaml @@ -1,6 +1,6 @@ idh: enabled: - description: Enables or disables the Intrustion Detection Honeypot (IDH) process. + description: Enables or disables the Intrusion Detection Honeypot (IDH) process. helpLink: idh.html opencanary: config: From b4e8dd8a7b5bf9591e93690c808ad5c0f429796b Mon Sep 17 00:00:00 2001 From: Jason Ertel Date: Mon, 16 Sep 2024 10:14:52 -0400 Subject: [PATCH 471/507] Clarify enabled settings --- salt/redis/soc_redis.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/redis/soc_redis.yaml b/salt/redis/soc_redis.yaml index 76b7a1175..621cc0fbb 100644 --- a/salt/redis/soc_redis.yaml +++ b/salt/redis/soc_redis.yaml @@ -1,6 +1,6 @@ redis: enabled: - description: Enables the log event in-memory buffering process. Thsi may already be disabled on some installation types. Disabling this process on distributed-capable grids can result in loss of log events. + description: Enables the log event in-memory buffering process. This process might already be disabled on some installation types. Disabling this process on distributed-capable grids can result in loss of log events. helpLink: redis.html config: bind: From 0566f46d5b889e5fcab034c5489d15300e08e69d Mon Sep 17 00:00:00 2001 From: Jason Ertel Date: Mon, 16 Sep 2024 10:41:01 -0400 Subject: [PATCH 472/507] Clarify enabled settings --- .../soc_elastic-fleet-package-registry.yaml | 2 +- salt/elasticfleet/soc_elasticfleet.yaml | 2 +- salt/idstools/soc_idstools.yaml | 2 +- salt/suricata/soc_suricata.yaml | 2 +- salt/zeek/soc_zeek.yaml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/salt/elastic-fleet-package-registry/soc_elastic-fleet-package-registry.yaml b/salt/elastic-fleet-package-registry/soc_elastic-fleet-package-registry.yaml index 84303fd30..3d8a2112b 100644 --- a/salt/elastic-fleet-package-registry/soc_elastic-fleet-package-registry.yaml +++ b/salt/elastic-fleet-package-registry/soc_elastic-fleet-package-registry.yaml @@ -1,4 +1,4 @@ elastic_fleet_package_registry: enabled: - description: Enables or disables the Fleet package registry process. This process must remain enabled for proper HIDS functionality. + description: Enables or disables the Fleet package registry process. This process must remain enabled to allow Elastic Agent packages to be updated. advanced: True diff --git a/salt/elasticfleet/soc_elasticfleet.yaml b/salt/elasticfleet/soc_elasticfleet.yaml index 1c25e9d04..26efce941 100644 --- a/salt/elasticfleet/soc_elasticfleet.yaml +++ b/salt/elasticfleet/soc_elasticfleet.yaml @@ -1,6 +1,6 @@ elasticfleet: enabled: - description: Enables or disables the Elastic Fleet process. This process is critical for ensuring HIDS events are made available in SOC. + description: Enables or disables the Elastic Fleet process. This process is critical for managing Elastic Agents. advanced: True helpLink: elastic-fleet.html enable_manager_output: diff --git a/salt/idstools/soc_idstools.yaml b/salt/idstools/soc_idstools.yaml index a27a0e683..4f7a53e91 100644 --- a/salt/idstools/soc_idstools.yaml +++ b/salt/idstools/soc_idstools.yaml @@ -1,6 +1,6 @@ idstools: enabled: - description: Enables or disables the IDS tools process, which is used by the Detection system. + description: Enables or disables the IDStools process which is used by the Detection system. config: oinkcode: description: Enter your registration code or oinkcode for paid NIDS rulesets. diff --git a/salt/suricata/soc_suricata.yaml b/salt/suricata/soc_suricata.yaml index 35a9f6ce5..8b5ce7b11 100644 --- a/salt/suricata/soc_suricata.yaml +++ b/salt/suricata/soc_suricata.yaml @@ -1,6 +1,6 @@ suricata: enabled: - description: Enables or disables the Suricata process. This process is used for triggering alerts and optionally for packet meta-data collection and network packet recording. + description: Enables or disables the Suricata process. This process is used for triggering alerts and optionally for protocol metadata collection and full packet capture. helpLink: suricata.html thresholding: sids__yaml: diff --git a/salt/zeek/soc_zeek.yaml b/salt/zeek/soc_zeek.yaml index 47205bd69..f5f718114 100644 --- a/salt/zeek/soc_zeek.yaml +++ b/salt/zeek/soc_zeek.yaml @@ -1,6 +1,6 @@ zeek: enabled: - description: Controls whether the Zeek (network packet inspection) process runs. Disabling this process could result in missed alerts and other important NIDS-related information. If Suricata was selected as the packet meta-data engine during setup then this will already be disabled. + description: Controls whether the Zeek (network packet inspection) process runs. Disabling this process could result in loss of network protocol metadata. If Suricata was selected as the protocol metadata engine during setup then this will already be disabled. helpLink: zeek.html config: local: From 56666ad82c237ffa068b5af7e0ec81ff53bfb0ea Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Mon, 16 Sep 2024 11:19:16 -0400 Subject: [PATCH 473/507] resolve 13247 --- salt/common/tools/sbin/so-common | 2 ++ salt/manager/tools/sbin/soup | 14 ++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/salt/common/tools/sbin/so-common b/salt/common/tools/sbin/so-common index 6ae35324f..2b557a306 100755 --- a/salt/common/tools/sbin/so-common +++ b/salt/common/tools/sbin/so-common @@ -249,8 +249,10 @@ download_and_verify() { fi if ! verify_md5_checksum "$dest_file" "$md5_file"; then + set +e retry 15 10 "curl --fail --retry 5 --retry-delay 15 -L '$source_url' --output '$dest_file'" "" "" retry 15 10 "curl --fail --retry 5 --retry-delay 15 -L '$source_md5_url' --output '$md5_file'" "" "" + set -e if verify_md5_checksum "$dest_file" "$md5_file"; then echo "Source file and checksum are good." diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index 7807c9884..b14cf97e7 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -525,11 +525,17 @@ stop_salt_master() { pkill -9 -ef "/usr/bin/python3 /bin/salt" >> $SOUP_LOG 2>&1 echo "" - echo "Storing salt-master pid." + echo "Storing salt-master PID." MASTERPID=$(pgrep -f '/opt/saltstack/salt/bin/python3.10 /usr/bin/salt-master MainProcess') - echo "Found salt-master PID $MASTERPID" - systemctl_func "stop" "salt-master" - timeout 30 tail --pid=$MASTERPID -f /dev/null || echo "salt-master still running at $(date +"%T.%6N") after waiting 30s. We cannot kill due to systemd restart option." + if [ ! -z "$MASTERPID" ]; then + echo "Found salt-master PID $MASTERPID" + systemctl_func "stop" "salt-master" + if ps -p "$MASTERPID" > /dev/null 2>&1; then + timeout 30 tail --pid=$MASTERPID -f /dev/null || echo "salt-master still running at $(date +"%T.%6N") after waiting 30s. We cannot kill due to systemd restart option." + fi + else + echo "The salt-master PID was not found. The process '/usr/bin/salt-master MainProcess' is not running." + fi set -e } From 0ab2695cebbd20505392e35373fa373b19161008 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Mon, 16 Sep 2024 13:11:08 -0400 Subject: [PATCH 474/507] move set to soup --- salt/common/tools/sbin/so-common | 2 -- salt/manager/tools/sbin/soup | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/salt/common/tools/sbin/so-common b/salt/common/tools/sbin/so-common index 2b557a306..6ae35324f 100755 --- a/salt/common/tools/sbin/so-common +++ b/salt/common/tools/sbin/so-common @@ -249,10 +249,8 @@ download_and_verify() { fi if ! verify_md5_checksum "$dest_file" "$md5_file"; then - set +e retry 15 10 "curl --fail --retry 5 --retry-delay 15 -L '$source_url' --output '$dest_file'" "" "" retry 15 10 "curl --fail --retry 5 --retry-delay 15 -L '$source_md5_url' --output '$md5_file'" "" "" - set -e if verify_md5_checksum "$dest_file" "$md5_file"; then echo "Source file and checksum are good." diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index b14cf97e7..452300bba 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -843,8 +843,10 @@ determine_elastic_agent_upgrade() { if [[ $is_airgap -eq 0 ]]; then update_elastic_agent_airgap else + set +e # the new elasticsearch defaults.yaml file is not yet placed in /opt/so/saltstack/default/salt/elasticsearch yet update_elastic_agent "$UPDATE_DIR" + set -e fi } From cce9e162d4846550fe07205d64321a35a72601f5 Mon Sep 17 00:00:00 2001 From: Jason Ertel Date: Mon, 16 Sep 2024 15:30:14 -0400 Subject: [PATCH 475/507] remove colon to avoid yaml parsing problems --- salt/elasticsearch/soc_elasticsearch.yaml | 2 +- salt/influxdb/soc_influxdb.yaml | 2 +- salt/kibana/soc_kibana.yaml | 2 +- salt/kratos/soc_kratos.yaml | 2 +- salt/nginx/soc_nginx.yaml | 2 +- salt/patch/soc_patch.yaml | 2 +- salt/registry/soc_registry.yaml | 2 +- salt/soc/soc_soc.yaml | 2 +- salt/telegraf/soc_telegraf.yaml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/salt/elasticsearch/soc_elasticsearch.yaml b/salt/elasticsearch/soc_elasticsearch.yaml index 8c28d256a..31a8a7f6f 100644 --- a/salt/elasticsearch/soc_elasticsearch.yaml +++ b/salt/elasticsearch/soc_elasticsearch.yaml @@ -1,6 +1,6 @@ elasticsearch: enabled: - description: Enables or disables the Elasticsearch process. This process provides the log event storage system. WARNING: Disabling this process is unsupported. + description: Enables or disables the Elasticsearch process. This process provides the log event storage system. WARNING - Disabling this process is unsupported. advanced: True helpLink: elasticsearch.html version: diff --git a/salt/influxdb/soc_influxdb.yaml b/salt/influxdb/soc_influxdb.yaml index 6234d17ac..846152cf3 100644 --- a/salt/influxdb/soc_influxdb.yaml +++ b/salt/influxdb/soc_influxdb.yaml @@ -1,6 +1,6 @@ influxdb: enabled: - description: Enables the grid metrics collection storage system. Security Onion grid health monitoring requires this process to remain enabled. WARNING: Disabling the process is unsupported, and will cause unexpected results. + description: Enables the grid metrics collection storage system. Security Onion grid health monitoring requires this process to remain enabled. WARNING - Disabling the process is unsupported, and will cause unexpected results. helpLink: influxdb.html config: assets-path: diff --git a/salt/kibana/soc_kibana.yaml b/salt/kibana/soc_kibana.yaml index 8ac0e8e47..2c097ce1c 100644 --- a/salt/kibana/soc_kibana.yaml +++ b/salt/kibana/soc_kibana.yaml @@ -1,6 +1,6 @@ kibana: enabled: - description: Enables or disables the Kibana front-end interface to Elasticsearch. Due to Kibana being used for loading certain configuration details in Elasticsearch, this process should remain enabled. WARNING: Disabling the process is unsupported, and will cause unexpected results. + description: Enables or disables the Kibana front-end interface to Elasticsearch. Due to Kibana being used for loading certain configuration details in Elasticsearch, this process should remain enabled. WARNING - Disabling the process is unsupported, and will cause unexpected results. helpLink: kibana.html config: elasticsearch: diff --git a/salt/kratos/soc_kratos.yaml b/salt/kratos/soc_kratos.yaml index 6e354e574..a362bb299 100644 --- a/salt/kratos/soc_kratos.yaml +++ b/salt/kratos/soc_kratos.yaml @@ -1,6 +1,6 @@ kratos: enabled: - description: Enables or disables the Kratos authentication system. WARNING: Disabling this process will cause the grid to malfunction. Re-enabling this setting will require manual effort via SSH. + description: Enables or disables the Kratos authentication system. WARNING - Disabling this process will cause the grid to malfunction. Re-enabling this setting will require manual effort via SSH. advanced: True helpLink: kratos.html diff --git a/salt/nginx/soc_nginx.yaml b/salt/nginx/soc_nginx.yaml index 4dcf5b3b9..07abd32ce 100644 --- a/salt/nginx/soc_nginx.yaml +++ b/salt/nginx/soc_nginx.yaml @@ -1,6 +1,6 @@ nginx: enabled: - description: Enables or disables the Nginx web server and reverse proxy. WARNING: Disabling this process will prevent access to SOC and other important web interfaces and APIs. Re-enabling the process is a manual effort. Do not change this setting without instruction from Security Onion support. + description: Enables or disables the Nginx web server and reverse proxy. WARNING - Disabling this process will prevent access to SOC and other important web interfaces and APIs. Re-enabling the process is a manual effort. Do not change this setting without instruction from Security Onion support. advanced: True helpLink: nginx.html external_suricata: diff --git a/salt/patch/soc_patch.yaml b/salt/patch/soc_patch.yaml index 26cfc695e..1618a0f75 100644 --- a/salt/patch/soc_patch.yaml +++ b/salt/patch/soc_patch.yaml @@ -1,7 +1,7 @@ patch: os: enabled: - description: Enable OS updates. WARNING: Disabling this setting will prevent important operating system updates from being applied on a scheduled basis. + description: Enable OS updates. WARNING - Disabling this setting will prevent important operating system updates from being applied on a scheduled basis. helpLink: soup.html schedule_to_run: description: Currently running schedule for updates. diff --git a/salt/registry/soc_registry.yaml b/salt/registry/soc_registry.yaml index b1d51c827..7d6cefe8c 100644 --- a/salt/registry/soc_registry.yaml +++ b/salt/registry/soc_registry.yaml @@ -1,4 +1,4 @@ registry: enabled: - description: Enables or disables the Docker registry on the manager node. WARNING: If this process is disabled the grid will malfunction and a manual effort may be needed to re-enable the setting. + description: Enables or disables the Docker registry on the manager node. WARNING - If this process is disabled the grid will malfunction and a manual effort may be needed to re-enable the setting. advanced: True diff --git a/salt/soc/soc_soc.yaml b/salt/soc/soc_soc.yaml index 2f0464779..8087fe2c3 100644 --- a/salt/soc/soc_soc.yaml +++ b/salt/soc/soc_soc.yaml @@ -1,6 +1,6 @@ soc: enabled: - description: Enables or disables SOC. WARNING: Disabling this setting is unsupported and will cause the grid to malfunction. Re-enabling this setting is a manual effort via SSH. + description: Enables or disables SOC. WARNING - Disabling this setting is unsupported and will cause the grid to malfunction. Re-enabling this setting is a manual effort via SSH. advanced: True telemetryEnabled: title: SOC Telemetry diff --git a/salt/telegraf/soc_telegraf.yaml b/salt/telegraf/soc_telegraf.yaml index 9a7090fe6..b54913da7 100644 --- a/salt/telegraf/soc_telegraf.yaml +++ b/salt/telegraf/soc_telegraf.yaml @@ -1,6 +1,6 @@ telegraf: enabled: - description: Enables the grid metrics collection process. WARNING: Security Onion grid health monitoring requires this process to remain enabled. Disabling it will cause unexpected and unsupported results. + description: Enables the grid metrics collection process. WARNING - Security Onion grid health monitoring requires this process to remain enabled. Disabling it will cause unexpected and unsupported results. advanced: True helpLink: influxdb.html config: From cf0d56eee7cd772b0b0a954ef548494b5bd8c041 Mon Sep 17 00:00:00 2001 From: Wes Date: Tue, 17 Sep 2024 19:24:31 +0000 Subject: [PATCH 476/507] Fix suricata alerts for opnsense and pfsense --- .../files/ingest/logs-pfsense.log-1.16.0 | 2 +- .../ingest/logs-pfsense.log-1.16.0-suricata | 7 +- .../files/ingest/logs-pfsense.log-1.19.1 | 414 ++++++++++++++++++ .../files/ingest/suricata.alert_pfsense | 16 + .../files/ingest/suricata.common_pfsense | 23 + 5 files changed, 460 insertions(+), 2 deletions(-) create mode 100644 salt/elasticsearch/files/ingest/logs-pfsense.log-1.19.1 create mode 100644 salt/elasticsearch/files/ingest/suricata.alert_pfsense create mode 100644 salt/elasticsearch/files/ingest/suricata.common_pfsense diff --git a/salt/elasticsearch/files/ingest/logs-pfsense.log-1.16.0 b/salt/elasticsearch/files/ingest/logs-pfsense.log-1.16.0 index af31e1518..f53abb0e3 100644 --- a/salt/elasticsearch/files/ingest/logs-pfsense.log-1.16.0 +++ b/salt/elasticsearch/files/ingest/logs-pfsense.log-1.16.0 @@ -1,5 +1,5 @@ { - "description": "Pipeline for pfSense", + "description": "Pipeline for PFsense", "processors": [ { "set": { diff --git a/salt/elasticsearch/files/ingest/logs-pfsense.log-1.16.0-suricata b/salt/elasticsearch/files/ingest/logs-pfsense.log-1.16.0-suricata index f3a14af44..9cb10c2bb 100644 --- a/salt/elasticsearch/files/ingest/logs-pfsense.log-1.16.0-suricata +++ b/salt/elasticsearch/files/ingest/logs-pfsense.log-1.16.0-suricata @@ -1,9 +1,14 @@ { "description": "Pipeline for parsing pfSense Suricata logs.", "processors": [ + { "set": { + "field": "event.module", + "value": "suricata" + } + }, { "pipeline": { - "name": "suricata.common" + "name": "suricata.common_pfsense" } } ], diff --git a/salt/elasticsearch/files/ingest/logs-pfsense.log-1.19.1 b/salt/elasticsearch/files/ingest/logs-pfsense.log-1.19.1 new file mode 100644 index 000000000..6166f6b55 --- /dev/null +++ b/salt/elasticsearch/files/ingest/logs-pfsense.log-1.19.1 @@ -0,0 +1,414 @@ +{ + "description": "Pipeline for PFsense", + "processors": [ + { + "set": { + "field": "ecs.version", + "value": "8.11.0" + } + }, + { + "set": { + "field": "observer.vendor", + "value": "netgate" + } + }, + { + "set": { + "field": "observer.type", + "value": "firewall" + } + }, + { + "rename": { + "field": "message", + "target_field": "event.original", + "ignore_missing": true, + "if": "ctx.event?.original == null" + } + }, + { + "set": { + "field": "event.kind", + "value": "event" + } + }, + { + "set": { + "field": "event.timezone", + "value": "{{_tmp.tz_offset}}", + "if": "ctx._tmp?.tz_offset != null && ctx._tmp?.tz_offset != 'local'" + } + }, + { + "grok": { + "description": "Parse syslog header", + "field": "event.original", + "patterns": [ + "^(%{ECS_SYSLOG_PRI})?%{TIMESTAMP} %{GREEDYDATA:message}" + ], + "pattern_definitions": { + "ECS_SYSLOG_PRI": "<%{NONNEGINT:log.syslog.priority:long}>(\\d )?", + "TIMESTAMP": "(?:%{BSD_TIMESTAMP_FORMAT}|%{SYSLOG_TIMESTAMP_FORMAT})", + "BSD_TIMESTAMP_FORMAT": "%{SYSLOGTIMESTAMP:_tmp.timestamp}(%{SPACE}%{BSD_PROCNAME}|%{SPACE}%{OBSERVER}%{SPACE}%{BSD_PROCNAME})(\\[%{POSINT:process.pid:long}\\])?:", + "BSD_PROCNAME": "(?:\\b%{NAME:process.name}|\\(%{NAME:process.name}\\))", + "NAME": "[[[:alnum:]]_-]+", + "SYSLOG_TIMESTAMP_FORMAT": "%{TIMESTAMP_ISO8601:_tmp.timestamp8601}%{SPACE}%{OBSERVER}%{SPACE}%{PROCESS}%{SPACE}(%{POSINT:process.pid:long}|-) - (-|%{META})", + "TIMESTAMP_ISO8601": "%{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE:event.timezone}?", + "OBSERVER": "(?:%{IP:observer.ip}|%{HOSTNAME:observer.name})", + "UNIXPATH": "(/([\\w_%!$@:.,+~-]+|\\\\.)*)*", + "PROCESS": "(\\(%{DATA:process.name}\\)|(?:%{UNIXPATH})%{BASEPATH:process.name})", + "BASEPATH": "[[[:alnum:]]_%!$@:.,+~-]+", + "META": "\\[[^\\]]*\\]" + } + } + }, + { + "date": { + "if": "ctx._tmp.timestamp8601 != null", + "field": "_tmp.timestamp8601", + "target_field": "@timestamp", + "formats": [ + "ISO8601" + ] + } + }, + { + "date": { + "if": "ctx.event?.timezone != null && ctx._tmp?.timestamp != null", + "field": "_tmp.timestamp", + "target_field": "@timestamp", + "formats": [ + "MMM d HH:mm:ss", + "MMM d HH:mm:ss", + "MMM dd HH:mm:ss" + ], + "timezone": "{{ event.timezone }}" + } + }, + { + "grok": { + "description": "Set Event Provider", + "field": "process.name", + "patterns": [ + "^%{HYPHENATED_WORDS:event.provider}" + ], + "pattern_definitions": { + "HYPHENATED_WORDS": "\\b[A-Za-z0-9_]+(-[A-Za-z_]+)*\\b" + } + } + }, + { + "pipeline": { + "name": "logs-pfsense.log-1.19.1-firewall", + "if": "ctx.event.provider == 'filterlog'" + } + }, + { + "pipeline": { + "name": "logs-pfsense.log-1.19.1-openvpn", + "if": "ctx.event.provider == 'openvpn'" + } + }, + { + "pipeline": { + "name": "logs-pfsense.log-1.19.1-ipsec", + "if": "ctx.event.provider == 'charon'" + } + }, + { + "pipeline": { + "name": "logs-pfsense.log-1.19.1-dhcp", + "if": "[\"dhcpd\", \"dhclient\", \"dhcp6c\"].contains(ctx.event.provider)" + } + }, + { + "pipeline": { + "name": "logs-pfsense.log-1.19.1-unbound", + "if": "ctx.event.provider == 'unbound'" + } + }, + { + "pipeline": { + "name": "logs-pfsense.log-1.19.1-haproxy", + "if": "ctx.event.provider == 'haproxy'" + } + }, + { + "pipeline": { + "name": "logs-pfsense.log-1.19.1-php-fpm", + "if": "ctx.event.provider == 'php-fpm'" + } + }, + { + "pipeline": { + "name": "logs-pfsense.log-1.19.1-squid", + "if": "ctx.event.provider == 'squid'" + } + }, + { + "pipeline": { + "name": "logs-pfsense.log-1.16.0-suricata", + "if": "ctx.event.provider == 'suricata'" + } + }, + { + "drop": { + "if": "![\"filterlog\", \"openvpn\", \"charon\", \"dhcpd\", \"dhclient\", \"dhcp6c\", \"unbound\", \"haproxy\", \"php-fpm\", \"squid\", \"suricata\"].contains(ctx.event?.provider)" + } + }, + { + "append": { + "field": "event.category", + "value": "network", + "if": "ctx.network != null" + } + }, + { + "convert": { + "field": "source.address", + "target_field": "source.ip", + "type": "ip", + "ignore_failure": true, + "ignore_missing": true + } + }, + { + "convert": { + "field": "destination.address", + "target_field": "destination.ip", + "type": "ip", + "ignore_failure": true, + "ignore_missing": true + } + }, + { + "set": { + "field": "network.type", + "value": "ipv6", + "if": "ctx.source?.ip != null && ctx.source.ip.contains(\":\")" + } + }, + { + "set": { + "field": "network.type", + "value": "ipv4", + "if": "ctx.source?.ip != null && ctx.source.ip.contains(\".\")" + } + }, + { + "geoip": { + "field": "source.ip", + "target_field": "source.geo", + "ignore_missing": true + } + }, + { + "geoip": { + "field": "destination.ip", + "target_field": "destination.geo", + "ignore_missing": true + } + }, + { + "geoip": { + "ignore_missing": true, + "database_file": "GeoLite2-ASN.mmdb", + "field": "source.ip", + "target_field": "source.as", + "properties": [ + "asn", + "organization_name" + ] + } + }, + { + "geoip": { + "database_file": "GeoLite2-ASN.mmdb", + "field": "destination.ip", + "target_field": "destination.as", + "properties": [ + "asn", + "organization_name" + ], + "ignore_missing": true + } + }, + { + "rename": { + "field": "source.as.asn", + "target_field": "source.as.number", + "ignore_missing": true + } + }, + { + "rename": { + "field": "source.as.organization_name", + "target_field": "source.as.organization.name", + "ignore_missing": true + } + }, + { + "rename": { + "field": "destination.as.asn", + "target_field": "destination.as.number", + "ignore_missing": true + } + }, + { + "rename": { + "field": "destination.as.organization_name", + "target_field": "destination.as.organization.name", + "ignore_missing": true + } + }, + { + "community_id": { + "target_field": "network.community_id", + "ignore_failure": true + } + }, + { + "grok": { + "field": "observer.ingress.interface.name", + "patterns": [ + "%{DATA}.%{NONNEGINT:observer.ingress.vlan.id}" + ], + "ignore_missing": true, + "ignore_failure": true + } + }, + { + "set": { + "field": "network.vlan.id", + "copy_from": "observer.ingress.vlan.id", + "ignore_empty_value": true + } + }, + { + "append": { + "field": "related.ip", + "value": "{{destination.ip}}", + "allow_duplicates": false, + "if": "ctx.destination?.ip != null" + } + }, + { + "append": { + "field": "related.ip", + "value": "{{source.ip}}", + "allow_duplicates": false, + "if": "ctx.source?.ip != null" + } + }, + { + "append": { + "field": "related.ip", + "value": "{{source.nat.ip}}", + "allow_duplicates": false, + "if": "ctx.source?.nat?.ip != null" + } + }, + { + "append": { + "field": "related.hosts", + "value": "{{destination.domain}}", + "if": "ctx.destination?.domain != null" + } + }, + { + "append": { + "field": "related.user", + "value": "{{user.name}}", + "if": "ctx.user?.name != null" + } + }, + { + "set": { + "field": "network.direction", + "value": "{{network.direction}}bound", + "if": "ctx.network?.direction != null && ctx.network?.direction =~ /^(in|out)$/" + } + }, + { + "remove": { + "field": [ + "_tmp" + ], + "ignore_failure": true + } + }, + { + "script": { + "lang": "painless", + "description": "This script processor iterates over the whole document to remove fields with null values.", + "source": "void handleMap(Map map) {\n for (def x : map.values()) {\n if (x instanceof Map) {\n handleMap(x);\n } else if (x instanceof List) {\n handleList(x);\n }\n }\n map.values().removeIf(v -> v == null || (v instanceof String && v == \"-\"));\n}\nvoid handleList(List list) {\n for (def x : list) {\n if (x instanceof Map) {\n handleMap(x);\n } else if (x instanceof List) {\n handleList(x);\n }\n }\n}\nhandleMap(ctx);\n" + } + }, + { + "remove": { + "field": "event.original", + "if": "ctx.tags == null || !(ctx.tags.contains('preserve_original_event'))", + "ignore_failure": true, + "ignore_missing": true + } + }, + { + "pipeline": { + "name": "global@custom", + "ignore_missing_pipeline": true, + "description": "[Fleet] Global pipeline for all data streams" + } + }, + { + "pipeline": { + "name": "logs@custom", + "ignore_missing_pipeline": true, + "description": "[Fleet] Pipeline for all data streams of type `logs`" + } + }, + { + "pipeline": { + "name": "logs-pfsense.integration@custom", + "ignore_missing_pipeline": true, + "description": "[Fleet] Pipeline for all data streams of type `logs` defined by the `pfsense` integration" + } + }, + { + "pipeline": { + "name": "logs-pfsense.log@custom", + "ignore_missing_pipeline": true, + "description": "[Fleet] Pipeline for the `pfsense.log` dataset" + } + } + ], + "on_failure": [ + { + "remove": { + "field": [ + "_tmp" + ], + "ignore_failure": true + } + }, + { + "set": { + "field": "event.kind", + "value": "pipeline_error" + } + }, + { + "append": { + "field": "error.message", + "value": "{{{ _ingest.on_failure_message }}}" + } + } + ], + "_meta": { + "managed_by": "fleet", + "managed": true, + "package": { + "name": "pfsense" + } + } +} diff --git a/salt/elasticsearch/files/ingest/suricata.alert_pfsense b/salt/elasticsearch/files/ingest/suricata.alert_pfsense new file mode 100644 index 000000000..32b0a285d --- /dev/null +++ b/salt/elasticsearch/files/ingest/suricata.alert_pfsense @@ -0,0 +1,16 @@ +{ + "description" : "suricata.alert", + "processors" : [ + { "set": { "field": "data_stream.dataset", "value": "suricata" } }, + { "set": { "field": "data_stream.namespace", "value": "so" } }, + { "set": { "field": "_index", "value": "logs-suricata.alerts-so" } }, + { "set": { "field": "tags","value": "alert" }}, + { "rename":{ "field": "message2.alert", "target_field": "rule", "ignore_failure": true } }, + { "rename":{ "field": "rule.signature", "target_field": "rule.name", "ignore_failure": true } }, + { "rename":{ "field": "rule.ref", "target_field": "rule.version", "ignore_failure": true } }, + { "rename":{ "field": "rule.signature_id", "target_field": "rule.uuid", "ignore_failure": true } }, + { "rename":{ "field": "rule.signature_id", "target_field": "rule.signature", "ignore_failure": true } }, + { "rename":{ "field": "message2.payload_printable", "target_field": "network.data.decoded", "ignore_failure": true } }, + { "pipeline": { "name": "common.nids" } } + ] +} diff --git a/salt/elasticsearch/files/ingest/suricata.common_pfsense b/salt/elasticsearch/files/ingest/suricata.common_pfsense new file mode 100644 index 000000000..04da7b482 --- /dev/null +++ b/salt/elasticsearch/files/ingest/suricata.common_pfsense @@ -0,0 +1,23 @@ +{ + "description" : "suricata.common", + "processors" : [ + { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } }, + { "rename": { "field": "message2.pkt_src", "target_field": "network.packet_source","ignore_failure": true } }, + { "rename": { "field": "message2.proto", "target_field": "network.transport", "ignore_failure": true } }, + { "rename": { "field": "message2.in_iface", "target_field": "observer.ingress.interface.name", "ignore_failure": true } }, + { "rename": { "field": "message2.flow_id", "target_field": "log.id.uid", "ignore_failure": true } }, + { "rename": { "field": "message2.src_ip", "target_field": "source.ip", "ignore_failure": true } }, + { "rename": { "field": "message2.src_port", "target_field": "source.port", "ignore_failure": true } }, + { "rename": { "field": "message2.dest_ip", "target_field": "destination.ip", "ignore_failure": true } }, + { "rename": { "field": "message2.dest_port", "target_field": "destination.port", "ignore_failure": true } }, + { "rename": { "field": "message2.vlan", "target_field": "network.vlan.id", "ignore_failure": true } }, + { "rename": { "field": "message2.community_id", "target_field": "network.community_id", "ignore_missing": true } }, + { "rename": { "field": "message2.xff", "target_field": "xff.ip", "ignore_missing": true } }, + { "set": { "field": "event.dataset", "value": "{{ message2.event_type }}" } }, + { "set": { "field": "observer.name", "value": "{{agent.name}}" } }, + { "set": { "field": "event.ingested", "value": "{{@timestamp}}" } }, + { "date": { "field": "message2.timestamp", "target_field": "@timestamp", "formats": ["ISO8601", "UNIX"], "timezone": "UTC", "ignore_failure": true } }, + { "remove":{ "field": "agent", "ignore_failure": true } }, + { "pipeline": { "if": "ctx?.event?.dataset != null", "name": "suricata.{{event.dataset}}_pfsense" } } + ] +} From 764eb98bc2151c6756f65488eb49c9d4984f16e2 Mon Sep 17 00:00:00 2001 From: Wes Date: Tue, 17 Sep 2024 19:43:13 +0000 Subject: [PATCH 477/507] Add custom component for ints --- .../logs-1password.item_usages@custom.json | 36 +++++++++++++++++ ...logs-1password.signin_attempts@custom.json | 36 +++++++++++++++++ .../logs-apache.access@custom.json | 36 +++++++++++++++++ .../logs-apache.error@custom.json | 36 +++++++++++++++++ .../elastic-agent/logs-auditd.log@custom.json | 36 +++++++++++++++++ .../elastic-agent/logs-auth0.logs@custom.json | 36 +++++++++++++++++ .../logs-aws.cloudfront_logs@custom.json | 36 +++++++++++++++++ .../logs-aws.cloudtrail@custom.json | 36 +++++++++++++++++ .../logs-aws.cloudwatch_logs@custom.json | 36 +++++++++++++++++ .../logs-aws.ec2_logs@custom.json | 36 +++++++++++++++++ .../logs-aws.elb_logs@custom.json | 36 +++++++++++++++++ .../logs-aws.firewall_logs@custom.json | 36 +++++++++++++++++ .../logs-aws.guardduty@custom.json | 36 +++++++++++++++++ .../logs-aws.inspector@custom.json | 36 +++++++++++++++++ .../logs-aws.route53_public_logs@custom.json | 36 +++++++++++++++++ ...logs-aws.route53_resolver_logs@custom.json | 36 +++++++++++++++++ .../logs-aws.s3access@custom.json | 36 +++++++++++++++++ .../logs-aws.securityhub_findings@custom.json | 36 +++++++++++++++++ .../logs-aws.securityhub_insights@custom.json | 36 +++++++++++++++++ .../logs-aws.vpcflow@custom.json | 36 +++++++++++++++++ .../elastic-agent/logs-aws.waf@custom.json | 36 +++++++++++++++++ .../logs-azure.activitylogs@custom.json | 36 +++++++++++++++++ ...logs-azure.application_gateway@custom.json | 36 +++++++++++++++++ .../logs-azure.auditlogs@custom.json | 36 +++++++++++++++++ .../logs-azure.eventhub@custom.json | 36 +++++++++++++++++ .../logs-azure.firewall_logs@custom.json | 36 +++++++++++++++++ ...logs-azure.identity_protection@custom.json | 36 +++++++++++++++++ .../logs-azure.platformlogs@custom.json | 36 +++++++++++++++++ .../logs-azure.provisioning@custom.json | 36 +++++++++++++++++ .../logs-azure.signinlogs@custom.json | 36 +++++++++++++++++ .../logs-azure.springcloudlogs@custom.json | 36 +++++++++++++++++ .../logs-barracuda.waf@custom.json | 36 +++++++++++++++++ ...arracuda_cloudgen_firewall.log@custom.json | 36 +++++++++++++++++ .../logs-carbonblack_edr.log@custom.json | 36 +++++++++++++++++ .../elastic-agent/logs-cef.log@custom.json | 36 +++++++++++++++++ .../logs-checkpoint.firewall@custom.json | 36 +++++++++++++++++ .../logs-cisco_asa.log@custom.json | 36 +++++++++++++++++ .../logs-cisco_duo.admin@custom.json | 36 +++++++++++++++++ .../logs-cisco_duo.auth@custom.json | 36 +++++++++++++++++ ...s-cisco_duo.offline_enrollment@custom.json | 36 +++++++++++++++++ .../logs-cisco_duo.summary@custom.json | 36 +++++++++++++++++ .../logs-cisco_duo.telephony@custom.json | 36 +++++++++++++++++ .../logs-cisco_ftd.log@custom.json | 36 +++++++++++++++++ .../logs-cisco_ios.log@custom.json | 36 +++++++++++++++++ .../logs-cisco_ise.log@custom.json | 36 +++++++++++++++++ .../logs-cisco_meraki.events@custom.json | 36 +++++++++++++++++ .../logs-cisco_meraki.log@custom.json | 36 +++++++++++++++++ .../logs-cisco_umbrella.log@custom.json | 36 +++++++++++++++++ .../logs-citrix_adc.interface@custom.json | 36 +++++++++++++++++ .../logs-citrix_adc.lbvserver@custom.json | 36 +++++++++++++++++ .../logs-citrix_adc.service@custom.json | 36 +++++++++++++++++ .../logs-citrix_adc.system@custom.json | 36 +++++++++++++++++ .../logs-citrix_adc.vpn@custom.json | 36 +++++++++++++++++ .../logs-citrix_waf.log@custom.json | 36 +++++++++++++++++ .../logs-cloudflare.audit@custom.json | 36 +++++++++++++++++ .../logs-cloudflare.logpull@custom.json | 36 +++++++++++++++++ .../logs-crowdstrike.falcon@custom.json | 36 +++++++++++++++++ .../logs-crowdstrike.fdr@custom.json | 36 +++++++++++++++++ ...ogs-darktrace.ai_analyst_alert@custom.json | 36 +++++++++++++++++ ...s-darktrace.model_breach_alert@custom.json | 36 +++++++++++++++++ ...-darktrace.system_status_alert@custom.json | 36 +++++++++++++++++ .../logs-elastic_agent.apm_server@custom.json | 36 +++++++++++++++++ .../logs-elastic_agent.auditbeat@custom.json | 36 +++++++++++++++++ .../logs-elastic_agent.cloudbeat@custom.json | 36 +++++++++++++++++ ...lastic_agent.endpoint_security@custom.json | 36 +++++++++++++++++ .../logs-elastic_agent.filebeat@custom.json | 36 +++++++++++++++++ ...ogs-elastic_agent.fleet_server@custom.json | 36 +++++++++++++++++ .../logs-elastic_agent.heartbeat@custom.json | 36 +++++++++++++++++ .../logs-elastic_agent.metricbeat@custom.json | 36 +++++++++++++++++ ...logs-elastic_agent.osquerybeat@custom.json | 36 +++++++++++++++++ .../logs-elastic_agent.packetbeat@custom.json | 36 +++++++++++++++++ .../logs-elastic_agent@custom.json | 40 +++++++++++++++---- .../logs-endpoint.alerts@custom.json | 36 +++++++++++++++++ ...endpoint.diagnostic.collection@custom.json | 40 +++++++++++++++---- .../logs-endpoint.events.api@custom.json | 36 +++++++++++++++++ .../logs-endpoint.events.file@custom.json | 36 +++++++++++++++++ .../logs-endpoint.events.library@custom.json | 36 +++++++++++++++++ .../logs-endpoint.events.network@custom.json | 36 +++++++++++++++++ .../logs-endpoint.events.process@custom.json | 36 +++++++++++++++++ .../logs-endpoint.events.registry@custom.json | 36 +++++++++++++++++ .../logs-endpoint.events.security@custom.json | 36 +++++++++++++++++ .../logs-f5_bigip.log@custom.json | 36 +++++++++++++++++ .../elastic-agent/logs-fim.event@custom.json | 36 +++++++++++++++++ .../elastic-agent/logs-fireeye.nx@custom.json | 36 +++++++++++++++++ .../logs-fortinet.clientendpoint@custom.json | 36 +++++++++++++++++ .../logs-fortinet.firewall@custom.json | 36 +++++++++++++++++ .../logs-fortinet.fortimail@custom.json | 36 +++++++++++++++++ .../logs-fortinet.fortimanager@custom.json | 36 +++++++++++++++++ .../logs-fortinet_fortigate.log@custom.json | 36 +++++++++++++++++ .../elastic-agent/logs-gcp.audit@custom.json | 36 +++++++++++++++++ .../elastic-agent/logs-gcp.dns@custom.json | 36 +++++++++++++++++ .../logs-gcp.firewall@custom.json | 36 +++++++++++++++++ .../logs-gcp.loadbalancing_logs@custom.json | 36 +++++++++++++++++ .../logs-gcp.vpcflow@custom.json | 36 +++++++++++++++++ .../logs-github.audit@custom.json | 36 +++++++++++++++++ .../logs-github.code_scanning@custom.json | 36 +++++++++++++++++ .../logs-github.dependabot@custom.json | 36 +++++++++++++++++ .../logs-github.issues@custom.json | 36 +++++++++++++++++ .../logs-github.secret_scanning@custom.json | 36 +++++++++++++++++ ..._workspace.access_transparency@custom.json | 36 +++++++++++++++++ .../logs-google_workspace.admin@custom.json | 36 +++++++++++++++++ .../logs-google_workspace.alert@custom.json | 36 +++++++++++++++++ ...workspace.context_aware_access@custom.json | 36 +++++++++++++++++ .../logs-google_workspace.device@custom.json | 36 +++++++++++++++++ .../logs-google_workspace.drive@custom.json | 36 +++++++++++++++++ .../logs-google_workspace.gcp@custom.json | 36 +++++++++++++++++ ...gle_workspace.group_enterprise@custom.json | 36 +++++++++++++++++ .../logs-google_workspace.groups@custom.json | 36 +++++++++++++++++ .../logs-google_workspace.login@custom.json | 36 +++++++++++++++++ .../logs-google_workspace.rules@custom.json | 36 +++++++++++++++++ .../logs-google_workspace.saml@custom.json | 36 +++++++++++++++++ .../logs-google_workspace.token@custom.json | 36 +++++++++++++++++ ...google_workspace.user_accounts@custom.json | 36 +++++++++++++++++ .../logs-http_endpoint.generic@custom.json | 36 +++++++++++++++++ .../logs-httpjson.generic@custom.json | 36 +++++++++++++++++ .../elastic-agent/logs-iis.access@custom.json | 36 +++++++++++++++++ .../elastic-agent/logs-iis.error@custom.json | 36 +++++++++++++++++ .../logs-imperva_cloud_waf.event@custom.json | 36 +++++++++++++++++ .../logs-juniper.junos@custom.json | 36 +++++++++++++++++ .../logs-juniper.netscreen@custom.json | 36 +++++++++++++++++ .../logs-juniper.srx@custom.json | 36 +++++++++++++++++ .../logs-juniper_srx.log@custom.json | 36 +++++++++++++++++ .../logs-kafka_log.generic@custom.json | 36 +++++++++++++++++ ...astpass.detailed_shared_folder@custom.json | 36 +++++++++++++++++ .../logs-lastpass.event_report@custom.json | 36 +++++++++++++++++ .../logs-lastpass.user@custom.json | 36 +++++++++++++++++ .../logs-m365_defender.event@custom.json | 36 +++++++++++++++++ .../logs-m365_defender.incident@custom.json | 36 +++++++++++++++++ .../logs-m365_defender.log@custom.json | 36 +++++++++++++++++ ...icrosoft_defender_endpoint.log@custom.json | 36 +++++++++++++++++ .../logs-microsoft_dhcp.log@custom.json | 36 +++++++++++++++++ ...logs-microsoft_sqlserver.audit@custom.json | 36 +++++++++++++++++ .../logs-microsoft_sqlserver.log@custom.json | 36 +++++++++++++++++ .../logs-mimecast.audit_events@custom.json | 36 +++++++++++++++++ .../logs-mimecast.dlp_logs@custom.json | 36 +++++++++++++++++ .../logs-mimecast.siem_logs@custom.json | 36 +++++++++++++++++ ....threat_intel_malware_customer@custom.json | 36 +++++++++++++++++ ...cast.threat_intel_malware_grid@custom.json | 36 +++++++++++++++++ .../logs-mimecast.ttp_ap_logs@custom.json | 36 +++++++++++++++++ .../logs-mimecast.ttp_ip_logs@custom.json | 36 +++++++++++++++++ .../logs-mimecast.ttp_url_logs@custom.json | 36 +++++++++++++++++ .../logs-mysql.error@custom.json | 36 +++++++++++++++++ .../logs-mysql.slowlog@custom.json | 36 +++++++++++++++++ .../logs-netflow.log@custom.json | 36 +++++++++++++++++ .../logs-nginx.access@custom.json | 36 +++++++++++++++++ .../logs-nginx.error@custom.json | 36 +++++++++++++++++ .../elastic-agent/logs-o365.audit@custom.json | 36 +++++++++++++++++ .../logs-okta.system@custom.json | 36 +++++++++++++++++ .../elastic-agent/logs-panw.panos@custom.json | 36 +++++++++++++++++ .../logs-pfsense.log@custom.json | 36 +++++++++++++++++ ...-proofpoint_tap.clicks_blocked@custom.json | 36 +++++++++++++++++ ...roofpoint_tap.clicks_permitted@custom.json | 36 +++++++++++++++++ ...proofpoint_tap.message_blocked@custom.json | 36 +++++++++++++++++ ...oofpoint_tap.message_delivered@custom.json | 36 +++++++++++++++++ .../logs-pulse_connect_secure.log@custom.json | 36 +++++++++++++++++ .../logs-sentinel_one.activity@custom.json | 36 +++++++++++++++++ .../logs-sentinel_one.agent@custom.json | 36 +++++++++++++++++ .../logs-sentinel_one.alert@custom.json | 36 +++++++++++++++++ .../logs-sentinel_one.group@custom.json | 36 +++++++++++++++++ .../logs-sentinel_one.threat@custom.json | 36 +++++++++++++++++ .../elastic-agent/logs-snort.log@custom.json | 36 +++++++++++++++++ .../elastic-agent/logs-snyk.audit@custom.json | 36 +++++++++++++++++ .../logs-snyk.vulnerabilities@custom.json | 36 +++++++++++++++++ .../logs-sonicwall_firewall.log@custom.json | 36 +++++++++++++++++ .../elastic-agent/logs-sophos.utm@custom.json | 36 +++++++++++++++++ .../elastic-agent/logs-sophos.xg@custom.json | 36 +++++++++++++++++ .../logs-sophos_central.alert@custom.json | 36 +++++++++++++++++ .../logs-sophos_central.event@custom.json | 36 +++++++++++++++++ .../logs-symantec_endpoint.log@custom.json | 36 +++++++++++++++++ .../logs-system.application@custom.json | 36 +++++++++++++++++ .../logs-system.auth@custom.json | 36 +++++++++++++++++ .../logs-system.security@custom.json | 36 +++++++++++++++++ .../logs-system.syslog@custom.json | 38 ++++++++++++------ .../logs-system.system@custom.json | 36 +++++++++++++++++ .../logs-tenable_io.asset@custom.json | 36 +++++++++++++++++ .../logs-tenable_io.plugin@custom.json | 36 +++++++++++++++++ .../logs-tenable_io.scan@custom.json | 36 +++++++++++++++++ .../logs-tenable_io.vulnerability@custom.json | 36 +++++++++++++++++ .../logs-tenable_sc.asset@custom.json | 36 +++++++++++++++++ .../logs-tenable_sc.plugin@custom.json | 36 +++++++++++++++++ .../logs-tenable_sc.vulnerability@custom.json | 36 +++++++++++++++++ .../logs-ti_abusech.malware@custom.json | 36 +++++++++++++++++ .../logs-ti_abusech.malwarebazaar@custom.json | 36 +++++++++++++++++ .../logs-ti_abusech.threatfox@custom.json | 36 +++++++++++++++++ .../logs-ti_abusech.url@custom.json | 36 +++++++++++++++++ .../logs-ti_anomali.threatstream@custom.json | 36 +++++++++++++++++ .../logs-ti_cybersixgill.threat@custom.json | 36 +++++++++++++++++ .../logs-ti_misp.threat@custom.json | 36 +++++++++++++++++ ...logs-ti_misp.threat_attributes@custom.json | 36 +++++++++++++++++ .../logs-ti_otx.pulses_subscribed@custom.json | 36 +++++++++++++++++ .../logs-ti_otx.threat@custom.json | 36 +++++++++++++++++ ...rdedfuture.latest_ioc-template@custom.json | 36 +++++++++++++++++ .../logs-ti_recordedfuture.threat@custom.json | 36 +++++++++++++++++ .../logs-ti_threatq.threat@custom.json | 36 +++++++++++++++++ .../logs-vsphere.log@custom.json | 36 +++++++++++++++++ .../logs-windows.forwarded@custom.json | 36 +++++++++++++++++ .../logs-windows.powershell@custom.json | 36 +++++++++++++++++ ...windows.powershell_operational@custom.json | 36 +++++++++++++++++ ...ogs-windows.sysmon_operational@custom.json | 36 +++++++++++++++++ .../logs-winlog.winlog@custom.json | 36 +++++++++++++++++ .../logs-zscaler_zia.alerts@custom.json | 36 +++++++++++++++++ .../logs-zscaler_zia.dns@custom.json | 36 +++++++++++++++++ .../logs-zscaler_zia.firewall@custom.json | 36 +++++++++++++++++ .../logs-zscaler_zia.tunnel@custom.json | 36 +++++++++++++++++ .../logs-zscaler_zia.web@custom.json | 36 +++++++++++++++++ ...caler_zpa.app_connector_status@custom.json | 36 +++++++++++++++++ .../logs-zscaler_zpa.audit@custom.json | 36 +++++++++++++++++ ...ogs-zscaler_zpa.browser_access@custom.json | 36 +++++++++++++++++ ...logs-zscaler_zpa.user_activity@custom.json | 36 +++++++++++++++++ .../logs-zscaler_zpa.user_status@custom.json | 36 +++++++++++++++++ 210 files changed, 7542 insertions(+), 28 deletions(-) create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-1password.item_usages@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-1password.signin_attempts@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-apache.access@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-apache.error@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-auditd.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-auth0.logs@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-aws.cloudfront_logs@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-aws.cloudtrail@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-aws.cloudwatch_logs@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-aws.ec2_logs@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-aws.elb_logs@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-aws.firewall_logs@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-aws.guardduty@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-aws.inspector@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-aws.route53_public_logs@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-aws.route53_resolver_logs@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-aws.s3access@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-aws.securityhub_findings@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-aws.securityhub_insights@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-aws.vpcflow@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-aws.waf@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-azure.activitylogs@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-azure.application_gateway@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-azure.auditlogs@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-azure.eventhub@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-azure.firewall_logs@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-azure.identity_protection@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-azure.platformlogs@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-azure.provisioning@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-azure.signinlogs@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-azure.springcloudlogs@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-barracuda.waf@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-barracuda_cloudgen_firewall.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-carbonblack_edr.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-cef.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-checkpoint.firewall@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-cisco_asa.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-cisco_duo.admin@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-cisco_duo.auth@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-cisco_duo.offline_enrollment@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-cisco_duo.summary@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-cisco_duo.telephony@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-cisco_ftd.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-cisco_ios.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-cisco_ise.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-cisco_meraki.events@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-cisco_meraki.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-cisco_umbrella.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-citrix_adc.interface@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-citrix_adc.lbvserver@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-citrix_adc.service@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-citrix_adc.system@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-citrix_adc.vpn@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-citrix_waf.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-cloudflare.audit@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-cloudflare.logpull@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-crowdstrike.falcon@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-crowdstrike.fdr@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-darktrace.ai_analyst_alert@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-darktrace.model_breach_alert@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-darktrace.system_status_alert@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.apm_server@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.auditbeat@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.cloudbeat@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.endpoint_security@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.filebeat@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.fleet_server@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.heartbeat@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.metricbeat@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.osquerybeat@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.packetbeat@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.alerts@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.api@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.file@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.library@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.network@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.process@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.registry@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.security@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-f5_bigip.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-fim.event@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-fireeye.nx@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-fortinet.clientendpoint@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-fortinet.firewall@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-fortinet.fortimail@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-fortinet.fortimanager@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-fortinet_fortigate.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-gcp.audit@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-gcp.dns@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-gcp.firewall@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-gcp.loadbalancing_logs@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-gcp.vpcflow@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-github.audit@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-github.code_scanning@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-github.dependabot@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-github.issues@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-github.secret_scanning@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.access_transparency@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.admin@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.alert@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.context_aware_access@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.device@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.drive@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.gcp@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.group_enterprise@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.groups@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.login@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.rules@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.saml@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.token@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.user_accounts@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-http_endpoint.generic@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-httpjson.generic@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-iis.access@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-iis.error@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-imperva_cloud_waf.event@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-juniper.junos@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-juniper.netscreen@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-juniper.srx@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-juniper_srx.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-kafka_log.generic@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-lastpass.detailed_shared_folder@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-lastpass.event_report@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-lastpass.user@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-m365_defender.event@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-m365_defender.incident@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-m365_defender.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-microsoft_defender_endpoint.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-microsoft_dhcp.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-microsoft_sqlserver.audit@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-microsoft_sqlserver.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.audit_events@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.dlp_logs@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.siem_logs@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.threat_intel_malware_customer@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.threat_intel_malware_grid@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.ttp_ap_logs@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.ttp_ip_logs@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.ttp_url_logs@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-mysql.error@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-mysql.slowlog@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-netflow.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-nginx.access@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-nginx.error@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-o365.audit@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-okta.system@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-panw.panos@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-pfsense.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-proofpoint_tap.clicks_blocked@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-proofpoint_tap.clicks_permitted@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-proofpoint_tap.message_blocked@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-proofpoint_tap.message_delivered@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-pulse_connect_secure.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-sentinel_one.activity@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-sentinel_one.agent@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-sentinel_one.alert@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-sentinel_one.group@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-sentinel_one.threat@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-snort.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-snyk.audit@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-snyk.vulnerabilities@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-sonicwall_firewall.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-sophos.utm@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-sophos.xg@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-sophos_central.alert@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-sophos_central.event@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-symantec_endpoint.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-system.application@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-system.auth@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-system.security@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-system.system@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-tenable_io.asset@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-tenable_io.plugin@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-tenable_io.scan@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-tenable_io.vulnerability@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-tenable_sc.asset@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-tenable_sc.plugin@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-tenable_sc.vulnerability@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-ti_abusech.malware@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-ti_abusech.malwarebazaar@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-ti_abusech.threatfox@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-ti_abusech.url@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-ti_anomali.threatstream@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-ti_cybersixgill.threat@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-ti_misp.threat@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-ti_misp.threat_attributes@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-ti_otx.pulses_subscribed@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-ti_otx.threat@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-ti_recordedfuture.latest_ioc-template@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-ti_recordedfuture.threat@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-ti_threatq.threat@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-vsphere.log@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-windows.forwarded@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-windows.powershell@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-windows.powershell_operational@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-windows.sysmon_operational@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-winlog.winlog@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zia.alerts@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zia.dns@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zia.firewall@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zia.tunnel@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zia.web@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zpa.app_connector_status@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zpa.audit@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zpa.browser_access@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zpa.user_activity@custom.json create mode 100644 salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zpa.user_status@custom.json diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-1password.item_usages@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-1password.item_usages@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-1password.item_usages@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-1password.signin_attempts@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-1password.signin_attempts@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-1password.signin_attempts@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-apache.access@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-apache.access@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-apache.access@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-apache.error@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-apache.error@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-apache.error@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-auditd.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-auditd.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-auditd.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-auth0.logs@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-auth0.logs@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-auth0.logs@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-aws.cloudfront_logs@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.cloudfront_logs@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.cloudfront_logs@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-aws.cloudtrail@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.cloudtrail@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.cloudtrail@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-aws.cloudwatch_logs@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.cloudwatch_logs@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.cloudwatch_logs@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-aws.ec2_logs@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.ec2_logs@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.ec2_logs@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-aws.elb_logs@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.elb_logs@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.elb_logs@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-aws.firewall_logs@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.firewall_logs@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.firewall_logs@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-aws.guardduty@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.guardduty@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.guardduty@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-aws.inspector@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.inspector@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.inspector@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-aws.route53_public_logs@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.route53_public_logs@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.route53_public_logs@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-aws.route53_resolver_logs@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.route53_resolver_logs@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.route53_resolver_logs@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-aws.s3access@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.s3access@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.s3access@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-aws.securityhub_findings@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.securityhub_findings@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.securityhub_findings@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-aws.securityhub_insights@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.securityhub_insights@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.securityhub_insights@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-aws.vpcflow@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.vpcflow@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.vpcflow@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-aws.waf@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.waf@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-aws.waf@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-azure.activitylogs@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-azure.activitylogs@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-azure.activitylogs@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-azure.application_gateway@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-azure.application_gateway@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-azure.application_gateway@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-azure.auditlogs@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-azure.auditlogs@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-azure.auditlogs@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-azure.eventhub@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-azure.eventhub@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-azure.eventhub@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-azure.firewall_logs@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-azure.firewall_logs@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-azure.firewall_logs@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-azure.identity_protection@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-azure.identity_protection@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-azure.identity_protection@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-azure.platformlogs@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-azure.platformlogs@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-azure.platformlogs@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-azure.provisioning@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-azure.provisioning@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-azure.provisioning@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-azure.signinlogs@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-azure.signinlogs@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-azure.signinlogs@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-azure.springcloudlogs@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-azure.springcloudlogs@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-azure.springcloudlogs@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-barracuda.waf@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-barracuda.waf@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-barracuda.waf@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-barracuda_cloudgen_firewall.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-barracuda_cloudgen_firewall.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-barracuda_cloudgen_firewall.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-carbonblack_edr.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-carbonblack_edr.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-carbonblack_edr.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-cef.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-cef.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-cef.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-checkpoint.firewall@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-checkpoint.firewall@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-checkpoint.firewall@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_asa.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_asa.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_asa.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_duo.admin@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_duo.admin@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_duo.admin@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_duo.auth@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_duo.auth@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_duo.auth@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_duo.offline_enrollment@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_duo.offline_enrollment@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_duo.offline_enrollment@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_duo.summary@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_duo.summary@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_duo.summary@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_duo.telephony@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_duo.telephony@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_duo.telephony@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_ftd.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_ftd.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_ftd.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_ios.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_ios.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_ios.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_ise.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_ise.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_ise.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_meraki.events@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_meraki.events@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_meraki.events@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_meraki.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_meraki.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_meraki.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_umbrella.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_umbrella.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-cisco_umbrella.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-citrix_adc.interface@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-citrix_adc.interface@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-citrix_adc.interface@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-citrix_adc.lbvserver@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-citrix_adc.lbvserver@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-citrix_adc.lbvserver@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-citrix_adc.service@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-citrix_adc.service@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-citrix_adc.service@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-citrix_adc.system@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-citrix_adc.system@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-citrix_adc.system@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-citrix_adc.vpn@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-citrix_adc.vpn@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-citrix_adc.vpn@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-citrix_waf.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-citrix_waf.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-citrix_waf.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-cloudflare.audit@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-cloudflare.audit@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-cloudflare.audit@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-cloudflare.logpull@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-cloudflare.logpull@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-cloudflare.logpull@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-crowdstrike.falcon@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-crowdstrike.falcon@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-crowdstrike.falcon@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-crowdstrike.fdr@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-crowdstrike.fdr@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-crowdstrike.fdr@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-darktrace.ai_analyst_alert@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-darktrace.ai_analyst_alert@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-darktrace.ai_analyst_alert@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-darktrace.model_breach_alert@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-darktrace.model_breach_alert@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-darktrace.model_breach_alert@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-darktrace.system_status_alert@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-darktrace.system_status_alert@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-darktrace.system_status_alert@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.apm_server@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.apm_server@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.apm_server@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.auditbeat@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.auditbeat@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.auditbeat@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.cloudbeat@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.cloudbeat@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.cloudbeat@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.endpoint_security@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.endpoint_security@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.endpoint_security@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.filebeat@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.filebeat@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.filebeat@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.fleet_server@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.fleet_server@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.fleet_server@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.heartbeat@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.heartbeat@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.heartbeat@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.metricbeat@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.metricbeat@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.metricbeat@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.osquerybeat@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.osquerybeat@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.osquerybeat@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.packetbeat@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.packetbeat@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent.packetbeat@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent@custom.json index fe77af1db..17319ab9f 100644 --- a/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent@custom.json +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent@custom.json @@ -1,12 +1,36 @@ { "template": { - "settings": {} - }, - "_meta": { - "package": { - "name": "elastic_agent" - }, - "managed_by": "fleet", - "managed": true + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } } } diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.alerts@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.alerts@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.alerts@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.diagnostic.collection@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.diagnostic.collection@custom.json index 1bf9313a9..17319ab9f 100644 --- a/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.diagnostic.collection@custom.json +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.diagnostic.collection@custom.json @@ -1,12 +1,36 @@ { "template": { - "settings": {} - }, - "_meta": { - "package": { - "name": "endpoint" - }, - "managed_by": "fleet", - "managed": true + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } } } diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.api@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.api@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.api@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.file@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.file@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.file@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.library@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.library@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.library@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.network@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.network@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.network@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.process@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.process@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.process@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.registry@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.registry@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.registry@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.security@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.security@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.events.security@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-f5_bigip.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-f5_bigip.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-f5_bigip.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-fim.event@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-fim.event@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-fim.event@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-fireeye.nx@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-fireeye.nx@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-fireeye.nx@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-fortinet.clientendpoint@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-fortinet.clientendpoint@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-fortinet.clientendpoint@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-fortinet.firewall@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-fortinet.firewall@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-fortinet.firewall@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-fortinet.fortimail@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-fortinet.fortimail@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-fortinet.fortimail@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-fortinet.fortimanager@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-fortinet.fortimanager@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-fortinet.fortimanager@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-fortinet_fortigate.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-fortinet_fortigate.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-fortinet_fortigate.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-gcp.audit@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-gcp.audit@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-gcp.audit@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-gcp.dns@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-gcp.dns@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-gcp.dns@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-gcp.firewall@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-gcp.firewall@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-gcp.firewall@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-gcp.loadbalancing_logs@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-gcp.loadbalancing_logs@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-gcp.loadbalancing_logs@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-gcp.vpcflow@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-gcp.vpcflow@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-gcp.vpcflow@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-github.audit@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-github.audit@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-github.audit@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-github.code_scanning@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-github.code_scanning@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-github.code_scanning@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-github.dependabot@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-github.dependabot@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-github.dependabot@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-github.issues@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-github.issues@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-github.issues@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-github.secret_scanning@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-github.secret_scanning@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-github.secret_scanning@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.access_transparency@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.access_transparency@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.access_transparency@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.admin@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.admin@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.admin@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.alert@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.alert@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.alert@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.context_aware_access@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.context_aware_access@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.context_aware_access@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.device@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.device@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.device@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.drive@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.drive@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.drive@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.gcp@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.gcp@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.gcp@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.group_enterprise@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.group_enterprise@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.group_enterprise@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.groups@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.groups@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.groups@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.login@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.login@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.login@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.rules@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.rules@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.rules@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.saml@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.saml@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.saml@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.token@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.token@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.token@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.user_accounts@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.user_accounts@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-google_workspace.user_accounts@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-http_endpoint.generic@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-http_endpoint.generic@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-http_endpoint.generic@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-httpjson.generic@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-httpjson.generic@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-httpjson.generic@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-iis.access@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-iis.access@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-iis.access@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-iis.error@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-iis.error@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-iis.error@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-imperva_cloud_waf.event@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-imperva_cloud_waf.event@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-imperva_cloud_waf.event@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-juniper.junos@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-juniper.junos@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-juniper.junos@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-juniper.netscreen@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-juniper.netscreen@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-juniper.netscreen@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-juniper.srx@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-juniper.srx@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-juniper.srx@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-juniper_srx.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-juniper_srx.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-juniper_srx.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-kafka_log.generic@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-kafka_log.generic@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-kafka_log.generic@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-lastpass.detailed_shared_folder@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-lastpass.detailed_shared_folder@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-lastpass.detailed_shared_folder@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-lastpass.event_report@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-lastpass.event_report@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-lastpass.event_report@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-lastpass.user@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-lastpass.user@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-lastpass.user@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-m365_defender.event@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-m365_defender.event@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-m365_defender.event@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-m365_defender.incident@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-m365_defender.incident@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-m365_defender.incident@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-m365_defender.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-m365_defender.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-m365_defender.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-microsoft_defender_endpoint.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-microsoft_defender_endpoint.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-microsoft_defender_endpoint.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-microsoft_dhcp.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-microsoft_dhcp.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-microsoft_dhcp.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-microsoft_sqlserver.audit@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-microsoft_sqlserver.audit@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-microsoft_sqlserver.audit@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-microsoft_sqlserver.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-microsoft_sqlserver.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-microsoft_sqlserver.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.audit_events@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.audit_events@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.audit_events@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.dlp_logs@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.dlp_logs@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.dlp_logs@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.siem_logs@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.siem_logs@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.siem_logs@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.threat_intel_malware_customer@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.threat_intel_malware_customer@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.threat_intel_malware_customer@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.threat_intel_malware_grid@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.threat_intel_malware_grid@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.threat_intel_malware_grid@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.ttp_ap_logs@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.ttp_ap_logs@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.ttp_ap_logs@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.ttp_ip_logs@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.ttp_ip_logs@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.ttp_ip_logs@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.ttp_url_logs@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.ttp_url_logs@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-mimecast.ttp_url_logs@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-mysql.error@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-mysql.error@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-mysql.error@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-mysql.slowlog@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-mysql.slowlog@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-mysql.slowlog@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-netflow.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-netflow.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-netflow.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-nginx.access@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-nginx.access@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-nginx.access@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-nginx.error@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-nginx.error@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-nginx.error@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-o365.audit@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-o365.audit@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-o365.audit@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-okta.system@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-okta.system@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-okta.system@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-panw.panos@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-panw.panos@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-panw.panos@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-pfsense.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-pfsense.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-pfsense.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-proofpoint_tap.clicks_blocked@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-proofpoint_tap.clicks_blocked@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-proofpoint_tap.clicks_blocked@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-proofpoint_tap.clicks_permitted@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-proofpoint_tap.clicks_permitted@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-proofpoint_tap.clicks_permitted@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-proofpoint_tap.message_blocked@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-proofpoint_tap.message_blocked@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-proofpoint_tap.message_blocked@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-proofpoint_tap.message_delivered@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-proofpoint_tap.message_delivered@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-proofpoint_tap.message_delivered@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-pulse_connect_secure.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-pulse_connect_secure.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-pulse_connect_secure.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-sentinel_one.activity@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-sentinel_one.activity@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-sentinel_one.activity@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-sentinel_one.agent@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-sentinel_one.agent@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-sentinel_one.agent@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-sentinel_one.alert@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-sentinel_one.alert@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-sentinel_one.alert@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-sentinel_one.group@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-sentinel_one.group@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-sentinel_one.group@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-sentinel_one.threat@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-sentinel_one.threat@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-sentinel_one.threat@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-snort.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-snort.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-snort.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-snyk.audit@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-snyk.audit@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-snyk.audit@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-snyk.vulnerabilities@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-snyk.vulnerabilities@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-snyk.vulnerabilities@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-sonicwall_firewall.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-sonicwall_firewall.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-sonicwall_firewall.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-sophos.utm@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-sophos.utm@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-sophos.utm@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-sophos.xg@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-sophos.xg@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-sophos.xg@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-sophos_central.alert@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-sophos_central.alert@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-sophos_central.alert@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-sophos_central.event@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-sophos_central.event@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-sophos_central.event@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-symantec_endpoint.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-symantec_endpoint.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-symantec_endpoint.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-system.application@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-system.application@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-system.application@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-system.auth@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-system.auth@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-system.auth@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-system.security@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-system.security@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-system.security@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-system.syslog@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-system.syslog@custom.json index 0123fb956..17319ab9f 100644 --- a/salt/elasticsearch/templates/component/elastic-agent/logs-system.syslog@custom.json +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-system.syslog@custom.json @@ -2,21 +2,35 @@ "template": { "mappings": { "properties": { - "error": { - "properties": { - "message": { - "type": "match_only_text" + "host": { + "properties":{ + "ip": { + "type": "ip" } } - } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } } } - }, - "_meta": { - "package": { - "name": "system" - }, - "managed_by": "fleet", - "managed": true } } diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-system.system@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-system.system@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-system.system@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-tenable_io.asset@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-tenable_io.asset@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-tenable_io.asset@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-tenable_io.plugin@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-tenable_io.plugin@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-tenable_io.plugin@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-tenable_io.scan@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-tenable_io.scan@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-tenable_io.scan@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-tenable_io.vulnerability@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-tenable_io.vulnerability@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-tenable_io.vulnerability@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-tenable_sc.asset@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-tenable_sc.asset@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-tenable_sc.asset@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-tenable_sc.plugin@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-tenable_sc.plugin@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-tenable_sc.plugin@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-tenable_sc.vulnerability@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-tenable_sc.vulnerability@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-tenable_sc.vulnerability@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-ti_abusech.malware@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_abusech.malware@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_abusech.malware@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-ti_abusech.malwarebazaar@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_abusech.malwarebazaar@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_abusech.malwarebazaar@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-ti_abusech.threatfox@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_abusech.threatfox@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_abusech.threatfox@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-ti_abusech.url@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_abusech.url@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_abusech.url@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-ti_anomali.threatstream@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_anomali.threatstream@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_anomali.threatstream@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-ti_cybersixgill.threat@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_cybersixgill.threat@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_cybersixgill.threat@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-ti_misp.threat@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_misp.threat@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_misp.threat@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-ti_misp.threat_attributes@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_misp.threat_attributes@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_misp.threat_attributes@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-ti_otx.pulses_subscribed@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_otx.pulses_subscribed@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_otx.pulses_subscribed@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-ti_otx.threat@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_otx.threat@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_otx.threat@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-ti_recordedfuture.latest_ioc-template@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_recordedfuture.latest_ioc-template@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_recordedfuture.latest_ioc-template@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-ti_recordedfuture.threat@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_recordedfuture.threat@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_recordedfuture.threat@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-ti_threatq.threat@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_threatq.threat@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-ti_threatq.threat@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-vsphere.log@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-vsphere.log@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-vsphere.log@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-windows.forwarded@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-windows.forwarded@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-windows.forwarded@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-windows.powershell@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-windows.powershell@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-windows.powershell@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-windows.powershell_operational@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-windows.powershell_operational@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-windows.powershell_operational@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-windows.sysmon_operational@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-windows.sysmon_operational@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-windows.sysmon_operational@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-winlog.winlog@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-winlog.winlog@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-winlog.winlog@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zia.alerts@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zia.alerts@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zia.alerts@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zia.dns@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zia.dns@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zia.dns@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zia.firewall@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zia.firewall@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zia.firewall@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zia.tunnel@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zia.tunnel@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zia.tunnel@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zia.web@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zia.web@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zia.web@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zpa.app_connector_status@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zpa.app_connector_status@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zpa.app_connector_status@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zpa.audit@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zpa.audit@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zpa.audit@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zpa.browser_access@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zpa.browser_access@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zpa.browser_access@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zpa.user_activity@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zpa.user_activity@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zpa.user_activity@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zpa.user_status@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zpa.user_status@custom.json new file mode 100644 index 000000000..17319ab9f --- /dev/null +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-zscaler_zpa.user_status@custom.json @@ -0,0 +1,36 @@ +{ + "template": { + "mappings": { + "properties": { + "host": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "related": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "destination": { + "properties":{ + "ip": { + "type": "ip" + } + } + }, + "source": { + "properties":{ + "ip": { + "type": "ip" + } + } + } + } + } + } +} From 442f7a914ae7ca710535729f85983bc75a609492 Mon Sep 17 00:00:00 2001 From: Jason Ertel Date: Wed, 18 Sep 2024 14:16:43 -0400 Subject: [PATCH 478/507] add missing annotation file --- salt/elasticagent/soc_elasticagent.yaml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 salt/elasticagent/soc_elasticagent.yaml diff --git a/salt/elasticagent/soc_elasticagent.yaml b/salt/elasticagent/soc_elasticagent.yaml new file mode 100644 index 000000000..a24ac1985 --- /dev/null +++ b/salt/elasticagent/soc_elasticagent.yaml @@ -0,0 +1,4 @@ +elasticagent: + enabled: + description: Enables or disables the Elastic Agent process. This process must remain enabled to allow collection of node events. + advanced: True From 385054b7b85c752b16cea8a1bbb0d803bfeea8d2 Mon Sep 17 00:00:00 2001 From: reyesj2 <94730068+reyesj2@users.noreply.github.com> Date: Wed, 18 Sep 2024 14:18:47 -0400 Subject: [PATCH 479/507] enable stig for so desktop Signed-off-by: reyesj2 <94730068+reyesj2@users.noreply.github.com> --- pillar/top.sls | 2 ++ salt/allowed_states.map.jinja | 3 ++- salt/top.sls | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/pillar/top.sls b/pillar/top.sls index 76d1a14e1..131b39a99 100644 --- a/pillar/top.sls +++ b/pillar/top.sls @@ -310,3 +310,5 @@ base: '*_desktop': - minions.{{ grains.id }} - minions.adv_{{ grains.id }} + - stig.soc_stig + - soc.license diff --git a/salt/allowed_states.map.jinja b/salt/allowed_states.map.jinja index 37795e9d7..a9a8b7c5e 100644 --- a/salt/allowed_states.map.jinja +++ b/salt/allowed_states.map.jinja @@ -202,7 +202,8 @@ 'so-desktop': [ 'ssl', 'docker_clean', - 'telegraf' + 'telegraf', + 'stig' ], }, grain='role') %} diff --git a/salt/top.sls b/salt/top.sls index 7365e0e83..d876806f2 100644 --- a/salt/top.sls +++ b/salt/top.sls @@ -271,6 +271,7 @@ base: - sensoroni - telegraf - elasticfleet.install_agent_grid + - stig 'J@desktop:gui:enabled:^[Tt][Rr][Uu][Ee]$ and ( G@saltversion:{{saltversion}} and G@os:OEL )': - match: compound From 074cc8e6ffb9150bd1459b64556471d865a1f899 Mon Sep 17 00:00:00 2001 From: defensivedepth Date: Fri, 20 Sep 2024 11:58:21 -0400 Subject: [PATCH 480/507] Initial commit --- salt/elasticfleet/config.sls | 42 ++++ .../soc/elastic-defend-custom-filters.yaml | 27 +++ .../soc/elastic-defend-disabled-filters.yaml | 3 + salt/elasticfleet/soc_elasticfleet.yaml | 24 ++ .../sbin/so-elastic-defend-manage-filters.py | 205 ++++++++++++++++++ .../sbin/so_elastic_defend_filters_helper.py | 123 +++++++++++ .../tools/sbin_jinja/so-kibana-space-defaults | 2 +- 7 files changed, 425 insertions(+), 1 deletion(-) create mode 100644 salt/elasticfleet/files/soc/elastic-defend-custom-filters.yaml create mode 100644 salt/elasticfleet/files/soc/elastic-defend-disabled-filters.yaml create mode 100644 salt/elasticfleet/tools/sbin/so-elastic-defend-manage-filters.py create mode 100644 salt/elasticfleet/tools/sbin/so_elastic_defend_filters_helper.py diff --git a/salt/elasticfleet/config.sls b/salt/elasticfleet/config.sls index f8566ed94..127ba895d 100644 --- a/salt/elasticfleet/config.sls +++ b/salt/elasticfleet/config.sls @@ -73,6 +73,48 @@ eapackageupgrade: - template: jinja {% if GLOBALS.role != "so-fleet" %} + +{% if not GLOBALS.airgap %} +soresourcesrepoclone: + git.latest: + - name: https://github.com/Security-Onion-Solutions/securityonion-resources.git + - target: /opt/so/saltstack/local/salt/elasticfleet/files/securityonion-resources + - rev: 'dev/defend-filters' + - depth: 1 + - force_fetch: true + - force_clone: true +{% endif %} + +elasticdefendconfdir: + file.directory: + - name: /opt/so/conf/elastic-fleet/defend-exclusions/rulesets + - user: 947 + - group: 939 + - makedirs: True + +elasticdefendrulesets: + file.recurse: + - name: /opt/so/conf/elastic-fleet/defend-exclusions/rulesets + - source: salt://elasticfleet/files/securityonion-resources/event-filters/ + - user: 947 + - group: 939 + +elasticdefenddisabled: + file.managed: + - name: /opt/so/conf/elastic-fleet/defend-exclusions/disabled-filters.yaml + - source: salt://elasticfleet/files/soc/elastic-defend-disabled-filters.yaml + - user: 947 + - group: 939 + - mode: 600 + +elasticdefendcustom: + file.managed: + - name: /opt/so/conf/elastic-fleet/defend-exclusions/rulesets/custom-filters-raw + - source: salt://elasticfleet/files/soc/elastic-defend-custom-filters.yaml + - user: 947 + - group: 939 + - mode: 600 + eaintegrationsdir: file.directory: - name: /opt/so/conf/elastic-fleet/integrations diff --git a/salt/elasticfleet/files/soc/elastic-defend-custom-filters.yaml b/salt/elasticfleet/files/soc/elastic-defend-custom-filters.yaml new file mode 100644 index 000000000..82ae203d8 --- /dev/null +++ b/salt/elasticfleet/files/soc/elastic-defend-custom-filters.yaml @@ -0,0 +1,27 @@ +title: 'Template 1' +id: '2B160E43-3B95-4B50-AA3F-25D99F51FA69' +description: 'Credit @ITProPaul' +references: 'https://github.com/Neo23x0/sysmon-config' +author: 'SOS' +date: '09/18/24' +event_type: 'NetworkConnect' +filter_type: 'exclude' +filter: + selection_1: + TargetField: 'DestinationIp' + Condition: 'begin with' + Pattern: 'fe80:0:0:0' +--- +title: 'Template2' +id: '3B160E43-3B95-4B50-AA3F-25D99F51FA69' +description: 'Credit @ITProPaul' +references: 'https://github.com/Neo23x0/sysmon-config' +author: 'SOS' +date: '09/18/24' +event_type: 'NetworkConnect' +filter_type: 'exclude' +filter: + selection_1: + TargetField: 'DestinationIp' + Condition: 'begin with' + Pattern: 'fe80:0:0:0' \ No newline at end of file diff --git a/salt/elasticfleet/files/soc/elastic-defend-disabled-filters.yaml b/salt/elasticfleet/files/soc/elastic-defend-disabled-filters.yaml new file mode 100644 index 000000000..52a646385 --- /dev/null +++ b/salt/elasticfleet/files/soc/elastic-defend-disabled-filters.yaml @@ -0,0 +1,3 @@ +'9EDAA51C-BB12-49D9-8748-2B61371F2E7D': + Date: '10/10/2024' + Notes: 'Example Disabled Filter - Leave this entry here, just copy and paste as needed.' \ No newline at end of file diff --git a/salt/elasticfleet/soc_elasticfleet.yaml b/salt/elasticfleet/soc_elasticfleet.yaml index 7ed97e6ec..bc9a61625 100644 --- a/salt/elasticfleet/soc_elasticfleet.yaml +++ b/salt/elasticfleet/soc_elasticfleet.yaml @@ -9,6 +9,24 @@ elasticfleet: global: True forcedType: bool helpLink: elastic-fleet.html + files: + soc: + elastic-defend-disabled-filters__yaml: + title: Disabled Elastic Defend filters + description: Enter the ID of the filter that should be disabled. + syntax: yaml + file: True + global: True + helpLink: elastic-fleet.html + advanced: True + elastic-defend-custom-filters__yaml: + title: Custom Elastic Defend filters + description: Enter custom filters. + syntax: yaml + file: True + global: True + helpLink: elastic-fleet.html + advanced: True logging: zeek: excluded: @@ -16,6 +34,12 @@ elasticfleet: forcedType: "[]string" helpLink: zeek.html config: + defend_filters: + enable_auto_configuration: + description: Enable auto-configuration and management of the Elastic Defend Exclusion filters. + global: True + helpLink: elastic-fleet.html + advanced: True server: custom_fqdn: description: Custom FQDN for Agents to connect to. One per line. diff --git a/salt/elasticfleet/tools/sbin/so-elastic-defend-manage-filters.py b/salt/elasticfleet/tools/sbin/so-elastic-defend-manage-filters.py new file mode 100644 index 000000000..874b6c049 --- /dev/null +++ b/salt/elasticfleet/tools/sbin/so-elastic-defend-manage-filters.py @@ -0,0 +1,205 @@ +import yaml +import sys +import getopt +from so_elastic_defend_filters_helper import * +import logging + +logging.basicConfig(level=logging.INFO, format='%(message)s') + +# Define mappings for conditional_field, event_type, and conditions +FIELD_MAPPINGS = { + "Image": "process.executable", + "ParentImage": "process.parent.executable", + "CommandLine": "process.command_line", + "ParentCommandLine": "process.parent.command_line", + "QueryName": "dns.question.name", + "DestinationIp": "destination.ip", + "TargetObject": "registry.path" +} + +DATASET_MAPPINGS = { + "ProcessCreate": "endpoint.events.process", + "NetworkConnect": "endpoint.events.network", + "FileCreate": "endpoint.events.file", + "RegistryEvent": "endpoint.events.registry", + "DnsQuery": "endpoint.events.network" +} + +CONDITION_MAPPINGS = { + "is": ("included", "match"), + "end with": ("included", "wildcard"), + "begin with": ("included", "wildcard"), + "contains": ("included", "wildcard"), + "contains any": ("included", "match_any"), + "excluded": ("excluded", "match") +} + +# Extract entries for a rule +def extract_entries(data): + entries = [] + filter_data = data.get('filter', {}) + for value in filter_data.values(): + target_field = FIELD_MAPPINGS.get(value.get('TargetField', '')) + condition = value.get('Condition', '') + pattern = value.get('Pattern', '') + + operator, match_type = CONDITION_MAPPINGS.get(condition, ("included", "match")) + + entries.append({ + "field": target_field, + "operator": operator, + "type": match_type, + "value": pattern + }) + return entries + +# Build the JSON entry +def build_json_entry(data, entries, guid, event_type, dataset, context): + return { + "comments": [], + "entries": entries, + "item_id": guid, + "name": f"SO - {event_type} - {guid}", + "description": f"{context}\n\n <<- Note: This filter is managed by Security Onion. ->>", + "namespace_type": "agnostic", + "tags": ["policy:all"], + "type": "simple", + "os_types": ["windows"], + "entries": entries + } + +# Check to see if the rule is disabled +# If it is, make sure it is not active +def disable_check(guid, disabled_rules, username, password): + if guid in disabled_rules: + logging.info(f"Rule {guid} is in the disabled rules list, confirming that is is actually disabled...") + existing_rule = api_request("GET", guid, username, password) + + if existing_rule: + if api_request("DELETE", guid, username, password): + logging.info(f"Successfully deleted rule {guid}") + return True, "deleted" + else: + logging.error(f"Error deleting rule {guid}.") + return True, "Error deleting" + return True, "NOP" + return False, None + +def process_rule_update_or_create(guid, json_entry, username, password): + existing_rule = api_request("GET", guid, username, password) + + if existing_rule: + existing_rule_data = extract_relevant_fields(existing_rule) + new_rule_data = extract_relevant_fields(json_entry) + if generate_hash(existing_rule_data) != generate_hash(new_rule_data): + logging.info(f"Updating rule {guid}") + json_entry.pop("list_id", None) + api_request("PUT", guid, username, password, json_data=json_entry) + return "updated" + logging.info(f"Rule {guid} is up to date.") + return "no_change" + else: + logging.info(f"Creating new rule {guid}") + json_entry["list_id"] = "endpoint_event_filters" + api_request("POST", guid, username, password, json_data=json_entry) + return "new" + +# Main function for processing rules +def process_rules(yaml_files, disabled_rules, username, password): + stats = {"rule_count": 0, "new": 0, "updated": 0, "no_change": 0, "disabled": 0, "deleted": 0} + for data in yaml_files: + logging.info(f"Processing rule: {data.get('id', '')}") + event_type = data.get('event_type', '') + guid = data.get('id', '') + dataset = DATASET_MAPPINGS.get(event_type, '') + context = data.get('description', '') + + rule_deleted, state = disable_check(guid, disabled_rules, username, password) + if rule_deleted: + stats["disabled"] += 1 + if state == "deleted": + stats["deleted"] += 1 + continue + + # Extract entries and build JSON + entries = extract_entries(data) + json_entry = build_json_entry(data, entries, guid, event_type, dataset, context) + + # Process rule creation or update + status = process_rule_update_or_create(guid, json_entry, username, password) + + stats[status] += 1 + stats["rule_count"] += 1 + return stats + +def parse_args(argv): + try: + opts, args = getopt.getopt(argv, "i:d:c:f:", ["input=", "disabled=", "credentials=", "flags_file="]) + except getopt.GetoptError: + print("Usage: python so-elastic-defend-manage-filters.py -c -d -i [-f ]") + sys.exit(2) + return opts + +def load_flags(file_path): + with open(file_path, 'r') as flags_file: + return flags_file.read().splitlines() + +def validate_inputs(credentials_file, disabled_file, yaml_directories): + if not credentials_file or not disabled_file or not yaml_directories: + print("Usage: python so-elastic-defend-manage-filters.py -c -d -i [-f ]") + sys.exit(2) + +def main(argv): + credentials_file = "" + disabled_file = "" + yaml_directories = [] + + opts = parse_args(argv) + + for opt, arg in opts: + if opt in ("-c", "--credentials"): + credentials_file = arg + elif opt in ("-d", "--disabled"): + disabled_file = arg + elif opt in ("-i", "--input"): + yaml_directories.append(arg) + elif opt in ("-f", "--flags_file"): + flags = load_flags(arg) + return main(argv + flags) + + validate_inputs(credentials_file, disabled_file, yaml_directories) + + credentials = load_credentials(credentials_file) + if not credentials: + raise Exception("Failed to load credentials") + + username, password = extract_auth_details(credentials) + if not username or not password: + raise Exception("Invalid credentials format") + + custom_rules_input = '/opt/so/conf/elastic-fleet/defend-exclusions/rulesets/custom-filters-raw' + custom_rules_output = '/opt/so/conf/elastic-fleet/defend-exclusions/rulesets/custom-filters' + prepare_custom_rules(custom_rules_input, custom_rules_output) + disabled_rules = load_disabled(disabled_file) + + total_stats = {"rule_count": 0, "new": 0, "updated": 0, "no_change": 0, "disabled": 0, "deleted": 0} + + for yaml_dir in yaml_directories: + yaml_files = load_yaml_files(yaml_dir) + stats = process_rules(yaml_files, disabled_rules, username, password) + + for key in total_stats: + total_stats[key] += stats[key] + + logging.info(f"\nProcessing Summary") + logging.info(f" - Total processed rules: {total_stats['rule_count']}") + logging.info(f" - New rules: {total_stats['new']}") + logging.info(f" - Updated rules: {total_stats['updated']}") + logging.info(f" - Disabled rules: {total_stats['deleted']}") + logging.info(f" - Rules with no changes: {total_stats['no_change']}") + logging.info(f"Rule status Summary") + logging.info(f" - Active rules: {total_stats['rule_count'] - total_stats['disabled']}") + logging.info(f" - Disabled rules: {total_stats['disabled']}") + +if __name__ == "__main__": + main(sys.argv[1:]) diff --git a/salt/elasticfleet/tools/sbin/so_elastic_defend_filters_helper.py b/salt/elasticfleet/tools/sbin/so_elastic_defend_filters_helper.py new file mode 100644 index 000000000..ab997f60e --- /dev/null +++ b/salt/elasticfleet/tools/sbin/so_elastic_defend_filters_helper.py @@ -0,0 +1,123 @@ + +import hashlib +import os +import json +import yaml +import requests +from requests.auth import HTTPBasicAuth +import shutil + +# Extract only the 'entries' and 'description' fields +def extract_relevant_fields(rule): + return { + 'entries': rule.get('entries', []), + 'description': rule.get('description', '') + } + +# Sort lists and recursively sort keys in dictionaries for consistency +def sorted_data(value): + if isinstance(value, dict): + return {k: sorted_data(v) for k, v in sorted(value.items())} + elif isinstance(value, list): + return sorted(sorted_data(v) for v in value) + return value + +# Generate a hash based on sorted relevant fields +def generate_hash(data): + sorted_data_string = json.dumps(sorted_data(data), sort_keys=True) + return hashlib.sha256(sorted_data_string.encode('utf-8')).hexdigest() + +# Load Elasticsearch credentials from the config file +def load_credentials(config_path): + with open(config_path, 'r') as file: + for line in file: + if line.startswith("user"): + credentials = line.split('=', 1)[1].strip().strip('"') + return credentials + return None + +# Extract username and password from credentials +def extract_auth_details(credentials): + if ':' in credentials: + return credentials.split(':', 1) + return None, None + +# Generalized API request function +def api_request(method, guid, username, password, json_data=None): + headers = { + 'kbn-xsrf': 'true', + 'Content-Type': 'application/json' + } + auth = HTTPBasicAuth(username, password) + + if method == "POST": + url = "http://localhost:5601/api/exception_lists/items?namespace_type=agnostic" + else: + url = f"http://localhost:5601/api/exception_lists/items?item_id={guid}&namespace_type=agnostic" + + response = requests.request(method, url, headers=headers, auth=auth, json=json_data) + + if response.status_code in [200, 201]: + return response.json() if response.content else True + elif response.status_code == 404 and method == "GET": + return None + else: + print(f"Error with {method} request: {response.status_code} - {response.text}") + return False + + +# Load YAML data for GUIDs to skip +def load_disabled(disabled_file_path): + if os.path.exists(disabled_file_path): + with open(disabled_file_path, 'r') as file: + return yaml.safe_load(file) or {} + return {} + +def load_yaml_files(*dirs): + yaml_files = [] + + for dir_path in dirs: + if os.path.isdir(dir_path): + # Recurse through the directory and subdirectories + for root, dirs, files in os.walk(dir_path): + for file_name in files: + if file_name.endswith(".yaml"): + full_path = os.path.join(root, file_name) + with open(full_path, 'r') as f: + try: + yaml_content = yaml.safe_load(f) + yaml_files.append(yaml_content) + except yaml.YAMLError as e: + print(f"Error loading {full_path}: {e}") + else: + print(f"Invalid directory: {dir_path}") + + return yaml_files + +def prepare_custom_rules(input_file, output_dir): + # Clear the output directory first + if os.path.exists(output_dir): + shutil.rmtree(output_dir) + os.makedirs(output_dir, exist_ok=True) + + try: + # Load the YAML file + with open(input_file, 'r') as f: + docs = yaml.safe_load_all(f) + + for doc in docs: + if 'id' not in doc: + print(f"Skipping rule, no 'id' found: {doc}") + continue + # Create a filename using the 'id' field + file_name = os.path.join(output_dir, f"{doc['id']}.yaml") + + # Write the individual YAML file + with open(file_name, 'w') as output_file: + yaml.dump(doc, output_file, default_flow_style=False) + print(f"Created file: {file_name}") + + except yaml.YAMLError as e: + print(f"Error parsing YAML: {e}") + except Exception as e: + print(f"Error processing file: {e}") diff --git a/salt/kibana/tools/sbin_jinja/so-kibana-space-defaults b/salt/kibana/tools/sbin_jinja/so-kibana-space-defaults index 430054e06..6e4959194 100755 --- a/salt/kibana/tools/sbin_jinja/so-kibana-space-defaults +++ b/salt/kibana/tools/sbin_jinja/so-kibana-space-defaults @@ -13,6 +13,6 @@ echo "Setting up default Space:" {% if HIGHLANDER %} curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X PUT "localhost:5601/api/spaces/space/default" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d' {"id":"default","name":"Default","disabledFeatures":["enterpriseSearch"]} ' >> /opt/so/log/kibana/misc.log {% else %} -curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X PUT "localhost:5601/api/spaces/space/default" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d' {"id":"default","name":"Default","disabledFeatures":["ml","enterpriseSearch","siem","logs","infrastructure","apm","uptime","monitoring","stackAlerts","actions","securitySolutionCases"]} ' >> /opt/so/log/kibana/misc.log +curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X PUT "localhost:5601/api/spaces/space/default" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d' {"id":"default","name":"Default","disabledFeatures":["ml","enterpriseSearch","logs","infrastructure","apm","uptime","monitoring","stackAlerts","actions","securitySolutionCases"]} ' >> /opt/so/log/kibana/misc.log {% endif %} echo From ef003ffbb5ac62aca878e195068e48a49987baf7 Mon Sep 17 00:00:00 2001 From: defensivedepth Date: Mon, 23 Sep 2024 12:55:07 -0400 Subject: [PATCH 481/507] Refactor --- salt/elasticfleet/config.sls | 30 +++++-- salt/elasticfleet/defaults.yaml | 2 + .../soc/elastic-defend-custom-filters.yaml | 38 ++++----- salt/elasticfleet/soc_elasticfleet.yaml | 2 +- .../sbin/so-elastic-defend-manage-filters.py | 84 ++++++++++++++----- .../sbin/so_elastic_defend_filters_helper.py | 19 +++-- 6 files changed, 120 insertions(+), 55 deletions(-) diff --git a/salt/elasticfleet/config.sls b/salt/elasticfleet/config.sls index 127ba895d..555a42288 100644 --- a/salt/elasticfleet/config.sls +++ b/salt/elasticfleet/config.sls @@ -75,14 +75,22 @@ eapackageupgrade: {% if GLOBALS.role != "so-fleet" %} {% if not GLOBALS.airgap %} +elasticdefendrepodir: + file.directory: + - name: /nsm/securityonion-resources + - user: 939 + - group: 939 + - makedirs: True + soresourcesrepoclone: git.latest: - name: https://github.com/Security-Onion-Solutions/securityonion-resources.git - - target: /opt/so/saltstack/local/salt/elasticfleet/files/securityonion-resources - - rev: 'dev/defend-filters' + - target: /nsm/securityonion-resources + - rev: 'dev/defend_filters' - depth: 1 - force_fetch: true - force_clone: true + - user: socore # id is not allowed for this {% endif %} elasticdefendconfdir: @@ -92,13 +100,6 @@ elasticdefendconfdir: - group: 939 - makedirs: True -elasticdefendrulesets: - file.recurse: - - name: /opt/so/conf/elastic-fleet/defend-exclusions/rulesets - - source: salt://elasticfleet/files/securityonion-resources/event-filters/ - - user: 947 - - group: 939 - elasticdefenddisabled: file.managed: - name: /opt/so/conf/elastic-fleet/defend-exclusions/disabled-filters.yaml @@ -115,6 +116,17 @@ elasticdefendcustom: - group: 939 - mode: 600 + cronelasticdefendfilters: + cron.present: + - name: python3 /sbin/so-elastic-defend-manage-filters.py -c /opt/so/conf/elasticsearch/curl.config -d /opt/so/conf/elastic-fleet/defend-exclusions/disabled-filters.yaml -i /nsm/securityonion-resources/event_filters/ -i /opt/so/conf/elastic-fleet/defend-exclusions/rulesets/custom-filters/ &>> /opt/so/log/elasticfleet/elastic-defend-manage-filters.log + - identifier: elastic-defend-filters + - user: root + - minute: '0' + - hour: '3' + - daymonth: '*' + - month: '*' + - dayweek: '*' + eaintegrationsdir: file.directory: - name: /opt/so/conf/elastic-fleet/integrations diff --git a/salt/elasticfleet/defaults.yaml b/salt/elasticfleet/defaults.yaml index 48b24809e..719d5d002 100644 --- a/salt/elasticfleet/defaults.yaml +++ b/salt/elasticfleet/defaults.yaml @@ -8,6 +8,8 @@ elasticfleet: endpoints_enrollment: '' es_token: '' grid_enrollment: '' + defend_filters: + enable_auto_configuration: False logging: zeek: excluded: diff --git a/salt/elasticfleet/files/soc/elastic-defend-custom-filters.yaml b/salt/elasticfleet/files/soc/elastic-defend-custom-filters.yaml index 82ae203d8..ed8121a71 100644 --- a/salt/elasticfleet/files/soc/elastic-defend-custom-filters.yaml +++ b/salt/elasticfleet/files/soc/elastic-defend-custom-filters.yaml @@ -1,27 +1,27 @@ title: 'Template 1' -id: '2B160E43-3B95-4B50-AA3F-25D99F51FA69' -description: 'Credit @ITProPaul' -references: 'https://github.com/Neo23x0/sysmon-config' -author: 'SOS' -date: '09/18/24' -event_type: 'NetworkConnect' +id: 'This needs to be a UUIDv4 id - https://www.uuidgenerator.net/version4' +description: 'Short description detailing what this rule is filtering and why.' +references: 'Relevant urls, etc' +author: '@SecurityOnion' +date: 'MM/DD/YY' +event_type: 'dns_query' filter_type: 'exclude' filter: selection_1: - TargetField: 'DestinationIp' - Condition: 'begin with' - Pattern: 'fe80:0:0:0' + TargetField: 'QueryName' + Condition: 'end with' + Pattern: '.thawte.com' --- -title: 'Template2' -id: '3B160E43-3B95-4B50-AA3F-25D99F51FA69' -description: 'Credit @ITProPaul' -references: 'https://github.com/Neo23x0/sysmon-config' -author: 'SOS' -date: '09/18/24' -event_type: 'NetworkConnect' +title: 'Template 2' +id: 'This needs to be a UUIDv4 id - https://www.uuidgenerator.net/version4' +description: 'Short description detailing what this rule is filtering and why.' +references: 'Relevant urls, etc' +author: '@SecurityOnion' +date: 'MM/DD/YY' +event_type: 'process_creation' filter_type: 'exclude' filter: selection_1: - TargetField: 'DestinationIp' - Condition: 'begin with' - Pattern: 'fe80:0:0:0' \ No newline at end of file + TargetField: 'ParentImage' + Condition: 'is' + Pattern: 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngentask.exe' \ No newline at end of file diff --git a/salt/elasticfleet/soc_elasticfleet.yaml b/salt/elasticfleet/soc_elasticfleet.yaml index bc9a61625..146dda50e 100644 --- a/salt/elasticfleet/soc_elasticfleet.yaml +++ b/salt/elasticfleet/soc_elasticfleet.yaml @@ -21,7 +21,7 @@ elasticfleet: advanced: True elastic-defend-custom-filters__yaml: title: Custom Elastic Defend filters - description: Enter custom filters. + description: Enter custom filters seperated by --- syntax: yaml file: True global: True diff --git a/salt/elasticfleet/tools/sbin/so-elastic-defend-manage-filters.py b/salt/elasticfleet/tools/sbin/so-elastic-defend-manage-filters.py index 874b6c049..f7ce39d1d 100644 --- a/salt/elasticfleet/tools/sbin/so-elastic-defend-manage-filters.py +++ b/salt/elasticfleet/tools/sbin/so-elastic-defend-manage-filters.py @@ -1,4 +1,4 @@ -import yaml +from datetime import datetime import sys import getopt from so_elastic_defend_filters_helper import * @@ -6,44 +6,51 @@ import logging logging.basicConfig(level=logging.INFO, format='%(message)s') -# Define mappings for conditional_field, event_type, and conditions -FIELD_MAPPINGS = { +# Define mappings for Target Field, Event Type, Conditions +TARGET_FIELD_MAPPINGS = { "Image": "process.executable", "ParentImage": "process.parent.executable", "CommandLine": "process.command_line", "ParentCommandLine": "process.parent.command_line", + "DestinationHostname": "destination.domain", "QueryName": "dns.question.name", "DestinationIp": "destination.ip", - "TargetObject": "registry.path" + "TargetObject": "registry.path", + "TargetFilename": "file.path" } DATASET_MAPPINGS = { - "ProcessCreate": "endpoint.events.process", - "NetworkConnect": "endpoint.events.network", - "FileCreate": "endpoint.events.file", - "RegistryEvent": "endpoint.events.registry", - "DnsQuery": "endpoint.events.network" + "process_create": "endpoint.events.process", + "network_connection": "endpoint.events.network", + "file_create": "endpoint.events.file", + "file_delete": "endpoint.events.file", + "registry_event": "endpoint.events.registry", + "dns_query": "endpoint.events.network" } CONDITION_MAPPINGS = { "is": ("included", "match"), "end with": ("included", "wildcard"), "begin with": ("included", "wildcard"), - "contains": ("included", "wildcard"), - "contains any": ("included", "match_any"), - "excluded": ("excluded", "match") + "contains": ("included", "wildcard") } # Extract entries for a rule -def extract_entries(data): +def extract_entries(data, event_type): entries = [] filter_data = data.get('filter', {}) for value in filter_data.values(): - target_field = FIELD_MAPPINGS.get(value.get('TargetField', '')) + target_field = TARGET_FIELD_MAPPINGS.get(value.get('TargetField', '')) condition = value.get('Condition', '') pattern = value.get('Pattern', '') - operator, match_type = CONDITION_MAPPINGS.get(condition, ("included", "match")) + if condition not in CONDITION_MAPPINGS: + logging.error(f"Invalid condition: {condition}") + + # Modify the pattern based on the condition + pattern = modify_pattern(condition, pattern) + + operator, match_type = CONDITION_MAPPINGS[condition] entries.append({ "field": target_field, @@ -51,10 +58,23 @@ def extract_entries(data): "type": match_type, "value": pattern }) + + # Add the event.dataset entry from DATASET_MAPPINGS + dataset_value = DATASET_MAPPINGS.get(event_type, '') + if dataset_value: + entries.append({ + "field": "event.dataset", + "operator": "included", + "type": "match", + "value": dataset_value + }) + else: + logging.error(f"No dataset mapping found for event_type: {event_type}") + return entries -# Build the JSON entry -def build_json_entry(data, entries, guid, event_type, dataset, context): +# Build the JSON +def build_json_entry(entries, guid, event_type, context): return { "comments": [], "entries": entries, @@ -85,6 +105,26 @@ def disable_check(guid, disabled_rules, username, password): return True, "NOP" return False, None +def modify_pattern(condition, pattern): + """ + Modify the pattern based on the condition. + - 'end with': Add '*' to the beginning of the pattern. + - 'begin with': Add '*' to the end of the pattern. + - 'contains': Add '*' to both the beginning and end of the pattern. + """ + if isinstance(pattern, list): + # Apply modification to each pattern in the list if it's a list of patterns + return [modify_pattern(condition, p) for p in pattern] + + if condition == "end with": + return f"*{pattern}" + elif condition == "begin with": + return f"{pattern}*" + elif condition == "contains": + return f"*{pattern}*" + return pattern + + def process_rule_update_or_create(guid, json_entry, username, password): existing_rule = api_request("GET", guid, username, password) @@ -122,8 +162,8 @@ def process_rules(yaml_files, disabled_rules, username, password): continue # Extract entries and build JSON - entries = extract_entries(data) - json_entry = build_json_entry(data, entries, guid, event_type, dataset, context) + entries = extract_entries(data, event_type) + json_entry = build_json_entry(entries, guid, event_type, context) # Process rule creation or update status = process_rule_update_or_create(guid, json_entry, username, password) @@ -167,6 +207,9 @@ def main(argv): flags = load_flags(arg) return main(argv + flags) + timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S') + logging.info(f"\n{timestamp}") + validate_inputs(credentials_file, disabled_file, yaml_directories) credentials = load_credentials(credentials_file) @@ -200,6 +243,9 @@ def main(argv): logging.info(f"Rule status Summary") logging.info(f" - Active rules: {total_stats['rule_count'] - total_stats['disabled']}") logging.info(f" - Disabled rules: {total_stats['disabled']}") + timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S') + logging.info(f"Execution completed at: {timestamp}") + if __name__ == "__main__": main(sys.argv[1:]) diff --git a/salt/elasticfleet/tools/sbin/so_elastic_defend_filters_helper.py b/salt/elasticfleet/tools/sbin/so_elastic_defend_filters_helper.py index ab997f60e..90031a237 100644 --- a/salt/elasticfleet/tools/sbin/so_elastic_defend_filters_helper.py +++ b/salt/elasticfleet/tools/sbin/so_elastic_defend_filters_helper.py @@ -7,19 +7,21 @@ import requests from requests.auth import HTTPBasicAuth import shutil -# Extract only the 'entries' and 'description' fields -def extract_relevant_fields(rule): +# Extract 'entries', 'description' and 'os_types' fields +def extract_relevant_fields(filter): return { - 'entries': rule.get('entries', []), - 'description': rule.get('description', '') + 'entries': filter.get('entries', []), + 'description': filter.get('description', '') } -# Sort lists and recursively sort keys in dictionaries for consistency +# Sort for consistency, so that a hash can be generated def sorted_data(value): if isinstance(value, dict): + # Recursively sort the dictionary by key return {k: sorted_data(v) for k, v in sorted(value.items())} elif isinstance(value, list): - return sorted(sorted_data(v) for v in value) + # Sort lists; for dictionaries, sort by a specific key + return sorted(value, key=lambda x: tuple(sorted(x.items())) if isinstance(x, dict) else x) return value # Generate a hash based on sorted relevant fields @@ -109,6 +111,9 @@ def prepare_custom_rules(input_file, output_dir): if 'id' not in doc: print(f"Skipping rule, no 'id' found: {doc}") continue + if doc.get('title') in ["Template 1", "Template 2"]: + print(f"Skipping template rule with title: {doc['title']}") + continue # Create a filename using the 'id' field file_name = os.path.join(output_dir, f"{doc['id']}.yaml") @@ -120,4 +125,4 @@ def prepare_custom_rules(input_file, output_dir): except yaml.YAMLError as e: print(f"Error parsing YAML: {e}") except Exception as e: - print(f"Error processing file: {e}") + print(f"Error processing file: {e}") \ No newline at end of file From 2a890a35a02d4982cda327664bdf9e75a5129071 Mon Sep 17 00:00:00 2001 From: defensivedepth Date: Mon, 23 Sep 2024 13:48:12 -0400 Subject: [PATCH 482/507] Update format --- salt/elasticfleet/config.sls | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/salt/elasticfleet/config.sls b/salt/elasticfleet/config.sls index 555a42288..91a1fe210 100644 --- a/salt/elasticfleet/config.sls +++ b/salt/elasticfleet/config.sls @@ -116,16 +116,16 @@ elasticdefendcustom: - group: 939 - mode: 600 - cronelasticdefendfilters: - cron.present: - - name: python3 /sbin/so-elastic-defend-manage-filters.py -c /opt/so/conf/elasticsearch/curl.config -d /opt/so/conf/elastic-fleet/defend-exclusions/disabled-filters.yaml -i /nsm/securityonion-resources/event_filters/ -i /opt/so/conf/elastic-fleet/defend-exclusions/rulesets/custom-filters/ &>> /opt/so/log/elasticfleet/elastic-defend-manage-filters.log - - identifier: elastic-defend-filters - - user: root - - minute: '0' - - hour: '3' - - daymonth: '*' - - month: '*' - - dayweek: '*' +cronelasticdefendfilters: + cron.present: + - name: python3 /sbin/so-elastic-defend-manage-filters.py -c /opt/so/conf/elasticsearch/curl.config -d /opt/so/conf/elastic-fleet/defend-exclusions/disabled-filters.yaml -i /nsm/securityonion-resources/event_filters/ -i /opt/so/conf/elastic-fleet/defend-exclusions/rulesets/custom-filters/ &>> /opt/so/log/elasticfleet/elastic-defend-manage-filters.log + - identifier: elastic-defend-filters + - user: root + - minute: '0' + - hour: '3' + - daymonth: '*' + - month: '*' + - dayweek: '*' eaintegrationsdir: file.directory: From 41112a59ec786b8c6368102f7bd6c9ef7ec33a4d Mon Sep 17 00:00:00 2001 From: Wes Date: Mon, 23 Sep 2024 20:12:14 +0000 Subject: [PATCH 483/507] Add back meta --- .../component/elastic-agent/logs-elastic_agent@custom.json | 7 +++++++ .../logs-endpoint.diagnostic.collection@custom.json | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent@custom.json index 17319ab9f..d8d14a5a9 100644 --- a/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent@custom.json +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-elastic_agent@custom.json @@ -32,5 +32,12 @@ } } } + }, + "_meta": { + "package": { + "name": "elastic_agent" + }, + "managed_by": "fleet", + "managed": true } } diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.diagnostic.collection@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.diagnostic.collection@custom.json index 17319ab9f..5bbe3c1fa 100644 --- a/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.diagnostic.collection@custom.json +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-endpoint.diagnostic.collection@custom.json @@ -32,5 +32,12 @@ } } } + }, + "_meta": { + "package": { + "name": "endpoint" + }, + "managed_by": "fleet", + "managed": true } } From 5cc81983023472c152fe84033994b41adedab9d5 Mon Sep 17 00:00:00 2001 From: defensivedepth Date: Mon, 23 Sep 2024 16:32:42 -0400 Subject: [PATCH 484/507] Fix permissions --- salt/elasticfleet/config.sls | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/salt/elasticfleet/config.sls b/salt/elasticfleet/config.sls index 91a1fe210..43bfb8af9 100644 --- a/salt/elasticfleet/config.sls +++ b/salt/elasticfleet/config.sls @@ -74,23 +74,19 @@ eapackageupgrade: {% if GLOBALS.role != "so-fleet" %} +soresourcesrepoconfig: + git.config_set: + - name: safe.directory + - value: /nsm/securityonion-resources + - global: True + {% if not GLOBALS.airgap %} -elasticdefendrepodir: - file.directory: - - name: /nsm/securityonion-resources - - user: 939 - - group: 939 - - makedirs: True - soresourcesrepoclone: git.latest: - name: https://github.com/Security-Onion-Solutions/securityonion-resources.git - target: /nsm/securityonion-resources - rev: 'dev/defend_filters' - depth: 1 - - force_fetch: true - - force_clone: true - - user: socore # id is not allowed for this {% endif %} elasticdefendconfdir: From 70c5a07913c2a2e53eb496a0f57afec6609e8b1c Mon Sep 17 00:00:00 2001 From: Wes Date: Mon, 23 Sep 2024 21:36:40 +0000 Subject: [PATCH 485/507] Add back meta ad error.message --- .../elastic-agent/logs-system.syslog@custom.json | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/salt/elasticsearch/templates/component/elastic-agent/logs-system.syslog@custom.json b/salt/elasticsearch/templates/component/elastic-agent/logs-system.syslog@custom.json index 17319ab9f..95a902bb9 100644 --- a/salt/elasticsearch/templates/component/elastic-agent/logs-system.syslog@custom.json +++ b/salt/elasticsearch/templates/component/elastic-agent/logs-system.syslog@custom.json @@ -2,7 +2,14 @@ "template": { "mappings": { "properties": { - "host": { + "error": { + "properties": { + "message": { + "type": "match_only_text" + } + } + }, + "host": { "properties":{ "ip": { "type": "ip" @@ -32,5 +39,12 @@ } } } + }, + "_meta": { + "package": { + "name": "system" + }, + "managed_by": "fleet", + "managed": true } } From 52867394142c46721df55f85f1b14ba598b17a0f Mon Sep 17 00:00:00 2001 From: defensivedepth Date: Tue, 24 Sep 2024 10:51:52 -0400 Subject: [PATCH 486/507] Disable by default --- salt/elasticfleet/config.sls | 4 +++- salt/elasticfleet/enabled.sls | 11 +++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/salt/elasticfleet/config.sls b/salt/elasticfleet/config.sls index 43bfb8af9..c5be686a7 100644 --- a/salt/elasticfleet/config.sls +++ b/salt/elasticfleet/config.sls @@ -85,7 +85,7 @@ soresourcesrepoclone: git.latest: - name: https://github.com/Security-Onion-Solutions/securityonion-resources.git - target: /nsm/securityonion-resources - - rev: 'dev/defend_filters' + - rev: 'main' - depth: 1 {% endif %} @@ -112,6 +112,7 @@ elasticdefendcustom: - group: 939 - mode: 600 +{% if ELASTICFLEETMERGED.config.defend_filters.enable_auto_configuration %} cronelasticdefendfilters: cron.present: - name: python3 /sbin/so-elastic-defend-manage-filters.py -c /opt/so/conf/elasticsearch/curl.config -d /opt/so/conf/elastic-fleet/defend-exclusions/disabled-filters.yaml -i /nsm/securityonion-resources/event_filters/ -i /opt/so/conf/elastic-fleet/defend-exclusions/rulesets/custom-filters/ &>> /opt/so/log/elasticfleet/elastic-defend-manage-filters.log @@ -122,6 +123,7 @@ cronelasticdefendfilters: - daymonth: '*' - month: '*' - dayweek: '*' +{% endif %} eaintegrationsdir: file.directory: diff --git a/salt/elasticfleet/enabled.sls b/salt/elasticfleet/enabled.sls index 26738b688..8cc79bf57 100644 --- a/salt/elasticfleet/enabled.sls +++ b/salt/elasticfleet/enabled.sls @@ -17,10 +17,12 @@ include: - elasticfleet.sostatus - ssl +{% if grains.role not in ['so-fleet'] %} # Wait for Elasticsearch to be ready - no reason to try running Elastic Fleet server if ES is not ready wait_for_elasticsearch_elasticfleet: cmd.run: - name: so-elasticsearch-wait +{% endif %} # If enabled, automatically update Fleet Logstash Outputs {% if ELASTICFLEETMERGED.config.server.enable_auto_configuration and grains.role not in ['so-import', 'so-eval', 'so-fleet'] %} @@ -146,6 +148,15 @@ so-elastic-agent-grid-upgrade: so-elastic-fleet-integration-upgrade: cmd.run: - name: /usr/sbin/so-elastic-fleet-integration-upgrade + +{% if ELASTICFLEETMERGED.config.defend_filters.enable_auto_configuration %} +so-elastic-defend-manage-filters-file-watch: + cmd.run: + - name: python3 /sbin/so-elastic-defend-manage-filters.py -c /opt/so/conf/elasticsearch/curl.config -d /opt/so/conf/elastic-fleet/defend-exclusions/disabled-filters.yaml -i /nsm/securityonion-resources/event_filters/ -i /opt/so/conf/elastic-fleet/defend-exclusions/rulesets/custom-filters/ &>> /opt/so/log/elasticfleet/elastic-defend-manage-filters.log + - onchanges: + - file: /opt/so/conf/elastic-fleet/defend-exclusions/rulesets/custom-filters-raw + - file: /opt/so/conf/elastic-fleet/defend-exclusions/disabled-filters.yaml +{% endif %} {% endif %} delete_so-elastic-fleet_so-status.disabled: From 01f87218de9140d8b59ded233e47b2605af5668d Mon Sep 17 00:00:00 2001 From: defensivedepth Date: Tue, 24 Sep 2024 12:04:24 -0400 Subject: [PATCH 487/507] Airgap support --- salt/manager/tools/sbin/soup | 6 ++++++ setup/so-functions | 5 +++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index 452300bba..2a1f3f2f8 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -888,6 +888,12 @@ update_airgap_rules() { rsync -av $UPDATE_DIR/agrules/suricata/* /nsm/rules/suricata/ rsync -av $UPDATE_DIR/agrules/detect-sigma/* /nsm/rules/detect-sigma/ rsync -av $UPDATE_DIR/agrules/detect-yara/* /nsm/rules/detect-yara/ + # Checkout the stable summaries branch and copy them over for SOC + git -C $UPDATE_DIR/agrules/securityonion-resources/ checkout generated-summaries-stable + rsync -av $UPDATE_DIR/agrules/securityonion-resources/* /opt/so/conf/soc/ai_summary_repos + # Checkout the main branch and copy them over to nsm + git -C $UPDATE_DIR/agrules/securityonion-resources/ checkout main + rsync -av $UPDATE_DIR/agrules/securityonion-resources/* /nsm/securityonion-resources/ } update_airgap_repo() { diff --git a/setup/so-functions b/setup/so-functions index 0c2cbf3e0..5693abcb3 100755 --- a/setup/so-functions +++ b/setup/so-functions @@ -42,9 +42,10 @@ logCmd() { ### End Logging Section ### airgap_rules() { - # Copy the rules for suricata if using Airgap + # Copy the rules for detections if using Airgap mkdir -p /nsm/rules - cp -Rv /root/SecurityOnion/agrules/* /nsm/rules/ + rsync -av --exclude='securityonion-resources' /root/SecurityOnion/agrules/ /nsm/rules/ + rsync -av /root/SecurityOnion/agrules/securityonion-resources/ /nsm/ } add_admin_user() { From 0a74a532549e127044e335d7a48c655275dc6a3f Mon Sep 17 00:00:00 2001 From: defensivedepth Date: Tue, 24 Sep 2024 12:38:49 -0400 Subject: [PATCH 488/507] Remove cron if disabled --- salt/elasticfleet/config.sls | 6 +++++- salt/elasticfleet/enabled.sls | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/salt/elasticfleet/config.sls b/salt/elasticfleet/config.sls index c5be686a7..4ff284ffa 100644 --- a/salt/elasticfleet/config.sls +++ b/salt/elasticfleet/config.sls @@ -113,7 +113,7 @@ elasticdefendcustom: - mode: 600 {% if ELASTICFLEETMERGED.config.defend_filters.enable_auto_configuration %} -cronelasticdefendfilters: +cron-elastic-defend-filters-add: cron.present: - name: python3 /sbin/so-elastic-defend-manage-filters.py -c /opt/so/conf/elasticsearch/curl.config -d /opt/so/conf/elastic-fleet/defend-exclusions/disabled-filters.yaml -i /nsm/securityonion-resources/event_filters/ -i /opt/so/conf/elastic-fleet/defend-exclusions/rulesets/custom-filters/ &>> /opt/so/log/elasticfleet/elastic-defend-manage-filters.log - identifier: elastic-defend-filters @@ -123,6 +123,10 @@ cronelasticdefendfilters: - daymonth: '*' - month: '*' - dayweek: '*' +{% else %} +cron-elastic-defend-filters-remove: + cron.absent: + - identifier: elastic-defend-filters {% endif %} eaintegrationsdir: diff --git a/salt/elasticfleet/enabled.sls b/salt/elasticfleet/enabled.sls index 8cc79bf57..51d2d1430 100644 --- a/salt/elasticfleet/enabled.sls +++ b/salt/elasticfleet/enabled.sls @@ -154,8 +154,8 @@ so-elastic-defend-manage-filters-file-watch: cmd.run: - name: python3 /sbin/so-elastic-defend-manage-filters.py -c /opt/so/conf/elasticsearch/curl.config -d /opt/so/conf/elastic-fleet/defend-exclusions/disabled-filters.yaml -i /nsm/securityonion-resources/event_filters/ -i /opt/so/conf/elastic-fleet/defend-exclusions/rulesets/custom-filters/ &>> /opt/so/log/elasticfleet/elastic-defend-manage-filters.log - onchanges: - - file: /opt/so/conf/elastic-fleet/defend-exclusions/rulesets/custom-filters-raw - - file: /opt/so/conf/elastic-fleet/defend-exclusions/disabled-filters.yaml + - file: elasticdefendcustom + - file: elasticdefenddisabled {% endif %} {% endif %} From d2397c3c1c1309176ab6dce8915e03a89a7d3653 Mon Sep 17 00:00:00 2001 From: defensivedepth Date: Tue, 24 Sep 2024 13:03:51 -0400 Subject: [PATCH 489/507] Refactor cron logic --- salt/elasticfleet/config.sls | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/salt/elasticfleet/config.sls b/salt/elasticfleet/config.sls index 4ff284ffa..d29b9ddb2 100644 --- a/salt/elasticfleet/config.sls +++ b/salt/elasticfleet/config.sls @@ -113,8 +113,12 @@ elasticdefendcustom: - mode: 600 {% if ELASTICFLEETMERGED.config.defend_filters.enable_auto_configuration %} -cron-elastic-defend-filters-add: - cron.present: +{% set ap = "present" %} +{% else %} +{% set ap = "absent" %} +{% endif %} +cron-elastic-defend-filters: + cron.{{ap}}: - name: python3 /sbin/so-elastic-defend-manage-filters.py -c /opt/so/conf/elasticsearch/curl.config -d /opt/so/conf/elastic-fleet/defend-exclusions/disabled-filters.yaml -i /nsm/securityonion-resources/event_filters/ -i /opt/so/conf/elastic-fleet/defend-exclusions/rulesets/custom-filters/ &>> /opt/so/log/elasticfleet/elastic-defend-manage-filters.log - identifier: elastic-defend-filters - user: root @@ -123,11 +127,6 @@ cron-elastic-defend-filters-add: - daymonth: '*' - month: '*' - dayweek: '*' -{% else %} -cron-elastic-defend-filters-remove: - cron.absent: - - identifier: elastic-defend-filters -{% endif %} eaintegrationsdir: file.directory: From 48aff374a3b3ed8f4c911ae45d5fecfccd9382fa Mon Sep 17 00:00:00 2001 From: defensivedepth Date: Tue, 24 Sep 2024 15:37:43 -0400 Subject: [PATCH 490/507] Use temp summaries branch --- setup/so-functions | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/setup/so-functions b/setup/so-functions index 5693abcb3..cf50c887a 100755 --- a/setup/so-functions +++ b/setup/so-functions @@ -45,7 +45,14 @@ airgap_rules() { # Copy the rules for detections if using Airgap mkdir -p /nsm/rules rsync -av --exclude='securityonion-resources' /root/SecurityOnion/agrules/ /nsm/rules/ + + # Copy over the securityonion-resources repo rsync -av /root/SecurityOnion/agrules/securityonion-resources/ /nsm/ + + # Copy summaries over to SOC and checkout the correct branch + rsync -av --chown=socore:socore /nsm/securityonion-resources/* /opt/so/conf/soc/ai_summary_repos + git config --global --add safe.directory /opt/so/conf/soc/ai_summary_repos/securityonion-resources + git -C /opt/so/conf/soc/ai_summary_repos/securityonion-resources checkout staging/generated-summaries-stable } add_admin_user() { From 50ae37c160fdc46e7bf27dd4ec339fe5469638c1 Mon Sep 17 00:00:00 2001 From: weslambert Date: Wed, 25 Sep 2024 08:25:20 -0400 Subject: [PATCH 491/507] Check if running during soup --- .../tools/sbin_jinja/so-elasticsearch-templates-load | 3 +++ 1 file changed, 3 insertions(+) diff --git a/salt/elasticsearch/tools/sbin_jinja/so-elasticsearch-templates-load b/salt/elasticsearch/tools/sbin_jinja/so-elasticsearch-templates-load index 76b1cc193..b2d9e36a0 100755 --- a/salt/elasticsearch/tools/sbin_jinja/so-elasticsearch-templates-load +++ b/salt/elasticsearch/tools/sbin_jinja/so-elasticsearch-templates-load @@ -23,6 +23,9 @@ else echo "This is the initial template load" fi +# If soup is running, ignore errors +pgrep soup > /dev/null && should_exit_on_failure=0 + load_failures=0 load_template() { From 445a9679bda4f56b8eb91bcc0a8cd78db0166004 Mon Sep 17 00:00:00 2001 From: defensivedepth Date: Wed, 25 Sep 2024 10:18:57 -0400 Subject: [PATCH 492/507] Add so repo back in --- setup/so-functions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup/so-functions b/setup/so-functions index cf50c887a..5908a8b7a 100755 --- a/setup/so-functions +++ b/setup/so-functions @@ -44,7 +44,7 @@ logCmd() { airgap_rules() { # Copy the rules for detections if using Airgap mkdir -p /nsm/rules - rsync -av --exclude='securityonion-resources' /root/SecurityOnion/agrules/ /nsm/rules/ + rsync -av /root/SecurityOnion/agrules/ /nsm/rules/ # Copy over the securityonion-resources repo rsync -av /root/SecurityOnion/agrules/securityonion-resources/ /nsm/ From 073fb16e203b8f47a76b059a85cb19ca25e23b08 Mon Sep 17 00:00:00 2001 From: Jason Ertel Date: Wed, 25 Sep 2024 10:26:26 -0400 Subject: [PATCH 493/507] lowercase email when looking up ID; allow uppercase emails when modifying existing users but not when adding new users --- salt/manager/tools/sbin/so-user | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/salt/manager/tools/sbin/so-user b/salt/manager/tools/sbin/so-user index 40e0b01f8..e4b2b7464 100755 --- a/salt/manager/tools/sbin/so-user +++ b/salt/manager/tools/sbin/so-user @@ -173,7 +173,7 @@ function verifyEnvironment() { } function findIdByEmail() { - email=$1 + email=${1,,} response=$(curl -Ss -L ${kratosUrl}/identities) identityId=$(echo "${response}" | jq -r ".[] | select(.verifiable_addresses[0].value == \"$email\") | .id") @@ -195,12 +195,13 @@ function validatePassword() { function validateEmail() { email=$1 + requireLower=$2 # (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]) if [[ ! "$email" =~ ^[[:alnum:]._%+-]+@[[:alnum:].-]+\.[[:alpha:]]{2,}$ ]]; then fail "Email address is invalid" fi - if [[ "$email" =~ [A-Z] ]]; then + if [[ "$requireLower" == "true" && "$email" =~ [A-Z] ]]; then fail "Email addresses cannot contain uppercase letters" fi } @@ -581,7 +582,7 @@ case "${operation}" in [[ "$email" == "" ]] && fail "Email address must be provided" lock - validateEmail "$email" + validateEmail "$email" true updatePassword createUser "$email" "${role:-$DEFAULT_ROLE}" "${firstName}" "${lastName}" "${note}" syncAll @@ -687,13 +688,13 @@ case "${operation}" in ;; "validate") - validateEmail "$email" + validateEmail "$email" true updatePassword echo "Email and password are acceptable" ;; "valemail") - validateEmail "$email" + validateEmail "$email" true echo "Email is acceptable" ;; From aacd71537943494d944e8735b8b8c0385c2d0105 Mon Sep 17 00:00:00 2001 From: weslambert Date: Wed, 25 Sep 2024 13:07:01 -0400 Subject: [PATCH 494/507] Retry after 1 second --- .../tools/sbin_jinja/so-elasticsearch-templates-load | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/elasticsearch/tools/sbin_jinja/so-elasticsearch-templates-load b/salt/elasticsearch/tools/sbin_jinja/so-elasticsearch-templates-load index b2d9e36a0..758f601eb 100755 --- a/salt/elasticsearch/tools/sbin_jinja/so-elasticsearch-templates-load +++ b/salt/elasticsearch/tools/sbin_jinja/so-elasticsearch-templates-load @@ -33,7 +33,7 @@ load_template() { file=$2 echo "Loading template file $i" - if ! retry 3 5 "so-elasticsearch-query $uri -d@$file -XPUT" "{\"acknowledged\":true}"; then + if ! retry 3 1 "so-elasticsearch-query $uri -d@$file -XPUT" "{\"acknowledged\":true}"; then if [[ $should_exit_on_failure -eq 1 ]]; then fail "Could not load template file: $file" else From 778d5be4076e4c3fc26357d6a2659eb0cc545a37 Mon Sep 17 00:00:00 2001 From: defensivedepth Date: Wed, 25 Sep 2024 15:35:08 -0400 Subject: [PATCH 495/507] Change summaries branch --- salt/manager/tools/sbin/soup | 2 +- salt/soc/defaults.yaml | 6 +++--- setup/so-functions | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index 2a1f3f2f8..0440ea1bd 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -889,7 +889,7 @@ update_airgap_rules() { rsync -av $UPDATE_DIR/agrules/detect-sigma/* /nsm/rules/detect-sigma/ rsync -av $UPDATE_DIR/agrules/detect-yara/* /nsm/rules/detect-yara/ # Checkout the stable summaries branch and copy them over for SOC - git -C $UPDATE_DIR/agrules/securityonion-resources/ checkout generated-summaries-stable + git -C $UPDATE_DIR/agrules/securityonion-resources/ checkout generated-summaries-published rsync -av $UPDATE_DIR/agrules/securityonion-resources/* /opt/so/conf/soc/ai_summary_repos # Checkout the main branch and copy them over to nsm git -C $UPDATE_DIR/agrules/securityonion-resources/ checkout main diff --git a/salt/soc/defaults.yaml b/salt/soc/defaults.yaml index f191fd054..2d2a26c9a 100644 --- a/salt/soc/defaults.yaml +++ b/salt/soc/defaults.yaml @@ -1313,7 +1313,7 @@ soc: hostUrl: elastalertengine: aiRepoUrl: https://github.com/Security-Onion-Solutions/securityonion-resources - aiRepoBranch: generated-summaries-stable + aiRepoBranch: generated-summaries-published aiRepoPath: /opt/sensoroni/ai_summary_repos showAiSummaries: true autoUpdateEnabled: true @@ -1396,7 +1396,7 @@ soc: - rbac/users_roles strelkaengine: aiRepoUrl: https://github.com/Security-Onion-Solutions/securityonion-resources - aiRepoBranch: generated-summaries-stable + aiRepoBranch: generated-summaries-published aiRepoPath: /opt/sensoroni/ai_summary_repos showAiSummaries: true autoEnabledYaraRules: @@ -1421,7 +1421,7 @@ soc: integrityCheckFrequencySeconds: 1200 suricataengine: aiRepoUrl: https://github.com/Security-Onion-Solutions/securityonion-resources - aiRepoBranch: generated-summaries-stable + aiRepoBranch: generated-summaries-published aiRepoPath: /opt/sensoroni/ai_summary_repos showAiSummaries: true autoUpdateEnabled: true diff --git a/setup/so-functions b/setup/so-functions index 5908a8b7a..96d83e5d2 100755 --- a/setup/so-functions +++ b/setup/so-functions @@ -52,7 +52,7 @@ airgap_rules() { # Copy summaries over to SOC and checkout the correct branch rsync -av --chown=socore:socore /nsm/securityonion-resources/* /opt/so/conf/soc/ai_summary_repos git config --global --add safe.directory /opt/so/conf/soc/ai_summary_repos/securityonion-resources - git -C /opt/so/conf/soc/ai_summary_repos/securityonion-resources checkout staging/generated-summaries-stable + git -C /opt/so/conf/soc/ai_summary_repos/securityonion-resources checkout generated-summaries-published } add_admin_user() { From fe860481c5e93badadc244e44c9bf089477c0276 Mon Sep 17 00:00:00 2001 From: defensivedepth Date: Thu, 26 Sep 2024 08:52:53 -0400 Subject: [PATCH 496/507] Fix location for airgap --- salt/manager/tools/sbin/soup | 10 +++++----- setup/so-functions | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index 0440ea1bd..c8b2387c7 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -888,11 +888,11 @@ update_airgap_rules() { rsync -av $UPDATE_DIR/agrules/suricata/* /nsm/rules/suricata/ rsync -av $UPDATE_DIR/agrules/detect-sigma/* /nsm/rules/detect-sigma/ rsync -av $UPDATE_DIR/agrules/detect-yara/* /nsm/rules/detect-yara/ - # Checkout the stable summaries branch and copy them over for SOC - git -C $UPDATE_DIR/agrules/securityonion-resources/ checkout generated-summaries-published - rsync -av $UPDATE_DIR/agrules/securityonion-resources/* /opt/so/conf/soc/ai_summary_repos - # Checkout the main branch and copy them over to nsm - git -C $UPDATE_DIR/agrules/securityonion-resources/ checkout main + # Copy the securityonion-resorces repo over for SOC Detection Summaries and checkout the published summaries branch + rsync -av --chown=socore:socore $UPDATE_DIR/agrules/securityonion-resources /opt/so/conf/soc/ai_summary_repos + git config --global --add safe.directory /opt/so/conf/soc/ai_summary_repos + git -C /opt/so/conf/soc/ai_summary_repos/securityonion-resources checkout generated-summaries-published + # Copy the securityonion-resorces repo over to nsm rsync -av $UPDATE_DIR/agrules/securityonion-resources/* /nsm/securityonion-resources/ } diff --git a/setup/so-functions b/setup/so-functions index 96d83e5d2..3f7440597 100755 --- a/setup/so-functions +++ b/setup/so-functions @@ -47,10 +47,10 @@ airgap_rules() { rsync -av /root/SecurityOnion/agrules/ /nsm/rules/ # Copy over the securityonion-resources repo - rsync -av /root/SecurityOnion/agrules/securityonion-resources/ /nsm/ + rsync -av /root/SecurityOnion/agrules/securityonion-resources /nsm/ # Copy summaries over to SOC and checkout the correct branch - rsync -av --chown=socore:socore /nsm/securityonion-resources/* /opt/so/conf/soc/ai_summary_repos + rsync -av --chown=socore:socore /nsm/securityonion-resources /opt/so/conf/soc/ai_summary_repos git config --global --add safe.directory /opt/so/conf/soc/ai_summary_repos/securityonion-resources git -C /opt/so/conf/soc/ai_summary_repos/securityonion-resources checkout generated-summaries-published } From d86694a01ce42885ed82dd45f87026344ae22869 Mon Sep 17 00:00:00 2001 From: defensivedepth Date: Thu, 26 Sep 2024 09:48:28 -0400 Subject: [PATCH 497/507] Fix path --- salt/manager/tools/sbin/soup | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index c8b2387c7..091e471d4 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -890,7 +890,7 @@ update_airgap_rules() { rsync -av $UPDATE_DIR/agrules/detect-yara/* /nsm/rules/detect-yara/ # Copy the securityonion-resorces repo over for SOC Detection Summaries and checkout the published summaries branch rsync -av --chown=socore:socore $UPDATE_DIR/agrules/securityonion-resources /opt/so/conf/soc/ai_summary_repos - git config --global --add safe.directory /opt/so/conf/soc/ai_summary_repos + git config --global --add safe.directory /opt/so/conf/soc/ai_summary_repos/securityonion-resources git -C /opt/so/conf/soc/ai_summary_repos/securityonion-resources checkout generated-summaries-published # Copy the securityonion-resorces repo over to nsm rsync -av $UPDATE_DIR/agrules/securityonion-resources/* /nsm/securityonion-resources/ From 3567dfc0dc6b26c971e9d191a15b77bcb12dde0c Mon Sep 17 00:00:00 2001 From: defensivedepth Date: Thu, 26 Sep 2024 15:48:50 -0400 Subject: [PATCH 498/507] Move Airgap later in setup --- setup/so-functions | 6 ++++-- setup/so-setup | 4 ++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/setup/so-functions b/setup/so-functions index 3f7440597..5ebf76c17 100755 --- a/setup/so-functions +++ b/setup/so-functions @@ -48,11 +48,13 @@ airgap_rules() { # Copy over the securityonion-resources repo rsync -av /root/SecurityOnion/agrules/securityonion-resources /nsm/ +} - # Copy summaries over to SOC and checkout the correct branch +airgap_detection_summaries() { + # Copy summaries over to SOC and checkout the correct branch rsync -av --chown=socore:socore /nsm/securityonion-resources /opt/so/conf/soc/ai_summary_repos git config --global --add safe.directory /opt/so/conf/soc/ai_summary_repos/securityonion-resources - git -C /opt/so/conf/soc/ai_summary_repos/securityonion-resources checkout generated-summaries-published + git -C /opt/so/conf/soc/ai_summary_repos/securityonion-resources checkout generated-summaries-published } add_admin_user() { diff --git a/setup/so-setup b/setup/so-setup index cb4e7ebf0..85b26fa40 100755 --- a/setup/so-setup +++ b/setup/so-setup @@ -763,6 +763,10 @@ if ! [[ -f $install_opt_file ]]; then logCmd "salt-call state.apply suricata -l info" fi fi + if [[ $is_airgap ]]; then + title "Syncing AI-Generated Detection Summaries" + airgap_detection_summaries + fi title "Setting up Kibana Default Space" logCmd "so-kibana-space-defaults" add_web_user From 4913df229741f7179d3d834425db2a5546b5e561 Mon Sep 17 00:00:00 2001 From: Jason Ertel Date: Tue, 1 Oct 2024 08:54:14 -0400 Subject: [PATCH 499/507] adjustments for support of PKCE OIDC --- salt/kratos/defaults.yaml | 1 + salt/kratos/soc_kratos.yaml | 5 +++++ salt/nginx/etc/nginx.conf | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/salt/kratos/defaults.yaml b/salt/kratos/defaults.yaml index 1e2eef5ed..b62e4d2ce 100644 --- a/salt/kratos/defaults.yaml +++ b/salt/kratos/defaults.yaml @@ -6,6 +6,7 @@ kratos: id: SSO mapper_url: file:///kratos-conf/oidc.jsonnet subject_source: userinfo + pkce: auto scope: - email - profile diff --git a/salt/kratos/soc_kratos.yaml b/salt/kratos/soc_kratos.yaml index a362bb299..86227aa37 100644 --- a/salt/kratos/soc_kratos.yaml +++ b/salt/kratos/soc_kratos.yaml @@ -70,6 +70,11 @@ kratos: global: True forcedType: "[]string" helpLink: oidc.html + pkce: + description: Set to 'force' if the OIDC provider does not support auto-detection of PKCE, but does support PKCE. Set to `never` to disable PKCE. The default setting automatically attempts to detect if PKCE is supported. The provider's `well-known/openid-configuration` JSON response must contain the `S256` algorithm within the `code_challenge_methods_supported` list in order for the auto-detection to correctly detect PKCE is supported. + global: True + forcedType: string + helpLink: oidc.html requested_claims: id_token: email: diff --git a/salt/nginx/etc/nginx.conf b/salt/nginx/etc/nginx.conf index 1c77426ef..1e45f0db5 100644 --- a/salt/nginx/etc/nginx.conf +++ b/salt/nginx/etc/nginx.conf @@ -193,7 +193,7 @@ http { proxy_set_header X-Forwarded-Proto $scheme; } - location ~ ^/auth/.*?(login|oidc/callback/) { + location ~ ^/auth/.*?(login|oidc/callback) { rewrite /auth/(.*) /$1 break; limit_req zone=auth_throttle burst={{ NGINXMERGED.config.throttle_login_burst }} nodelay; limit_req_status 429; From 24817a39198c3929a70fea2d32b2ab3cfe060300 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Tue, 1 Oct 2024 09:21:56 -0400 Subject: [PATCH 500/507] user socore --- salt/elasticfleet/config.sls | 1 + 1 file changed, 1 insertion(+) diff --git a/salt/elasticfleet/config.sls b/salt/elasticfleet/config.sls index d29b9ddb2..bc96b9563 100644 --- a/salt/elasticfleet/config.sls +++ b/salt/elasticfleet/config.sls @@ -79,6 +79,7 @@ soresourcesrepoconfig: - name: safe.directory - value: /nsm/securityonion-resources - global: True + - user: socore {% if not GLOBALS.airgap %} soresourcesrepoclone: From 20127e6b1d24a9200a83696a15585a1ebf4a4a30 Mon Sep 17 00:00:00 2001 From: m0duspwnens Date: Tue, 1 Oct 2024 15:09:53 -0400 Subject: [PATCH 501/507] hard-reset to the remote revision --- salt/elasticfleet/config.sls | 1 + 1 file changed, 1 insertion(+) diff --git a/salt/elasticfleet/config.sls b/salt/elasticfleet/config.sls index bc96b9563..71bc369c6 100644 --- a/salt/elasticfleet/config.sls +++ b/salt/elasticfleet/config.sls @@ -88,6 +88,7 @@ soresourcesrepoclone: - target: /nsm/securityonion-resources - rev: 'main' - depth: 1 + - force_reset: True {% endif %} elasticdefendconfdir: From bbc65c32b630dae0387aedf8c623bd51c1698f4b Mon Sep 17 00:00:00 2001 From: Mike Reeves Date: Mon, 7 Oct 2024 09:55:54 -0400 Subject: [PATCH 502/507] 2.4.110 --- DOWNLOAD_AND_VERIFY_ISO.md | 22 ++++++++++---------- sigs/securityonion-2.4.110-20241004.iso.sig | Bin 0 -> 566 bytes 2 files changed, 11 insertions(+), 11 deletions(-) create mode 100644 sigs/securityonion-2.4.110-20241004.iso.sig diff --git a/DOWNLOAD_AND_VERIFY_ISO.md b/DOWNLOAD_AND_VERIFY_ISO.md index ffeb0fe32..bb4dfd672 100644 --- a/DOWNLOAD_AND_VERIFY_ISO.md +++ b/DOWNLOAD_AND_VERIFY_ISO.md @@ -1,17 +1,17 @@ -### 2.4.100-20240903 ISO image released on 2024/09/03 +### 2.4.110-20241004 ISO image released on 2024/10/07 ### Download and Verify -2.4.100-20240903 ISO image: -https://download.securityonion.net/file/securityonion/securityonion-2.4.100-20240903.iso +2.4.110-20241004 ISO image: +https://download.securityonion.net/file/securityonion/securityonion-2.4.110-20241004.iso -MD5: 856BBB4F0764C0A479D8949725FC096B -SHA1: B3FCFB8F1031EB8AA833A90C6C5BB61328A73842 -SHA256: 0103EB9D78970396BB47CBD18DA1FFE64524F5C1C559487A1B2D293E1882B265 +MD5: 1641E4AFD65DB1C218BFAD22E33909C6 +SHA1: 131E1115F7CA76302F72625CD80A212B91608114 +SHA256: 8598EB03E52B332EF5445520445AD205C68A99BC030F8497F6EBDE1249B8B576 Signature for ISO image: -https://github.com/Security-Onion-Solutions/securityonion/raw/2.4/main/sigs/securityonion-2.4.100-20240903.iso.sig +https://github.com/Security-Onion-Solutions/securityonion/raw/2.4/main/sigs/securityonion-2.4.110-20241004.iso.sig Signing key: https://raw.githubusercontent.com/Security-Onion-Solutions/securityonion/2.4/main/KEYS @@ -25,22 +25,22 @@ wget https://raw.githubusercontent.com/Security-Onion-Solutions/securityonion/2. Download the signature file for the ISO: ``` -wget https://github.com/Security-Onion-Solutions/securityonion/raw/2.4/main/sigs/securityonion-2.4.100-20240903.iso.sig +wget https://github.com/Security-Onion-Solutions/securityonion/raw/2.4/main/sigs/securityonion-2.4.110-20241004.iso.sig ``` Download the ISO image: ``` -wget https://download.securityonion.net/file/securityonion/securityonion-2.4.100-20240903.iso +wget https://download.securityonion.net/file/securityonion/securityonion-2.4.110-20241004.iso ``` Verify the downloaded ISO image using the signature file: ``` -gpg --verify securityonion-2.4.100-20240903.iso.sig securityonion-2.4.100-20240903.iso +gpg --verify securityonion-2.4.110-20241004.iso.sig securityonion-2.4.110-20241004.iso ``` The output should show "Good signature" and the Primary key fingerprint should match what's shown below: ``` -gpg: Signature made Sat 31 Aug 2024 05:05:05 PM EDT using RSA key ID FE507013 +gpg: Signature made Sat 05 Oct 2024 09:31:57 AM EDT using RSA key ID FE507013 gpg: Good signature from "Security Onion Solutions, LLC " gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. diff --git a/sigs/securityonion-2.4.110-20241004.iso.sig b/sigs/securityonion-2.4.110-20241004.iso.sig new file mode 100644 index 0000000000000000000000000000000000000000..40bc093e276ee5ceb1f2dfc5d54e06404231fd9b GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j-41gSkXz6^6dp_W8^5Ma0dP;e6k0%rj~%>W7s5PT3| zxBgIY6B6DK0JvtudFEy7>3{fv0?jN;AWVZ_s%u7%>ji}tqU7}yN}uH^hJbixmf$Fl z{u~27f(Gk-mZs6Yx&rVX^}G&0!MvQ#sW`Oyaq`fnu3fycAR=)NDUr-s6c3+dx1vBr zwx*eYV_s8aSrtJ7-BbV{2fD*`hxzAW;Pu69q4!qVaya}e$Ljs@$|r`1lY<4yB461>;DR*;3_DyU=bUGP;;Ef?mH6Np`{~d(zzpEu!5!%unm%2Qd10l!>{L(5!q^S|DFeEI+C7 zWZgL~6RPq?=Mi^dko^I8eC_|6s*6#;Yo5a9kj5#XZ0mXN;{$l+A!m?^``O%=LG{x7 zHT)RSd_Un+3X>i~S^OSRY#jY14Y5*AT`Yeb3L8Xj0iqKasri2|UV~l&AmUmXH-vr= zlkuMSk7w Date: Tue, 8 Oct 2024 10:54:54 -0400 Subject: [PATCH 503/507] Use ID instead of name --- salt/elasticfleet/tools/sbin/so-elastic-fleet-common | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/salt/elasticfleet/tools/sbin/so-elastic-fleet-common b/salt/elasticfleet/tools/sbin/so-elastic-fleet-common index fadf18b5f..296e578fc 100644 --- a/salt/elasticfleet/tools/sbin/so-elastic-fleet-common +++ b/salt/elasticfleet/tools/sbin/so-elastic-fleet-common @@ -102,6 +102,14 @@ elastic_fleet_package_is_installed() { curl -s -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET -H 'kbn-xsrf: true' "localhost:5601/api/fleet/epm/packages/$PACKAGE" | jq -r '.item.status' } +elastic_fleet_agent_policy_ids() { + curl -s -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET "localhost:5601/api/fleet/agent_policies" | jq -r .items[].id + if [ $? -ne 0 ]; then + echo "Error: Failed to retrieve agent policies." + exit 1 + fi +} + elastic_fleet_agent_policy_names() { curl -s -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET "localhost:5601/api/fleet/agent_policies" | jq -r .items[].name if [ $? -ne 0 ]; then From c58ed45cf034e5db2c6f7c1afbc13790efba2a22 Mon Sep 17 00:00:00 2001 From: weslambert Date: Tue, 8 Oct 2024 10:55:16 -0400 Subject: [PATCH 504/507] Use ID instead of name --- .../tools/sbin/so-elastic-fleet-integration-upgrade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade b/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade index bdf93bad3..baad389eb 100644 --- a/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade +++ b/salt/elasticfleet/tools/sbin/so-elastic-fleet-integration-upgrade @@ -13,7 +13,7 @@ if [ $? -ne 0 ]; then fi IFS=$'\n' -agent_policies=$(elastic_fleet_agent_policy_names) +agent_policies=$(elastic_fleet_agent_policy_ids) if [ $? -ne 0 ]; then echo "Error: Failed to retrieve agent policies." exit 1 From e2da31c2b708b0181e9ea0b0b6a082c9d345b000 Mon Sep 17 00:00:00 2001 From: Mike Reeves Date: Wed, 9 Oct 2024 14:15:43 -0400 Subject: [PATCH 505/507] Update soup --- salt/manager/tools/sbin/soup | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/salt/manager/tools/sbin/soup b/salt/manager/tools/sbin/soup index 091e471d4..5e3deff15 100755 --- a/salt/manager/tools/sbin/soup +++ b/salt/manager/tools/sbin/soup @@ -402,6 +402,7 @@ preupgrade_changes() { [[ "$INSTALLEDVERSION" == 2.4.70 ]] && up_to_2.4.80 [[ "$INSTALLEDVERSION" == 2.4.80 ]] && up_to_2.4.90 [[ "$INSTALLEDVERSION" == 2.4.90 ]] && up_to_2.4.100 + [[ "$INSTALLEDVERSION" == 2.4.100 ]] && up_to_2.4.110 true } @@ -422,6 +423,7 @@ postupgrade_changes() { [[ "$POSTVERSION" == 2.4.70 ]] && post_to_2.4.80 [[ "$POSTVERSION" == 2.4.80 ]] && post_to_2.4.90 [[ "$POSTVERSION" == 2.4.90 ]] && post_to_2.4.100 + [[ "$POSTVERSION" == 2.4.100 ]] && post_to_2.4.110 true } @@ -509,6 +511,11 @@ post_to_2.4.100() { POSTVERSION=2.4.100 } +post_to_2.4.110() { + echo "Nothing to apply" + POSTVERSION=2.4.110 +} + repo_sync() { echo "Sync the local repo." su socore -c '/usr/sbin/so-repo-sync' || fail "Unable to complete so-repo-sync." @@ -691,6 +698,11 @@ up_to_2.4.100() { determine_elastic_agent_upgrade INSTALLEDVERSION=2.4.100 } +up_to_2.4.110() { + echo "Nothing to do for 2.4.110" + + INSTALLEDVERSION=2.4.110 +} add_detection_test_pillars() { if [[ -n "$SOUP_INTERNAL_TESTING" ]]; then From 787336725c0616b5142fc6099b4290966f586ef8 Mon Sep 17 00:00:00 2001 From: Jason Ertel Date: Thu, 10 Oct 2024 06:25:59 -0400 Subject: [PATCH 506/507] 2.4.110 hotfix --- HOTFIX | 1 + 1 file changed, 1 insertion(+) diff --git a/HOTFIX b/HOTFIX index e69de29bb..7f0f80c64 100644 --- a/HOTFIX +++ b/HOTFIX @@ -0,0 +1 @@ +20241010 From 404f9a4eb3be4d06f810a99be5eca37618744715 Mon Sep 17 00:00:00 2001 From: Mike Reeves Date: Thu, 10 Oct 2024 10:37:12 -0400 Subject: [PATCH 507/507] 2.4.110 Hotfix --- DOWNLOAD_AND_VERIFY_ISO.md | 22 ++++++++++---------- sigs/securityonion-2.4.110-20241010.iso.sig | Bin 0 -> 566 bytes 2 files changed, 11 insertions(+), 11 deletions(-) create mode 100644 sigs/securityonion-2.4.110-20241010.iso.sig diff --git a/DOWNLOAD_AND_VERIFY_ISO.md b/DOWNLOAD_AND_VERIFY_ISO.md index bb4dfd672..18a38a91c 100644 --- a/DOWNLOAD_AND_VERIFY_ISO.md +++ b/DOWNLOAD_AND_VERIFY_ISO.md @@ -1,17 +1,17 @@ -### 2.4.110-20241004 ISO image released on 2024/10/07 +### 2.4.110-20241010 ISO image released on 2024/10/10 ### Download and Verify -2.4.110-20241004 ISO image: -https://download.securityonion.net/file/securityonion/securityonion-2.4.110-20241004.iso +2.4.110-20241010 ISO image: +https://download.securityonion.net/file/securityonion/securityonion-2.4.110-20241010.iso -MD5: 1641E4AFD65DB1C218BFAD22E33909C6 -SHA1: 131E1115F7CA76302F72625CD80A212B91608114 -SHA256: 8598EB03E52B332EF5445520445AD205C68A99BC030F8497F6EBDE1249B8B576 +MD5: A8003DEBC4510D538F06238D9DBB86C0 +SHA1: 441DE90A192C8FE8BEBAB9ACE1A3CC18F71A2B1F +SHA256: B087A0D12FC2CA3CCD02BD52E52421F4F60DC09BF826337A057E05A04D114CCE Signature for ISO image: -https://github.com/Security-Onion-Solutions/securityonion/raw/2.4/main/sigs/securityonion-2.4.110-20241004.iso.sig +https://github.com/Security-Onion-Solutions/securityonion/raw/2.4/main/sigs/securityonion-2.4.110-20241010.iso.sig Signing key: https://raw.githubusercontent.com/Security-Onion-Solutions/securityonion/2.4/main/KEYS @@ -25,22 +25,22 @@ wget https://raw.githubusercontent.com/Security-Onion-Solutions/securityonion/2. Download the signature file for the ISO: ``` -wget https://github.com/Security-Onion-Solutions/securityonion/raw/2.4/main/sigs/securityonion-2.4.110-20241004.iso.sig +wget https://github.com/Security-Onion-Solutions/securityonion/raw/2.4/main/sigs/securityonion-2.4.110-20241010.iso.sig ``` Download the ISO image: ``` -wget https://download.securityonion.net/file/securityonion/securityonion-2.4.110-20241004.iso +wget https://download.securityonion.net/file/securityonion/securityonion-2.4.110-20241010.iso ``` Verify the downloaded ISO image using the signature file: ``` -gpg --verify securityonion-2.4.110-20241004.iso.sig securityonion-2.4.110-20241004.iso +gpg --verify securityonion-2.4.110-20241010.iso.sig securityonion-2.4.110-20241010.iso ``` The output should show "Good signature" and the Primary key fingerprint should match what's shown below: ``` -gpg: Signature made Sat 05 Oct 2024 09:31:57 AM EDT using RSA key ID FE507013 +gpg: Signature made Thu 10 Oct 2024 07:05:30 AM EDT using RSA key ID FE507013 gpg: Good signature from "Security Onion Solutions, LLC " gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. diff --git a/sigs/securityonion-2.4.110-20241010.iso.sig b/sigs/securityonion-2.4.110-20241010.iso.sig new file mode 100644 index 0000000000000000000000000000000000000000..90849a7b68afe29d504e56b29870860d6f9d77ee GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j-41gSkXz6^6dp_W8^5Ma0dP;e6k0%r%b`TzV@U5+K}={y6*!?hr$z^nk87TJ4t@3mNI92_L5`?A{~nVnLX(j z`J`G)Zw|U2QckI`J{*LBa*$2NokO9Jaie4mLDi7keu|Qm$oc($9B%W2g~RsV-P?Y& zn5hJs-Q8@5=UC4v)Df|qQb|sm%<57z80titJ|6^*0EbeSny^o1HqilJUb?KrPQ-{K zPxW^)XeY=vD26+E>`FQX`WJ<|!H4s)MoLn$IKV^%^oI77nsH0|tKiIUft66#@ zhgIFcg)Y@?`c42F+qVEfp>62H(7ESy+8R?VZBS>p#@*V?(|8XIGRiOP#>a@7i1T-} z+1Tn7E5f@Ib!^xQbweVO?JR?zWtq!=nd|4&+*+wt71 z&VKYzXAgLKGwmrH09Mvm5MvU1e_PuODW(2_2#GL)g*$Ud#kz}Uo{DW;^jCYa)L!T9 z_im^`*MlW*eh8_uD}BlYD;!rAw)g1iO(M+N4pW)KOV literal 0 HcmV?d00001