From 3aa0b44336fb8230fb3d5580d73b93b0c6c14a9b Mon Sep 17 00:00:00 2001 From: cerfoglg Date: Thu, 30 Jul 2020 20:34:12 +0200 Subject: [PATCH 01/16] Updating compose --- deploy/docker-compose.yaml | 83 +- deploy/realm-export.json | 5543 ++++++++++++++++++++++++++++++++++++ 2 files changed, 5605 insertions(+), 21 deletions(-) create mode 100644 deploy/realm-export.json diff --git a/deploy/docker-compose.yaml b/deploy/docker-compose.yaml index 1124234..9e2b175 100644 --- a/deploy/docker-compose.yaml +++ b/deploy/docker-compose.yaml @@ -31,13 +31,13 @@ services: ports: - "8082:8082" depends_on: - - mongodb + - mongo - elasticsearch volumes: - ./logs/apim-gateway:/opt/graviteeio-gateway/logs environment: - - gravitee_management_mongodb_uri=mongodb://mongodb:27017/gravitee?serverSelectionTimeoutMS=5000&connectTimeoutMS=5000&socketTimeoutMS=5000 - - gravitee_ratelimit_mongodb_uri=mongodb://mongodb:27017/gravitee?serverSelectionTimeoutMS=5000&connectTimeoutMS=5000&socketTimeoutMS=5000 + - gravitee_management_mongodb_uri=mongodb://mongo:27017/gravitee?serverSelectionTimeoutMS=5000&connectTimeoutMS=5000&socketTimeoutMS=5000 + - gravitee_ratelimit_mongodb_uri=mongodb://mongo:27017/gravitee?serverSelectionTimeoutMS=5000&connectTimeoutMS=5000&socketTimeoutMS=5000 - gravitee_reporters_elasticsearch_endpoints_0=http://elasticsearch:9200 networks: - storage @@ -138,7 +138,31 @@ services: environment: - IOTA_MONGO_HOST=mongo ports: - - "8082:8082" + - "8086:8082" + networks: + - storage + - frontend + + iot-agent: + image: fiware/iotagent-ul + depends_on: + - mongo + ports: + - "4061:4061" + - "7896:7896" + environment: + - "IOTA_CB_HOST=orion" + - "IOTA_CB_PORT=1026" + - "IOTA_NORTH_PORT=4061" + - "IOTA_REGISTRY_TYPE=mongodb" + - "IOTA_MONGO_HOST=mongo" + - "IOTA_MONGO_PORT=27017" + - "IOTA_MONGO_DB=iotagent-ul" + - "IOTA_HTTP_PORT=7896" + - "IOTA_PROVIDER_URL=http://iot-agent:4061" + networks: + - storage + - frontend grafana: image: grafana/grafana @@ -153,10 +177,6 @@ services: redis: image: redis - deploy: - # Scaling Redis requires some extra work. - # See https://get-reddie.com/blog/redis4-cluster-docker-compose/ - replicas: 1 ports: - "6379:6379" volumes: @@ -165,7 +185,7 @@ services: - storage portal: - image: orchestracities/portal:dev + image: orchestracities/portal:${PORTAL_VERSION:-0.1.23} depends_on: - portaldb environment: @@ -173,26 +193,26 @@ services: - DJANGO_SETTINGS_MODULE=portal.settings.production - KEYCLOAK_FRONTEND_CLIENT_ID=portal - KEYCLOAK_OIDC_CLIENT_ID=resource_server - - KEYCLOAK_OIDC_CLIENT_SECRET=006ce147-dd78-42db-a78a-1b5b0f3a723f - - KEYCLOAK_BASE=https://auth.s.orchestracities.com/auth + - KEYCLOAK_OIDC_CLIENT_SECRET=98dabcef-960a-4474-8c11-e8807a92ec94 + - KEYCLOAK_BASE=http://keycloak:8080/auth - KEYCLOAK_REALM=default - - KEYCLOAK_ADMIN_URI=https://auth.s.orchestracities.com/auth/ + - KEYCLOAK_ADMIN_URI=http://keycloak:8080/auth/ - KEYCLOAK_ADMIN_CLIENT_ID=admin-cli - - KEYCLOAK_ADMIN_CLIENT_SECRET=6fad563f-8e1c-4cb7-9ade-9734909dfb90 + - KEYCLOAK_ADMIN_CLIENT_SECRET=cc4ffe2a-c660-4547-b3b4-5d1c93305047 - KEYCLOAK_ADMIN_USERNAME=portaladmin - KEYCLOAK_ADMIN_PASSWORD=portaladminpass - - KEYCLOAK_OIDC_ENDPOINT=https://auth.s.orchestracities.com/auth + - KEYCLOAK_OIDC_ENDPOINT=http://keycloak:8001/auth - KEYCLOAK_OIDC_REALM=default - - KEYCLOAK_OIDC_AUTHORIZATION_ENDPOINT=https://auth.s.orchestracities.com/auth/realms/default/protocol/openid-connect/auth - - KEYCLOAK_OIDC_TOKEN_ENDPOINT=https://auth.s.orchestracities.com/auth/realms/default/protocol/openid-connect/token - - KEYCLOAK_OIDC_USER_ENDPOINT=https://auth.s.orchestracities.com/auth/realms/default/protocol/openid-connect/userinfo - - KEYCLOAK_OIDC_JWKS_ENDPOINT=https://auth.s.orchestracities.com/auth/realms/default/protocol/openid-connect/certs + - KEYCLOAK_OIDC_AUTHORIZATION_ENDPOINT=http://keycloak:8080/auth/realms/default/protocol/openid-connect/auth + - KEYCLOAK_OIDC_TOKEN_ENDPOINT=http://keycloak:8080/auth/realms/default/protocol/openid-connect/token + - KEYCLOAK_OIDC_USER_ENDPOINT=http://keycloak:8080/auth/realms/default/protocol/openid-connect/userinfo + - KEYCLOAK_OIDC_JWKS_ENDPOINT=http://keycloak:8080/auth/realms/default/protocol/openid-connect/certs - PORTAL_DB_HOST=portaldb - PORTAL_DB_PORT=5432 - PORTAL_DB_NAME=portal - PORTAL_DB_USER=portal - PORTAL_DB_PASSWORD=password - - IOT_MANAGER_URI=http://iot-manager:8082 + - IOT_MANAGER_URI=http://iot-manager:8086 - CONTEXT_BROKER_URI=http://orion:1026 - QUANTUMLEAP_URI=http://quantumleap:8668 - GRAFANA_URL=# @@ -204,6 +224,12 @@ services: - KIBANA_URL=# - NO_SQUL_URL=# - GRAVITEE_URL=# + - EMAIL_HOST=smtp.gmail.com + - EMAIL_USE_TLS=True + - EMAIL_PORT=587 + - EMAIL_HOST_USER=ocportalmail@gmail.com + - EMAIL_HOST_PASSWORD=password + - REDIS_BROKER_URL=redis://redis:6379 #- UI_CUSTOM_CSS_URL=https://raw.githubusercontent.com/orchestracities/shared-resources/master/oc-portal/css/ekz_css.css #- UI_CUSTOM_LOGO_URL=https://github.com/orchestracities/shared-resources/raw/master/oc-portal/images/ekz_logo.png ports: @@ -218,6 +244,23 @@ services: - POSTGRES_USER=portal - POSTGRES_PASSWORD=password - POSTGRES_DB=portal + networks: + - storage + - frontend + + keycloak: + image: jboss/keycloak:${KEYCLOAK_VERSION:-5.0.0} + ports: + - "8001:8080" + volumes: + - ./realm-export.json:/tmp/realm-export.json + environment: + - KEYCLOAK_USER=admin + - KEYCLOAK_PASSWORD=password + - KEYCLOAK_IMPORT=/tmp/realm-export.json + networks: + - storage + - frontend volumes: portal_db: @@ -230,6 +273,4 @@ volumes: networks: frontend: - name: frontend storage: - name: storage \ No newline at end of file diff --git a/deploy/realm-export.json b/deploy/realm-export.json new file mode 100644 index 0000000..25cbaed --- /dev/null +++ b/deploy/realm-export.json @@ -0,0 +1,5543 @@ +{ + "id": "default", + "realm": "default", + "displayName": "OrchestraCities", + "displayNameHtml": "
EKZ Smart City
", + "notBefore": 0, + "revokeRefreshToken": false, + "refreshTokenMaxReuse": 0, + "accessTokenLifespan": 36000, + "accessTokenLifespanForImplicitFlow": 36000, + "ssoSessionIdleTimeout": 3600, + "ssoSessionMaxLifespan": 36000, + "ssoSessionIdleTimeoutRememberMe": 0, + "ssoSessionMaxLifespanRememberMe": 0, + "offlineSessionIdleTimeout": 31536000, + "offlineSessionMaxLifespanEnabled": false, + "offlineSessionMaxLifespan": 5184000, + "accessCodeLifespan": 60, + "accessCodeLifespanUserAction": 300, + "accessCodeLifespanLogin": 1800, + "actionTokenGeneratedByAdminLifespan": 43200, + "actionTokenGeneratedByUserLifespan": 300, + "enabled": true, + "sslRequired": "external", + "registrationAllowed": false, + "registrationEmailAsUsername": true, + "rememberMe": true, + "verifyEmail": false, + "loginWithEmailAllowed": true, + "duplicateEmailsAllowed": false, + "resetPasswordAllowed": true, + "editUsernameAllowed": false, + "bruteForceProtected": true, + "permanentLockout": false, + "maxFailureWaitSeconds": 900, + "minimumQuickLoginWaitSeconds": 60, + "waitIncrementSeconds": 1800, + "quickLoginCheckMilliSeconds": 1000, + "maxDeltaTimeSeconds": 43200, + "failureFactor": 5, + "roles": { + "realm": [ + { + "id": "36b03b77-42cd-4a75-b0b9-03fbf72102b7", + "name": "data-admin", + "composite": false, + "clientRole": false, + "containerId": "default", + "attributes": {} + }, + { + "id": "92ef1463-7329-4d65-9d7e-c9639bbc2a20", + "name": "groups", + "composite": false, + "clientRole": false, + "containerId": "default", + "attributes": {} + }, + { + "id": "4cb21248-e517-42a0-a690-ffe21c886aa8", + "name": "realm-admin", + "description": "admin of the default realm", + "composite": false, + "clientRole": false, + "containerId": "default", + "attributes": {} + }, + { + "id": "ec419207-7bb4-4103-a4a3-3db691ff2293", + "name": "admin", + "composite": true, + "composites": { + "client": { + "realm-management": [ + "view-clients", + "view-authorization", + "view-events", + "view-realm", + "view-identity-providers", + "query-users", + "query-clients", + "query-realms", + "view-users", + "query-groups" + ] + } + }, + "clientRole": false, + "containerId": "default", + "attributes": {} + }, + { + "id": "a7b3ae2a-314c-43dc-931b-bd3226b447a9", + "name": "permanent", + "composite": false, + "clientRole": false, + "containerId": "default", + "attributes": {} + }, + { + "id": "440b8b5f-4980-4951-9f00-2ee96839b27d", + "name": "openid", + "description": "access to user profile", + "composite": false, + "clientRole": false, + "containerId": "default", + "attributes": {} + }, + { + "id": "574fbfa8-b1f0-4088-b330-120eb6fa4337", + "name": "uma_authorization", + "description": "${role_uma_authorization}", + "composite": false, + "clientRole": false, + "containerId": "default", + "attributes": {} + }, + { + "id": "6df8d761-5be6-49c5-8df9-0846e326280f", + "name": "name", + "description": "access to user name", + "composite": false, + "clientRole": false, + "containerId": "default", + "attributes": {} + }, + { + "id": "dac6942d-5bd6-4f6c-8d30-ef6f17ebd91f", + "name": "offline_access", + "description": "${role_offline-access}", + "composite": false, + "clientRole": false, + "containerId": "default", + "attributes": {} + }, + { + "id": "9a88fa32-a895-43e5-8d32-8564248997fd", + "name": "email", + "description": "access to email", + "composite": false, + "clientRole": false, + "containerId": "default", + "attributes": {} + }, + { + "id": "061ae77c-f8bb-4d1c-9ef7-90c6296a2b84", + "name": "user", + "composite": false, + "clientRole": false, + "containerId": "default", + "attributes": {} + } + ], + "client": { + "kubernetes": [ + { + "id": "7169d0f9-af34-4ece-a70f-6fe2a97ced87", + "name": "uma_protection", + "composite": false, + "clientRole": true, + "containerId": "9bb1aacb-ba54-47ab-ae2d-1413d590f16a", + "attributes": {} + }, + { + "id": "b664334a-907a-4008-911a-6760ae5d13d4", + "name": "admin", + "composite": false, + "clientRole": true, + "containerId": "9bb1aacb-ba54-47ab-ae2d-1413d590f16a", + "attributes": {} + } + ], + "realm-management": [ + { + "id": "0bf827cc-778b-4935-be82-fb7d81a13e98", + "name": "view-clients", + "description": "${role_view-clients}", + "composite": true, + "composites": { + "client": { + "realm-management": [ + "query-clients" + ] + } + }, + "clientRole": true, + "containerId": "e01100ca-bbde-4123-9163-8b004567b083", + "attributes": {} + }, + { + "id": "05b01928-9993-4a16-bf00-3246f265735a", + "name": "manage-clients", + "description": "${role_manage-clients}", + "composite": false, + "clientRole": true, + "containerId": "e01100ca-bbde-4123-9163-8b004567b083", + "attributes": {} + }, + { + "id": "30923f76-5b16-40aa-9133-d98ef5642600", + "name": "query-clients", + "description": "${role_query-clients}", + "composite": false, + "clientRole": true, + "containerId": "e01100ca-bbde-4123-9163-8b004567b083", + "attributes": {} + }, + { + "id": "c42f6430-2226-4fb5-981a-b8bec70e0fdc", + "name": "realm-admin", + "description": "${role_realm-admin}", + "composite": true, + "composites": { + "client": { + "realm-management": [ + "view-clients", + "manage-clients", + "query-clients", + "manage-events", + "view-authorization", + "manage-users", + "manage-realm", + "view-events", + "impersonation", + "create-client", + "view-realm", + "view-identity-providers", + "query-users", + "manage-identity-providers", + "manage-authorization", + "query-realms", + "view-users", + "query-groups" + ] + } + }, + "clientRole": true, + "containerId": "e01100ca-bbde-4123-9163-8b004567b083", + "attributes": {} + }, + { + "id": "29adb9c4-18bb-4324-9629-779dfc1d9ba6", + "name": "view-groups", + "description": "${role_view-groups}", + "composite": true, + "composites": { + "client": { + "realm-management": [ + "query-groups" + ] + } + }, + "clientRole": true, + "containerId": "e01100ca-bbde-4123-9163-8b004567b083", + "attributes": {} + }, + { + "id": "6e156fa2-094e-40b7-a23e-3409f5007248", + "name": "manage-events", + "description": "${role_manage-events}", + "composite": false, + "clientRole": true, + "containerId": "e01100ca-bbde-4123-9163-8b004567b083", + "attributes": {} + }, + { + "id": "2bf569c7-cc3b-4276-b1bc-2b53c14b7c19", + "name": "view-authorization", + "description": "${role_view-authorization}", + "composite": false, + "clientRole": true, + "containerId": "e01100ca-bbde-4123-9163-8b004567b083", + "attributes": {} + }, + { + "id": "2facd9b2-8104-4ae1-ab29-4b8b9bc63810", + "name": "manage-users", + "description": "${role_manage-users}", + "composite": false, + "clientRole": true, + "containerId": "e01100ca-bbde-4123-9163-8b004567b083", + "attributes": {} + }, + { + "id": "b514387f-3c9e-4dbc-9527-0beb57351c11", + "name": "manage-realm", + "description": "${role_manage-realm}", + "composite": false, + "clientRole": true, + "containerId": "e01100ca-bbde-4123-9163-8b004567b083", + "attributes": {} + }, + { + "id": "7042185d-c14a-4103-b240-f197a1d6c59a", + "name": "view-events", + "description": "${role_view-events}", + "composite": false, + "clientRole": true, + "containerId": "e01100ca-bbde-4123-9163-8b004567b083", + "attributes": {} + }, + { + "id": "50812fcc-8a6a-48d6-9332-a6c991d130ce", + "name": "impersonation", + "description": "${role_impersonation}", + "composite": false, + "clientRole": true, + "containerId": "e01100ca-bbde-4123-9163-8b004567b083", + "attributes": {} + }, + { + "id": "dda67624-b4a1-4201-a09c-9f1595c40fa1", + "name": "create-client", + "description": "${role_create-client}", + "composite": false, + "clientRole": true, + "containerId": "e01100ca-bbde-4123-9163-8b004567b083", + "attributes": {} + }, + { + "id": "10e5b74c-2dea-4a6c-979b-e76e23575749", + "name": "view-realm", + "description": "${role_view-realm}", + "composite": false, + "clientRole": true, + "containerId": "e01100ca-bbde-4123-9163-8b004567b083", + "attributes": {} + }, + { + "id": "0b1aa159-04e2-4ffb-b499-b31e5ba3794a", + "name": "view-identity-providers", + "description": "${role_view-identity-providers}", + "composite": false, + "clientRole": true, + "containerId": "e01100ca-bbde-4123-9163-8b004567b083", + "attributes": {} + }, + { + "id": "f4440bb2-624d-411f-b888-0818bbd9d9a0", + "name": "query-users", + "description": "${role_query-users}", + "composite": false, + "clientRole": true, + "containerId": "e01100ca-bbde-4123-9163-8b004567b083", + "attributes": {} + }, + { + "id": "a48fe8ec-981b-4c98-be41-8171244b8207", + "name": "manage-identity-providers", + "description": "${role_manage-identity-providers}", + "composite": false, + "clientRole": true, + "containerId": "e01100ca-bbde-4123-9163-8b004567b083", + "attributes": {} + }, + { + "id": "a9645cf1-073b-4b1c-bf92-02de4d198720", + "name": "manage-authorization", + "description": "${role_manage-authorization}", + "composite": false, + "clientRole": true, + "containerId": "e01100ca-bbde-4123-9163-8b004567b083", + "attributes": {} + }, + { + "id": "38d2d5ad-8dc8-437c-9700-1cb49d0484bd", + "name": "uma_protection", + "composite": false, + "clientRole": true, + "containerId": "e01100ca-bbde-4123-9163-8b004567b083", + "attributes": {} + }, + { + "id": "caef9455-af69-42ac-96a0-e5b629aaddec", + "name": "query-realms", + "description": "${role_query-realms}", + "composite": false, + "clientRole": true, + "containerId": "e01100ca-bbde-4123-9163-8b004567b083", + "attributes": {} + }, + { + "id": "ae82b618-dbd0-4bd7-99b5-781c93ba18dc", + "name": "view-users", + "description": "${role_view-users}", + "composite": true, + "composites": { + "client": { + "realm-management": [ + "query-users", + "query-groups" + ] + } + }, + "clientRole": true, + "containerId": "e01100ca-bbde-4123-9163-8b004567b083", + "attributes": {} + }, + { + "id": "a02464e5-5345-4a29-b096-8519e22cf2fc", + "name": "query-groups", + "description": "${role_query-groups}", + "composite": false, + "clientRole": true, + "containerId": "e01100ca-bbde-4123-9163-8b004567b083", + "attributes": {} + } + ], + "elk": [], + "security-admin-console": [], + "resource_server": [ + { + "id": "c8eb9411-ae33-44f4-a908-d6883a134a0f", + "name": "uma_protection", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "1e90a9d9-0c6d-4582-b666-08ea4cc30cd1", + "name": "entity:delete", + "description": "delete an entity", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "16ad86b9-515a-47c6-b85c-7711fd309892", + "name": "group:create", + "description": "Creating a tenant subgroup in Keycloak", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "d60c61fc-d395-433c-80b9-f1838d0fa707", + "name": "device:read", + "description": "read device", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "663f542f-4477-499d-a6ba-b1a7c437ac74", + "name": "alarm:write", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "16502b60-d3f5-4425-be46-0f359c078da8", + "name": "group:write", + "description": "Editing a tenant subgroup in keycloak", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "96b52987-2d58-44ba-9a7a-ab71482e4c7f", + "name": "registration:create", + "description": "create a registration", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "2b046983-fe15-4bbb-a0dc-ce32de0843a2", + "name": "endpoint:create", + "description": "create an endpoint", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "1c65c3c4-4609-428d-9d31-bb40cd0c195b", + "name": "subscription:write", + "description": "edit a subscription", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "122c8328-6b33-4370-b778-b053b6532226", + "name": "device:data", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "a7377c98-d794-4a9e-85bd-9ff096e8423c", + "name": "entitytype:read", + "description": "read entity type", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "f6180a77-4249-4183-a366-08b6694324e7", + "name": "user:delete", + "description": "Deleting a user", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "59075967-d67b-48a1-8fbe-a144db574fcd", + "name": "subscription:read", + "description": "read a subscription", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "59b95c8f-aa7e-4d24-bb10-d0f91a679a59", + "name": "endpoint:read", + "description": "read endpoints", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "10b2874b-75bf-4dda-8974-2dc1738ab647", + "name": "group:read", + "description": "Seeing tenant subgroups in keycloak", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "4c6a4790-e9b9-419e-851c-01a158f265af", + "name": "device:create", + "description": "create a new device", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "98da08e8-b039-48ea-bdad-a86bc1d41c6f", + "name": "subscription:create", + "description": "create a subscription", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "51b6e198-53a7-4b5a-9d41-8a9991dfca9d", + "name": "entity:op", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "4702cdd4-bc0e-486d-ac06-3ed8cadc2fee", + "name": "devicegroup:create", + "description": "create a device group", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "a71e9cac-7fba-4478-b0cb-b96f492c35f9", + "name": "devicegroup:write", + "description": "modify a device group", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "6512d898-e00e-4070-a60d-701774db716d", + "name": "endpoint:delete", + "description": "delete an endpoint", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "6e06f3c5-ffe8-41e3-b1c8-ce8a1d62289b", + "name": "group:delete", + "description": "Deleting tenant subgroups in Keycloak", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "bcf4e4d8-ce31-4828-b665-c14ccefeec73", + "name": "registration:write", + "description": "update a registration", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "e903c3e0-94b1-4c59-b21e-1a13245c0983", + "name": "user:read", + "description": "Seeing users in keycloak", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "2888cf07-0bd5-456c-a70b-df241108584e", + "name": "endpoint:write", + "description": "update an endpoint", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "8d1ab8fe-1533-4b03-a0b6-e8dbcfdd1c09", + "name": "entity:read", + "description": "read entities", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "93e6a3ba-fe36-435c-8e79-58e01e4008fe", + "name": "entity:create", + "description": "create a new entity", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "b5114f35-35a1-4821-910b-3de0a8a3913d", + "name": "devicegroup:read", + "description": "read device groups", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "4a47a696-5251-4759-b3fe-209ddc6178c4", + "name": "user:create", + "description": "Creating new users in Keycloak", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "31e0c64c-aff9-44e4-b173-d095a18aff75", + "name": "alarm:delete", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "22629ae3-4077-4434-ab1f-a7fe303c6267", + "name": "registration:read", + "description": "read a registration", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "b8800ac9-06e4-4eef-997a-af0b502d1bb7", + "name": "registration:delete", + "description": "delete a registration", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "e2837273-36e1-4da5-b178-a27f49d12b7d", + "name": "entity:write", + "description": "update and entity", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "1a020fdd-379f-4977-968b-21eac2f0ec9b", + "name": "alarm:create", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "84b27a0e-8f30-4229-8773-4c5fe160ba34", + "name": "devicegroup:delete", + "description": "delete a device group", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "f704d42a-789e-4fdd-9451-a6032adaa977", + "name": "user:write", + "description": "Editing users in Keycloak", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "f9213072-8d7a-4fd4-a3b9-58ccaa92085f", + "name": "alarm:read", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "63262aa5-7022-4275-8d7d-88a22fde8ef1", + "name": "subscription:delete", + "description": "delete a subscription", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "d3ffc980-d58f-4af5-8665-d43b17856b27", + "name": "device:delete", + "description": "delete a device", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + }, + { + "id": "8b3b2407-a53d-4a4b-9a6d-146ec6e7783f", + "name": "device:write", + "description": "update a device", + "composite": false, + "clientRole": true, + "containerId": "33465fa4-5940-403e-929c-e7516e46422e", + "attributes": {} + } + ], + "crate": [ + { + "id": "0321b7d0-47e6-4623-801f-8d60c9f35d4f", + "name": "uma_protection", + "composite": false, + "clientRole": true, + "containerId": "e4c0847a-5ae8-40e5-8f62-d3398403ccde", + "attributes": {} + } + ], + "broker": [ + { + "id": "98cff7ab-3555-473a-9975-e42cd1c92d8c", + "name": "read-token", + "description": "${role_read-token}", + "composite": false, + "clientRole": true, + "containerId": "f57820f9-eaf8-45bf-a7a5-f50c6139d163", + "attributes": {} + } + ], + "nosql": [ + { + "id": "d3635735-5ef8-4fae-b44f-8263f60680fe", + "name": "uma_protection", + "composite": false, + "clientRole": true, + "containerId": "121e28fb-d2d6-4a11-bcc7-ca191bc36c09", + "attributes": {} + } + ], + "dataflow": [], + "admin-cli": [ + { + "id": "e85ee2ab-d3ba-489d-9644-4efddbfecc43", + "name": "uma_protection", + "composite": false, + "clientRole": true, + "containerId": "e3785d58-8ed2-4fa1-8cdc-8c2b4c2fc0a7", + "attributes": {} + } + ], + "pgadmin": [], + "api": [], + "portal": [], + "dashboard": [ + { + "id": "0601e457-0b6f-49bd-a49a-4cf08ec6b4ee", + "name": "viewer", + "description": "can view dashboards", + "composite": false, + "clientRole": true, + "containerId": "e0dc6252-b7c1-458e-ada5-157410d154c0", + "attributes": {} + }, + { + "id": "c49043d9-67d0-45fa-9cc4-563fa25eb6c1", + "name": "editor", + "description": "can edit dashboards", + "composite": false, + "clientRole": true, + "containerId": "e0dc6252-b7c1-458e-ada5-157410d154c0", + "attributes": {} + }, + { + "id": "e0527ec6-3af8-42d1-939d-22440a0206a0", + "name": "admin", + "description": "can administrate an organisation inside grafana", + "composite": false, + "clientRole": true, + "containerId": "e0dc6252-b7c1-458e-ada5-157410d154c0", + "attributes": {} + } + ], + "account": [ + { + "id": "180d6476-0254-440c-bfc8-55819bb65699", + "name": "manage-account-links", + "description": "${role_manage-account-links}", + "composite": false, + "clientRole": true, + "containerId": "a5d1fd7a-25b6-4a8f-970d-68a6170513c4", + "attributes": {} + }, + { + "id": "c9e98699-60f9-40db-9c6e-09bbd22a7de5", + "name": "view-profile", + "description": "${role_view-profile}", + "composite": false, + "clientRole": true, + "containerId": "a5d1fd7a-25b6-4a8f-970d-68a6170513c4", + "attributes": {} + }, + { + "id": "6a008f0d-515e-4812-8ae8-3f5dbbd53032", + "name": "manage-account", + "description": "${role_manage-account}", + "composite": true, + "composites": { + "client": { + "account": [ + "manage-account-links" + ] + } + }, + "clientRole": true, + "containerId": "a5d1fd7a-25b6-4a8f-970d-68a6170513c4", + "attributes": {} + } + ], + "gravitee": [ + { + "id": "69f28ce5-b09d-479f-8a73-bac58b020bd1", + "name": "uma_protection", + "composite": false, + "clientRole": true, + "containerId": "f832d0a2-e2c1-4f88-bd9c-1ef764547760", + "attributes": {} + }, + { + "id": "d9fc3041-f7c7-44b9-8071-3790570786b3", + "name": "API_PUBLISHER", + "composite": false, + "clientRole": true, + "containerId": "f832d0a2-e2c1-4f88-bd9c-1ef764547760", + "attributes": {} + }, + { + "id": "cf6c4940-dfd1-4b77-a4a6-a0914251a2a6", + "name": "USER", + "composite": false, + "clientRole": true, + "containerId": "f832d0a2-e2c1-4f88-bd9c-1ef764547760", + "attributes": {} + }, + { + "id": "467c0bda-7b6e-4b05-80a5-165b45626627", + "name": "ADMIN", + "composite": false, + "clientRole": true, + "containerId": "f832d0a2-e2c1-4f88-bd9c-1ef764547760", + "attributes": {} + } + ] + } + }, + "groups": [ + { + "id": "8a5d5938-c800-43c5-8116-7167b817f21d", + "name": "Admin", + "path": "/Admin", + "attributes": {}, + "realmRoles": [ + "data-admin", + "realm-admin", + "admin" + ], + "clientRoles": { + "kubernetes": [ + "admin" + ], + "realm-management": [ + "manage-clients", + "realm-admin", + "view-groups" + ] + }, + "subGroups": [] + }, + { + "id": "7ce9ae2a-b80b-4d67-b7ab-efc02f85183f", + "name": "Town", + "path": "/Town", + "attributes": { + "service": [ + "true" + ], + "tenant": [ + "true" + ] + }, + "realmRoles": [ + "uma_authorization" + ], + "clientRoles": {}, + "subGroups": [ + { + "id": "775dd0e6-1385-4765-8dc5-53a852f00172", + "name": "WasteManagement/Demo", + "path": "/Town/WasteManagement/Demo", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "e4409cb2-3aa6-4d81-9044-e27299f58f20", + "name": "EnvironmentManagement/Datakorum", + "path": "/Town/EnvironmentManagement/Datakorum", + "attributes": { + "servicepath": [ + "true" + ], + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "bcdddb4b-4b4e-412d-8106-e4107b237399", + "name": "ParkingManagement/Nedap", + "path": "/Town/ParkingManagement/Nedap", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "003bff24-05ac-46f2-9403-1331bc640537", + "name": "EnvironmentManagement/Vaisala", + "path": "/Town/EnvironmentManagement/Vaisala", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "af446572-eb38-4d93-bd6a-2c2c9093b767", + "name": "TrafficManagement/Demo", + "path": "/Town/TrafficManagement/Demo", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "07537677-52b5-4838-ba90-9e31cd2922bb", + "name": "Developer", + "path": "/Town/Developer", + "attributes": {}, + "realmRoles": [ + "offline_access" + ], + "clientRoles": { + "resource_server": [ + "entity:delete", + "device:read", + "device:data", + "subscription:write", + "entitytype:read", + "subscription:read", + "endpoint:read", + "subscription:create", + "device:create", + "entity:op", + "devicegroup:create", + "devicegroup:write", + "registration:write", + "endpoint:write", + "entity:read", + "entity:create", + "devicegroup:read", + "registration:read", + "entity:write", + "alarm:read", + "subscription:delete", + "device:write" + ], + "gravitee": [ + "USER", + "API_PUBLISHER" + ] + }, + "subGroups": [] + }, + { + "id": "341f96e0-c636-4fd8-be10-c931d30169b9", + "name": "User", + "path": "/Town/User", + "attributes": {}, + "realmRoles": [], + "clientRoles": { + "resource_server": [ + "user:read", + "uma_protection", + "entity:read", + "entitytype:read" + ], + "gravitee": [ + "USER" + ] + }, + "subGroups": [] + }, + { + "id": "1c961b36-66dc-4b75-91d9-efd46dd42839", + "name": "TrafficManagement", + "path": "/Town/TrafficManagement", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "837d5295-4f20-4a43-b7e3-20378950384c", + "name": "ParkingManagement/OpenChargeMap", + "path": "/Town/ParkingManagement/OpenChargeMap", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "e086e255-e30a-41fb-b873-4fb0dab96843", + "name": "EnvironmentManagement/PurpleAir", + "path": "/Town/EnvironmentManagement/PurpleAir", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "e18daafd-7bc5-4a54-b089-5b79b04cba71", + "name": "TrafficManagement/HERE", + "path": "/Town/TrafficManagement/HERE", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "cb7cae93-e27a-47ba-bf2c-f57ff2747030", + "name": "EnvironmentManagement", + "path": "/Town/EnvironmentManagement", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "2ca9ba87-bd1a-495c-8271-c81d7644eae2", + "name": "WasteManagement/Sensoneo", + "path": "/Town/WasteManagement/Sensoneo", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "2e86440e-8529-4e48-b49e-4297008b87f7", + "name": "EnvironmentManagement/WAQI", + "path": "/Town/EnvironmentManagement/WAQI", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "bdb8890f-89d5-4160-a9de-66225e5094b4", + "name": "EnvironmentManagement/Cesva", + "path": "/Town/EnvironmentManagement/Cesva", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "284e82f8-3517-40aa-b94e-37a5a644ac35", + "name": "EnvironmentManagement/Decentlab", + "path": "/Town/EnvironmentManagement/Decentlab", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "c6fbedfe-c255-46af-93dd-5dd4659960b5", + "name": "EnvironmentManagement/HawaDawa", + "path": "/Town/EnvironmentManagement/HawaDawa", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "1dcb0cfd-7def-4d43-8af7-34dcf6aa3bd0", + "name": "EnvironmentManagement/Keacoustics", + "path": "/Town/EnvironmentManagement/Keacoustics", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "09008c82-036d-4f6f-a0ce-70662fde74f8", + "name": "ParkingManagement/Pni", + "path": "/Town/ParkingManagement/Pni", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "a3c673c3-8001-49c1-903d-c704ae1577f5", + "name": "EnvironmentManagement/Demo", + "path": "/Town/EnvironmentManagement/Demo", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "b4133b5b-b5ca-48a7-8f03-9a4d08ddfc05", + "name": "EnvironmentManagement/Nabel", + "path": "/Town/EnvironmentManagement/Nabel", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "526dc449-f255-495b-93b0-8bd15674cd99", + "name": "PowerManagement/Demo", + "path": "/Town/PowerManagement/Demo", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "fcc3dfa6-989d-4b70-8f4e-ad4b5f51ae0c", + "name": "ParkingManagement/Datakorum", + "path": "/Town/ParkingManagement/Datakorum", + "attributes": { + "servicepath": [ + "true" + ], + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "9c8dee67-0921-4a07-b674-d69d83c01dc7", + "name": "EnvironmentManagement/MeteoSwiss", + "path": "/Town/EnvironmentManagement/MeteoSwiss", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "7994ad5d-de06-4276-ab69-8458ee8e6925", + "name": "MobilityManagement/Demo", + "path": "/Town/MobilityManagement/Demo", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "1609fa92-ca72-4728-a882-9c5507e76ad0", + "name": "PowerManagement/Esave", + "path": "/Town/PowerManagement/Esave", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "5d7d81c8-5a9e-4e38-9178-82aca97a32c3", + "name": "Admin", + "path": "/Town/Admin", + "attributes": {}, + "realmRoles": [ + "data-admin" + ], + "clientRoles": { + "realm-management": [ + "view-clients", + "view-users" + ], + "resource_server": [ + "uma_protection", + "endpoint:create", + "device:data", + "user:delete", + "subscription:read", + "endpoint:read", + "device:create", + "devicegroup:write", + "group:delete", + "registration:write", + "entity:create", + "devicegroup:read", + "alarm:delete", + "registration:read", + "registration:delete", + "entity:write", + "alarm:create", + "user:write", + "subscription:delete", + "device:delete", + "device:write", + "entity:delete", + "group:create", + "device:read", + "alarm:write", + "group:write", + "registration:create", + "subscription:write", + "entitytype:read", + "group:read", + "subscription:create", + "entity:op", + "devicegroup:create", + "endpoint:delete", + "user:read", + "endpoint:write", + "entity:read", + "user:create", + "devicegroup:delete", + "alarm:read" + ], + "dashboard": [ + "viewer", + "editor", + "admin" + ], + "gravitee": [ + "ADMIN", + "USER", + "API_PUBLISHER" + ] + }, + "subGroups": [] + }, + { + "id": "27c173fe-4b8a-42c0-8ac3-f75ae708583b", + "name": "WasteManagement", + "path": "/Town/WasteManagement", + "attributes": { + "servicepath": [ + "true" + ], + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "54605238-30e2-46ad-a3e8-0361a30a30a5", + "name": "EnvironmentManagement/OpenWeather", + "path": "/Town/EnvironmentManagement/OpenWeather", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "9b46ae0b-5b35-4ce2-8ee4-a9b4e66c147e", + "name": "WasteManagement/Ecomobile", + "path": "/Town/WasteManagement/Ecomobile", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "fd2f0c35-9c57-422e-b72a-3c27ccd08c87", + "name": "InfrastructureManagement", + "path": "/Town/InfrastructureManagement", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "9b8fd954-215b-41a7-a0c7-4be89cc46ed4", + "name": "PowerManagement", + "path": "/Town/PowerManagement", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "6a2aa826-7a4f-4be4-b07e-ae6cf22ed117", + "name": "ParkingManagement/Cleverciti", + "path": "/Town/ParkingManagement/Cleverciti", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "7b32b443-1008-420c-9e32-9b0c85a375ca", + "name": "PowerManagement/Datakorum", + "path": "/Town/PowerManagement/Datakorum", + "attributes": { + "servicepath": [ + "true" + ], + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "0e6c3d30-e3e9-482c-b32d-a8912eb87ce9", + "name": "EnvironmentManagement/SmartSense", + "path": "/Town/EnvironmentManagement/SmartSense", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "cbcb0874-897f-402c-8cfc-af4cc4acd772", + "name": "MobilityManagement", + "path": "/Town/MobilityManagement", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "6cc493a1-739e-4df8-ae2e-fb1f2bc0f6c6", + "name": "EnvironmentManagement/Aeroqual", + "path": "/Town/EnvironmentManagement/Aeroqual", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "947eb58b-5f97-4e8b-abd9-b94da8d48505", + "name": "Devices", + "path": "/Town/Devices", + "attributes": {}, + "realmRoles": [], + "clientRoles": { + "resource_server": [ + "device:data" + ] + }, + "subGroups": [] + }, + { + "id": "9367d3a7-75b2-40ef-8a3a-841abae2228d", + "name": "ParkingManagement/EKZ", + "path": "/Town/ParkingManagement/EKZ", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "7f210c04-8fd5-4384-859a-1b311cd5696f", + "name": "ParkingManagement/Demo", + "path": "/Town/ParkingManagement/Demo", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "ab13cb15-ae3c-47df-992d-6eca413c1db5", + "name": "ParkingManagement", + "path": "/Town/ParkingManagement", + "attributes": { + "servicepath": [ + "true" + ], + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "f127ce5f-0c56-4df6-97c4-c05cd3cefa2a", + "name": "InfrastructureManagement/Decentlab", + "path": "/Town/InfrastructureManagement/Decentlab", + "attributes": { + "servicePath": [ + "true" + ] + }, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + } + ] + }, + { + "id": "402bb58e-4bee-4102-804d-ee0018a9bc63", + "name": "developer", + "path": "/developer", + "attributes": {}, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + }, + { + "id": "c09d947c-ec23-45db-a85d-fca50f4976c3", + "name": "view", + "path": "/view", + "attributes": {}, + "realmRoles": [], + "clientRoles": {}, + "subGroups": [] + } + ], + "defaultRoles": [ + "user", + "openid", + "uma_authorization", + "name", + "groups", + "email", + "offline_access" + ], + "defaultGroups": [ + "/Town/User" + ], + "requiredCredentials": [ + "password" + ], + "otpPolicyType": "totp", + "otpPolicyAlgorithm": "HmacSHA1", + "otpPolicyInitialCounter": 0, + "otpPolicyDigits": 6, + "otpPolicyLookAheadWindow": 1, + "otpPolicyPeriod": 30, + "otpSupportedApplications": [ + "FreeOTP", + "Google Authenticator" + ], + "scopeMappings": [ + { + "client": "dataflow", + "roles": [ + "user" + ] + }, + { + "clientScope": "offline_access", + "roles": [ + "offline_access" + ] + }, + { + "clientScope": "permanent", + "roles": [ + "permanent" + ] + }, + { + "clientScope": "tenants", + "roles": [ + "openid", + "name", + "email" + ] + } + ], + "clientScopeMappings": { + "realm-management": [ + { + "client": "admin-cli", + "roles": [ + "view-realm", + "view-identity-providers", + "manage-identity-providers", + "impersonation", + "realm-admin", + "create-client", + "manage-users", + "uma_protection", + "query-realms", + "view-authorization", + "query-clients", + "query-users", + "manage-events", + "manage-realm", + "view-events", + "view-groups", + "view-users", + "view-clients", + "manage-authorization", + "manage-clients", + "query-groups" + ] + } + ], + "resource_server": [ + { + "clientScope": "device:create", + "roles": [ + "device:create" + ] + }, + { + "clientScope": "device:data", + "roles": [ + "device:data" + ] + }, + { + "clientScope": "device:delete", + "roles": [ + "device:delete" + ] + }, + { + "clientScope": "device:read", + "roles": [ + "device:read" + ] + }, + { + "clientScope": "device:write", + "roles": [ + "device:write" + ] + }, + { + "clientScope": "devicegroup:create", + "roles": [ + "devicegroup:create" + ] + }, + { + "clientScope": "devicegroup:delete", + "roles": [ + "devicegroup:delete" + ] + }, + { + "clientScope": "devicegroup:read", + "roles": [ + "devicegroup:read" + ] + }, + { + "clientScope": "devicegroup:write", + "roles": [ + "devicegroup:write" + ] + }, + { + "clientScope": "entity:create", + "roles": [ + "entity:create" + ] + }, + { + "clientScope": "entity:delete", + "roles": [ + "entity:delete" + ] + }, + { + "clientScope": "entity:op", + "roles": [ + "entity:op" + ] + }, + { + "clientScope": "entity:read", + "roles": [ + "entity:read" + ] + }, + { + "clientScope": "entity:write", + "roles": [ + "entity:write" + ] + }, + { + "clientScope": "entitytype:read", + "roles": [ + "entitytype:read" + ] + }, + { + "clientScope": "registration:create", + "roles": [ + "registration:create" + ] + }, + { + "clientScope": "registration:delete", + "roles": [ + "registration:delete" + ] + }, + { + "clientScope": "registration:write", + "roles": [ + "registration:write" + ] + }, + { + "clientScope": "subscription:create", + "roles": [ + "subscription:create" + ] + }, + { + "clientScope": "subscription:delete", + "roles": [ + "subscription:delete" + ] + }, + { + "clientScope": "subscription:read", + "roles": [ + "subscription:read" + ] + }, + { + "clientScope": "subscription:write", + "roles": [ + "subscription:write" + ] + } + ] + }, + "clients": [ + { + "id": "c14c775b-ed07-4c16-9f1e-9058143f736e", + "clientId": "dataflow", + "rootUrl": "https://dataflow.ekz.orchestracities.com/", + "adminUrl": "https://dataflow.ekz.orchestracities.com/", + "baseUrl": "", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "**********", + "redirectUris": [ + "*" + ], + "webOrigins": [ + "https://dataflow.ekz.orchestracities.com/", + "*" + ], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": true, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "exclude.session.state.from.auth.response": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "tls.client.certificate.bound.access.tokens": "false", + "saml.authnstatement": "false", + "display.on.consent.screen": "false", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": { + "browser": "345760b1-8450-46bd-9959-dc9d773925b9" + }, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": -1, + "protocolMappers": [ + { + "id": "21767302-7287-48f6-9865-0c86f03cfccd", + "name": "Client IP Address", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientAddress", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientAddress", + "jsonType.label": "String" + } + }, + { + "id": "bb278925-cd56-410a-b5bb-eaf88832e876", + "name": "Client ID", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientId", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientId", + "jsonType.label": "String" + } + }, + { + "id": "cdcd0ae6-90ab-4f1a-84f8-bddc10951037", + "name": "Client Host", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientHost", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientHost", + "jsonType.label": "String" + } + } + ], + "defaultClientScopes": [ + "web-origins", + "tenants", + "role_list", + "roles", + "profile", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access" + ] + }, + { + "id": "121e28fb-d2d6-4a11-bcc7-ca191bc36c09", + "clientId": "nosql", + "rootUrl": "https://nosql.ekz.orchestracities.com/", + "adminUrl": "https://nosql.ekz.orchestracities.com/", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "**********", + "redirectUris": [ + "https://nosql.ekz.orchestracities.com/*" + ], + "webOrigins": [ + "https://nosql.ekz.orchestracities.com" + ], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "exclude.session.state.from.auth.response": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "tls.client.certificate.bound.access.tokens": "false", + "saml.authnstatement": "false", + "display.on.consent.screen": "false", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": { + "browser": "345760b1-8450-46bd-9959-dc9d773925b9" + }, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": -1, + "protocolMappers": [ + { + "id": "70d07295-d2af-407d-aee1-b6d717aa5a28", + "name": "Client IP Address", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientAddress", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientAddress", + "jsonType.label": "String" + } + }, + { + "id": "ba189851-f07f-478c-a53f-f80b913e55c0", + "name": "Client Host", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientHost", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientHost", + "jsonType.label": "String" + } + }, + { + "id": "31005b31-828e-4308-acfb-8c61e83ed2dd", + "name": "Client ID", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientId", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientId", + "jsonType.label": "String" + } + } + ], + "defaultClientScopes": [ + "profile", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access" + ] + }, + { + "id": "e01100ca-bbde-4123-9163-8b004567b083", + "clientId": "realm-management", + "name": "${client_realm-management}", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "**********", + "redirectUris": [], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": true, + "authorizationServicesEnabled": true, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "saml.authnstatement": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "exclude.session.state.from.auth.response": "false", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "protocolMappers": [ + { + "id": "7f44f58a-d192-4e1b-aa0b-abca14c9f6d1", + "name": "Client IP Address", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientAddress", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientAddress", + "jsonType.label": "String" + } + }, + { + "id": "2ecb92c0-3b9d-462d-9dda-d974da28d0b8", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "42a4f55c-012d-45c6-9cb0-23f512266329", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": false, + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "633f197f-17cd-4798-8fac-18286c48942e", + "name": "Client Host", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientHost", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientHost", + "jsonType.label": "String" + } + }, + { + "id": "7b3e72af-b6f8-4f16-aea2-e51075d8b99e", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + }, + { + "id": "61b6ab53-b4fa-4a30-9cc7-891a18c7bff1", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "f2740659-c07d-4eab-bd59-4eaddac42072", + "name": "Client ID", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientId", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientId", + "jsonType.label": "String" + } + }, + { + "id": "82cf5d6d-2c1d-4f20-978f-8b03c486e95c", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "1a91df5a-3a81-4864-a59a-c505d7cfa5aa", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + } + ], + "defaultClientScopes": [ + "web-origins", + "role_list", + "roles", + "profile", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access" + ], + "authorizationSettings": { + "allowRemoteResourceManagement": true, + "policyEnforcementMode": "ENFORCING", + "resources": [], + "policies": [], + "scopes": [] + } + }, + { + "id": "f57820f9-eaf8-45bf-a7a5-f50c6139d163", + "clientId": "broker", + "name": "${client_broker}", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "**********", + "redirectUris": [], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "protocolMappers": [ + { + "id": "ced2e9ae-5e45-4595-a4fb-662a930ad44c", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": false, + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "8626d605-f496-4f03-a8c4-7a9a588fef74", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "b29ba565-c9d4-44e9-a586-c6396e5f8b19", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "e4da074c-216b-4c1c-bfab-e7bb23f957c8", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + }, + { + "id": "19750293-d649-4448-b3e0-e8936a9c4d02", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "587d1e5b-b782-4a7b-867e-d7132f6b0365", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + } + ], + "defaultClientScopes": [ + "web-origins", + "role_list", + "roles", + "profile", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access" + ] + }, + { + "id": "e0dc6252-b7c1-458e-ada5-157410d154c0", + "clientId": "dashboard", + "name": "Dashboard", + "description": "A dashboard service based on Grafana.", + "rootUrl": "http://grafana", + "adminUrl": "http://grafana", + "baseUrl": "/", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "**********", + "redirectUris": [ + "http://grafana/login/generic_oauth" + ], + "webOrigins": [ + "http://grafana" + ], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": true, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "exclude.session.state.from.auth.response": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "tls.client.certificate.bound.access.tokens": "false", + "saml.authnstatement": "false", + "display.on.consent.screen": "false", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": -1, + "protocolMappers": [ + { + "id": "83c86cfe-4823-401c-85e3-20797f0341ae", + "name": "Client ID", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientId", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientId", + "jsonType.label": "String" + } + }, + { + "id": "3b96ab5e-5825-4511-a33e-34393d8c586d", + "name": "Client Host", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientHost", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientHost", + "jsonType.label": "String" + } + }, + { + "id": "ba4c8450-b69d-4b1b-abaf-e69f426e9ab4", + "name": "Client IP Address", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientAddress", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientAddress", + "jsonType.label": "String" + } + } + ], + "defaultClientScopes": [ + "web-origins", + "tenants", + "role_list", + "roles", + "profile", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access" + ] + }, + { + "id": "b71dc3fb-86ca-4b4e-850d-a65f8fcbe1b8", + "clientId": "elk", + "rootUrl": "http://monitoring", + "adminUrl": "http://monitoring", + "baseUrl": "/", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "**********", + "redirectUris": [ + "http://monitoring/*" + ], + "webOrigins": [ + "http://monitoring" + ], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "exclude.session.state.from.auth.response": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "tls.client.certificate.bound.access.tokens": "false", + "saml.authnstatement": "false", + "display.on.consent.screen": "false", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": { + "browser": "345760b1-8450-46bd-9959-dc9d773925b9" + }, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": -1, + "protocolMappers": [ + { + "id": "038864cd-ad20-4008-9d9d-90144131c143", + "name": "Client ID", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientId", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientId", + "jsonType.label": "String" + } + }, + { + "id": "d5b0951f-814e-498f-b04d-17077733c2e5", + "name": "Client IP Address", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientAddress", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientAddress", + "jsonType.label": "String" + } + }, + { + "id": "7f3a1b15-71d7-4823-b212-df88e6e7482a", + "name": "Client Host", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientHost", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientHost", + "jsonType.label": "String" + } + } + ], + "defaultClientScopes": [ + "role_list", + "profile", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access" + ] + }, + { + "id": "33882b83-3e13-469e-9930-3a09fd29eff2", + "clientId": "security-admin-console", + "name": "${client_security-admin-console}", + "baseUrl": "/auth/admin/default/console/index.html", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "**********", + "redirectUris": [ + "/auth/admin/default/console/*" + ], + "webOrigins": [ + "" + ], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "saml.authnstatement": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "protocolMappers": [ + { + "id": "f43f8aa2-8bf3-4c08-92e6-3b3faf6264ef", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "id": "4809ca32-14e4-4cd9-bfa2-4ab46340d6cc", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + }, + { + "id": "fedab3a4-3c2f-4cf6-8a1f-9d565aa72ce4", + "name": "groups", + "protocol": "openid-connect", + "protocolMapper": "oidc-group-membership-mapper", + "consentRequired": false, + "config": { + "full.path": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "groups", + "userinfo.token.claim": "true" + } + }, + { + "id": "1364cb98-34d1-448d-a5f4-7df63aa61935", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": false, + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "a8afee75-aab1-46f8-b77a-18beba1769da", + "name": "locale", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "locale", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "locale", + "jsonType.label": "String" + } + }, + { + "id": "ede0b2c7-af1f-4ea4-84e2-4008e7f2a644", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "0f10f9a3-e09b-45c6-82d3-3289e7cce9c1", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "88fce908-dce6-4d0a-abfe-caa6e4e5d3dd", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + } + ], + "defaultClientScopes": [ + "web-origins", + "role_list", + "roles", + "profile", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access" + ] + }, + { + "id": "9bb1aacb-ba54-47ab-ae2d-1413d590f16a", + "clientId": "kubernetes", + "rootUrl": "http://k8s", + "adminUrl": "http://k8s", + "baseUrl": "/", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "**********", + "redirectUris": [ + "http://k8s" + ], + "webOrigins": [ + "http://k8s" + ], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": true, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": true, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "exclude.session.state.from.auth.response": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "tls.client.certificate.bound.access.tokens": "false", + "saml.authnstatement": "false", + "display.on.consent.screen": "false", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": -1, + "protocolMappers": [ + { + "id": "3e4f2eeb-d3ef-4aab-809b-489abf7feb5d", + "name": "Client IP Address", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientAddress", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientAddress", + "jsonType.label": "String" + } + }, + { + "id": "97cd0b85-23f8-4537-b2a3-edd250770817", + "name": "Client Host", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientHost", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientHost", + "jsonType.label": "String" + } + }, + { + "id": "9b429ab4-6ab6-4be1-9446-34bbeb1be5dc", + "name": "groups", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-client-role-mapper", + "consentRequired": false, + "config": { + "usermodel.clientRoleMapping.rolePrefix": "oidc:", + "multivalued": "true", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "groups", + "usermodel.clientRoleMapping.clientId": "kubernetes" + } + }, + { + "id": "9d57205e-e837-4093-8cf9-349fdedcd0d0", + "name": "Client ID", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientId", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientId", + "jsonType.label": "String" + } + }, + { + "id": "a4d3d0f9-cb27-4951-8652-93d009a3d36e", + "name": "audience", + "protocol": "openid-connect", + "protocolMapper": "oidc-audience-mapper", + "consentRequired": false, + "config": { + "included.client.audience": "kubernetes", + "id.token.claim": "false", + "access.token.claim": "true", + "userinfo.token.claim": "false" + } + } + ], + "defaultClientScopes": [ + "web-origins", + "role_list", + "roles", + "profile", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access" + ] + }, + { + "id": "33465fa4-5940-403e-929c-e7516e46422e", + "clientId": "resource_server", + "rootUrl": "https://admin.ekz.orchestracities.com/", + "adminUrl": "https://admin.ekz.orchestracities.com/", + "baseUrl": "", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "98dabcef-960a-4474-8c11-e8807a92ec94", + "defaultRoles": [ + "uma_protection" + ], + "redirectUris": [ + "https://admin.ekz.orchestracities.com/*" + ], + "webOrigins": [ + "*", + "+" + ], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "access.token.lifespan": "36000", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "exclude.session.state.from.auth.response": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "tls.client.certificate.bound.access.tokens": "false", + "saml.authnstatement": "false", + "display.on.consent.screen": "false", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": -1, + "protocolMappers": [ + { + "id": "7ac82ecc-33b1-4656-b873-0c0f79a265ea", + "name": "Client IP Address", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientAddress", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientAddress", + "jsonType.label": "String" + } + }, + { + "id": "ce03b89a-738d-4ae8-9fea-5c3831369b97", + "name": "Client Host", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientHost", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientHost", + "jsonType.label": "String" + } + }, + { + "id": "014cc898-02a9-40cb-a7c3-430b4e7b76b3", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "876964fb-3f38-4cfc-8a16-ba1b1cbc6452", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "id": "c1e5388d-bbe0-4b10-92f1-e90c159d93d4", + "name": "Client ID", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientId", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientId", + "jsonType.label": "String" + } + } + ], + "defaultClientScopes": [ + "tenants", + "role_list", + "roles" + ], + "optionalClientScopes": [ + "entity:write", + "entity:op", + "device:read", + "devicegroup:write", + "entitytype:read", + "device:create", + "registration:write", + "subscription:read", + "registration:create", + "device:write", + "offline_access", + "entity:read", + "devicegroup:create", + "registration:delete", + "devicegroup:read", + "address", + "device:delete", + "entity:delete", + "devicegroup:delete", + "subscription:create", + "registration:read", + "entity:create", + "phone", + "device:data", + "permanent", + "subscription:write", + "subscription:delete" + ] + }, + { + "id": "e4c0847a-5ae8-40e5-8f62-d3398403ccde", + "clientId": "crate", + "rootUrl": "https://crate.ekz.orchestracities.com/", + "adminUrl": "https://crate.ekz.orchestracities.com/", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "**********", + "redirectUris": [ + "*" + ], + "webOrigins": [ + "https://crate.ekz.orchestracities.com/" + ], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": true, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "exclude.session.state.from.auth.response": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "tls.client.certificate.bound.access.tokens": "false", + "saml.authnstatement": "false", + "display.on.consent.screen": "false", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": { + "browser": "345760b1-8450-46bd-9959-dc9d773925b9" + }, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": -1, + "protocolMappers": [ + { + "id": "20b18df7-6626-4714-90af-21e613576efc", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": false, + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "da0878c0-30de-4e64-90e1-5c48cd4609ce", + "name": "Client Host", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientHost", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientHost", + "jsonType.label": "String" + } + }, + { + "id": "3ee85f68-9c70-450a-bab4-24f95622c742", + "name": "Client IP Address", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientAddress", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientAddress", + "jsonType.label": "String" + } + }, + { + "id": "08029451-5d2f-432b-8940-f97a5e61fbe5", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + }, + { + "id": "38853058-f3a9-49fa-9985-8eb152de463c", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "id": "9d98aa88-421d-4a1d-abf1-9b90aa0dae33", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "cc3ef5ab-76c6-4100-8db9-8397e2903301", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "7ab34f88-085b-4432-9c8e-366144dd312b", + "name": "Client ID", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientId", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientId", + "jsonType.label": "String" + } + }, + { + "id": "9c3ff6d7-21d7-4cbd-964e-1ba91633af52", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + } + ], + "defaultClientScopes": [ + "web-origins", + "role_list", + "roles", + "profile", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access" + ] + }, + { + "id": "d7d1978d-1a35-4415-8fdb-ee0f91ea51e7", + "clientId": "portal", + "rootUrl": "https://admin.ekz.orchestracities.com/", + "adminUrl": "https://admin.ekz.orchestracities.com/", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "**********", + "redirectUris": [ + "https://admin.ekz.orchestracities.com/*", + "http://localhost:8000/*" + ], + "webOrigins": [ + "*" + ], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": true, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "exclude.session.state.from.auth.response": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "tls.client.certificate.bound.access.tokens": "false", + "saml.authnstatement": "false", + "display.on.consent.screen": "false", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": -1, + "defaultClientScopes": [ + "web-origins", + "tenants", + "role_list", + "roles", + "profile", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access" + ] + }, + { + "id": "7b9e74c9-a013-435c-8b33-27580bec716a", + "clientId": "pgadmin", + "rootUrl": "https://pgadmin.ekz.orchestracities.com/", + "adminUrl": "https://pgadmin.ekz.orchestracities.com/", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "**********", + "redirectUris": [ + "https://pgadmin.ekz.orchestracities.com/*" + ], + "webOrigins": [ + "https://pgadmin.ekz.orchestracities.com" + ], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "exclude.session.state.from.auth.response": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "tls.client.certificate.bound.access.tokens": "false", + "saml.authnstatement": "false", + "display.on.consent.screen": "false", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": { + "browser": "345760b1-8450-46bd-9959-dc9d773925b9" + }, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": -1, + "protocolMappers": [ + { + "id": "ef130892-78b0-44f8-8d8e-1fd9a51c12b9", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "7649054d-6c59-4c59-80d6-561a0dd17823", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "58eafc4b-97a4-41e5-86aa-14885a0c2600", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "00d00de1-cbea-46cd-80c9-2096f8b2b23c", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "id": "57100691-7c86-4546-9a51-b0e39fdffec7", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": false, + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "87efc17c-11d1-4f53-88af-2788807f9aa3", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + } + ], + "defaultClientScopes": [ + "web-origins", + "role_list", + "roles", + "profile", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access" + ] + }, + { + "id": "962ee4dd-e9d5-4ee8-ac19-153232ce6e60", + "clientId": "api", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "**********", + "redirectUris": [], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": false, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "access.token.lifespan": "36000", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "exclude.session.state.from.auth.response": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "tls.client.certificate.bound.access.tokens": "false", + "saml.authnstatement": "false", + "display.on.consent.screen": "false", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": true, + "nodeReRegistrationTimeout": -1, + "defaultClientScopes": [ + "tenants", + "profile", + "email" + ], + "optionalClientScopes": [ + "entity:write", + "entity:op", + "device:delete", + "device:read", + "entity:delete", + "devicegroup:write", + "entitytype:read", + "devicegroup:delete", + "device:create", + "registration:write", + "subscription:create", + "subscription:read", + "registration:create", + "registration:read", + "device:write", + "entity:create", + "device:data", + "offline_access", + "entity:read", + "devicegroup:create", + "registration:delete", + "subscription:write", + "subscription:delete", + "devicegroup:read" + ] + }, + { + "id": "a5d1fd7a-25b6-4a8f-970d-68a6170513c4", + "clientId": "account", + "name": "${client_account}", + "baseUrl": "/auth/realms/default/account", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "**********", + "defaultRoles": [ + "manage-account", + "view-profile" + ], + "redirectUris": [ + "/auth/realms/default/account/*" + ], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "protocolMappers": [ + { + "id": "be37ec8f-17ea-4afd-a56d-4e9951d07a75", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "747f2a52-81c2-436d-b988-8068e5f013c4", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "f92360e1-dabf-442f-8eb1-21070f04b4df", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "id": "32c75643-64b7-47c3-925b-48dde19d8cf4", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "509278ba-d804-415c-8bd5-3fa1598909bd", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": false, + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "deb7fd06-0aca-4a28-b165-977bda62556e", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + } + ], + "defaultClientScopes": [ + "web-origins", + "role_list", + "roles", + "profile", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access" + ] + }, + { + "id": "e3785d58-8ed2-4fa1-8cdc-8c2b4c2fc0a7", + "clientId": "admin-cli", + "name": "${client_admin-cli}", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "cc4ffe2a-c660-4547-b3b4-5d1c93305047", + "redirectUris": [ + "http://localhost:3000/*" + ], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": true, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": true, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "saml.authnstatement": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "protocolMappers": [ + { + "id": "1ed4a4d3-74e9-4f5c-ab81-541e754debee", + "name": "Client Host", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientHost", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientHost", + "jsonType.label": "String" + } + }, + { + "id": "40e4b3f9-f754-4385-ade5-e06c8ff51fce", + "name": "Client ID", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientId", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientId", + "jsonType.label": "String" + } + }, + { + "id": "a920f47f-b947-41a9-9d3a-748ad0b5492a", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "id": "570fa619-2fa0-44ca-930a-5cc297675d6b", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "8561afe3-f69e-4ae9-9fee-a4c8397605dd", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": false, + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "cba53562-097b-41e4-b9bd-7321a1949acd", + "name": "Client IP Address", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientAddress", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientAddress", + "jsonType.label": "String" + } + }, + { + "id": "d30b86b5-8728-4f1b-8427-e277be24e908", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + }, + { + "id": "a2b54975-1022-4088-8780-a674c3d2f15a", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "f40bf191-3ced-4274-a9a3-927647ee0bc2", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + } + ], + "defaultClientScopes": [ + "web-origins", + "tenants", + "role_list", + "roles", + "profile", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access" + ] + }, + { + "id": "f832d0a2-e2c1-4f88-bd9c-1ef764547760", + "clientId": "gravitee", + "name": "API Manager", + "description": "Provide supports for Orchestra Cities APIs Management", + "rootUrl": "http://gateway", + "adminUrl": "http://gateway", + "baseUrl": "/", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "**********", + "redirectUris": [ + "http://gateway" + ], + "webOrigins": [ + "*" + ], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": true, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": true, + "authorizationServicesEnabled": true, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "exclude.session.state.from.auth.response": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "tls.client.certificate.bound.access.tokens": "false", + "saml.authnstatement": "false", + "display.on.consent.screen": "false", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": -1, + "protocolMappers": [ + { + "id": "3f3c5efb-4902-4a87-b764-f9b2c81659a9", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + }, + { + "id": "7823772a-c33f-4e10-9f48-aea94d1b401f", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "bebd193e-a905-48be-911b-6a975d332bcd", + "name": "gravitee_roles", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-client-role-mapper", + "consentRequired": false, + "config": { + "multivalued": "true", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "roles", + "jsonType.label": "String", + "usermodel.clientRoleMapping.clientId": "gravitee" + } + }, + { + "id": "0722e7a3-5204-4a91-9446-6f2ce97f69df", + "name": "Client ID", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientId", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientId", + "jsonType.label": "String" + } + }, + { + "id": "a0aae497-253e-4d50-a6ef-ab69eca11d0a", + "name": "Client Host", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientHost", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientHost", + "jsonType.label": "String" + } + }, + { + "id": "ca43b0f2-89af-40e0-9e7e-0b796f8902ed", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "id": "451c71b5-b73f-42b8-b01f-31dda251585e", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": false, + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "576b8772-e6c6-40a8-9a09-cf7aadfcde1f", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "b7ab40d0-983a-44a4-bb63-592b42f74420", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "3961e0b8-0ab4-4d6f-91c4-94943806cb56", + "name": "Client IP Address", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientAddress", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientAddress", + "jsonType.label": "String" + } + }, + { + "id": "7c0d1e8c-8d08-49f4-af99-7f22fea96139", + "name": "picture", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "picture", + "id.token.claim": "false", + "access.token.claim": "false", + "claim.name": "picture", + "jsonType.label": "String" + } + } + ], + "defaultClientScopes": [ + "web-origins", + "role_list", + "tenant-names", + "roles", + "profile", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access" + ], + "authorizationSettings": { + "allowRemoteResourceManagement": true, + "policyEnforcementMode": "ENFORCING", + "resources": [], + "policies": [], + "scopes": [] + } + } + ], + "clientScopes": [ + { + "id": "2a26d1ac-7228-4382-b509-d016990ceebd", + "name": "address", + "description": "OpenID Connect built-in scope: address", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "true", + "consent.screen.text": "${addressScopeConsentText}" + }, + "protocolMappers": [ + { + "id": "dc87a472-a797-4958-9d86-61f3ff6169ed", + "name": "address", + "protocol": "openid-connect", + "protocolMapper": "oidc-address-mapper", + "consentRequired": false, + "config": { + "user.attribute.formatted": "formatted", + "user.attribute.country": "country", + "user.attribute.postal_code": "postal_code", + "userinfo.token.claim": "true", + "user.attribute.street": "street", + "id.token.claim": "true", + "user.attribute.region": "region", + "access.token.claim": "true", + "user.attribute.locality": "locality" + } + } + ] + }, + { + "id": "7ef9bd0d-65d7-4ab2-8bdd-a78c91d7cd97", + "name": "device:create", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "3593b53f-b2ec-4992-819d-e79be23661d2", + "name": "device:data", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "f92f5650-f38e-4b52-923a-bf7dd51c72fa", + "name": "device:delete", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "1208e15a-9c4c-4550-93ae-e35288e030f0", + "name": "device:read", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "b1d5eb90-7cb5-47f5-9723-e871331fe6ff", + "name": "device:write", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "3bbb822a-f7f4-4af2-b2b9-69c013929948", + "name": "devicegroup:create", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "597e30c6-8d3e-474e-9612-7b33c6ba9f97", + "name": "devicegroup:delete", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "be8716ec-d8e7-44a1-860c-27e1e5ddaef9", + "name": "devicegroup:read", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "6462fad1-34a8-445b-b7d8-9cb3abb9ebfd", + "name": "devicegroup:write", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "2e1d0de0-75cd-49d6-b11e-f8a4be2086ee", + "name": "email", + "description": "OpenID Connect built-in scope: email", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "true", + "consent.screen.text": "${emailScopeConsentText}" + }, + "protocolMappers": [ + { + "id": "af550d36-6b01-4362-be4b-efd0cc32cfe5", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + }, + { + "id": "185f760e-2118-455e-b4cc-874f3dadb279", + "name": "email verified", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "emailVerified", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email_verified", + "jsonType.label": "boolean" + } + } + ] + }, + { + "id": "56ca7d8e-06fd-45f1-8d9e-88c5509f749b", + "name": "entity:create", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "4a389dbf-3462-4b0c-ac21-c1c1b2680ffa", + "name": "entity:delete", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "5671c575-3a07-493c-8e4f-329857d52a60", + "name": "entity:op", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "fd967cea-9b9d-497e-b16b-8d74f1e3e02d", + "name": "entity:read", + "description": "entity:read", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "e96ad378-a577-4013-91ff-e42449f56a54", + "name": "entity:write", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "cf10d594-c01b-4af5-a245-0af49ae4d49d", + "name": "entitytype:read", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "eb29b410-ad2b-4e53-aece-33d113b8473b", + "name": "offline_access", + "description": "OpenID Connect built-in scope: offline_access", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false", + "consent.screen.text": "${offlineAccessScopeConsentText}" + } + }, + { + "id": "a215960e-b359-44b2-b6df-d7c275d275a3", + "name": "permanent", + "description": "permanent token scope", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "93345b79-233c-47b5-8edb-70a1e5ecbd56", + "name": "phone", + "description": "OpenID Connect built-in scope: phone", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "true", + "consent.screen.text": "${phoneScopeConsentText}" + }, + "protocolMappers": [ + { + "id": "293f6040-025b-4a22-8adb-6e50f9ce7cc2", + "name": "phone number verified", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "phoneNumberVerified", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "phone_number_verified", + "jsonType.label": "boolean" + } + }, + { + "id": "76c1afc0-ba62-47c5-b16a-d94d7ae27998", + "name": "phone number", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "phoneNumber", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "phone_number", + "jsonType.label": "String" + } + } + ] + }, + { + "id": "7c481106-2e22-4cd6-ade5-74278298b03f", + "name": "profile", + "description": "OpenID Connect built-in scope: profile", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "true", + "consent.screen.text": "${profileScopeConsentText}" + }, + "protocolMappers": [ + { + "id": "6a021b1f-7014-471a-97dc-092ecfa4de7c", + "name": "locale", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "locale", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "locale", + "jsonType.label": "String" + } + }, + { + "id": "9594b2d5-0109-40de-ad60-55903bd1360a", + "name": "website", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "website", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "website", + "jsonType.label": "String" + } + }, + { + "id": "6b91d9c7-728c-46ac-932e-f923910bcda5", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "937fa60a-5ba3-4008-a747-a0f09587d14f", + "name": "updated at", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "updatedAt", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "updated_at", + "jsonType.label": "String" + } + }, + { + "id": "8dc71291-dba1-48a3-9f96-b5428f59b1de", + "name": "birthdate", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "birthdate", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "birthdate", + "jsonType.label": "String" + } + }, + { + "id": "2f9f382d-371a-429f-a3f7-3c57cb9b4e9c", + "name": "nickname", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "nickname", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "nickname", + "jsonType.label": "String" + } + }, + { + "id": "60931275-f876-48f4-8e51-69e09ecf0dfc", + "name": "picture", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "picture", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "picture", + "jsonType.label": "String" + } + }, + { + "id": "ac0668f8-94a9-47f8-bc0a-1ddaf9bb2c1b", + "name": "gender", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "gender", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "gender", + "jsonType.label": "String" + } + }, + { + "id": "bce0e873-d421-49ca-9d5b-8c6b932bd8d6", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "1e4ef3d8-ca00-4f26-bb5a-0de1d987ba75", + "name": "profile", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "profile", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "profile", + "jsonType.label": "String" + } + }, + { + "id": "ca5be252-b2f6-4840-a44c-b6086c108246", + "name": "zoneinfo", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "zoneinfo", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "zoneinfo", + "jsonType.label": "String" + } + }, + { + "id": "125ac921-7e36-43d4-893e-d2189313280b", + "name": "middle name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "middleName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "middle_name", + "jsonType.label": "String" + } + }, + { + "id": "c7efac73-9992-4bee-8e85-d4f0ba1f8b70", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": false, + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "1149607e-6141-479a-9e24-0ec2e6d335e3", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + } + ] + }, + { + "id": "47688269-ca66-4b38-9223-e8c6cbe07ad3", + "name": "registration:create", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "22f892ba-6b68-449d-a8f8-0bc187533899", + "name": "registration:delete", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "b3a5b290-97e7-4853-b666-ab56e651f866", + "name": "registration:read", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "4426b8c9-25bc-4763-b227-3d651bd8bc1a", + "name": "registration:write", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "8e60b1a3-0667-4b57-9656-5b4bc972bf4a", + "name": "role_list", + "description": "SAML role list", + "protocol": "saml", + "attributes": { + "consent.screen.text": "${samlRoleListScopeConsentText}", + "display.on.consent.screen": "true" + }, + "protocolMappers": [ + { + "id": "9a46007a-f9fe-4c84-90ec-c36f0d72bf0e", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + } + ] + }, + { + "id": "5cfa020f-43b4-494e-b558-12fda7197740", + "name": "roles", + "description": "OpenID Connect scope for add user roles to the access token", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "false", + "display.on.consent.screen": "false", + "consent.screen.text": "${rolesScopeConsentText}" + }, + "protocolMappers": [ + { + "id": "be769674-1cc7-4ca0-8401-d0c8398a9a66", + "name": "audience resolve", + "protocol": "openid-connect", + "protocolMapper": "oidc-audience-resolve-mapper", + "consentRequired": false, + "config": {} + }, + { + "id": "d098f59d-7531-4524-a7e2-4d61980a8b8c", + "name": "realm roles", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-realm-role-mapper", + "consentRequired": false, + "config": { + "user.attribute": "foo", + "access.token.claim": "true", + "claim.name": "realm_access.roles", + "jsonType.label": "String", + "multivalued": "true" + } + }, + { + "id": "50a517a6-1140-4949-8f18-9ae8cb2b59fd", + "name": "client roles", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-client-role-mapper", + "consentRequired": false, + "config": { + "user.attribute": "foo", + "access.token.claim": "false", + "claim.name": "resource_access.${client_id}.roles", + "jsonType.label": "String", + "multivalued": "true" + } + } + ] + }, + { + "id": "db75d660-16db-40fe-8079-4570975474a3", + "name": "subscription:create", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "df9ab33c-a369-4ca3-90b9-58d37cdeeece", + "name": "subscription:delete", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "f42bd9f6-484c-45cc-9e00-ddc9dd69f267", + "name": "subscription:read", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "3606b4d9-890d-48cc-8c0c-f6ed9f7ea414", + "name": "subscription:write", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + } + }, + { + "id": "10922371-af9f-442b-bb75-381970e6bd9a", + "name": "tenant-names", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + }, + "protocolMappers": [ + { + "id": "ac4f325f-a613-420d-88cb-96c1f08c790d", + "name": "only-tenants-names", + "protocol": "openid-connect", + "protocolMapper": "oidc-script-based-protocol-mapper", + "consentRequired": false, + "config": { + "id.token.claim": "false", + "access.token.claim": "false", + "claim.name": "tenants", + "script": "var HashMap = Java.type('java.util.HashMap');\nvar HashSet = Java.type('java.util.HashSet');\nvar ArrayList = Java.type('java.util.ArrayList');\nvar ModelToRepresentation = Java.type('org.keycloak.models.utils.ModelToRepresentation');\nvar groups = user.getGroups();\nvar tenants = new ArrayList();\n\ngroups.forEach(scanTenant);\n\nfunction scanTenant(group){\n if ( isTenant(group)===true ) {\n found = getTenant(group.getName());\n if ( !found ) {\n tenants.add(group.getName());\n }\n } else if( group !== null && group.getParent() !== null ) {\n scanTenant(group.getParent());\n }\n}\n\nfunction getTenant(name){\n for (i= 0; iEKZ Smart City", + "failureFactor": "5", + "actionTokenGeneratedByUserLifespan": "300", + "maxDeltaTimeSeconds": "43200", + "_browser_header.xContentTypeOptions": "nosniff", + "offlineSessionMaxLifespan": "5184000", + "actionTokenGeneratedByAdminLifespan": "43200", + "_browser_header.contentSecurityPolicyReportOnly": "", + "bruteForceProtected": "true", + "_browser_header.contentSecurityPolicy": "frame-src 'self'; frame-ancestors 'self'; object-src 'none';", + "waitIncrementSeconds": "1800", + "offlineSessionMaxLifespanEnabled": "false" + }, + "keycloakVersion": "5.0.0", + "userManagedAccessAllowed": false +} From 176e825e77d61521170886ac9cbc7ffd9c505793 Mon Sep 17 00:00:00 2001 From: cerfoglg Date: Thu, 6 Aug 2020 16:02:01 +0200 Subject: [PATCH 02/16] iot agent and manager config, mongodump for gravitee config --- deploy/docker-compose.yaml | 25 +- deploy/iotagent-ul-config.js | 247 +++ deploy/mongodump/gravitee/apiheaders.bson | Bin 0 -> 969 bytes .../gravitee/apiheaders.metadata.json | 1 + deploy/mongodump/gravitee/apis.bson | Bin 0 -> 18866 bytes deploy/mongodump/gravitee/apis.metadata.json | 1 + deploy/mongodump/gravitee/applications.bson | Bin 0 -> 264 bytes .../gravitee/applications.metadata.json | 1 + deploy/mongodump/gravitee/audits.bson | Bin 0 -> 391232 bytes .../mongodump/gravitee/audits.metadata.json | 1 + deploy/mongodump/gravitee/events.bson | Bin 0 -> 57319 bytes .../mongodump/gravitee/events.metadata.json | 1 + deploy/mongodump/gravitee/groups.bson | Bin 0 -> 519 bytes .../mongodump/gravitee/groups.metadata.json | 1 + .../gravitee/identity_providers.bson | Bin 0 -> 1914 bytes .../gravitee/identity_providers.metadata.json | 1 + deploy/mongodump/gravitee/memberships.bson | Bin 0 -> 2037 bytes .../gravitee/memberships.metadata.json | 1 + deploy/mongodump/gravitee/metadata.bson | Bin 0 -> 275 bytes .../mongodump/gravitee/metadata.metadata.json | 1 + deploy/mongodump/gravitee/pages.bson | Bin 0 -> 198810 bytes deploy/mongodump/gravitee/pages.metadata.json | 1 + deploy/mongodump/gravitee/plans.bson | Bin 0 -> 1637 bytes deploy/mongodump/gravitee/plans.metadata.json | 1 + deploy/mongodump/gravitee/ratelimit.bson | 0 .../gravitee/ratelimit.metadata.json | 1 + deploy/mongodump/gravitee/roles.bson | Bin 0 -> 3835 bytes deploy/mongodump/gravitee/roles.metadata.json | 1 + deploy/mongodump/gravitee/users.bson | Bin 0 -> 233 bytes deploy/mongodump/gravitee/users.metadata.json | 1 + deploy/mongodump/gravitee/views.bson | Bin 0 -> 183 bytes deploy/mongodump/gravitee/views.metadata.json | 1 + deploy/realm-export.json | 1803 ++++++++--------- 33 files changed, 1094 insertions(+), 996 deletions(-) create mode 100644 deploy/iotagent-ul-config.js create mode 100644 deploy/mongodump/gravitee/apiheaders.bson create mode 100644 deploy/mongodump/gravitee/apiheaders.metadata.json create mode 100644 deploy/mongodump/gravitee/apis.bson create mode 100644 deploy/mongodump/gravitee/apis.metadata.json create mode 100644 deploy/mongodump/gravitee/applications.bson create mode 100644 deploy/mongodump/gravitee/applications.metadata.json create mode 100644 deploy/mongodump/gravitee/audits.bson create mode 100644 deploy/mongodump/gravitee/audits.metadata.json create mode 100644 deploy/mongodump/gravitee/events.bson create mode 100644 deploy/mongodump/gravitee/events.metadata.json create mode 100644 deploy/mongodump/gravitee/groups.bson create mode 100644 deploy/mongodump/gravitee/groups.metadata.json create mode 100644 deploy/mongodump/gravitee/identity_providers.bson create mode 100644 deploy/mongodump/gravitee/identity_providers.metadata.json create mode 100644 deploy/mongodump/gravitee/memberships.bson create mode 100644 deploy/mongodump/gravitee/memberships.metadata.json create mode 100644 deploy/mongodump/gravitee/metadata.bson create mode 100644 deploy/mongodump/gravitee/metadata.metadata.json create mode 100644 deploy/mongodump/gravitee/pages.bson create mode 100644 deploy/mongodump/gravitee/pages.metadata.json create mode 100644 deploy/mongodump/gravitee/plans.bson create mode 100644 deploy/mongodump/gravitee/plans.metadata.json create mode 100644 deploy/mongodump/gravitee/ratelimit.bson create mode 100644 deploy/mongodump/gravitee/ratelimit.metadata.json create mode 100644 deploy/mongodump/gravitee/roles.bson create mode 100644 deploy/mongodump/gravitee/roles.metadata.json create mode 100644 deploy/mongodump/gravitee/users.bson create mode 100644 deploy/mongodump/gravitee/users.metadata.json create mode 100644 deploy/mongodump/gravitee/views.bson create mode 100644 deploy/mongodump/gravitee/views.metadata.json diff --git a/deploy/docker-compose.yaml b/deploy/docker-compose.yaml index 9e2b175..6c03bba 100644 --- a/deploy/docker-compose.yaml +++ b/deploy/docker-compose.yaml @@ -16,6 +16,9 @@ services: - cluster.name=elasticsearch - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" + ports: + - 9200:9200 + - 9300:9300 ulimits: memlock: soft: -1 @@ -23,9 +26,10 @@ services: nofile: 65536 networks: - storage + - frontend gateway: - image: graviteeio/gateway:${APIM_VERSION:-1} + image: graviteeio/gateway:${APIM_VERSION:-1.23.1} container_name: gio_apim_gateway restart: always ports: @@ -44,7 +48,7 @@ services: - frontend management_api: - image: graviteeio/management-api:${APIM_VERSION:-1} + image: graviteeio/management-api:${APIM_VERSION:-1.23.1} container_name: gio_apim_management_api restart: always ports: @@ -65,7 +69,7 @@ services: - frontend management_ui: - image: graviteeio/management-ui:${APIM_VERSION:-1} + image: graviteeio/management-ui:${APIM_VERSION:-1.23.1} container_name: gio_apim_management_ui restart: always ports: @@ -100,6 +104,7 @@ services: - "27017:27017" volumes: - mongodata:/data/db + - ./mongodump:/home/dump networks: - storage @@ -147,6 +152,7 @@ services: image: fiware/iotagent-ul depends_on: - mongo + - iot-manager ports: - "4061:4061" - "7896:7896" @@ -160,6 +166,8 @@ services: - "IOTA_MONGO_DB=iotagent-ul" - "IOTA_HTTP_PORT=7896" - "IOTA_PROVIDER_URL=http://iot-agent:4061" + volumes: + - ./iotagent-ul-config.js:/opt/iotaul/config.js networks: - storage - frontend @@ -199,9 +207,9 @@ services: - KEYCLOAK_ADMIN_URI=http://keycloak:8080/auth/ - KEYCLOAK_ADMIN_CLIENT_ID=admin-cli - KEYCLOAK_ADMIN_CLIENT_SECRET=cc4ffe2a-c660-4547-b3b4-5d1c93305047 - - KEYCLOAK_ADMIN_USERNAME=portaladmin - - KEYCLOAK_ADMIN_PASSWORD=portaladminpass - - KEYCLOAK_OIDC_ENDPOINT=http://keycloak:8001/auth + - KEYCLOAK_ADMIN_USERNAME=admin + - KEYCLOAK_ADMIN_PASSWORD=password + - KEYCLOAK_OIDC_ENDPOINT=http://keycloak:8080/auth - KEYCLOAK_OIDC_REALM=default - KEYCLOAK_OIDC_AUTHORIZATION_ENDPOINT=http://keycloak:8080/auth/realms/default/protocol/openid-connect/auth - KEYCLOAK_OIDC_TOKEN_ENDPOINT=http://keycloak:8080/auth/realms/default/protocol/openid-connect/token @@ -212,7 +220,7 @@ services: - PORTAL_DB_NAME=portal - PORTAL_DB_USER=portal - PORTAL_DB_PASSWORD=password - - IOT_MANAGER_URI=http://iot-manager:8086 + - IOT_MANAGER_URI=http://iot-manager:8082 - CONTEXT_BROKER_URI=http://orion:1026 - QUANTUMLEAP_URI=http://quantumleap:8668 - GRAFANA_URL=# @@ -251,7 +259,7 @@ services: keycloak: image: jboss/keycloak:${KEYCLOAK_VERSION:-5.0.0} ports: - - "8001:8080" + - "8080:8080" volumes: - ./realm-export.json:/tmp/realm-export.json environment: @@ -262,6 +270,7 @@ services: - storage - frontend + volumes: portal_db: portal_staticfiles: diff --git a/deploy/iotagent-ul-config.js b/deploy/iotagent-ul-config.js new file mode 100644 index 0000000..d8d2d3a --- /dev/null +++ b/deploy/iotagent-ul-config.js @@ -0,0 +1,247 @@ +/* + * Copyright 2015 Telefonica Investigación y Desarrollo, S.A.U + * + * This file is part of iotagent-mqtt + * + * iotagent-mqtt is free software: you can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the License, + * or (at your option) any later version. + * + * iotagent-mqtt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public + * License along with iotagent-mqtt. + * If not, seehttp://www.gnu.org/licenses/. + * + * For those usages not covered by the GNU Affero General Public License + * please contact with::[contacto@tid.es] + */ +var config = {}; + +/** + * Configuration for the MQTT binding. + */ +config.mqtt = { + /** + * Host where the MQTT Broker is located. + */ + host: 'localhost', + + /** + * Port where the MQTT Broker is listening + */ + port: 1883, + + /** + * User name for the IoTAgent in the MQTT broker, if authentication is activated. + */ + //username: '' + + /** + * Password for the IoTAgent in the MQTT broker, if authentication is activated. + */ + //password: '' + + /** + * QoS Level: at most once (0), at least once (1), exactly once (2). (default is 2). + */ + qos: 0, + + /** + * Retain flag. (default is true). + */ + retain: false +}; + +config.amqp = { + host: 'localhost', + port: 5672, + // username: 'guest', + // password: 'guest', + exchange: 'iota-exchange', + queue: 'iotaqueue', + options: {durable: true} +}; + +/** + * Conmfiguration for the HTTP transport binding. + */ +config.http = { + /** + * South Port where the Ultralight transport binding for HTTP will be listening for device requests. + */ + port: 7896, + /** + * HTTP Timeout for the http command endpoint (in miliseconds). + */ + //timeout: 1000 +}; + +config.iota = { + /** + * Configures the log level. Appropriate values are: FATAL, ERROR, INFO, WARN and DEBUG. + */ + logLevel: 'DEBUG', + + /** + * When this flag is active, the IoTAgent will add the TimeInstant attribute to every entity created, as well + * as a TimeInstant metadata to each attribute, with the current timestamp. + */ + timestamp: true, + + /** + * Context Broker configuration. Defines the connection information to the instance of the Context Broker where + * the IoT Agent will send the device data. + */ + contextBroker: { + /** + * Host where the Context Broker is located. + */ + host: 'localhost', + + /** + * Port where the Context Broker is listening. + */ + port: '1026' + }, + + /** + * Configuration of the North Port of the IoT Agent. + */ + server: { + /** + * Port where the IoT Agent will be listening for NGSI and Provisioning requests. + */ + port: 4061 + }, + + /** + * Configuration for the IoT Manager. If the IoT Agent is part of a configuration composed of multiple IoTAgents + * coordinated by an IoT Manager, this section defines the information that will be used to connect with that manager. + */ + iotManager: { + /** + * Host where the IoT Manager is located. + */ + host: 'iot-manager', + + /** + * Port where the IoT Manager is listening. + */ + port: 8082, + + /** + * Path where the IoT Manager accepts subscriptions. + */ + path: '/iot/protocols', + + /** + * Protocol code identifying this IoT Agent. + */ + protocol: 'MQTT_UL', + + /** + * Textual description of this IoT Agent. + */ + description: 'MQTT Ultralight 2.0 IoT Agent (Node.js version)', + transports: ['HTTP'] + }, + + /** + * Default resource of the IoT Agent. This value must be different for every IoT Agent connecting to the IoT + * Manager. + */ + defaultResource: '/iot/d', + + /** + * Defines the configuration for the Device Registry, where all the information about devices and configuration + * groups will be stored. There are currently just two types of registries allowed: + * + * - 'memory': transient memory-based repository for testing purposes. All the information in the repository is + * wiped out when the process is restarted. + * + * - 'mongodb': persistent MongoDB storage repository. All the details for the MongoDB configuration will be read + * from the 'mongoDb' configuration property. + */ + deviceRegistry: { + type: 'mongodb' + }, + + /** + * Mongo DB configuration section. This section will only be used if the deviceRegistry property has the type + * 'mongodb'. + */ + mongodb: { + /** + * Host where MongoDB is located. If the MongoDB used is a replicaSet, this property will contain a + * comma-separated list of the instance names or IPs. + */ + host: 'localhost', + + /** + * Port where MongoDB is listening. In the case of a replicaSet, all the instances are supposed to be listening + * in the same port. + */ + port: '27017', + + /** + * Name of the Mongo database that will be created to store IoT Agent data. + */ + db: 'iotagentul' + + /** + * Name of the set in case the Mongo database is configured as a Replica Set. Optional otherwise. + */ + //replicaSet: '' + }, + + /** + * Types array for static configuration of services. Check documentation in the IoT Agent Library for Node.js for + * further details: + * + * https://github.com/telefonicaid/iotagent-node-lib#type-configuration + */ + types: {}, + + /** + * Default service, for IoT Agent installations that won't require preregistration. + */ + service: 'howtoService', + + /** + * Default subservice, for IoT Agent installations that won't require preregistration. + */ + subservice: '/howto', + + /** + * URL Where the IoT Agent Will listen for incoming updateContext and queryContext requests (for commands and passive + * attributes). This URL will be sent in the Context Registration requests. + */ + providerUrl: 'http://localhost:4061', + + /** + * Default maximum expire date for device registrations. + */ + deviceRegistrationDuration: 'P1Y', + + /** + * Default type, for IoT Agent installations that won't require preregistration. + */ + defaultType: 'Thing' +}; + +/** + * Default API Key, to use with device that have been provisioned without a Configuration Group. + */ +config.defaultKey = 'TEF'; + +/** + * Default transport protocol when no transport is provisioned through the Device Provisioning API. + */ +config.defaultTransport = 'MQTT'; + +module.exports = config; diff --git a/deploy/mongodump/gravitee/apiheaders.bson b/deploy/mongodump/gravitee/apiheaders.bson new file mode 100644 index 0000000000000000000000000000000000000000..e36c06f62f6481dd1050aeddca654fbb93bd3ab6 GIT binary patch literal 969 zcmcJN!H&}~5I{}fvWOK6H#mXBN^r21q-o-w(B680g+Hjq@w96xu`MSp8?E>@erN9- zxH8^NszT4bdEU%;^fYtN7)w@0vrBr&YN2G7BcI7K=S5X5cmzDh2qeYp8A~j*$X-x6 zcq4WgI^!%$cF=5*y(IkM?jZ4#UAUkzuqTu`s{=xh`l@I5ua>_$VrN^g|3k^DZlLSf zk~)kNn*cl0BZ`3Db*6V=5UsNtr24mbbd-PlApbGmfkxlBAtpb^yZ!Wjul?*_?bWgNgifOU7Z%PViU0rr literal 0 HcmV?d00001 diff --git a/deploy/mongodump/gravitee/apiheaders.metadata.json b/deploy/mongodump/gravitee/apiheaders.metadata.json new file mode 100644 index 0000000..b6fde78 --- /dev/null +++ b/deploy/mongodump/gravitee/apiheaders.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":1,"key":{"_id":1},"name":"_id_","ns":"gravitee.apiheaders"}]} \ No newline at end of file diff --git a/deploy/mongodump/gravitee/apis.bson b/deploy/mongodump/gravitee/apis.bson new file mode 100644 index 0000000000000000000000000000000000000000..159c962513a53f8695b66ae81e0abd61bf06248f GIT binary patch literal 18866 zcmeGkT~p)8QK9m+_i~SUotjI|kVEpv@?m^+4+eY-$u4l%>{SI*l#s?oL6#J0#4e%u zbC+L`%2OUvdCLDt_smEh37f?nx3G2I2iBVD>FMri&GgskEj5gVQ_nU2U>L^QYU5>X zA~!n-9WxWF?o5 z<@jmBS#0^CWBaZ3=EfQ_q+@%>yy3aPR+sb(9?op%B8_kkjWf~1uOcbmonG%iN8|

N$`iwxXKxXsgq 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

M_(LN8a&3a;2`qcms?L*D5 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 Awg3PC literal 0 HcmV?d00001 diff --git a/deploy/mongodump/gravitee/audits.metadata.json b/deploy/mongodump/gravitee/audits.metadata.json new file mode 100644 index 0000000..5501fe2 --- /dev/null +++ b/deploy/mongodump/gravitee/audits.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":1,"key":{"_id":1},"name":"_id_","ns":"gravitee.audits"}]} \ No newline at end of file diff --git a/deploy/mongodump/gravitee/events.bson b/deploy/mongodump/gravitee/events.bson new file mode 100644 index 0000000000000000000000000000000000000000..5a1420d3345e8546fbf877bc2bc10a28f96ce48d GIT binary patch literal 57319 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ⅈte(*k?wYL~c!pASX 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 inj7`@t>12-(KBAPvh`3)c~$f1++pm xVqGIE%TlpwBQ|UTti}nblpA#vuu2EKlG%rL^!@zri&|K{{d}KUn9;>8`~g6Np_Bjs literal 0 HcmV?d00001 diff --git a/deploy/mongodump/gravitee/groups.metadata.json b/deploy/mongodump/gravitee/groups.metadata.json new file mode 100644 index 0000000..9843140 --- /dev/null +++ b/deploy/mongodump/gravitee/groups.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":1,"key":{"_id":1},"name":"_id_","ns":"gravitee.groups"}]} \ No newline at end of file diff --git a/deploy/mongodump/gravitee/identity_providers.bson b/deploy/mongodump/gravitee/identity_providers.bson new file mode 100644 index 0000000000000000000000000000000000000000..4e03dc5ed10b5f9964223e2e77d3dc5455e94bc5 GIT binary patch literal 1914 zcmc&#OK;mo5T4NP!)Ol$dg?7e&`SY|lq@Ht0U!K`ZOZXOCM3JQ7|Y!uz0q=)T`rv} zzoNgWhy0ozdMMCCuN_jdkX!4*MW6#U-|T$f%y78#{tE!_RtnevfEmuYGHeE(W+ise z$qEu!b1N$+jfU^&@Pp_1d4)PTcwSj^F9llo5;e;d3V7zZd4=#99X?ME_F;`1oy(%J ztRpcVzS&ew2xUKZs+DqgO9QlyUH!nW28IMP;ORa7=M`&Q;q%pbTf~&eU!@3ZpP!jk^mh zGF8@rz??P81yq_d+^ArYn@@FUE@`BgYXcL{A75T}NkhipwXcq!+OkoRGGf4#Ied-pD5Mr z=6aN~tFb;wcjJq6S5J@P%}k0INTZ$Mb|kk3;V^u~BR`5>4*Vfv=0^nhJZgc6>@fcq z^5SUP{CKq$@_zm9I^|Vz5XQ;=Xp(J;Ceh)}<0WCu8ilJS{L+4c|I`Ft#`VqhS#~-N zABvXa$>mu(8OnUTvjZ;{g}2=vZ0{bNCTHOFyXNn})~;JnUlCNud(^j`=_$5!d`*s=l~T=@9xRzu@HxSY zf3QL8gEjIqISgLSOf6Z+<^%l$y) zpn@<1#|i@o34q8o5LC;I4QkA>#!@16-KMUi;fv_?Xm(*?cCtoxhnA9P9K9SS!|{x< zy}DXr!yf80&GSa$uMWf3^*q4a-x+$VV+Y!M#5ocExp|j-KBIBG($ZX32#}5%S04_D~srF?* zGIyyjO4CvNJetK53dWzzJkmEZ*#mkxhv_s)b)ltyAx75|5-kI#O7?u}W8c0yH- zmaWkALAikiPDqcC0GPf89@RYTr|UmeH3z@?syeh2syx@`X2^3u)Prc|lqv$ia}6@8 zg?mk^?!Wu?rI)G>?Sv|oo4FN81tf#J6U9 z*4+JSj=4q_x>C6Bc6%}>4m0RR_aEkAeCIU5>iuf0V1es|uzvn*`sZpc?q6hvF>q`2 vqz<3$RQcouuoWdYFS#x@<}_vZW+Nw_5Rt_CB&dmlb`HVz5LPkwXOid(!C6ra literal 0 HcmV?d00001 diff --git a/deploy/mongodump/gravitee/metadata.metadata.json b/deploy/mongodump/gravitee/metadata.metadata.json new file mode 100644 index 0000000..11b5b76 --- /dev/null +++ b/deploy/mongodump/gravitee/metadata.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":1,"key":{"_id":1},"name":"_id_","ns":"gravitee.metadata"}]} \ No newline at end of file diff --git a/deploy/mongodump/gravitee/pages.bson b/deploy/mongodump/gravitee/pages.bson new file mode 100644 index 0000000000000000000000000000000000000000..cd45bc91882fe4df0a1b8a62614bb6a276d6dd36 GIT binary patch literal 198810 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%0D2{@{(CoiC zy}a*~g$yvY3P&EtV|~p0mV~17aJCZ$Xz7|lRM1T^=(_LBfVChdx8vE!e~n}s(Foc> z>1)#{uF;i8A{bN}#bLVA2>+L1(sReqtj3>#K&M);7AJIMB@UX=Vun+&nH*c*0lv{@ zn8*gi0J+xeuuV9TipSNCE&(tibC6}lW+G3rzFC0$P5(+am78N;*W<4A6?YiS^on8V zgVhEiSC?QfWf4nkd33euTXHulsbrQnZ+TTbFt?yKu#$Gy%7^Kmjfa=|O==fCL{&rvJ9 zPX~Bcz0Ak`1kwc9EHHH=n38)?BEf`Kb{rG)Z`ouY!pg4NdA#*#%R(Eqq^%;K^#0C+i?xrHKSe8 z+Z+sJ3hKe5_Sbd@S^sk%q6!|0^Ord3LF`X@6{MlN+_C++m3e*289xEc{Ia+*bO3-D z=oyRK{#!ssv$5faV}R!OuK*39H1sn6R(Rm%AUM}IQ-oRJv4jQybLg_AJc!U+N}bO} z8Ln^zrUaMB*RV*#?hAXNJ9uELMjQmR>;|tK8wva3tnR51GLyu zmOjL8DR;McQxI`;6-{210?Hy@=K07DjWN{I{U49FTTdTu+g9&p7y!_Y$1tclP;<9C zhDC9TqIlGH9b(c*-&H$-ncfonLxc+~55>LOg~El-^P$nru?_QOSo^h^Uqvp^gP5ri zPDBR;psEqm^oCI>>k@tiR#?t z6ZSI3s7{5CoFh8&NfdaCKsQGv%_5|~*zVCAH9JU;YUfT5 z<8m22p`Qh7pvQ~WLC@!eFlwZqg;Syz=H)kPrJpN5jmvZL@p7L7_sq+8OLq{L_ZEKc zV-f%0*MPqc?9roB3$OHTFP%*Hs$xD(wDub^ANdn>FRy&g$tEAUsUU==K)QYC7CJKVzqhgpZTz*zB?cb-TY6BtP6EdU~{N> z^z`7_!O20*LpD>?Jp0|j-qV^#FOE(QUpzmqd3y44Z@+H9{TI)lAMDT1^`|*pO8}_3 zECL%zRI~bb+8D9)Nd-EE^c##*bE3^jrbGiRir=#UDq$O)Ez`yP!GN#;C(<{rFIqjA z$#JE5dS2wy=@6Die`PY$P>Q1t%vAB@fv{LUA7y%oz&|FDTE=!QhALz)q9AT~F4{Z# ziGoKS(Z3DP6(yVm8i8EHb3q}ot7-|9QVq{Vr^Wu%Ubu$ms^eV=b~nosQjZPKMNkNT zTB_l>K1QCa>Or~+-_;^fool}uE>p~VN78C+QL)Rp3L9kxF;k<1x5#{_hxgRPWF<6{ zTDF&`-ZxI+{1I^C{*Ic(3h4;M)j2NO(+-2VH$Y!`XK$E?HuEqmX*PeM7-r7C0as+> z0Z~|(B&(vq;Z+Sx$;sifm+hRQd;UtV~XjHlpZhwIducpVCxH^V8 z+Zv7=2hCF&Pygl)xZBMLNlf*m)Tc&{)m3H2K4p7ui9jI!HcA`1(I0}jHye0 z6adh+#(8-9pjP`G9f$;`3<-u}nvSI*SCJ>;nrIn5z=yP&y7L_uM51e;Zr+tM&)(4? ztiQ$O5ydMnIFoaz9p~Si$sci7?JkOSu&lJfR8;ngOzId{o)unkRR6mej%e1?$h4EeJ-3Y(o<$>H97JnvX-&Ov_V zaf2SN9Czc3AyRyie>vaDyx921jg5_O(yd-^Fc`G9A3jN14lMjG`wYo|XI;Erpc`_z=V-l31Yf7@zwV3xh_vXC zTQt0}&dRLyW~ap;y`8qYMgBT1+Ly^_xcRq@jlT=$^shYo;_`61@$c~~MYLfx^fwOv z#y4m(Qv#sc(9xcO^0mtm!cE#2`EXEnXT@2&pJB4e&Ak~X_GRyfR7uV!PmEag!b?0t&NTUA5IHm+5i9m literal 0 HcmV?d00001 diff --git a/deploy/mongodump/gravitee/pages.metadata.json b/deploy/mongodump/gravitee/pages.metadata.json new file mode 100644 index 0000000..867cab2 --- /dev/null +++ b/deploy/mongodump/gravitee/pages.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":1,"key":{"_id":1},"name":"_id_","ns":"gravitee.pages"}]} \ No newline at end of file diff --git a/deploy/mongodump/gravitee/plans.bson b/deploy/mongodump/gravitee/plans.bson new file mode 100644 index 0000000000000000000000000000000000000000..4ea016215e460573f6f3b3ee1c29620eb57e48ef GIT binary patch literal 1637 zcmc&!+iuf95M4}=XrK55YbD;|U^f?>yoJOx5p5DR&O-%NwcZ_0Zf2Y0Iw7bpF z0&rSZ%MRNXL&9o?ng|fHHUOHg?5{PA=$*XFG64@Q+SomVllMfLHI`U8)eC-qH@oGGv( z8B3+htf3V&c6A~6gAap{Nmw<)V z^}C$uyi66_jI%Mf=dpidqGA6S$Ei~$#0VH(bU}N1l3xsHp6sqkjlX6&;|dR~P?8r! zOO5O#0OAM)WKp{8EAsZ$hj#_u_(Pt?F(m2;&P$ntz(}40p1;@%+9@-X?KR3c|4VhqD35(DtAZpBTVGeZ^A)kz` zKD%r}0y{R;kyv?mVb$uHN0i8%+^50@sgRuLD={e%0wXJEAQ*k+I>mMAldi zgcFITvE4Q91rm_5Xn z@f+CBj_NHCz8AWY7j(02ue0Mdx3lfuf6BU@NCX|Hh4-4Gm8IsZ^c29nLU*2;9z;id zZEdEAnOI(74#xkH8yimU0yWViCz0hDnFZemAbm|kQYGDxW`{r;$5vTiBOom#Al1Ae za$5f)tr37`8BmSHWWqi!N!>)5lx|c>Hyd=4|X>zKhn_O3sGpKiVT%R0{2Uvf&ma^PMtp6jj5!2}v zy*3BG7}?A;UghB%k+a|hEd`jP#g_6yWO7!O;5|`Ygm))#S%Sw>fjL;0L(T+`e#gwi zC3Hi^wBU=pF2FK<%e2|VW)a>DxcE~VyejDizo5V;MjaXGP#5R%0X6E%zTa{i4uysW z>B_9iK`dRF1ih4aO%z$WNtJ$1!%`*Pux=_?2FZn0+J`ktr5b3BP;H#4v1+Bt@+?qG zY6@vdDcY<|R&A2q?=(AA(#`Ja5O!FKg+}bkE7i){z%k@9);HyG;!tsoIDw2EIDv$; zX*ssD$==Je<1Kb-Y)qSd%C^ju7~vxOe~Iy$Id;Bj@{mA}%b9^5mxIA9NY5ux&z()h zkSgg$Z4W`+Pv)aQ9VZaaLk8FrrUX=A@bL&N@`Nm<2H|`fnkwmrwx^)U5j2=UbX=}& zRI25TNA+Pzq*JGRtkZ*8BtytzwQ0$s5=9p3lrzbWGpQJ7QhF;E(_5iRy0@Y@WGnh( z_9(aF;DD9NjnmxXK~Ug1YqQ3Sa?U1Qe?Lu4m2^{^QPd354-1&i6`bTp;rjR-9=o3O On?$jlMxjc&QTzcSBm(gO literal 0 HcmV?d00001 diff --git a/deploy/mongodump/gravitee/roles.metadata.json b/deploy/mongodump/gravitee/roles.metadata.json new file mode 100644 index 0000000..38905c1 --- /dev/null +++ b/deploy/mongodump/gravitee/roles.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":1,"key":{"_id":1},"name":"_id_","ns":"gravitee.roles"}]} \ No newline at end of file diff --git a/deploy/mongodump/gravitee/users.bson b/deploy/mongodump/gravitee/users.bson new file mode 100644 index 0000000000000000000000000000000000000000..6b102e6954aecab4f57b5e589a751c377c21269d GIT binary patch literal 233 zcmXxdF%H5o3EMjvgG gx5|0$y=j$0#-1E;QkD}1#zAI=26c!O_Ma5M8*Qmb`2YX_ literal 0 HcmV?d00001 diff --git a/deploy/mongodump/gravitee/users.metadata.json b/deploy/mongodump/gravitee/users.metadata.json new file mode 100644 index 0000000..9dba94d --- /dev/null +++ b/deploy/mongodump/gravitee/users.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":1,"key":{"_id":1},"name":"_id_","ns":"gravitee.users"}]} \ No newline at end of file diff --git a/deploy/mongodump/gravitee/views.bson b/deploy/mongodump/gravitee/views.bson new file mode 100644 index 0000000000000000000000000000000000000000..1d51d36c3ace13bef61197bdb80ef5b990171fd8 GIT binary patch literal 183 zcmZ9GJr2S!429i_p=@xG+@WG&VP&mMZHlGDsT>!?2{;lXS0iO)dw-ww-T=@JLa?a< zV}w>Q@z3?ub;MU(qMwBy&~!H;Vg=Y`BeqHaY)4~srrzPTKYmJ6qh+SQs2#?LrNE&Q qlEY+p7iSK}b1vf9o*`wOGF?JK#fcNE2T^BJjI|? Date: Fri, 7 Aug 2020 10:43:46 +0200 Subject: [PATCH 03/16] gravitee db default config, deploy.sh for initializing db --- deploy/deploy.sh | 5 +++++ deploy/docker-compose.yaml | 1 - deploy/mongodump/gravitee/apiheaders.bson | Bin 969 -> 2907 bytes deploy/mongodump/gravitee/apis.bson | Bin 18866 -> 18822 bytes deploy/mongodump/gravitee/applications.bson | Bin 264 -> 853 bytes deploy/mongodump/gravitee/audits.bson | Bin 391232 -> 428254 bytes deploy/mongodump/gravitee/events.bson | Bin 57319 -> 86919 bytes deploy/mongodump/gravitee/groups.bson | Bin 519 -> 342 bytes .../gravitee/identity_providers.bson | Bin 1914 -> 1909 bytes deploy/mongodump/gravitee/metadata.bson | Bin 275 -> 275 bytes deploy/mongodump/gravitee/roles.bson | Bin 3835 -> 3835 bytes deploy/mongodump/gravitee/users.bson | Bin 233 -> 233 bytes deploy/mongodump/gravitee/views.bson | Bin 183 -> 183 bytes 13 files changed, 5 insertions(+), 1 deletion(-) mode change 100644 => 100755 deploy/deploy.sh diff --git a/deploy/deploy.sh b/deploy/deploy.sh old mode 100644 new mode 100755 index e69de29..6187959 --- a/deploy/deploy.sh +++ b/deploy/deploy.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +# Restore the gravitee db in Mongo with a default setup, apis and Oauth +docker cp ./mongodump deploy_mongo_1:/home/dump +docker exec -it deploy_mongo_1 mongorestore /home/dump diff --git a/deploy/docker-compose.yaml b/deploy/docker-compose.yaml index 6c03bba..d0842ea 100644 --- a/deploy/docker-compose.yaml +++ b/deploy/docker-compose.yaml @@ -104,7 +104,6 @@ services: - "27017:27017" volumes: - mongodata:/data/db - - ./mongodump:/home/dump networks: - storage diff --git a/deploy/mongodump/gravitee/apiheaders.bson b/deploy/mongodump/gravitee/apiheaders.bson index e36c06f62f6481dd1050aeddca654fbb93bd3ab6..b4f98cc12777d4b9a66ce2b96cecd3f00b2f80ae 100644 GIT binary patch delta 605 zcmZY7u};G<5C&kk84wa(iP+1)aFVaFV|!#`L}IAa2{}GnVyi^ic!?^nzyq-H2vA1W zzCd>-Hts4>sYF@wf0BPCf3i8*p5sm_HNJl!b;&n6cT~_LG?)-fBnJZEQ6O>d@)~by z`!@b~94U4Bw4}JobiGnS{jyrDcay2lP3b~O(4;1S388_G0ZJ0koRRvA(Otb5_6SK& zza34crKC35q9Hi#z}VD+XMmywh_luG*?3+*4~v8jMHzh)XMEfwoxvbF5P;MQ1kRoA zt7=}q42y)M=y)oMxfr7hw848Ynx85%fGz@=b1X8|?bY}Dzo~@&rlPJCBHoz~@YA^@ zQxO38&MJwk^!B!`)=0O(u(be7i-41htva@OsBs;^;@(4h#U3&}eJ)aJ+^ Y&+$LN0L}>oPGZ5_~dxc;LTx5tm-U%DO@K&JOE134}Aat delta 110 zcmZph%(!VXBV*V`#`TK9h71f0Oa=_9Kq|??!ra2lG*#Ew*f?3&#L~i27bKu-nhFv~ z2J+3585lT|i&7IyQd1mD82FzSvD<1j3Wegv&X^rnxj{lDQD_vhvol0R{B~;XK8WYw0VutQ${kUW zsBX?lzI#r&d(n$C?|}LFdbwL|7-x*-LRO;_iBN{E6ai5Qkk)EI5|E-3NF2^sb`be` zHMnNy2@gElP8a6A)=IY&j}mBFsX#V`1ScR$oZ!ULW_;N2sT7Yo{lU1`Wq!K0$<~^9 x%W(g^Z0MoCTbYkKR!YAeG@2VliPQ=U5_JSlfK*Os;I delta 21 dcmcc0*1^QcF_E!+;zmQ3tHs{?Cx2j!1^`f_2p|9e diff --git a/deploy/mongodump/gravitee/audits.bson b/deploy/mongodump/gravitee/audits.bson index 8872559ec8a2714579eca5e68ccff14655aba90c..6474bc89227ab63f8fbb3eb1a549cac09aebc799 100644 GIT binary patch delta 8754 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 delta 122 zcmcb{)Xu`lIFZp|;VgDxO;bSv$w0n&G6PdyVs0t}7f^Y4eok6(QfX28#Hpd;T+tT~7XuCBEGd7Y=xjC{^E0c5b6SF7ZWi*;>%cvwA#K6FiQBqQ1rLT`7 zx0F#u*bS?kr?3}RaihsOOtQirm~xxvGJRp3T*=Ba`4wx%WE~cs$#YpsCR?yXZobEA P!N?*P_T%_uDfR>a0Bt&c delta 173 zcmey$_lu9QY9eD5WB$aNY7q|x28N81k^(Dz{ha*d#GH)$;*!aQjOLRa8D&L+u}g-D vxMPndZ02EQWn%ff@57HgOecyN85lTA3sMqGQd1mD7(hZ3cSisKv*Zgw delta 33 mcmbQtG?{6_67f_%kNw4r3=Ev51u2OosVR;n3?QM2yCVRyp$jJf diff --git a/deploy/mongodump/gravitee/roles.bson b/deploy/mongodump/gravitee/roles.bson index 7c9f7d385981c10c4c0a95fc44032f73b7a7c7a1..583c0a77f0bb8bdf9a9553ffc1e28a11f8088a6d 100644 GIT binary patch delta 382 zcmew@`&)Lx1#z{lOecyN85lTA3sMqGQd1mD7(hak<(We!TQlww&&QMp34!Gkm{y2? z!;}XJZI)+NW)v6PhG95J2&8%QS{6P=aScobAR(~nYHWwZtuf_6LYx1ysWOU3V@iUA zK$;i#b1;hMW6Fbsz=r?gJSEPx# delta 382 zcmew@`&)Lx1@S6=kNw4r3=Ev51u2OosVR;n3?QM&^2{NVtr>TTU&oXO34!Gkm{y3F z2w><332l~VR%R5Ri75#Z0%_j7mW7W|d@H5`kPz5(HMT?I7cu2QLYx1ysWOWHz?1|D zfiy4f=U@~U7sPNHNC<5BFV0iqs+jU1A+YQ8xfK}2Eie^;gun*u;yEqujVTWj0?U8k OT_B!>DGw3?$pZkATX;bL diff --git a/deploy/mongodump/gravitee/users.bson b/deploy/mongodump/gravitee/users.bson index 6b102e6954aecab4f57b5e589a751c377c21269d..fc7f4446ed6b2560b6c5c0891b1471af10b1952b 100644 GIT binary patch delta 22 ZcmaFK_>yr#HjCX(wi6Tcl_2!g5CCVp2>t*7 delta 22 ZcmaFK_>yr#Hp|TVi-#xXD?#X~Apm&$3d{fi diff --git a/deploy/mongodump/gravitee/views.bson b/deploy/mongodump/gravitee/views.bson index 1d51d36c3ace13bef61197bdb80ef5b990171fd8..268d72ab4e75649ebf40636028193cb6cc9296f3 100644 GIT binary patch delta 33 mcmdnaxSer=kNAsiOecyN85lTA3sMqGQd1mD7(hZ3lS2T{PYjg+ delta 33 mcmdnaxSer=k9fPF$NpkQ1_sX3f|SIP)D*`O29VIi Date: Fri, 7 Aug 2020 14:26:39 +0200 Subject: [PATCH 04/16] gravitee db default config, deploy.sh for initializing db --- deploy/docker-compose.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/deploy/docker-compose.yaml b/deploy/docker-compose.yaml index d0842ea..6f17ef4 100644 --- a/deploy/docker-compose.yaml +++ b/deploy/docker-compose.yaml @@ -181,6 +181,7 @@ services: - crate networks: - frontend + - storage redis: image: redis From fc30c8b547a944cee7a3a757a51cbb473ab14b89 Mon Sep 17 00:00:00 2001 From: cerfoglg Date: Fri, 7 Aug 2020 15:54:35 +0200 Subject: [PATCH 05/16] Mongo files, ports --- deploy/docker-compose.yaml | 1 + .../gravitee/genericnotificationconfigs.bson | Bin 0 -> 1218 bytes .../genericnotificationconfigs.metadata.json | 1 + 3 files changed, 2 insertions(+) create mode 100644 deploy/mongodump/gravitee/genericnotificationconfigs.bson create mode 100644 deploy/mongodump/gravitee/genericnotificationconfigs.metadata.json diff --git a/deploy/docker-compose.yaml b/deploy/docker-compose.yaml index 6f17ef4..eaa7f88 100644 --- a/deploy/docker-compose.yaml +++ b/deploy/docker-compose.yaml @@ -132,6 +132,7 @@ services: - "4200:4200" # Transport protocol - "4300:4300" + - "5432:5432" volumes: - cratedata:/data networks: diff --git a/deploy/mongodump/gravitee/genericnotificationconfigs.bson b/deploy/mongodump/gravitee/genericnotificationconfigs.bson new file mode 100644 index 0000000000000000000000000000000000000000..aeff6bae706887673f61bac9d3cde48357ffecb1 GIT binary patch literal 1218 zcmeH_O{>#D6o!vMK|uuZW8>y-#MOkh`DpIWm>Z;e+lD4ZcV%XB5(kr+GD(a5eJ=D@ z_(NQI(u+`fS1xoV1SaQs=bU$jdAS4NY*Yy^0pM~piYB2im=^?+`GQ9*B0zrwkW^Pw za5QfbUeNX{toW|!FXmh|7Yoy?N=e=;qdRacR%lU6EDl?QhqOD+vg=tA7qjK!M4sI^ zi%?9%aln~}KKXeQpACQod;nvreI)0j2U>VU^U51{hAr8HBaN<94X;S4xv&ZwbS2u# z)QvK)TW))7n9|zpc~6RI;r_0}{LuB-X4ZT;0Nnj#%;yfi(g!*Z}Ma{%Z5X5 z7U>6Y#_;@{$4QcAMS2C!1fHIY$@MZHB=5GA#p|Qw!?W|QRhqBoLtAj$Zk4`ElcQY- zPpFZOwaM36wpf^l N_x&tjztKMl*e|7*SMdM< literal 0 HcmV?d00001 diff --git a/deploy/mongodump/gravitee/genericnotificationconfigs.metadata.json b/deploy/mongodump/gravitee/genericnotificationconfigs.metadata.json new file mode 100644 index 0000000..982b424 --- /dev/null +++ b/deploy/mongodump/gravitee/genericnotificationconfigs.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":1,"key":{"_id":1},"name":"_id_","ns":"gravitee.genericnotificationconfigs"}]} \ No newline at end of file From e620785ff63331dc7b9df554febdf5084e3841c5 Mon Sep 17 00:00:00 2001 From: "Federico M. Facca" Date: Tue, 26 Jan 2021 10:22:57 +0100 Subject: [PATCH 06/16] updates --- .gitignore | 1 + deploy/README.md | 23 +++++++++++++++++++++++ deploy/clean.sh | 2 ++ deploy/deploy.sh | 2 +- deploy/realm-export.json | 2 +- deploy/update.sh | 0 6 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 deploy/README.md create mode 100644 deploy/clean.sh delete mode 100644 deploy/update.sh diff --git a/.gitignore b/.gitignore index 46fafc7..d58a5ff 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ site .idea .DS_Store +deploy/logs diff --git a/deploy/README.md b/deploy/README.md new file mode 100644 index 0000000..d4949b2 --- /dev/null +++ b/deploy/README.md @@ -0,0 +1,23 @@ +# Deploy example + + +## Todo +- redirect to keycloak:8080 not working (of course) +- Load an example group and device + - this can be done with the mongo dump +- Load example data in context broker + - this can be done with the mongo dump +- Example subscription for above data to ql + - this can be done with the mongo dump +- Example data in ql + - this can be done with the crate export +- Example dashboard with map + - clone the plugings and run them from the filesystem + - create example dashboard, export it and import it at creation (see code in plugings) +- Example send message to ul agent (with key and token) + - curl script +- Write a readme + +# Todo (next) +- Use newer keycloak and load scripts +- Use newer grafana \ No newline at end of file diff --git a/deploy/clean.sh b/deploy/clean.sh new file mode 100644 index 0000000..b74136b --- /dev/null +++ b/deploy/clean.sh @@ -0,0 +1,2 @@ +#!/bin/bash +docker-compose down -v \ No newline at end of file diff --git a/deploy/deploy.sh b/deploy/deploy.sh index 6187959..ea914d1 100755 --- a/deploy/deploy.sh +++ b/deploy/deploy.sh @@ -1,5 +1,5 @@ #!/bin/bash - +docker-compose up -d # Restore the gravitee db in Mongo with a default setup, apis and Oauth docker cp ./mongodump deploy_mongo_1:/home/dump docker exec -it deploy_mongo_1 mongorestore /home/dump diff --git a/deploy/realm-export.json b/deploy/realm-export.json index 5598690..7bac1fa 100644 --- a/deploy/realm-export.json +++ b/deploy/realm-export.json @@ -2,7 +2,7 @@ "id": "default", "realm": "default", "displayName": "OrchestraCities", - "displayNameHtml": "

", + "displayNameHtml": "
OrchestraCities Demo
", "notBefore": 0, "revokeRefreshToken": false, "refreshTokenMaxReuse": 0, diff --git a/deploy/update.sh b/deploy/update.sh deleted file mode 100644 index e69de29..0000000 From 2dc7066b49b770da394b0648b356abe9523f41d8 Mon Sep 17 00:00:00 2001 From: cerfoglg Date: Tue, 26 Jan 2021 16:16:52 +0100 Subject: [PATCH 07/16] Added some default data for Orion, Agents and QL --- deploy/clean.sh | 0 .../cratedata/data/nodes/0/_state/global-3.st | Bin 0 -> 327 bytes .../cratedata/data/nodes/0/_state/node-2.st | Bin 0 -> 71 bytes .../0/_state/state-2.st | Bin 0 -> 125 bytes .../8VBUBMiNRnm9LPxVv006jQ/0/index/_0.cfe | Bin 0 -> 331 bytes .../8VBUBMiNRnm9LPxVv006jQ/0/index/_0.cfs | Bin 0 -> 3605 bytes .../8VBUBMiNRnm9LPxVv006jQ/0/index/_0.si | Bin 0 -> 384 bytes .../8VBUBMiNRnm9LPxVv006jQ/0/index/_1.cfe | Bin 0 -> 331 bytes .../8VBUBMiNRnm9LPxVv006jQ/0/index/_1.cfs | Bin 0 -> 3605 bytes .../8VBUBMiNRnm9LPxVv006jQ/0/index/_1.si | Bin 0 -> 384 bytes .../8VBUBMiNRnm9LPxVv006jQ/0/index/_2.cfe | Bin 0 -> 331 bytes .../8VBUBMiNRnm9LPxVv006jQ/0/index/_2.cfs | Bin 0 -> 3605 bytes .../8VBUBMiNRnm9LPxVv006jQ/0/index/_2.si | Bin 0 -> 384 bytes .../8VBUBMiNRnm9LPxVv006jQ/0/index/_3.cfe | Bin 0 -> 331 bytes .../8VBUBMiNRnm9LPxVv006jQ/0/index/_3.cfs | Bin 0 -> 3604 bytes .../8VBUBMiNRnm9LPxVv006jQ/0/index/_3.si | Bin 0 -> 384 bytes .../8VBUBMiNRnm9LPxVv006jQ/0/index/write.lock | 0 .../0/translog/translog-1.ckp | Bin 0 -> 80 bytes .../0/translog/translog-1.tlog | Bin 0 -> 275 bytes .../0/translog/translog-2.ckp | Bin 0 -> 80 bytes .../0/translog/translog-2.tlog | Bin 0 -> 739 bytes .../0/translog/translog-3.ckp | Bin 0 -> 80 bytes .../0/translog/translog-3.tlog | Bin 0 -> 43 bytes .../0/translog/translog-4.ckp | Bin 0 -> 80 bytes .../0/translog/translog-4.tlog | Bin 0 -> 43 bytes .../0/translog/translog-5.tlog | Bin 0 -> 43 bytes .../0/translog/translog.ckp | Bin 0 -> 80 bytes .../1/_state/state-2.st | Bin 0 -> 125 bytes .../8VBUBMiNRnm9LPxVv006jQ/1/index/_0.cfe | Bin 0 -> 331 bytes .../8VBUBMiNRnm9LPxVv006jQ/1/index/_0.cfs | Bin 0 -> 3605 bytes .../8VBUBMiNRnm9LPxVv006jQ/1/index/_0.si | Bin 0 -> 384 bytes .../8VBUBMiNRnm9LPxVv006jQ/1/index/_1.cfe | Bin 0 -> 331 bytes .../8VBUBMiNRnm9LPxVv006jQ/1/index/_1.cfs | Bin 0 -> 3605 bytes .../8VBUBMiNRnm9LPxVv006jQ/1/index/_1.si | Bin 0 -> 384 bytes .../8VBUBMiNRnm9LPxVv006jQ/1/index/write.lock | 0 .../1/translog/translog-1.ckp | Bin 0 -> 80 bytes .../1/translog/translog-1.tlog | Bin 0 -> 507 bytes .../1/translog/translog-2.ckp | Bin 0 -> 80 bytes .../1/translog/translog-2.tlog | Bin 0 -> 43 bytes .../1/translog/translog-3.ckp | Bin 0 -> 80 bytes .../1/translog/translog-3.tlog | Bin 0 -> 43 bytes .../1/translog/translog-4.tlog | Bin 0 -> 43 bytes .../1/translog/translog.ckp | Bin 0 -> 80 bytes .../2/_state/state-2.st | Bin 0 -> 125 bytes .../8VBUBMiNRnm9LPxVv006jQ/2/index/_0.cfe | Bin 0 -> 331 bytes .../8VBUBMiNRnm9LPxVv006jQ/2/index/_0.cfs | Bin 0 -> 3605 bytes .../8VBUBMiNRnm9LPxVv006jQ/2/index/_0.si | Bin 0 -> 384 bytes .../8VBUBMiNRnm9LPxVv006jQ/2/index/_1.cfe | Bin 0 -> 331 bytes .../8VBUBMiNRnm9LPxVv006jQ/2/index/_1.cfs | Bin 0 -> 3605 bytes .../8VBUBMiNRnm9LPxVv006jQ/2/index/_1.si | Bin 0 -> 384 bytes .../8VBUBMiNRnm9LPxVv006jQ/2/index/_2.cfe | Bin 0 -> 331 bytes .../8VBUBMiNRnm9LPxVv006jQ/2/index/_2.cfs | Bin 0 -> 3605 bytes .../8VBUBMiNRnm9LPxVv006jQ/2/index/_2.si | Bin 0 -> 384 bytes .../8VBUBMiNRnm9LPxVv006jQ/2/index/write.lock | 0 .../2/translog/translog-1.ckp | Bin 0 -> 80 bytes .../2/translog/translog-1.tlog | Bin 0 -> 739 bytes .../2/translog/translog-2.ckp | Bin 0 -> 80 bytes .../2/translog/translog-2.tlog | Bin 0 -> 43 bytes .../2/translog/translog-3.ckp | Bin 0 -> 80 bytes .../2/translog/translog-3.tlog | Bin 0 -> 43 bytes .../2/translog/translog-4.tlog | Bin 0 -> 43 bytes .../2/translog/translog.ckp | Bin 0 -> 80 bytes .../3/_state/state-2.st | Bin 0 -> 125 bytes .../8VBUBMiNRnm9LPxVv006jQ/3/index/_0.cfe | Bin 0 -> 331 bytes .../8VBUBMiNRnm9LPxVv006jQ/3/index/_0.cfs | Bin 0 -> 3604 bytes .../8VBUBMiNRnm9LPxVv006jQ/3/index/_0.si | Bin 0 -> 384 bytes .../8VBUBMiNRnm9LPxVv006jQ/3/index/write.lock | 0 .../3/translog/translog-1.ckp | Bin 0 -> 80 bytes .../3/translog/translog-1.tlog | Bin 0 -> 275 bytes .../3/translog/translog-2.ckp | Bin 0 -> 80 bytes .../3/translog/translog-2.tlog | Bin 0 -> 43 bytes .../3/translog/translog-3.ckp | Bin 0 -> 80 bytes .../3/translog/translog-3.tlog | Bin 0 -> 43 bytes .../3/translog/translog-4.tlog | Bin 0 -> 43 bytes .../3/translog/translog.ckp | Bin 0 -> 80 bytes .../8VBUBMiNRnm9LPxVv006jQ/_state/state-11.st | Bin 0 -> 811 bytes .../0/_state/state-2.st | Bin 0 -> 125 bytes .../gZc0-gawQkCZmlVZVCcyEA/0/index/write.lock | 0 .../0/translog/translog-1.ckp | Bin 0 -> 80 bytes .../0/translog/translog-1.tlog | Bin 0 -> 43 bytes .../0/translog/translog-2.ckp | Bin 0 -> 80 bytes .../0/translog/translog-2.tlog | Bin 0 -> 43 bytes .../0/translog/translog-3.tlog | Bin 0 -> 43 bytes .../0/translog/translog.ckp | Bin 0 -> 80 bytes .../1/_state/state-2.st | Bin 0 -> 125 bytes .../gZc0-gawQkCZmlVZVCcyEA/1/index/_0.cfe | Bin 0 -> 331 bytes .../gZc0-gawQkCZmlVZVCcyEA/1/index/_0.cfs | Bin 0 -> 4183 bytes .../gZc0-gawQkCZmlVZVCcyEA/1/index/_0.si | Bin 0 -> 384 bytes .../gZc0-gawQkCZmlVZVCcyEA/1/index/write.lock | 0 .../1/translog/translog-1.ckp | Bin 0 -> 80 bytes .../1/translog/translog-1.tlog | Bin 0 -> 309 bytes .../1/translog/translog-2.ckp | Bin 0 -> 80 bytes .../1/translog/translog-2.tlog | Bin 0 -> 43 bytes .../1/translog/translog-3.ckp | Bin 0 -> 80 bytes .../1/translog/translog-3.tlog | Bin 0 -> 43 bytes .../1/translog/translog-4.tlog | Bin 0 -> 43 bytes .../1/translog/translog.ckp | Bin 0 -> 80 bytes .../2/_state/state-2.st | Bin 0 -> 125 bytes .../gZc0-gawQkCZmlVZVCcyEA/2/index/write.lock | 0 .../2/translog/translog-1.ckp | Bin 0 -> 80 bytes .../2/translog/translog-1.tlog | Bin 0 -> 43 bytes .../2/translog/translog-2.ckp | Bin 0 -> 80 bytes .../2/translog/translog-2.tlog | Bin 0 -> 43 bytes .../2/translog/translog-3.tlog | Bin 0 -> 43 bytes .../2/translog/translog.ckp | Bin 0 -> 80 bytes .../3/_state/state-2.st | Bin 0 -> 125 bytes .../gZc0-gawQkCZmlVZVCcyEA/3/index/write.lock | 0 .../3/translog/translog-1.ckp | Bin 0 -> 80 bytes .../3/translog/translog-1.tlog | Bin 0 -> 43 bytes .../3/translog/translog-2.ckp | Bin 0 -> 80 bytes .../3/translog/translog-2.tlog | Bin 0 -> 43 bytes .../3/translog/translog-3.tlog | Bin 0 -> 43 bytes .../3/translog/translog.ckp | Bin 0 -> 80 bytes .../gZc0-gawQkCZmlVZVCcyEA/_state/state-12.st | Bin 0 -> 806 bytes deploy/cratedata/data/nodes/0/node.lock | 0 deploy/cratedata/log/gc.log.0.current | 778 ++++++++++++++++++ deploy/deploy.sh | 6 +- deploy/docker-compose.yaml | 4 +- .../iotagent-manager/configurations.bson | Bin 0 -> 416 bytes .../configurations.metadata.json | 1 + .../mongodump/iotagent-manager/protocols.bson | Bin 0 -> 175 bytes .../iotagent-manager/protocols.metadata.json | 1 + deploy/mongodump/iotagent-ul/devices.bson | Bin 0 -> 352 bytes .../iotagent-ul/devices.metadata.json | 1 + deploy/mongodump/iotagent-ul/groups.bson | Bin 0 -> 319 bytes .../iotagent-ul/groups.metadata.json | 1 + deploy/mongodump/orion-town/csubs.bson | Bin 0 -> 582 bytes .../mongodump/orion-town/csubs.metadata.json | 1 + deploy/mongodump/orion-town/entities.bson | Bin 0 -> 327 bytes .../orion-town/entities.metadata.json | 1 + deploy/mongodump/orion/entities.bson | 0 deploy/mongodump/orion/entities.metadata.json | 1 + 132 files changed, 791 insertions(+), 4 deletions(-) mode change 100644 => 100755 deploy/clean.sh create mode 100644 deploy/cratedata/data/nodes/0/_state/global-3.st create mode 100644 deploy/cratedata/data/nodes/0/_state/node-2.st create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/_state/state-2.st create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_0.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_0.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_0.si create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_1.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_1.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_1.si create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_2.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_2.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_2.si create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_3.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_3.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_3.si create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/write.lock create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-1.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-1.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-2.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-2.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-3.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-3.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-4.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-4.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-5.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/_state/state-2.st create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_0.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_0.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_0.si create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_1.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_1.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_1.si create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/write.lock create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-1.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-1.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-2.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-2.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-3.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-3.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-4.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/_state/state-2.st create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_0.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_0.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_0.si create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_1.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_1.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_1.si create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_2.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_2.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_2.si create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/write.lock create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-1.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-1.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-2.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-2.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-3.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-3.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-4.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/_state/state-2.st create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_0.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_0.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_0.si create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/write.lock create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-1.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-1.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-2.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-2.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-3.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-3.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-4.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/_state/state-11.st create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/_state/state-2.st create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/index/write.lock create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-1.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-1.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-2.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-2.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-3.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/_state/state-2.st create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_0.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_0.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_0.si create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/write.lock create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-1.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-1.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-2.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-2.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-3.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-3.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-4.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/_state/state-2.st create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/index/write.lock create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-1.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-1.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-2.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-2.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-3.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/_state/state-2.st create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/index/write.lock create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-1.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-1.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-2.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-2.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-3.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/_state/state-12.st create mode 100644 deploy/cratedata/data/nodes/0/node.lock create mode 100644 deploy/cratedata/log/gc.log.0.current create mode 100644 deploy/mongodump/iotagent-manager/configurations.bson create mode 100644 deploy/mongodump/iotagent-manager/configurations.metadata.json create mode 100644 deploy/mongodump/iotagent-manager/protocols.bson create mode 100644 deploy/mongodump/iotagent-manager/protocols.metadata.json create mode 100644 deploy/mongodump/iotagent-ul/devices.bson create mode 100644 deploy/mongodump/iotagent-ul/devices.metadata.json create mode 100644 deploy/mongodump/iotagent-ul/groups.bson create mode 100644 deploy/mongodump/iotagent-ul/groups.metadata.json create mode 100644 deploy/mongodump/orion-town/csubs.bson create mode 100644 deploy/mongodump/orion-town/csubs.metadata.json create mode 100644 deploy/mongodump/orion-town/entities.bson create mode 100644 deploy/mongodump/orion-town/entities.metadata.json create mode 100644 deploy/mongodump/orion/entities.bson create mode 100644 deploy/mongodump/orion/entities.metadata.json diff --git a/deploy/clean.sh b/deploy/clean.sh old mode 100644 new mode 100755 diff --git a/deploy/cratedata/data/nodes/0/_state/global-3.st b/deploy/cratedata/data/nodes/0/_state/global-3.st new file mode 100644 index 0000000000000000000000000000000000000000..4048246e420be0ad877f0c40b135fa03dafe9260 GIT binary patch literal 327 zcmX|7J5Iwu5Di5dEznq9$r43hT-7qHnkUngOh7%`u)+AQJL7Yk(&qBXCd(p(wNDO6D!d!=aH89C=9Tt z(o`PrttN!bkq*gK69vZ9W$B6*=@v5AprSzhbNeN+Z4hq?IJg%rOmJ@S>~B}JGxuB% z&mS-!c?C0>1R{etMcN({Cl zg7R`LeF7@N$_xz5vI2V&b8_;N6H7Al^Wrm8el-FW`nc-4Mdjvr2U?U?r20g8XO|X5 Vm^uFbeL!RK3!oKX5Fs-?2>>#+DwzNP literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_0.cfe b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_0.cfe new file mode 100644 index 0000000000000000000000000000000000000000..73423d3ee6c26407a48cebc73f110f2acb7e74fa GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1nn{Hvpj+>bjey;Ov^f=>A}Fo zqL-4H36cT=JqX3%#UBqdBi=wSB|jM|UIC@^P~=N8bD`qTAT;B0n7p|GNPk%hM4YJ? zs;-qqFD(UX7_$&mFa+chs7cIeP{Fe>lT1M-m1Gt`#954?^2Epm6!zHO-%wK0rfEph((NTkP2>D7S*dJVth9xe2D+tE1zlO|*<#qWQ`?&# zs!Dr6ss!SM=m8H1w{xU0XIN!ZF$f3?2dQsO%JKmk!;VrdGC8a z^WGa5f2s}bKi8;Glg=rxS@jjGVd|>pY66T~@80_I%-at?8C!Ve_6J)ppAm|{ebDEg zSC%cqbe$#3u50dj8Y3Z*V(NPOYjS`5^FI(0$FE1%Pb1PW)4Oaru3=ttF58AnZPltE zSEuqU<1Q=WOGm_`aw3^ZXR>|I?Rma`?+XL__75HyIyn5|$mrOi!@RZ&-)>h>+rX)s zRr#=FQ(B^S-BFE-3tFTeYEWu~X${-xLF`~mmp(2LB3>1w zg^`AB7QkU+qNW#Ax@uHtp+p@Qrc*vkf6^!WtBJwM%bMfT^O~t$qjhS!lPaxS-li-N zaa$sUbn5C{XNb5d179!Yz4nqse2@V7z_Q?zAmSsWMq3z7#lXS%nLnn}zdw8n13u^n zJg-0+yrb0`)QQW+AR+QfSqW@Wdzs&ewq=qx;>X`kypBeUu~Wb3S~k^}3|iBjB{+ez zrcT$vbkdnNf=GZW6yOp53}rh#abp58BkLy4H-t$yF-R~TqqubH4Hf1xX{OVpiDVc} z?+uCxnf4{fT5KE`H~ zh=M5IC4Z@11vUH?xsj_HYnn~V4z;mrS2XwiTp<@(ow;K4c6~*%6eMK7@3tAFm^QrXb)N?}zb zjxAH$6Jq}%{(sl;s`vYqW_>P>&1qDt#yU}i6m+iZWzzzay?~&*XV#na&zAUd&+c7K?O7LlD9q4ZT z36ZoKj2svHkb86SK@9Qbl{h#S>)3EI2BD9;ev;3$rP=n42rV(e&U7~uvyZ!3(@#f- boCyMM=$U6a+oQ<|KbmuhYhoSL4SnpfhPmzK`}1nn{Hvpj+>bjey;Ov^f==>ZaB2VzDL z14O_%AU-1(Q+_e4Pi9_e1$S0rS)yK9YF-hQ@q3U>CwO7luGb5mgodEthGOkpd|FD*(=WlhT|EzaNq>V{e*XrgCmsb^?psG9?F zeRgIEC&-ZElEmBsUPCiOLo;(DV-ph#15;+UcmuuUv{Y6gRh$Xo6f??0!q3zoxFo+Q wHN`D6H7BLmEx#x?u|zL7KP8pR$u&46J~+VD)rH}J#^e{E-~)lz(qC2p04OzaVgLXD literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_1.cfe b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_1.cfe new file mode 100644 index 0000000000000000000000000000000000000000..7808b25e17b65519a87d47e4315ccab3b97a4ffd GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1nn{Hvpj+>bjey;Ov^f=8OXrJ z9}iO=Z=jcwpA1q31bPsPArD2qBr_K(J_kZGE{DmR8-Vner9i})oT2JkS@cq1nwU;N z1<$hRrKMCrILuR_f+0Y`JgD)^FCl^~vq9Q3Asmhts7f!8_7bSzIjG=oG>1S<;yekF hXPyd^Hw8JgB(ne_&Kn2Szx;s4P_AD>J@hRf)rRu5DCRw1Jzb+CZ*HUKc`<@oYF9 zj^?K3PwB3QPUx0?2ARn6=2c|c!J-79a9e~B#%;yNc_>_!h}!exRD|H5wobv zK;a&pO=g%pO9MyRkNju)X6=VhX~3t#fL9cf2CwODAGv8c6n&|RqA3vo&GLchz=G-Am&EAOLbV@Cd*ysxBTqu9C3?yRr<~3hPO%4u=|W zv%YJ8H%TL0>4LB)8V1pjuGayGOG}W>(uX9&Wym}8{6EJpQZ^-)!Y4i3LB=XZZNpt9 z>2%C8&^bUf<4FtzVh(~T_3YOH%&iX_mndeD1t>r}X0>dW01fR1P!Kh2P`ItA38i)9 z1WIf}g~2`43SulXu4!Vf-)iA=Pysp3MQ1h3rc8U_`xtmHd6Lj8N~#=#hw=`s<6u*F z&TFJ3nZmYMp-$Mo(?lYP9dm*tleU2z7u%M!Jywe?ys0~g1kjxSZVIdV#eT>B_RgT31 z%3~ffJIK*J-$C;B*pTv3z_F2ksKd>dJNeIBPp8)I6DZ{#BEnkkto+45k$d+2BVSXb zSyqhVg)=${hU;dx3k4tuSKu9W=s2GK9KKr~-g)I}Iq_^SKU3zio=B-^5!}g>>3)ip zs|!mD3rowDB?W@NM6%RRjdFGIkfMS=1Z)sx{=V@txYE09l;48`t{0DdIZ0iQu4ddR zOe1Kd+~&BGm>wrwDWiu%uLX6QjY!=dXe-<(*Q-U`Bz=x@#NV#gcwa^qn;Tc6((r)sHa_lz1O4$9S7!T#{u0PP zD3&u3Cn>8r)x{sSV+{cHdL literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_1.si b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_1.si new file mode 100644 index 0000000000000000000000000000000000000000..2db3c4d270d0f931328ddca532fd869dd2b2a004 GIT binary patch literal 384 zcmcD&o+B>oQ<|KbmuhYhoSL4SnpfhPmzK`}1nn{Hvpj+>bjey;Ov^f=83+<%2VzDL z14O_%AU-1(Q+_e4Pi9_e1$S0rS)yK9YF-hQ@q3U>CwO7luGb5mgodEthGOkpd|FD*(=WlhT|EzaNq>V{e*XrgCmsb^?psG9?F zeRgIEC&-ZElEmBsUPCiOLo;(DGcyB2BXef9ctgG9v|qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1nn{Hvpj+>bjey;Ov^f=8N|TF z9}iJ(ZV+#vmr|AjQUwHh5Q?FdMK3L-1j^YArGEnj^Ku~^#&r;yWj2dmN@ga6!{!N9 z=>^hW0TrAK6%2vdX$rP8KN%|j94eoOB43gTwTV3xBG0%SCJ%KpRG#AxM4ovn$R$ug jo{3OH&%!i;EiK6`fQa+PLFJbp(3t!J%4XR4d+kvGf~7;U literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_2.cfs b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_2.cfs new file mode 100644 index 0000000000000000000000000000000000000000..1c9b0e3a5c463fd66139ea5549baec89d767dbf8 GIT binary patch literal 3605 zcmd5Ul~7ytgoMt>B=lP%XS*%v)?reTyqS!tDeJ`9Vk{Op?U`ShG_ z>ldj-ZGTpymNR?j%^QESXjmJ+_1+^E#1s#C#dln4ESj`oc#B{i#exSyZ?`c)glyu+ z8Xmn=m?>}IPoMmr`7Sf})vpsj;?D|ob3=D&)uS$pw5j`_6iS8Ihzdsw5S-~>tNPcP z6tpyY0zJ-x*f%X&HEn}lEtHCL#p2vT@wkf7e-bQFt4UqmZ@FM`;+U$Tr^GbCSj@=# zXtR@!!si%^TmS3PFZbEj$HJ}8slld~?7HKz%nWQeCsj=Y5saQkjZ807H!xauJl}-3 zu;{p!?jNfMox)R^q~^8ib@M7#Q3jH9rD{7EA>08!#KAkqA`X3CP1NJ?SlLx=x~8SO zkYDOrWJkQPO*k#LMkUA{-vmNRb)CAN>DcnlcpV!&WhsJX9)O&b`@UC{n8Y5vc{K@+ z=QlHcGf@WMArZi`4Y+ z=w6Fa(?L#6%Z_RL5xtzF3B^Rh<;)f3Ru9Q-rT%=tkfu2q_4E4@BUiYxg9HyuhcGI^ zgZ}Bk{Q6_-Cx$t}F**IMxh4<{@KqdtM#bx-T2;wwN671PDxFcXxsg|P?H=8;cWmGO z{P=-`6R%EAO&>Ze=E9wt`68g{Qw^tfdDW$K6-dm}%$g5wq<)$f+%T)j_!t9-ZK7;r z=}3QJ!);(1v;F~#8={AQAU_-Nf-|l(SF}qOm54dH_Z94wKOL8QeYoN z7Ii61o-t{Bgz-|AIB0)}uj%f}?3!>Wgs&NPUX6qgAmNJ!0K26%!0-M9Rgq7je)Y5k zVV3DIzaV5oj(|5Rr+4?QArS#iJ0d~>>(S*Xfskp6O+-<)ivyubMKlh^A_7BCOL2kp z`(=4U2lC2MYry@e?MeQ>mg~h?gqdDU<-iGdzEAoA|xD~6>;-%cwmcD0~ zGPaH+{mWp-Noj|WR3EW(vG3VX0Hz(T%LfiJ~A zd>Jz-dw?8o_LQB%8~=XEwDG$|{08g(Yc=usaiY?g-`EF~ZcnIN`HE aIDb}O2Rzok6?1<1=NrF?^TVb5ng0PC9sM`} literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_2.si b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_2.si new file mode 100644 index 0000000000000000000000000000000000000000..8bc0b61c5f8efa5a5953a420f27b5ad0302ded26 GIT binary patch literal 384 zcmX|7K}*9h6yB6>tUARhcoIG8VWH`|wmS)Ghr&QvJqjhZsq1W#k)*|o=YdzjgTKau zKfs%R!JlEWZhMfIeBbxJm&ZH*%@6lSMT{x-tPnpDOyvztSxv?KVg7kN{&_nZ_#e~n zv$5uy>eTf^r!~;HZf-DPj51ohY)w&#K#6I>c;}X*IL9ZKjL#THGGlamDRZGf3j!Zl z5%l41MH6LQD5l*9itawb-cG)laHSX?fWT@p0T7QT1|o^;94y?tpfV$PRoGrP*IgQd z6+Fg9nipbXD);iEJqN%6fHv&rdiv)~wsaFA5t+523!&@TuIoUjw`oK+5LrXzIK|Z^ u>c`do`c^0z$H_3mc_N046C?p)2{tc+@IDIfg5aw5b^89N*QbM&ug*U-t8ioh literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_3.cfe b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_3.cfe new file mode 100644 index 0000000000000000000000000000000000000000..3789262dff0ecc44788b725209537bd84e83c252 GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1nn{Hvpj+>bjey;Ov^f=8Op%L zqL-FZ0g?g&JqX1R!XFPY!`vX=Krf{%1uEVIrCVY0reOK}WQaH;J5)XoMZP367b;&0 zrI*9xq2@#7nPnjI%u|7m%7Y5BZG;H2%x2L`$;^asxP2frgBQs8B~Za>P{Cg?@29cgzw zZ{GX8-@KW5ey;x7Jg{%RU8fE`uD;~jEw}BMnh_WX+LhO@eEjm+AFqzjK7akK@1A)L zRY7~4YcB?_N6nf=o2Fkg{NR*h(p9j+Tg(UsDXPE^-NoNN{n1?p&e~A%(-#=#NQ7Bd zHMf4wXtt@JMxnqpbv3KeWvfoLV%u{n&PCsvXquHsR#~Ec0FTq{k*V`Qjh;3f<07@G z6HIB;cBe!VbJpcA8HrK8um#r-EC4+3SpoHc5~JF?sF=ucRaeQ8qvR<$lg%ml!oXvD z9v>WfVtDVqk^Kh_jy_o&8$Wbd^!8Ju@*ndyJlAyVZ!dY2E>X|+HLD(g7padMW>rk) z7(#5rvV*0ggLY}6x`N+X|0VZf&VT<8jL8Kg&Gw66q%s%>I~q+SM>U+35hiyejB&58 z-fjWn&q4kc-DB1>FLFP9TQ3BKQ3wSB5^nQ!I-y zC#rL2$`K)=SYms!S}~wmd|+WyH2ji*|xbA zJN)9M{F!`T3v*|b1y88q%jcBSaD8Udn>$fK(k&Cg+lSvGGQL2)(1_>wn(Ns{Fxdz@ zg=g0^HNV|xSgTk?Io+q1bjJnCVZfOKa)^U(yv35x%WA3~hsVkuz2#Z9;jQWL2C~Vn zcwvih+g_cr48$XZkfJYB&$nC$uHY`L4GlM}6~m(tK##q?TSo9^hTx3^Bd5i_XNyvU z*riui)8KflQ*pQg8i1<73ScMJS~UAeGc5#`O?8XaVUQ9td{1}sU=9S-Zc)z&+8$MQ z$A_Gc18$l5M>^bMYI^nB@1L{ObdaZ}1=n%{KS}_sWJpX<60YVhDW7%K#MNj2{E8us z@nqCnXUC=S)-t=(!2}U<1OKCKslG-(!S9x~-n>$!lvp5_j+KN{4_X?14y`L7-aKNZ z%Jhlp>9RVbVsuY}naz^{Qs^+g%veQ zCj>*%17!Olb$QH7Ue5zTZ^)Pscy7VoQ<|KbmuhYhoSL4SnpfhPmzK`}1nn{Hvpj+>bjey;Ov^f=8440(2VzDL z14O_%AU-1(Q+_e4Pi9_e1$S0rS)yK9YF-hQ@q3U>CwO7luGb5mgodEthGOkpd|FD*(=WlhT|EzaNq>V{e*XrgCmsb^?psG9?F zeRgIEC&-ZElEmBsUPCiOLo;(DGYbPlOG9SXcw@cdOg12yoK_5>QW@nT;b&?PT#{du vn&Ot3nv+uOmS2>cSfZDkpOVVucVh9WAY17@PR;UUsVwRI~s7- literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/write.lock b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/write.lock new file mode 100644 index 0000000..e69de29 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-1.ckp b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-1.ckp new file mode 100644 index 0000000000000000000000000000000000000000..2c7dacc24036d92cbf8ab6955a9374867af775fa GIT binary patch literal 80 scmcD&o+HkjoL#`cz`z8=K)@&rBEU=p4dr4`j0ZF(zkrDvyp?nU00!*_&j0`b literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-1.tlog b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-1.tlog new file mode 100644 index 0000000000000000000000000000000000000000..2b81037739d8c68099ccd7ac8fc653908a9bb6aa GIT binary patch literal 275 zcmcD&o+HjtQk0lioRgoL?_>#(kRG=!CRFD>+a7kuvYJ6s1N@|6Y zm7$rTp_#dnv5Aq1i7`+rHMbzOD6yop2<U&j4;lW(v@R(xN=8y!7Hs-JBFFh-p?K csl_EgrlC?T&;t;_$nYNuU?MOH$5Q7O09K1>`&Gak^G`~oV+uqyuYMgTlk2)_UT literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-2.tlog b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-2.tlog new file mode 100644 index 0000000000000000000000000000000000000000..5d65ef09a1758d6f05bb99f909af0452e479da69 GIT binary patch literal 739 zcmcD&o+HjtQk0lioRgoL?_>#(kRG=!CRFD>+a7kuvYJ6s1N@|6Y zm7$rTp_zrbnE?m@rBZVXQi~ExN{fIxjP-ybP%|=9fF_g{QBG?5NDeE)6&q0mi`3AE(kC-mt|ZB o(jb2V;}|7AlTAXhXzfpP1Bf@#OW*$k03=B2>i_@% literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-3.ckp b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-3.ckp new file mode 100644 index 0000000000000000000000000000000000000000..0ea9c39f1077ab72337bf65f421aa2038f8325f5 GIT binary patch literal 80 ucmcD&o+HkjoL#`cz`z8=AfOGQz$Ej3Gys)jhSH1&G$y}*sefMla615% zg7R`LeF7@N$_xz5vI2V&b8_;N6H7Al^Wrm8el-FW2ALaqg`1X?1ZJD1c%>FudX(pz VmX`nieL!RK3!oKXaPYLCBLFisD-!?! literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_0.cfe b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_0.cfe new file mode 100644 index 0000000000000000000000000000000000000000..f2b5309991bdadb1e822c81ea2576756d4f25350 GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1nn{Hvpj+>bjey;Ov^f=>B+#w zqL-4H36cT=JqX3%#UBqdBi=wSB|jM|UIC@^P~=N8bD`qTAT;B0n7p|GNPk%hM4YJ? zs;-qqFD(UX7_$&mFa+chs7cIeP{Fe>lT1M-m1Gt`#954?^2Epm6rQoYzhOy8o3#nac`{O*MnR0HlK z0r!HuW*MgIEL(Ooy_l#BMo?QFlR$I7AJVnqpd`Hu?~ISm|N$*eEH@*0%B6f8Nb}l-YUj8;pgE zNL-xi*k%QvZ7Snpm zF?DhoOvn9cg9HpzRD}oq5y|%5b07apF=Oi{$u|m<^=Ob_JfPy@nO78;OW4b1u}8@; zJpT=fF+Lec;O*Kx@!}+c9S;RxkkCOwx^;aJU&541A4srk5of-g`JzCrIS?%-7M8uL zNnAd^4ko9uDBcrjynN5PMCoP>F?A=7xa$)uXSFTBqvHeq9N)d5%~I&;q;m}8K6s3t zhXo`EH}HLBpr9r{!|#+D#_2@ zgszI#uhjLhxpH+xd$gX=*|}PRSYq@b9DZnfFHFh3WpuX4Ei=*{2tgKd5_HNVKyo7C zq3ocX{NPctd)a}|(sf?gpYsS5JuSu=(yy1s4JrzrF&`!7l@4i4K_*-;alCmpuX$|N z`!0o3ru)U-7Rv3Hl~W-o1D_7puXDe*YUuPzVO1m) z*NE*4vHy_Zzw1Q9|NY9cK9|JibQ%rgGL}&WI@hLZT41staH>FoQ<|KbmuhYhoSL4SnpfhPmzK`}1nn{Hvpj+>bjey;Ov^f==?M~J2VzDL z14O_%AU-1(Q+_e4Pi9_e1$S0rS)yK9YF-hQ@q3U>CwO7luGb5mgodEthGOkpd|FD*(=WlhT|EzaNq>V{e*XrgCmsb^?psG9?F zeRgIEC&-ZElEmBsUPCiOLo;(DGeb)QQv+tUcmuuUv{Y6gRh$Xo6f??0!q3zoxFo+Q vHN`D6H7BLmEx#x?u|zL7KP8pR$u&46J~+VD)rH}J#^e{E-~)lG4SbFOCSY(k literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_1.cfe b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_1.cfe new file mode 100644 index 0000000000000000000000000000000000000000..2c7e2d656939386b0553625804b5a7a5c2b8a023 GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1nn{Hvpj+>bjey;Ov^f=8N$HD z9}iO=Z=jcwpA1q31bPsPArD2qBr_K(J_kZGE{DmR8-Vner9i})oT2JkS@cq1nwU;N z1<$hRrKMCrILuR_f+0Y`JgD)^FCl^~vq9Q3Asmhts7f!8_7bSzIjG=oG>1S<;yekF hXPyd^Hw8JgB(ne_&Kn2Szx;s4)rKFd{OXvxvICl1=+KP!^5^5?P@953vn}BM>okf zf9`rpVG*Hl(kG#U3W5lNFD*z>`XGI%eeOfW7pXof`cMVmq;)3A?9OJB?Snn&K$y(T z_x--#_vM>!CbgehyLKE68puX3s4qKK+X-w_GkgP(cJYmipS*J7_Qurw;mdE|e5MX+ zM0%V_FFT%(?X%t~7yHQ7oJN{TiAn3Ku>XMYl$6UC>$weMfocuHEB% zCMKu$?z{2yN54@F+OB-R@g21`cBJJr-l@9?)sbs?8gBSxRZKGD%uuZfX0@MV2tm<@ zsCS@vV6>%7*Vf>>fBjgvR5<;?EQG=e5a%ZX*RB$W@pQ|qYG@TVP_>RcpS;E*qxon$ zQkX8!oH9Hg9W!j>EV7X8&uGYU!bJ%{;jRcFOxjA0i%_^O5xHT;hppwIa4SdjV`g!e zgTj3}o6azOmIjWrpZU-9?Z4hu8t`%y@QO;(;B})FATKM2;xAQEbv5Rq4Wl2VbD7~u ztQ_C-6(zAdA~B~fJJ|NUMaQ)aKZ^%|0LY!tBLE*zb@9ln8W~HlBg>Gju%5)~P^1CZ z7OwpP(lnx#4v2c9VG<4L2Ej~9OOVdeha|&g$UAf8(zP;WGsRN)r0=-MT*RnldW$5T zmTVK9r<%zm1_Ch$L6v&;dmpCx^}ah4bBqNjL|d|(jz@q7b^|DhIyNcXgSZJ(%g7Ct z*oKONd$1YCSY}+a#Jr%{#OI+33c82R>9#|ecER^D@NV*?p;y#QIR+2qEqdFFW?o-(-el&X??wkyvnT-FmQ4Lt|$70Glj#gyvo z-0bY!{Nd+S2>ubtQZF@>>Y;+#i$JB4Wk z&5YX|cM{X%geztAQ0TU>PO}lI+kI`G8x^{>h?}IZ3?Vuf6N@|oMHl`z5BXs{09Z(n zAj2e&yqHEL=|7DdIpfK*Z4fe=$;S)K0I4uxTZntwmDqc&!`^!RLj1~Xztmd-#Ye?* zA_isPlkxZrXKW}-CdgQ>aEek|DCs)Oj8K+oGDRLC_o)0V$LI`vXFR5V6|4>QlL<1m z0n?(V24C4e-gy54-IUw=|6thl?P0$#;^N6VfzCrwyi4yf;lEdJQo5cpnY)!Xc|V-2 Y95q&Bsvq(+?O%WRk{`c#bN`$F0hojWga7~l literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_1.si b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_1.si new file mode 100644 index 0000000000000000000000000000000000000000..207a6126b0e01aa15f1fed274263fd81a62740c3 GIT binary patch literal 384 zcmX|7%Sr<=6zwR}($Okb!IkJz7Y%d!n3=8wwMC(zI9&=Q&ZKtgBq>Rz_y+~If(t)J zTnKJm=`Z*hCY`ny@;K+@oLuhdZ@RzR%Ob*v?}p@o5~i-$kQa2#?q+Y7x8KhP?cjC% zdD1srNiWM>%(emsTh1Dnb}wPs)5aK2F`5zbGNuwrmJchdaFbG$ zJQESIhiN89j&?6T+G!$aBd9|yHQhfZs%%1}!gNvr55V*5p5Fl9UoQ>-MMIe%#MVeA v)?q%smK!QANZd_G8p|#h6e~n|Oq{b$*dK&9oz6w!L?_>#(kRG=!CRFD>+a7kuvYJ6s1N@|6Y zm7$rTp_#d{kpTz*rBZVXQi~ExN{fIxO!a^wP%|=9fF_g{{){B&+y2=3Yz=V(!vCrKaHs5PezzO I6BrA^0M}EWLjV8( literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-2.ckp b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-2.ckp new file mode 100644 index 0000000000000000000000000000000000000000..8730d8a0251881537ca0d0bf4563d01e4f70e8e1 GIT binary patch literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$DXuGys)jgwY2yCcl8Gza8=LA^?>d7(@U7 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-2.tlog b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-2.tlog new file mode 100644 index 0000000000000000000000000000000000000000..116acd7289c3da190a8efa994d6fe69dcdf8b380 GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgo zg7R`LeF7@N$_xz5vI2V&b8_;N6H7Al^Wrm8el-FWR(ZG@M0ofl2KpN1n)v2A85c$9 Vx|aX`eL!RK3!oKX5H(l(Gyo(!DuDn1 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_0.cfe b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_0.cfe new file mode 100644 index 0000000000000000000000000000000000000000..08389a805a3848511e2ec4418667142bd3bb0f0d GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1nn{Hvpj+>bjey;Ov^f=>BYds zqL-4H36cT=JqX3%#UBqdBi=wSB|jM|UIC@^P~=N8bD`qTAT;B0n7p|GNPk%hM4YJ? zs;-qqFD(UX7_$&mFa+chs7cIeP{Fe>lT1M-m1Gt`#954?^2_IpH literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_0.cfs b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_0.cfs new file mode 100644 index 0000000000000000000000000000000000000000..cfa0326a4a4f5f476dc8cf47cd341f29cc7b6862 GIT binary patch literal 3605 zcmd5;O^6&t6t3#-ndzBz-F1JGth*b{h@h~^_9~glj>@dDS&b&LB!jtV+Ge^Yw$5}< z`e!#$lsO0yMG%C5A_N3M$id(-pzI;!pcgNaiv&CwFA_!ZB3WN`cggx68?x~}Gomk|c@|@jj+rDL}x~C%;=U+Yl`3uK?`fz^v(1kazKK>%A z0{5PfyQHkyrscV-w$swRVsZ#opSXnFEDOR5gy(rJR)VXIXPb#xo`CTvGE5cCa0!%?cOu<;OyM|-iLT?-+JHw zO0`WKZrb&?Y7QYa;u^mW@$Dlod^hY*B}q?rLNA?D0y-tiznlks9= zVcD*l#MKiuFgc4w@rFR-6?oPqN>>tynQKYJ+X1nBR9^=?IzHmh@x8x)n4-{gY3CTl zeef7N9V{S0xQuV90|hnn1%9X4FgJ9EXfAPR)wXr-jbf#kSe?a%A{46WozuK?Z30{> zc@o{q1KBfML^EkB6)Q`nrKM82bV$MI9}%`lt4$o;^Bs^V9Z*#CmtYzo%y*2J(dBNt zD87qhC-mJX&orp(QFG<$i1uhBrL%Lj1hK?uD;hy)doN7My=8p1%q?@$HV9!BauRgP zBS3N@;g0N}oc!QX_+D;#fu z&8rwQ(@ACL#upgC_;6^!OHEfrP3|uA!Q8NvC zrLZaz=GTZ52(kZ=@W1OoBl!K2S)WT|bNxocJc|{SgU)qEvurRq2sl+B>}BBHJ2wfv ztfcZWcr1@q4q@%!fPBLY=UEr%ptO9fODaQd=jEYuXl+;N8$V zG1&Su0`4{#DJ}Lf_YS59F~(O`(%@LEQ^Uy^&Jw48^zx?s3+W$a11b6@d literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_0.si b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_0.si new file mode 100644 index 0000000000000000000000000000000000000000..2ab7534d22ada5884be22125c829f0dfeee3d65e GIT binary patch literal 384 zcmcD&o+B>oQ<|KbmuhYhoSL4SnpfhPmzK`}1nn{Hvpj+>bjey;Ov^f==>-yF2VzDL z14O_%AU-1(Q+_e4Pi9_e1$S0rS)yK9YF-hQ@q3U>CwO7luGb5mgodEthGOkpd|FD*(=WlhT|EzaNq>V{e*XrgCmsb^?psG9?F zeRgIEC&-ZElEmBsUPCiOLo;(DGZPa7b4zBncmuuUv{Y6gRh$Xo6f??0!q3zoxFo+Q vHN`D6H7BLmEx#x?u|zL7KP8pR$u&46J~+VD)rH}J#^e{E-~)mBN0;>hEWvRr literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_1.cfe b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_1.cfe new file mode 100644 index 0000000000000000000000000000000000000000..21bf1718829743c153c33a7801798bb393b5fdcc GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1nn{Hvpj+>bjey;Ov^f=>CeE$ z9}iO=Z=jcwpA1q31bPsPArD2qBr_K(J_kZGE{DmR8-Vner9i})oT2JkS@cq1nwU;N z1<$hRrKMCrILuR_f+0Y`JgD)^FCl^~vq9Q3Asmhts7f!8_7bSzIjG=oG>1S<;yekF hXPyd^Hw8JgB(ne_&Kn2Szx;s4vtQ2@^wLo@&Y literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_1.cfs b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_1.cfs new file mode 100644 index 0000000000000000000000000000000000000000..e0c01ce72d5c02c15c7ddee315df9c15aa06885d GIT binary patch literal 3605 zcmd5~vhHqlJ0290Y_C5%*}2TRX;y=YE@ntBF+($5v$oE3 z&-Tx5RuKjb1Qb0e1QEf5Cj}wkEf-gifHw~YFA@<6MDUOZxriiIb@!X8>FJ&v%t8v9 z>Z*G0d*6Hg>Q!~+m*(Ex$Nf67$aCsZyVbUR%g}UBN3>lybK$cWU;XL*nZ+X)-}vFF zS5SpYPlEKS?RuuQ=AL#;k2soLPf{s>bWIf=pA`;BnQTtZ7e*c$eRyowBgOIE6MOdV zn|yR?dS?G)+fROSgJH1t*LOc&XV!|#O}qYP)gh!xoR+JZb&sx!ab}zurZojt`#A;> z41I`t2aB^~Ys$gOCVuPI)!c`ADmj!$x40uVUX>dw!`ovAkq3BDM)S4P`(T36Y zlex_CB;GCFo@FHVg(Mc#Rok>Ycg1#Ex|hZSVT9yP;1R-inYy_Al19f8?#MER73gWK zo(?teX64J}PLf8r(m`QQH4LgDZEqtKmzFS_We-h;i25M#w8 zO~YNG>2%C8$T>tc<4KGJY7V0^^X$()%<=PoyvHz$5TF31p`i+Kp4y!0vbIE$mvKiAZ_DOk#txjI$yD1Qj%(VMv@=$V4Rcd>2o0daDoN6>|>uOHHdw3B{dBWVx5Wu0%(L5Jkz6JVyjKE4>Z$)XSPVqWE(4oPzFLOr1}_( zRjM4s0?Q*FX|;)?d%i>Dov|V1qkx-6{(%lRU+$iGq5WxU?LI+L?ja(sKtH5(@>1!g)=${2J2?0g9RiAm+(z(;5eTA9KWp$?mVTeB%bZcL50hDDy5NU(9JxZ z?xmPgo?n=sUpS&Zt73Fpq)WZjP|6F3RSo?umS>^GIl6*TTrKAMC*26TjWN$ZY|;_*()G~=VEM;M_}l}|K=gz ziw8nW+c6dh#d&1KBqDMDS={IuPoG@_h|xqg>cIf5FhN_2de#--z0!fVUcVH*g6-#f zODKQ8SWZQt06ra!U*n7oWeI}7@+_w)C54i$LuLfBpb3gRLgs$?IT4`)_?~FY{wkmi z^%Devtq)r4)Zi=IH&>7PY*UW+|G~iZ?Owky;>yV?h0bD8yvFV^!M|5;Qo5WlnYofQ bc_)}G9oIJ^svqz)w?<26`0;xF_u2mdxv~Z* literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_1.si b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_1.si new file mode 100644 index 0000000000000000000000000000000000000000..c463f3f1856f1f1c7842da43a2cd27f4d735a51b GIT binary patch literal 384 zcmcD&o+B>oQ<|KbmuhYhoSL4SnpfhPmzK`}1nn{Hvpj+>bjey;Ov^f==?@ZP2VzDL z14O_%AU-1(Q+_e4Pi9_e1$S0rS)yK9YF-hQ@q3U>CwO7luGb5mgodEthGOkpd|FD*(=WlhT|EzaNq>V{e*XrgCmsb^?psG9?F zeRgIEC&-ZElEmBsUPCiOLo;(DGZRY#OA}_cctgG9v|qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1nn{Hvpj+>bjey;Ov^f=8O*@N z9}iJ(ZV+#vmr|AjQUwHh5Q?FdMK3L-1j^YArGEnj^Ku~^#&r;yWj2dmN@ga6!{!N9 z=>^hW0TrAK6%2vdX$rP8KN%|j94eoOB43gTwTV3xBG0%SCJ%KpRG#AxM4ovn$R$ug jo{3OH&%!i;EiK6`fQa+PLFJbp(3t!J%4Tp?oS_K-ew{(I literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_2.cfs b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_2.cfs new file mode 100644 index 0000000000000000000000000000000000000000..e4ad876c0a4befbd94864deb06c1fc094a36b95a GIT binary patch literal 3605 zcmd57fK6rPz~+iM3Jnh+pO0>xZFC1jnJgjf|$=_)D(sk4BK7Z5i34g?skh!Z^ng$gNT8g0s47+Mq2k=$XeDk4`et`096w+v19bOdevqxDw%#e#c6Z?`c)gxtoD zG(32zI9XZ4*Z%!I_f_uQ8$XYJi$5*a%{ASjRhK#}(w6RhQY;q}BPt#(LU5*cwd!4M zQP9%p>*!G)#GcutRns!)m14OxQ!35Oy>UXt=&=M#wArGL?)eT_OdnG<^dB(|FcvfN z9=g4mj^cHU#jXET`tlar`cSy_88z7SX{&C#EHgbDE=X0=Km?;_Q6m$J)Cr6hZPzp5 zDJS5gHGWoO;dCIdfmK&Rg{AyU9MU-MhI_$@8{r~$07-RR!!C8@L1VdZ8>IB zcObviX_9U6!Zu<1PK`>CJH82olW&Bzt5Y%jqB(;k7t5ub}dXOBFGufPyFAVJ1`O@I7mxqRT zkL=mIZ}gS1@rnHh#9Zun@ZHIPrcX8O+NEWO(q$kqS2JrKxRK&CEx2J;W63cF5L-mq z#?rxfVZ)f5N77ussvD{dMg=;YO(s|3U{OYxJd`l*DWY-Tc}(ugpx4iNzqKqT8yT>V zB8$2VCQq3(Il^QqOB}Sn#K$CGe{x?q6vEpKJFiB{3y|M_v2f*h+n~!?d75KQ)=A%wO9}T(hw>nEG|Gc6ci$FQ}cr^c5 zaMm|UuE?W2FBr;6sbuSYpQ(tDd0zV*iNfOGd!jkxGv4~{lPmIl`rL}uXz^11aAV_Z zb}19S7!T<~T9$?0` zWz3}P2jqCOtL#kw=>N&08SX9wynt<038aOkWq{3MNqWd$frD?aj!?dvAk1te37-bS Z*|Yj8;Ia0FnDdKA9=|Ehy^}`^{{v*C0d4>Q literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_2.si b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_2.si new file mode 100644 index 0000000000000000000000000000000000000000..976cdfd8834fb4572ad90c4802b71ae6e4f32560 GIT binary patch literal 384 zcmcD&o+B>oQ<|KbmuhYhoSL4SnpfhPmzK`}1nn{Hvpj+>bjey;Ov^f=84MC*2VzDL z14O_%AU-1(Q+_e4Pi9_e1$S0rS)yK9YF-hQ@q3U>CwO7luGb5mgodEthGOkpd|FD*(=WlhT|EzaNq>V{e*XrgCmsb^?psG9?F zeRgIEC&-ZElEmBsUPCiOLo;(DGc!v=Q!{4Pcq6^yOg12yoR$iqiW%i0;b&?PT#{du vn&Ot3nv+uOmS2>cSfZDkpOVVucVh9WAY17@PWXg_+M!NJ2r7! literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/write.lock b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/write.lock new file mode 100644 index 0000000..e69de29 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-1.ckp b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-1.ckp new file mode 100644 index 0000000000000000000000000000000000000000..93f8939b67cd0597d395fa17f83118bea5f33102 GIT binary patch literal 80 ycmcD&o+HkjoL#`cz`z8=AnGxYU>e{XX@spSV2s)3P~+4 z0WuAhYJnbr07i!YPyiEwNz8bDqX)gppP*C>0*t%VMDqcak?QRL literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-2.ckp b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-2.ckp new file mode 100644 index 0000000000000000000000000000000000000000..9094073ec578561f782ff209cd36e225d8ac69a4 GIT binary patch literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$DXuGys)@sbxH%G5G~deaE3)p#YRy7r6ic literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-2.tlog b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-2.tlog new file mode 100644 index 0000000000000000000000000000000000000000..b3d195bc77a95b87d36e3d8117bb151cd83a7cb5 GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgo zg7R`LeF7@N$_xz5vI2V&b8_;N6H7Al^Wrm8el-FWR;3j>mgfWo1XreJM^x$>IU9zA V`aAyqeL!RK3!oKXQ1)5!3IIYoE297a literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_0.cfe b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_0.cfe new file mode 100644 index 0000000000000000000000000000000000000000..f50afe0e84edab11862e5d897d059029673d688e GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1nn{Hvpj+>bjey;Ov^f=8Nk5B zqL-4H36cT=JqX3%#UBqdBi=wSB|jM|UIC@^P~=N8bD`qTAT;B0n7p|GNPk%hM4YJ? zs;-qqFD(UX7_$&mFa+chs7cIeP{Fe>lT1M-m1Gt`#954?^2FOFq8e@7_Eyp#?i_QhxaEYy2 zHOjSLd5&>c72)M6;T0*B&dAx^z;j2QA3XZP(C|q9*zwV^7sn?iPrSry`{KKm|ERX1 zGYzZu(Yj5@I3rN)`osEt0v0akigoEqFL%v84Vm528-pJ(!)jbbcp zAaQZLZJT9q*qCYPWtD6hHBw$DjtkRbz%rN)$iZqRKX*ZMT(Y8>+C|bNraPySrsZ!+ z2n+W`jPZV5``1}4>`B1aPkFz+G#2ipKt8lA{G_n(h*IM%jHlAT!T60orjfHh?9zbe zgMgP5NQ3vZMw>WE*%&57NvSHKEowjW+wr!{@kY$vz4A9TVv?QunrqoaUp7cXcb4G< z&Y3#745s7#X@dj|R8)osJ&0ucwNv+YC}wQkB>6^RWRC_3#$zfjo_Sk^xr9Ag#vUcZ z@ccI@#`yI>0&iD-DaJ|!J01$YAfbbVbo*v6zJw{2K9FEHBF?-z{q6VEn&D_Mv9KIe zP2%#}I+&csqIh4R@$xG^Lb|t3s9)dFPiE#Y^r>w7)jFDNn!3j!np``nf++vbUkVi-zmY?|$oq-<< z*Yvl5jlO;|MrLiBNzvrz+mZf9`FGlmhJtpqp!gTcIkRp#RHWxF$%$1%r#A|#B4Kis z*uD_^4GDg`X6ydnm(1E+5}VVm*Nw|qK^bUVm#U@(Ci?-W3WO63ymRHop_i0IJ_e8F zBh{8|G&LJ~9{gm{9^G*vQ99zo6KJ7MSZ%vTM2H=OhwHMsMQq2gOen#pp>?RY^QQ#d zX)sb!>?7{YCkHXYS5lJTSgaGn$r#W8cl)HDX-jk63lUmkik<0UCguQlv&v6Lhm;Ki XZs^%(I^29~`sezW)BO76%-+=h98vz) literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_0.si b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_0.si new file mode 100644 index 0000000000000000000000000000000000000000..f2eb19b1ef4333a98720c714201ec90f43965c32 GIT binary patch literal 384 zcmX|7%T59@6a~$IjH2<8xH7ub1x-7`04oy}q6vw_acKf|rXz(uNZTR)0f}1^7k-Tk zKfs-zpr2vO>n82(x#ynKn|txY4);4*Oa!UJh&*#5%&kae&c^g{`f+pr{d&}Fybr(5 zx~^8VC+{BaS^WW5DXP-PvMcg#+B?Q?!L4Z@lX7({(%3X zPiq}`FwDFenCopd=#vHGs=D+%ugiDzl0?aD{WwkIk;}t*=^Fi9r|f)o`-d=1=E}p^V5zc`gM#afy;pxQ%xmo#v01=Z6-v9sr literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-3.ckp b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-3.ckp new file mode 100644 index 0000000000000000000000000000000000000000..bbb1351238ab9581ce360c5a530aebd1773b3fb0 GIT binary patch literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$Ej3G=L-rVlp1knEV1Jw&mq6V*r(17wG^1 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-3.tlog b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-3.tlog new file mode 100644 index 0000000000000000000000000000000000000000..40c68f6d287a9a30612cc7eec4ac98dc7ffc868d GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgoE}p^V5zc`gM#afy;pxQ%xmo#v01=Z6-v9sr literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-4.tlog b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-4.tlog new file mode 100644 index 0000000000000000000000000000000000000000..40c68f6d287a9a30612cc7eec4ac98dc7ffc868d GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgoE}p^V5zc`gM#afy;pxQ%xmo#v01=Z6-v9sr literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog.ckp b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog.ckp new file mode 100644 index 0000000000000000000000000000000000000000..a3bf659ad2f090fa68360ff71df88751ca8b8292 GIT binary patch literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$D9mG=L-rVlp1knEV1J<|yMl9RQHg7MB13 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/_state/state-11.st b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/_state/state-11.st new file mode 100644 index 0000000000000000000000000000000000000000..1eb87602a82f9e5485a15f480b9779c57c412fb3 GIT binary patch literal 811 zcmcD&o+Hj$T#{Il%D}+D2*OsHT&%zPa!X3`%k%V7OHxwHGLut(wUwn76=&w>U7J{x zUs{rxmmZ&2nj2r7kyw;ce4+(xfOCF9YF>MBY6(cX_}9$Lyp+@my~NUz{P@(0g2cR( z_@dN;oXq6JVizOb#GIT-5CzFasfi^(ljBo>j_@%wGc+_aH!?OcHa9n(4p9NLDJium zK0gg^fP=wQbSa2a9893578K=|Wu~O2#OEdEruw1zrW2yMv@|m%)FR9&)X6u~FDNh9 z(kGxItjxf`EGuvdL#CYNNE zr9#8R3FyJ!?YW5s1)#wA@t38~#m$EyXX4$w!wNjD_m5tWDY2h5WzQ)SMgBQgr8qg} zYzv%KKL76g%vn|GHFjq{CboJopYvQ0uc#;7C$oTkrEw#({iFq&?5lb|r=+fEak}W` zb)&^uc}*h!-`nppzuzkL6I8ZaSby&)yy0dm&=dE8bttKSF(6b={(JbG!pBN-I)*qP(+9iz3V%fBydc`+&ye7eLp7 J!OP@hp#Y_nTB!g4 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/_state/state-2.st b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/_state/state-2.st new file mode 100644 index 0000000000000000000000000000000000000000..20245ac928862d216e84726b29c0813af389ae1e GIT binary patch literal 125 zcmcD&o+Hj$T#{Il%D}+D2*OsHT&%y^3W_pw6N@U9J2UfAQY+$1OEXhK)1#6Nbkh^d z1GAl@a&y9>!km*UT^)N8b8_;N6H7Al^Wrm8el-FW7H1l|q`GA~1x0!no4DpCS(y4J Vl?ML)eL!RK3!oKXaK-zLE&yGeE6M-> literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/index/write.lock b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/index/write.lock new file mode 100644 index 0000000..e69de29 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-1.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-1.ckp new file mode 100644 index 0000000000000000000000000000000000000000..93bf2ab854a2bfb314f2fa5364d23b66f37b6e20 GIT binary patch literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$D{;?BE|%4dVfg$uD5)r?9f$0|0a;9?}2+ literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-1.tlog b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-1.tlog new file mode 100644 index 0000000000000000000000000000000000000000..00b057da145fd188ad332e31bef428d2e578ebb7 GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgoXdemFD^Gr750Og{HZV031>cKmY&$ literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-2.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-2.ckp new file mode 100644 index 0000000000000000000000000000000000000000..ca4feaab9f663bcd4b43830a5042f520e86038ae GIT binary patch literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$DXu?BE|%4dVfg$uD5)%Y8P~004EUA4C8E literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-2.tlog b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-2.tlog new file mode 100644 index 0000000000000000000000000000000000000000..00b057da145fd188ad332e31bef428d2e578ebb7 GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgoXdemFD^Gr750Og{HZV031>cKmY&$ literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-3.tlog b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-3.tlog new file mode 100644 index 0000000000000000000000000000000000000000..00b057da145fd188ad332e31bef428d2e578ebb7 GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgoXdemFD^Gr750Og{HZV031>cKmY&$ literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog.ckp new file mode 100644 index 0000000000000000000000000000000000000000..c4f3324f72e4f23ed2825d623fdf88d95aa9cfec GIT binary patch literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$Ej3?BE|%4dVfg$uD5)=SM5t1psyDA58!N literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/_state/state-2.st b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/_state/state-2.st new file mode 100644 index 0000000000000000000000000000000000000000..976c79ac628eb12a760b674bcf6ac02f68526993 GIT binary patch literal 125 zcmcD&o+Hj$T#{Il%D}+D2*OsHT&%y^3W_pw6N@U9J2UfAQY+$1OEXhK)1#6Nbkh^d z1GAl@a&y9>!km*UT^)N8b8_;N6H7Al^Wrm8el-FWW?6WL6eJr|1vwU0ML1QumjvfU VM5h1#eL!RK3!oKXV9>iH3IJ?4EA{{Y literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_0.cfe b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_0.cfe new file mode 100644 index 0000000000000000000000000000000000000000..9d3aa4fbf8a3c60d89ac2af5aff8ccf8e06b68cf GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1nn{Hvpj+>bjey;Ov^f=>CC{z zqL-4H36cT=JqX3%${!CiBi=wSB|jM|4mJYF&O?ze$;^eyKZMYXk74rW1|a=qDG+g{ zBT#j#S@hCUDj*!@e5hau$R$vdm=8k*OJF9Mf=nvOEP#l!m_y~Sf=nuba9DYug1=#! kpw>eTWn+hGehbu;2NmS{0@WORKx6U?r~wS8XU-G`0ApA|+W-In literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_0.cfs b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_0.cfs new file mode 100644 index 0000000000000000000000000000000000000000..b7c65d9ce1ba04164c32d9c805518bb61dede46f GIT binary patch literal 4183 zcmd5;-D@0G6umuCBjw?#E9Cj=i*Y`TL=hBrml4 z>e^$u8OO4HZ_05ihJS`9SWue(_Sw&W12ky)+59Ge^rOoe$MY@wE$?;L^0`}Z%AmE~ zZx*#nId=3Z_OzNxXS9}V>l1DJ+B^1lc6Ik0=>P7})RDU{M!da*){u?-cVL((b6)>1eRC}$YE50V(dX~yoR#iuyBEtG9$ z1eG|laWY6cA+%jC@vqmXe}ZE5)QdHq6HDlVu~6k+(jpEQ(|E3wn-p*nvFnXI7T`k| z%nd2~XF(pMAqSNzM$-<jCxr!2l;dQ*nypN1L=4|My& zB#a6vnGiqnJC!lJ3_1pwv70g}0|2Adgd=EMV6L2awIIeSt!WyqfmpO!@Gl%w`hx89 z&PH1|7+jUK;&>zal&LiTANypGQ!v|^x?tyP1S#!zOQrJxBQio;rp(qPjrwE zVFBqAv${t9NDb?-we&ZK^~M?;AnASN%V8b2`5^f$ItEUWOgpI!>-FLssHO@#lpXItkVzcKy;v~> z)FUnVBaE}5;CR?~hy80|4;|`|d`*&uLsUdU=OmR(axADO$8sTJIVpie!(C%(4OK6M zeOK695yURBpd!X{Su#u|$AW5dEcU;Q1+bvm^)9LboUGV(tP3h)EGuXwdM!B?RFh*_ z{f}Z<4Jl}0e?_9SV=SnMv3x8Us{d%m$p|e<90dAmxB>~JCCWzQQ+jSb9jH!#9y zVf_U>G9NsIHM~EP)V%8aytPboBvbPEyCvHZl%sQt9YOHu854&-o=en2c&fFP7G0}i zxGN>`u&%%bSPwvikZ9c$!((`XAe^dO=8DK2!i!x}TH>x}IkqVJ|KYVyzD-BM30$b+ z5vn2$HK_tkL5?P;vPo||mjs6yPfRK*klrTRjjLX~kM}U^=44B+;mn?c(%3dX`=Fx`plJ^Kgjcs9<)FB8+L9;m;e9( literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_0.si b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_0.si new file mode 100644 index 0000000000000000000000000000000000000000..d365f87c9fe317b127708be7ac77e42d24842a66 GIT binary patch literal 384 zcmcD&o+B>oQ<|KbmuhYhoSL4SnpfhPmzK`}1nn{Hvpj+>bjey;Ov^f==?oHM2VzDL z14O_%AU-1(Q+_e4Pi9_e1$S0rS)yK9YF-hQ@q3U>CwO7luGb5mgodEthGOkpd|FD*(=WlhT|EzaNq>V{e*XrgCmsb^?psG9?F zeRgIEC&-ZElEmBsUPCiOLo;(DV-pi&69Z;%x6voDFdLs;FrrDpxuc+$AgeQE=w+7_8L$iC&lRcP Mx|&P#_&I#h5illXNB{r; literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-2.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-2.ckp new file mode 100644 index 0000000000000000000000000000000000000000..d9106c6d0be99028a3f1edc854232a7fe66857a2 GIT binary patch literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$DXuG=L-rVlp1knEV1J7V}SQ5&)A*7jyss literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-2.tlog b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-2.tlog new file mode 100644 index 0000000000000000000000000000000000000000..4d52c890ce86d5b4b9e5c0a9c66d7166712aaa23 GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgoHZchF#x!%FL{uzmu@mcACDQTI301KTAX#fBK literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-3.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-3.ckp new file mode 100644 index 0000000000000000000000000000000000000000..bbb1351238ab9581ce360c5a530aebd1773b3fb0 GIT binary patch literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$Ej3G=L-rVlp1knEV1Jw&mq6V*r(17wG^1 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-3.tlog b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-3.tlog new file mode 100644 index 0000000000000000000000000000000000000000..4d52c890ce86d5b4b9e5c0a9c66d7166712aaa23 GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgoHZchF#x!%FL{uzmu@mcACDQTI301KTAX#fBK literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-4.tlog b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-4.tlog new file mode 100644 index 0000000000000000000000000000000000000000..4d52c890ce86d5b4b9e5c0a9c66d7166712aaa23 GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgoHZchF#x!%FL{uzmu@mcACDQTI301KTAX#fBK literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog.ckp new file mode 100644 index 0000000000000000000000000000000000000000..a3bf659ad2f090fa68360ff71df88751ca8b8292 GIT binary patch literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$D9mG=L-rVlp1knEV1J<|yMl9RQHg7MB13 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/_state/state-2.st b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/_state/state-2.st new file mode 100644 index 0000000000000000000000000000000000000000..7d455ef1162001de815d8c70c3374d3cffa25054 GIT binary patch literal 125 zcmcD&o+Hj$T#{Il%D}+D2*OsHT&%y^3W_pw6N@U9J2UfAQY+$1OEXhK)1#6Nbkh^d z1GAl@a&y9>!km*UT^)N8b8_;N6H7Al^Wrm8el-FWR(h5emQ|Q$28I;omU`-Dx_gxu VCI!km*UT^)N8b8_;N6H7Al^Wrm8el-FWX8M&o8hbid2I&^M`n!c%##e@# Vq^1A-I!RE zUs{rxmmZ&2nj2r7kyw;ce4+(xfOCF9YF>MBY6(cX_}9$Lyp+@my~NUz{P@(0g2cR( z_@dN;oXq6JVizOb#GIT-5CzFasfi^(ljDK*r1}_|85)|I8yTAz8<-hRho}JBl$2T& zpPvRdz`njV#Gpqrjp9+>SM zm75b573Q2=>FPKIq5|q^J+K>7Q{2o93=K>yEf+#$%ZoBgQuWFcGfU#r@{8gVlS?wo zQlVku1oYtV_T0pR0#IQ5_{-Ai;^xCJCD1ePumR5>?(=p_xVdh`Yce%XoaweggL}$(n$jDKx zJo6|=Ev35g;oA=-6>oq0De@LJJ#b*Z=>_3_sfvb21Z)Q;UE7?kOnB z%uOt+j4w$o$}RqJ3Q zWqf6*Nm}~P2E!krSr*^gIt4{~7n``|CRv#JCY1*M{Qdj)0gcHofUX4t``HTn E0hgCoG5`Po literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/node.lock b/deploy/cratedata/data/nodes/0/node.lock new file mode 100644 index 0000000..e69de29 diff --git a/deploy/cratedata/log/gc.log.0.current b/deploy/cratedata/log/gc.log.0.current new file mode 100644 index 0000000..2dc82c1 --- /dev/null +++ b/deploy/cratedata/log/gc.log.0.current @@ -0,0 +1,778 @@ +OpenJDK 64-Bit Server VM (25.181-b13) for linux-amd64 JRE (1.8.0_181-b13), built on Oct 23 2018 12:37:29 by "buildozer" with gcc 6.4.0 +Memory: 4k page, physical 8156056k(4063864k free), swap 1048572k(1009404k free) +CommandLine flags: -XX:CMSInitiatingOccupancyFraction=75 -XX:+DisableExplicitGC -XX:GCLogFileSize=67108864 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/data -XX:InitialHeapSize=536870912 -XX:MaxHeapSize=536870912 -XX:MaxNewSize=178958336 -XX:MaxTenuringThreshold=6 -XX:NewSize=178958336 -XX:NumberOfGCLogFiles=16 -XX:OldPLABSize=16 -XX:OldSize=357912576 -XX:+PrintGC -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+UseGCLogFileRotation -XX:+UseParNewGC +2021-01-26T15:10:49.245+0000: 1.183: Total time for which application threads were stopped: 0.0003664 seconds, Stopping threads took: 0.0001880 seconds +2021-01-26T15:10:50.258+0000: 2.196: Total time for which application threads were stopped: 0.0122235 seconds, Stopping threads took: 0.0120086 seconds +2021-01-26T15:10:50.938+0000: 2.876: Total time for which application threads were stopped: 0.0002511 seconds, Stopping threads took: 0.0000579 seconds +2021-01-26T15:10:51.860+0000: 3.798: Total time for which application threads were stopped: 0.0001835 seconds, Stopping threads took: 0.0000169 seconds +2021-01-26T15:10:52.038+0000: 3.976: Total time for which application threads were stopped: 0.0032265 seconds, Stopping threads took: 0.0000640 seconds +2021-01-26T15:10:52.593+0000: 4.531: Total time for which application threads were stopped: 0.0237411 seconds, Stopping threads took: 0.0129674 seconds +2021-01-26T15:10:52.731+0000: 4.669: Total time for which application threads were stopped: 0.0005595 seconds, Stopping threads took: 0.0000672 seconds +2021-01-26T15:10:53.751+0000: 5.689: Total time for which application threads were stopped: 0.0154032 seconds, Stopping threads took: 0.0152718 seconds +2021-01-26T15:10:54.519+0000: 6.457: Total time for which application threads were stopped: 0.0003005 seconds, Stopping threads took: 0.0000159 seconds +2021-01-26T15:10:54.915+0000: 6.853: Total time for which application threads were stopped: 0.0003153 seconds, Stopping threads took: 0.0000219 seconds +2021-01-26T15:10:54.942+0000: 6.880: Total time for which application threads were stopped: 0.0003272 seconds, Stopping threads took: 0.0000431 seconds +2021-01-26T15:10:54.989+0000: 6.927: Total time for which application threads were stopped: 0.0002890 seconds, Stopping threads took: 0.0000942 seconds +2021-01-26T15:10:55.140+0000: 7.078: Total time for which application threads were stopped: 0.0004424 seconds, Stopping threads took: 0.0001182 seconds +2021-01-26T15:10:56.149+0000: 8.087: Total time for which application threads were stopped: 0.0081562 seconds, Stopping threads took: 0.0080244 seconds +2021-01-26T15:10:57.123+0000: 9.061: Total time for which application threads were stopped: 0.0004429 seconds, Stopping threads took: 0.0000232 seconds +2021-01-26T15:10:57.232+0000: 9.170: Total time for which application threads were stopped: 0.0045740 seconds, Stopping threads took: 0.0041877 seconds +2021-01-26T15:10:57.236+0000: 9.174: Total time for which application threads were stopped: 0.0000663 seconds, Stopping threads took: 0.0000316 seconds +2021-01-26T15:10:57.236+0000: 9.174: Total time for which application threads were stopped: 0.0000859 seconds, Stopping threads took: 0.0000633 seconds +2021-01-26T15:10:57.236+0000: 9.174: Total time for which application threads were stopped: 0.0000414 seconds, Stopping threads took: 0.0000226 seconds +2021-01-26T15:10:57.237+0000: 9.174: Total time for which application threads were stopped: 0.0000404 seconds, Stopping threads took: 0.0000223 seconds +2021-01-26T15:10:58.118+0000: 10.056: Total time for which application threads were stopped: 0.0001397 seconds, Stopping threads took: 0.0000201 seconds +2021-01-26T15:10:58.179+0000: 10.117: Total time for which application threads were stopped: 0.0001566 seconds, Stopping threads took: 0.0000635 seconds +2021-01-26T15:10:58.238+0000: 10.176: Total time for which application threads were stopped: 0.0002020 seconds, Stopping threads took: 0.0001123 seconds +2021-01-26T15:10:58.338+0000: 10.276: Total time for which application threads were stopped: 0.0000887 seconds, Stopping threads took: 0.0000199 seconds +2021-01-26T15:10:58.347+0000: 10.285: Total time for which application threads were stopped: 0.0004353 seconds, Stopping threads took: 0.0001207 seconds +2021-01-26T15:10:58.544+0000: 10.482: [GC (CMS Initial Mark) [1 CMS-initial-mark: 0K(349568K)] 134187K(506816K), 0.1070967 secs] [Times: user=0.06 sys=0.01, real=0.11 secs] +2021-01-26T15:10:58.653+0000: 10.591: Total time for which application threads were stopped: 0.1092331 seconds, Stopping threads took: 0.0000383 seconds +2021-01-26T15:10:58.653+0000: 10.591: [CMS-concurrent-mark-start] +2021-01-26T15:10:58.659+0000: 10.597: [CMS-concurrent-mark: 0.006/0.006 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] +2021-01-26T15:10:58.660+0000: 10.598: [CMS-concurrent-preclean-start] +2021-01-26T15:10:58.663+0000: 10.601: [CMS-concurrent-preclean: 0.003/0.003 secs] [Times: user=0.01 sys=0.00, real=0.00 secs] +2021-01-26T15:10:58.664+0000: 10.602: [CMS-concurrent-abortable-preclean-start] +2021-01-26T15:10:58.920+0000: 10.858: [GC (Allocation Failure) 2021-01-26T15:10:58.921+0000: 10.859: [ParNew2021-01-26T15:10:58.977+0000: 10.915: [CMS-concurrent-abortable-preclean: 0.004/0.312 secs] [Times: user=0.14 sys=0.02, real=0.31 secs] + +Desired survivor size 8945664 bytes, new threshold 1 (max 6) +- age 1: 16310576 bytes, 16310576 total +: 139776K->15980K(157248K), 0.0743589 secs] 139776K->15980K(506816K), 0.0777526 secs] [Times: user=0.04 sys=0.01, real=0.08 secs] +2021-01-26T15:10:59.000+0000: 10.938: Total time for which application threads were stopped: 0.0793805 seconds, Stopping threads took: 0.0001476 seconds +2021-01-26T15:10:59.016+0000: 10.954: [GC (CMS Final Remark) [YG occupancy: 18691 K (157248 K)]2021-01-26T15:10:59.017+0000: 10.955: [Rescan (parallel) , 0.0142217 secs]2021-01-26T15:10:59.032+0000: 10.970: [weak refs processing, 0.0004599 secs]2021-01-26T15:10:59.033+0000: 10.971: [class unloading, 0.0042387 secs]2021-01-26T15:10:59.038+0000: 10.976: [scrub symbol table, 0.0147196 secs]2021-01-26T15:10:59.056+0000: 10.994: [scrub string table, 0.0010332 secs][1 CMS-remark: 0K(349568K)] 18691K(506816K), 0.0421829 secs] [Times: user=0.02 sys=0.00, real=0.05 secs] +2021-01-26T15:10:59.059+0000: 10.997: Total time for which application threads were stopped: 0.0585034 seconds, Stopping threads took: 0.0151283 seconds +2021-01-26T15:10:59.060+0000: 10.998: [CMS-concurrent-sweep-start] +2021-01-26T15:10:59.060+0000: 10.998: [CMS-concurrent-sweep: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] +2021-01-26T15:10:59.061+0000: 10.999: [CMS-concurrent-reset-start] +2021-01-26T15:10:59.099+0000: 11.037: Total time for which application threads were stopped: 0.0016321 seconds, Stopping threads took: 0.0015498 seconds +2021-01-26T15:10:59.099+0000: 11.037: Total time for which application threads were stopped: 0.0000467 seconds, Stopping threads took: 0.0000126 seconds +2021-01-26T15:10:59.099+0000: 11.037: Total time for which application threads were stopped: 0.0000334 seconds, Stopping threads took: 0.0000080 seconds +2021-01-26T15:10:59.099+0000: 11.037: Total time for which application threads were stopped: 0.0000317 seconds, Stopping threads took: 0.0000078 seconds +2021-01-26T15:10:59.099+0000: 11.037: Total time for which application threads were stopped: 0.0000316 seconds, Stopping threads took: 0.0000076 seconds +2021-01-26T15:10:59.099+0000: 11.037: Total time for which application threads were stopped: 0.0000359 seconds, Stopping threads took: 0.0000090 seconds +2021-01-26T15:10:59.099+0000: 11.037: Total time for which application threads were stopped: 0.0000711 seconds, Stopping threads took: 0.0000078 seconds +2021-01-26T15:10:59.100+0000: 11.038: Total time for which application threads were stopped: 0.0000524 seconds, Stopping threads took: 0.0000103 seconds +2021-01-26T15:10:59.100+0000: 11.038: Total time for which application threads were stopped: 0.0000385 seconds, Stopping threads took: 0.0000094 seconds +2021-01-26T15:10:59.100+0000: 11.038: Total time for which application threads were stopped: 0.0000408 seconds, Stopping threads took: 0.0000078 seconds +2021-01-26T15:10:59.108+0000: 11.046: Total time for which application threads were stopped: 0.0078584 seconds, Stopping threads took: 0.0000089 seconds +2021-01-26T15:10:59.108+0000: 11.046: Total time for which application threads were stopped: 0.0000693 seconds, Stopping threads took: 0.0000173 seconds +2021-01-26T15:10:59.108+0000: 11.046: Total time for which application threads were stopped: 0.0000456 seconds, Stopping threads took: 0.0000108 seconds +2021-01-26T15:10:59.108+0000: 11.046: Total time for which application threads were stopped: 0.0000430 seconds, Stopping threads took: 0.0000099 seconds +2021-01-26T15:10:59.115+0000: 11.053: Total time for which application threads were stopped: 0.0050315 seconds, Stopping threads took: 0.0047348 seconds +2021-01-26T15:10:59.115+0000: 11.053: Total time for which application threads were stopped: 0.0001091 seconds, Stopping threads took: 0.0000538 seconds +2021-01-26T15:10:59.116+0000: 11.053: Total time for which application threads were stopped: 0.0000558 seconds, Stopping threads took: 0.0000113 seconds +2021-01-26T15:10:59.116+0000: 11.054: [CMS-concurrent-reset: 0.037/0.055 secs] [Times: user=0.03 sys=0.01, real=0.05 secs] +2021-01-26T15:10:59.122+0000: 11.060: Total time for which application threads were stopped: 0.0034749 seconds, Stopping threads took: 0.0033305 seconds +2021-01-26T15:10:59.122+0000: 11.060: Total time for which application threads were stopped: 0.0000628 seconds, Stopping threads took: 0.0000129 seconds +2021-01-26T15:10:59.122+0000: 11.060: Total time for which application threads were stopped: 0.0000664 seconds, Stopping threads took: 0.0000119 seconds +2021-01-26T15:10:59.124+0000: 11.062: Total time for which application threads were stopped: 0.0002149 seconds, Stopping threads took: 0.0001727 seconds +2021-01-26T15:10:59.125+0000: 11.063: Total time for which application threads were stopped: 0.0011592 seconds, Stopping threads took: 0.0011240 seconds +2021-01-26T15:10:59.126+0000: 11.063: Total time for which application threads were stopped: 0.0000578 seconds, Stopping threads took: 0.0000098 seconds +2021-01-26T15:10:59.126+0000: 11.064: Total time for which application threads were stopped: 0.0000659 seconds, Stopping threads took: 0.0000428 seconds +2021-01-26T15:10:59.127+0000: 11.065: Total time for which application threads were stopped: 0.0002484 seconds, Stopping threads took: 0.0001913 seconds +2021-01-26T15:10:59.134+0000: 11.072: Total time for which application threads were stopped: 0.0020425 seconds, Stopping threads took: 0.0019052 seconds +2021-01-26T15:10:59.134+0000: 11.072: Total time for which application threads were stopped: 0.0000946 seconds, Stopping threads took: 0.0000131 seconds +2021-01-26T15:10:59.136+0000: 11.074: Total time for which application threads were stopped: 0.0015851 seconds, Stopping threads took: 0.0015369 seconds +2021-01-26T15:10:59.691+0000: 11.629: Total time for which application threads were stopped: 0.0002393 seconds, Stopping threads took: 0.0001154 seconds +2021-01-26T15:11:00.135+0000: 12.073: Total time for which application threads were stopped: 0.0002422 seconds, Stopping threads took: 0.0001187 seconds +2021-01-26T15:11:00.224+0000: 12.162: [GC (Allocation Failure) 2021-01-26T15:11:00.225+0000: 12.163: [ParNew +Desired survivor size 8945664 bytes, new threshold 6 (max 6) +- age 1: 5678808 bytes, 5678808 total +: 155756K->10197K(157248K), 0.1636639 secs] 155756K->15594K(506816K), 0.1715476 secs] [Times: user=0.09 sys=0.02, real=0.17 secs] +2021-01-26T15:11:00.397+0000: 12.335: Total time for which application threads were stopped: 0.1732165 seconds, Stopping threads took: 0.0001678 seconds +2021-01-26T15:11:00.399+0000: 12.337: Total time for which application threads were stopped: 0.0003045 seconds, Stopping threads took: 0.0001971 seconds +2021-01-26T15:11:00.399+0000: 12.337: Total time for which application threads were stopped: 0.0000448 seconds, Stopping threads took: 0.0000100 seconds +2021-01-26T15:11:00.399+0000: 12.337: Total time for which application threads were stopped: 0.0000487 seconds, Stopping threads took: 0.0000165 seconds +2021-01-26T15:11:00.408+0000: 12.346: Total time for which application threads were stopped: 0.0082031 seconds, Stopping threads took: 0.0080802 seconds +2021-01-26T15:11:00.408+0000: 12.346: Total time for which application threads were stopped: 0.0001397 seconds, Stopping threads took: 0.0000739 seconds +2021-01-26T15:11:00.408+0000: 12.346: Total time for which application threads were stopped: 0.0001614 seconds, Stopping threads took: 0.0000313 seconds +2021-01-26T15:11:00.410+0000: 12.348: Total time for which application threads were stopped: 0.0007654 seconds, Stopping threads took: 0.0007095 seconds +2021-01-26T15:11:00.412+0000: 12.350: Total time for which application threads were stopped: 0.0020902 seconds, Stopping threads took: 0.0020310 seconds +2021-01-26T15:11:00.413+0000: 12.351: Total time for which application threads were stopped: 0.0008683 seconds, Stopping threads took: 0.0008261 seconds +2021-01-26T15:11:00.413+0000: 12.351: Total time for which application threads were stopped: 0.0001137 seconds, Stopping threads took: 0.0000481 seconds +2021-01-26T15:11:00.413+0000: 12.351: Total time for which application threads were stopped: 0.0000478 seconds, Stopping threads took: 0.0000087 seconds +2021-01-26T15:11:00.416+0000: 12.354: Total time for which application threads were stopped: 0.0025961 seconds, Stopping threads took: 0.0025222 seconds +2021-01-26T15:11:00.416+0000: 12.354: Total time for which application threads were stopped: 0.0000452 seconds, Stopping threads took: 0.0000107 seconds +2021-01-26T15:11:00.417+0000: 12.355: Total time for which application threads were stopped: 0.0001043 seconds, Stopping threads took: 0.0000146 seconds +2021-01-26T15:11:00.417+0000: 12.355: Total time for which application threads were stopped: 0.0000449 seconds, Stopping threads took: 0.0000092 seconds +2021-01-26T15:11:00.417+0000: 12.355: Total time for which application threads were stopped: 0.0000408 seconds, Stopping threads took: 0.0000090 seconds +2021-01-26T15:11:00.418+0000: 12.356: Total time for which application threads were stopped: 0.0000464 seconds, Stopping threads took: 0.0000162 seconds +2021-01-26T15:11:00.418+0000: 12.356: Total time for which application threads were stopped: 0.0000543 seconds, Stopping threads took: 0.0000089 seconds +2021-01-26T15:11:00.418+0000: 12.356: Total time for which application threads were stopped: 0.0001766 seconds, Stopping threads took: 0.0001122 seconds +2021-01-26T15:11:00.418+0000: 12.356: Total time for which application threads were stopped: 0.0001965 seconds, Stopping threads took: 0.0001200 seconds +2021-01-26T15:11:00.811+0000: 12.749: Total time for which application threads were stopped: 0.0002298 seconds, Stopping threads took: 0.0001149 seconds +2021-01-26T15:11:01.329+0000: 13.267: Total time for which application threads were stopped: 0.0006705 seconds, Stopping threads took: 0.0001517 seconds +2021-01-26T15:11:01.371+0000: 13.309: Total time for which application threads were stopped: 0.0052189 seconds, Stopping threads took: 0.0047634 seconds +2021-01-26T15:11:02.157+0000: 14.095: Total time for which application threads were stopped: 0.0005018 seconds, Stopping threads took: 0.0000227 seconds +2021-01-26T15:11:02.479+0000: 14.417: Total time for which application threads were stopped: 0.0000884 seconds, Stopping threads took: 0.0000190 seconds +2021-01-26T15:11:02.495+0000: 14.433: Total time for which application threads were stopped: 0.0040439 seconds, Stopping threads took: 0.0039485 seconds +2021-01-26T15:11:02.507+0000: 14.445: Total time for which application threads were stopped: 0.0000895 seconds, Stopping threads took: 0.0000194 seconds +2021-01-26T15:11:03.518+0000: 15.456: Total time for which application threads were stopped: 0.0084981 seconds, Stopping threads took: 0.0084018 seconds +2021-01-26T15:11:03.598+0000: 15.536: [GC (Allocation Failure) 2021-01-26T15:11:03.599+0000: 15.537: [ParNew +Desired survivor size 8945664 bytes, new threshold 1 (max 6) +- age 1: 11786480 bytes, 11786480 total +- age 2: 47888 bytes, 11834368 total +: 149973K->12462K(157248K), 0.0821028 secs] 155370K->17860K(506816K), 0.0839347 secs] [Times: user=0.03 sys=0.01, real=0.09 secs] +2021-01-26T15:11:03.683+0000: 15.621: Total time for which application threads were stopped: 0.0856279 seconds, Stopping threads took: 0.0000256 seconds +2021-01-26T15:11:03.703+0000: 15.641: Total time for which application threads were stopped: 0.0085914 seconds, Stopping threads took: 0.0084499 seconds +2021-01-26T15:11:03.984+0000: 15.922: Total time for which application threads were stopped: 0.0005482 seconds, Stopping threads took: 0.0001227 seconds +2021-01-26T15:11:03.985+0000: 15.923: Total time for which application threads were stopped: 0.0004666 seconds, Stopping threads took: 0.0001128 seconds +2021-01-26T15:11:04.997+0000: 16.935: Total time for which application threads were stopped: 0.0072629 seconds, Stopping threads took: 0.0070604 seconds +2021-01-26T15:11:05.676+0000: 17.614: Total time for which application threads were stopped: 0.0005153 seconds, Stopping threads took: 0.0000721 seconds +2021-01-26T15:11:06.688+0000: 18.626: Total time for which application threads were stopped: 0.0074486 seconds, Stopping threads took: 0.0073351 seconds +2021-01-26T15:11:07.706+0000: 19.643: Total time for which application threads were stopped: 0.0132784 seconds, Stopping threads took: 0.0131171 seconds +2021-01-26T15:11:08.021+0000: 19.959: Total time for which application threads were stopped: 0.0001075 seconds, Stopping threads took: 0.0000209 seconds +2021-01-26T15:11:08.260+0000: 20.198: Total time for which application threads were stopped: 0.0005142 seconds, Stopping threads took: 0.0004281 seconds +2021-01-26T15:11:08.474+0000: 20.412: Total time for which application threads were stopped: 0.0001317 seconds, Stopping threads took: 0.0000338 seconds +2021-01-26T15:11:08.619+0000: 20.557: Total time for which application threads were stopped: 0.0001208 seconds, Stopping threads took: 0.0000204 seconds +2021-01-26T15:11:08.793+0000: 20.731: Total time for which application threads were stopped: 0.0003428 seconds, Stopping threads took: 0.0002514 seconds +2021-01-26T15:11:09.070+0000: 21.008: Total time for which application threads were stopped: 0.0002685 seconds, Stopping threads took: 0.0001500 seconds +2021-01-26T15:11:09.355+0000: 21.293: Total time for which application threads were stopped: 0.0008351 seconds, Stopping threads took: 0.0005198 seconds +2021-01-26T15:11:09.606+0000: 21.544: Total time for which application threads were stopped: 0.0001286 seconds, Stopping threads took: 0.0000317 seconds +2021-01-26T15:11:09.709+0000: 21.647: [GC (CMS Initial Mark) [1 CMS-initial-mark: 5397K(349568K)] 135030K(506816K), 0.1179132 secs] [Times: user=0.07 sys=0.00, real=0.12 secs] +2021-01-26T15:11:09.829+0000: 21.767: Total time for which application threads were stopped: 0.1318751 seconds, Stopping threads took: 0.0119435 seconds +2021-01-26T15:11:09.829+0000: 21.767: [CMS-concurrent-mark-start] +2021-01-26T15:11:09.887+0000: 21.825: Total time for which application threads were stopped: 0.0000844 seconds, Stopping threads took: 0.0000251 seconds +2021-01-26T15:11:09.917+0000: 21.855: [CMS-concurrent-mark: 0.087/0.087 secs] [Times: user=0.06 sys=0.00, real=0.08 secs] +2021-01-26T15:11:09.929+0000: 21.867: [CMS-concurrent-preclean-start] +2021-01-26T15:11:09.931+0000: 21.869: [CMS-concurrent-preclean: 0.002/0.002 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] +2021-01-26T15:11:09.941+0000: 21.879: [CMS-concurrent-abortable-preclean-start] +2021-01-26T15:11:10.075+0000: 22.013: Total time for which application threads were stopped: 0.0001101 seconds, Stopping threads took: 0.0000222 seconds +2021-01-26T15:11:10.277+0000: 22.215: Total time for which application threads were stopped: 0.0000979 seconds, Stopping threads took: 0.0000208 seconds +2021-01-26T15:11:10.539+0000: 22.477: Total time for which application threads were stopped: 0.0001465 seconds, Stopping threads took: 0.0000350 seconds +2021-01-26T15:11:10.790+0000: 22.728: Total time for which application threads were stopped: 0.0001411 seconds, Stopping threads took: 0.0000471 seconds +2021-01-26T15:11:11.006+0000: 22.944: Total time for which application threads were stopped: 0.0001318 seconds, Stopping threads took: 0.0000305 seconds +2021-01-26T15:11:11.348+0000: 23.286: Total time for which application threads were stopped: 0.0002664 seconds, Stopping threads took: 0.0001501 seconds +2021-01-26T15:11:11.597+0000: 23.536: Total time for which application threads were stopped: 0.0012003 seconds, Stopping threads took: 0.0001504 seconds +2021-01-26T15:11:11.825+0000: 23.762: Total time for which application threads were stopped: 0.0002773 seconds, Stopping threads took: 0.0001524 seconds +2021-01-26T15:11:12.084+0000: 24.022: Total time for which application threads were stopped: 0.0001787 seconds, Stopping threads took: 0.0000225 seconds +2021-01-26T15:11:12.114+0000: 24.052: [GC (Allocation Failure) 2021-01-26T15:11:12.118+0000: 24.056: [ParNew +Desired survivor size 8945664 bytes, new threshold 1 (max 6) +- age 1: 14687136 bytes, 14687136 total +: 152238K->17471K(157248K), 0.1304406 secs] 157636K->25875K(506816K), 0.1360118 secs] [Times: user=0.09 sys=0.01, real=0.14 secs] +2021-01-26T15:11:12.252+0000: 24.190: Total time for which application threads were stopped: 0.1382336 seconds, Stopping threads took: 0.0000540 seconds +2021-01-26T15:11:12.543+0000: 24.481: Total time for which application threads were stopped: 0.0001254 seconds, Stopping threads took: 0.0000253 seconds +2021-01-26T15:11:12.767+0000: 24.705: Total time for which application threads were stopped: 0.0021572 seconds, Stopping threads took: 0.0002733 seconds +2021-01-26T15:11:13.032+0000: 24.970: Total time for which application threads were stopped: 0.0003119 seconds, Stopping threads took: 0.0001229 seconds +2021-01-26T15:11:13.187+0000: 25.125: Total time for which application threads were stopped: 0.0183551 seconds, Stopping threads took: 0.0163098 seconds +2021-01-26T15:11:13.368+0000: 25.306: Total time for which application threads were stopped: 0.0103349 seconds, Stopping threads took: 0.0101679 seconds +2021-01-26T15:11:13.537+0000: 25.475: Total time for which application threads were stopped: 0.0001582 seconds, Stopping threads took: 0.0000341 seconds +2021-01-26T15:11:13.765+0000: 25.703: Total time for which application threads were stopped: 0.0000957 seconds, Stopping threads took: 0.0000242 seconds +2021-01-26T15:11:13.889+0000: 25.827: Total time for which application threads were stopped: 0.0001317 seconds, Stopping threads took: 0.0000266 seconds +2021-01-26T15:11:14.138+0000: 26.076: Total time for which application threads were stopped: 0.0114172 seconds, Stopping threads took: 0.0003046 seconds +2021-01-26T15:11:14.516+0000: 26.454: Total time for which application threads were stopped: 0.0001186 seconds, Stopping threads took: 0.0000237 seconds +2021-01-26T15:11:14.855+0000: 26.793: Total time for which application threads were stopped: 0.0003342 seconds, Stopping threads took: 0.0000238 seconds +2021-01-26T15:11:15.093+0000: 27.031: Total time for which application threads were stopped: 0.0001408 seconds, Stopping threads took: 0.0000248 seconds + CMS: abort preclean due to time 2021-01-26T15:11:15.122+0000: 27.060: [CMS-concurrent-abortable-preclean: 3.831/5.181 secs] [Times: user=3.16 sys=0.13, real=5.18 secs] +2021-01-26T15:11:15.145+0000: 27.083: [GC (CMS Final Remark) [YG occupancy: 58428 K (157248 K)]2021-01-26T15:11:15.146+0000: 27.084: [Rescan (parallel) , 0.0628157 secs]2021-01-26T15:11:15.211+0000: 27.149: [weak refs processing, 0.0031204 secs]2021-01-26T15:11:15.215+0000: 27.153: [class unloading, 0.0397165 secs]2021-01-26T15:11:15.259+0000: 27.197: [scrub symbol table, 0.0803251 secs]2021-01-26T15:11:15.348+0000: 27.286: [scrub string table, 0.0016872 secs][1 CMS-remark: 8403K(349568K)] 66832K(506816K), 0.2071906 secs] [Times: user=0.05 sys=0.00, real=0.21 secs] +2021-01-26T15:11:15.357+0000: 27.295: Total time for which application threads were stopped: 0.2248586 seconds, Stopping threads took: 0.0128752 seconds +2021-01-26T15:11:15.361+0000: 27.299: [CMS-concurrent-sweep-start] +2021-01-26T15:11:15.398+0000: 27.336: [CMS-concurrent-sweep: 0.037/0.037 secs] [Times: user=0.02 sys=0.00, real=0.03 secs] +2021-01-26T15:11:15.401+0000: 27.339: [CMS-concurrent-reset-start] +2021-01-26T15:11:15.401+0000: 27.339: [CMS-concurrent-reset: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] +2021-01-26T15:11:16.363+0000: 28.301: Total time for which application threads were stopped: 0.0053211 seconds, Stopping threads took: 0.0052097 seconds +2021-01-26T15:11:17.377+0000: 29.315: Total time for which application threads were stopped: 0.0120503 seconds, Stopping threads took: 0.0119483 seconds +2021-01-26T15:11:18.379+0000: 30.317: Total time for which application threads were stopped: 0.0015971 seconds, Stopping threads took: 0.0001858 seconds +2021-01-26T15:11:18.445+0000: 30.383: Total time for which application threads were stopped: 0.0086938 seconds, Stopping threads took: 0.0085792 seconds +2021-01-26T15:11:18.462+0000: 30.400: Total time for which application threads were stopped: 0.0076789 seconds, Stopping threads took: 0.0074643 seconds +2021-01-26T15:11:18.467+0000: 30.405: Total time for which application threads were stopped: 0.0030642 seconds, Stopping threads took: 0.0029605 seconds +2021-01-26T15:11:18.473+0000: 30.411: Total time for which application threads were stopped: 0.0006335 seconds, Stopping threads took: 0.0004763 seconds +2021-01-26T15:11:18.496+0000: 30.434: Total time for which application threads were stopped: 0.0124041 seconds, Stopping threads took: 0.0121905 seconds +2021-01-26T15:11:18.503+0000: 30.441: Total time for which application threads were stopped: 0.0047253 seconds, Stopping threads took: 0.0019768 seconds +2021-01-26T15:11:18.767+0000: 30.705: Total time for which application threads were stopped: 0.0012778 seconds, Stopping threads took: 0.0001346 seconds +2021-01-26T15:11:19.344+0000: 31.282: Total time for which application threads were stopped: 0.0005681 seconds, Stopping threads took: 0.0000242 seconds +2021-01-26T15:11:19.837+0000: 31.775: Total time for which application threads were stopped: 0.0003217 seconds, Stopping threads took: 0.0000603 seconds +2021-01-26T15:11:20.841+0000: 32.779: Total time for which application threads were stopped: 0.0032846 seconds, Stopping threads took: 0.0031266 seconds +2021-01-26T15:11:21.846+0000: 33.784: Total time for which application threads were stopped: 0.0021162 seconds, Stopping threads took: 0.0019990 seconds +2021-01-26T15:11:22.412+0000: 34.350: [GC (Allocation Failure) 2021-01-26T15:11:22.415+0000: 34.353: [ParNew +Desired survivor size 8945664 bytes, new threshold 1 (max 6) +- age 1: 16567704 bytes, 16567704 total +: 157247K->17471K(157248K), 0.2695602 secs] 165548K->32157K(506816K), 0.3076263 secs] [Times: user=0.19 sys=0.01, real=0.31 secs] +2021-01-26T15:11:22.724+0000: 34.662: Total time for which application threads were stopped: 0.3122844 seconds, Stopping threads took: 0.0002506 seconds +2021-01-26T15:11:23.729+0000: 35.667: Total time for which application threads were stopped: 0.0051866 seconds, Stopping threads took: 0.0050384 seconds +2021-01-26T15:11:23.866+0000: 35.804: Total time for which application threads were stopped: 0.0008207 seconds, Stopping threads took: 0.0001640 seconds +2021-01-26T15:11:23.937+0000: 35.875: Total time for which application threads were stopped: 0.0041037 seconds, Stopping threads took: 0.0003091 seconds +2021-01-26T15:11:23.940+0000: 35.878: Total time for which application threads were stopped: 0.0002653 seconds, Stopping threads took: 0.0001454 seconds +2021-01-26T15:11:23.947+0000: 35.885: Total time for which application threads were stopped: 0.0005128 seconds, Stopping threads took: 0.0002895 seconds +2021-01-26T15:11:23.953+0000: 35.891: Total time for which application threads were stopped: 0.0047167 seconds, Stopping threads took: 0.0012296 seconds +2021-01-26T15:11:23.957+0000: 35.895: Total time for which application threads were stopped: 0.0003060 seconds, Stopping threads took: 0.0000873 seconds +2021-01-26T15:11:23.958+0000: 35.896: Total time for which application threads were stopped: 0.0002235 seconds, Stopping threads took: 0.0000931 seconds +2021-01-26T15:11:23.967+0000: 35.905: Total time for which application threads were stopped: 0.0070374 seconds, Stopping threads took: 0.0058403 seconds +2021-01-26T15:11:23.980+0000: 35.918: Total time for which application threads were stopped: 0.0096935 seconds, Stopping threads took: 0.0002227 seconds +2021-01-26T15:11:23.985+0000: 35.923: Total time for which application threads were stopped: 0.0046005 seconds, Stopping threads took: 0.0039752 seconds +2021-01-26T15:11:23.998+0000: 35.936: Total time for which application threads were stopped: 0.0056973 seconds, Stopping threads took: 0.0047904 seconds +2021-01-26T15:11:24.003+0000: 35.941: Total time for which application threads were stopped: 0.0013803 seconds, Stopping threads took: 0.0002589 seconds +2021-01-26T15:11:24.006+0000: 35.944: Total time for which application threads were stopped: 0.0002791 seconds, Stopping threads took: 0.0001424 seconds +2021-01-26T15:11:24.018+0000: 35.956: Total time for which application threads were stopped: 0.0092991 seconds, Stopping threads took: 0.0090800 seconds +2021-01-26T15:11:24.027+0000: 35.965: Total time for which application threads were stopped: 0.0082278 seconds, Stopping threads took: 0.0077451 seconds +2021-01-26T15:11:24.070+0000: 36.008: Total time for which application threads were stopped: 0.0042770 seconds, Stopping threads took: 0.0041458 seconds +2021-01-26T15:11:24.131+0000: 36.068: Total time for which application threads were stopped: 0.0002779 seconds, Stopping threads took: 0.0001663 seconds +2021-01-26T15:11:24.148+0000: 36.086: Total time for which application threads were stopped: 0.0170518 seconds, Stopping threads took: 0.0168143 seconds +2021-01-26T15:11:24.151+0000: 36.089: Total time for which application threads were stopped: 0.0003913 seconds, Stopping threads took: 0.0002618 seconds +2021-01-26T15:11:24.159+0000: 36.097: Total time for which application threads were stopped: 0.0003901 seconds, Stopping threads took: 0.0002489 seconds +2021-01-26T15:11:24.163+0000: 36.101: Total time for which application threads were stopped: 0.0002667 seconds, Stopping threads took: 0.0001600 seconds +2021-01-26T15:11:24.172+0000: 36.110: Total time for which application threads were stopped: 0.0003120 seconds, Stopping threads took: 0.0001495 seconds +2021-01-26T15:11:24.175+0000: 36.113: Total time for which application threads were stopped: 0.0000842 seconds, Stopping threads took: 0.0000258 seconds +2021-01-26T15:11:24.180+0000: 36.118: Total time for which application threads were stopped: 0.0000940 seconds, Stopping threads took: 0.0000303 seconds +2021-01-26T15:11:24.183+0000: 36.121: Total time for which application threads were stopped: 0.0004023 seconds, Stopping threads took: 0.0002432 seconds +2021-01-26T15:11:24.274+0000: 36.212: Total time for which application threads were stopped: 0.0006591 seconds, Stopping threads took: 0.0004771 seconds +2021-01-26T15:11:24.282+0000: 36.220: Total time for which application threads were stopped: 0.0004555 seconds, Stopping threads took: 0.0002792 seconds +2021-01-26T15:11:24.285+0000: 36.223: Total time for which application threads were stopped: 0.0001003 seconds, Stopping threads took: 0.0000267 seconds +2021-01-26T15:11:24.289+0000: 36.227: Total time for which application threads were stopped: 0.0000965 seconds, Stopping threads took: 0.0000306 seconds +2021-01-26T15:11:24.300+0000: 36.238: Total time for which application threads were stopped: 0.0003000 seconds, Stopping threads took: 0.0001935 seconds +2021-01-26T15:11:24.303+0000: 36.241: Total time for which application threads were stopped: 0.0005807 seconds, Stopping threads took: 0.0000301 seconds +2021-01-26T15:11:24.319+0000: 36.257: Total time for which application threads were stopped: 0.0001504 seconds, Stopping threads took: 0.0000558 seconds +2021-01-26T15:11:24.319+0000: 36.257: Total time for which application threads were stopped: 0.0002214 seconds, Stopping threads took: 0.0001393 seconds +2021-01-26T15:11:24.325+0000: 36.263: Total time for which application threads were stopped: 0.0000860 seconds, Stopping threads took: 0.0000263 seconds +2021-01-26T15:11:24.325+0000: 36.263: Total time for which application threads were stopped: 0.0000570 seconds, Stopping threads took: 0.0000155 seconds +2021-01-26T15:11:24.325+0000: 36.263: Total time for which application threads were stopped: 0.0000520 seconds, Stopping threads took: 0.0000138 seconds +2021-01-26T15:11:24.596+0000: 36.534: Total time for which application threads were stopped: 0.0028541 seconds, Stopping threads took: 0.0026888 seconds +2021-01-26T15:11:24.604+0000: 36.542: Total time for which application threads were stopped: 0.0019812 seconds, Stopping threads took: 0.0018470 seconds +2021-01-26T15:11:24.610+0000: 36.547: Total time for which application threads were stopped: 0.0003179 seconds, Stopping threads took: 0.0001670 seconds +2021-01-26T15:11:24.612+0000: 36.550: Total time for which application threads were stopped: 0.0002916 seconds, Stopping threads took: 0.0000390 seconds +2021-01-26T15:11:24.618+0000: 36.556: Total time for which application threads were stopped: 0.0003283 seconds, Stopping threads took: 0.0001924 seconds +2021-01-26T15:11:24.650+0000: 36.588: Total time for which application threads were stopped: 0.0190182 seconds, Stopping threads took: 0.0188697 seconds +2021-01-26T15:11:24.657+0000: 36.595: Total time for which application threads were stopped: 0.0001586 seconds, Stopping threads took: 0.0000307 seconds +2021-01-26T15:11:24.658+0000: 36.596: Total time for which application threads were stopped: 0.0004548 seconds, Stopping threads took: 0.0001960 seconds +2021-01-26T15:11:24.661+0000: 36.598: Total time for which application threads were stopped: 0.0002662 seconds, Stopping threads took: 0.0001645 seconds +2021-01-26T15:11:24.682+0000: 36.620: Total time for which application threads were stopped: 0.0181863 seconds, Stopping threads took: 0.0180884 seconds +2021-01-26T15:11:24.691+0000: 36.629: Total time for which application threads were stopped: 0.0080714 seconds, Stopping threads took: 0.0079859 seconds +2021-01-26T15:11:24.718+0000: 36.656: Total time for which application threads were stopped: 0.0001365 seconds, Stopping threads took: 0.0000746 seconds +2021-01-26T15:11:24.778+0000: 36.716: Total time for which application threads were stopped: 0.0294427 seconds, Stopping threads took: 0.0293136 seconds +2021-01-26T15:11:24.830+0000: 36.768: Total time for which application threads were stopped: 0.0003388 seconds, Stopping threads took: 0.0001920 seconds +2021-01-26T15:11:24.864+0000: 36.802: Total time for which application threads were stopped: 0.0329996 seconds, Stopping threads took: 0.0328647 seconds +2021-01-26T15:11:24.883+0000: 36.821: Total time for which application threads were stopped: 0.0126022 seconds, Stopping threads took: 0.0125090 seconds +2021-01-26T15:11:24.890+0000: 36.828: Total time for which application threads were stopped: 0.0000980 seconds, Stopping threads took: 0.0000309 seconds +2021-01-26T15:11:24.928+0000: 36.866: Total time for which application threads were stopped: 0.0211048 seconds, Stopping threads took: 0.0209978 seconds +2021-01-26T15:11:24.937+0000: 36.875: Total time for which application threads were stopped: 0.0068676 seconds, Stopping threads took: 0.0066967 seconds +2021-01-26T15:11:24.954+0000: 36.892: Total time for which application threads were stopped: 0.0002424 seconds, Stopping threads took: 0.0001074 seconds +2021-01-26T15:11:24.966+0000: 36.904: Total time for which application threads were stopped: 0.0114976 seconds, Stopping threads took: 0.0113892 seconds +2021-01-26T15:11:24.969+0000: 36.907: Total time for which application threads were stopped: 0.0001475 seconds, Stopping threads took: 0.0000718 seconds +2021-01-26T15:11:24.969+0000: 36.907: Total time for which application threads were stopped: 0.0000648 seconds, Stopping threads took: 0.0000165 seconds +2021-01-26T15:11:24.977+0000: 36.915: Total time for which application threads were stopped: 0.0058322 seconds, Stopping threads took: 0.0056960 seconds +2021-01-26T15:11:24.992+0000: 36.930: Total time for which application threads were stopped: 0.0062899 seconds, Stopping threads took: 0.0061576 seconds +2021-01-26T15:11:25.003+0000: 36.941: Total time for which application threads were stopped: 0.0002523 seconds, Stopping threads took: 0.0000877 seconds +2021-01-26T15:11:25.006+0000: 36.944: Total time for which application threads were stopped: 0.0027002 seconds, Stopping threads took: 0.0024047 seconds +2021-01-26T15:11:25.027+0000: 36.965: Total time for which application threads were stopped: 0.0035133 seconds, Stopping threads took: 0.0033948 seconds +2021-01-26T15:11:25.031+0000: 36.969: Total time for which application threads were stopped: 0.0001621 seconds, Stopping threads took: 0.0000299 seconds +2021-01-26T15:11:25.032+0000: 36.970: Total time for which application threads were stopped: 0.0002731 seconds, Stopping threads took: 0.0000179 seconds +2021-01-26T15:11:25.036+0000: 36.974: Total time for which application threads were stopped: 0.0001196 seconds, Stopping threads took: 0.0000303 seconds +2021-01-26T15:11:25.043+0000: 36.981: Total time for which application threads were stopped: 0.0041890 seconds, Stopping threads took: 0.0040212 seconds +2021-01-26T15:11:25.047+0000: 36.985: Total time for which application threads were stopped: 0.0003768 seconds, Stopping threads took: 0.0000496 seconds +2021-01-26T15:11:25.056+0000: 36.994: Total time for which application threads were stopped: 0.0088715 seconds, Stopping threads took: 0.0087439 seconds +2021-01-26T15:11:25.057+0000: 36.995: Total time for which application threads were stopped: 0.0002647 seconds, Stopping threads took: 0.0001912 seconds +2021-01-26T15:11:25.062+0000: 37.000: Total time for which application threads were stopped: 0.0038366 seconds, Stopping threads took: 0.0037157 seconds +2021-01-26T15:11:25.065+0000: 37.002: Total time for which application threads were stopped: 0.0016317 seconds, Stopping threads took: 0.0014601 seconds +2021-01-26T15:11:25.070+0000: 37.008: Total time for which application threads were stopped: 0.0001696 seconds, Stopping threads took: 0.0000353 seconds +2021-01-26T15:11:25.073+0000: 37.011: Total time for which application threads were stopped: 0.0027231 seconds, Stopping threads took: 0.0025986 seconds +2021-01-26T15:11:25.075+0000: 37.013: Total time for which application threads were stopped: 0.0005079 seconds, Stopping threads took: 0.0004272 seconds +2021-01-26T15:11:25.083+0000: 37.021: Total time for which application threads were stopped: 0.0059723 seconds, Stopping threads took: 0.0058512 seconds +2021-01-26T15:11:25.085+0000: 37.023: Total time for which application threads were stopped: 0.0006241 seconds, Stopping threads took: 0.0005378 seconds +2021-01-26T15:11:25.087+0000: 37.025: Total time for which application threads were stopped: 0.0001515 seconds, Stopping threads took: 0.0000926 seconds +2021-01-26T15:11:25.609+0000: 37.547: Total time for which application threads were stopped: 0.0001925 seconds, Stopping threads took: 0.0000334 seconds +2021-01-26T15:11:25.617+0000: 37.555: Total time for which application threads were stopped: 0.0052640 seconds, Stopping threads took: 0.0051331 seconds +2021-01-26T15:11:25.620+0000: 37.558: Total time for which application threads were stopped: 0.0002096 seconds, Stopping threads took: 0.0000261 seconds +2021-01-26T15:11:25.627+0000: 37.564: Total time for which application threads were stopped: 0.0004108 seconds, Stopping threads took: 0.0002770 seconds +2021-01-26T15:11:25.630+0000: 37.568: Total time for which application threads were stopped: 0.0002038 seconds, Stopping threads took: 0.0000850 seconds +2021-01-26T15:11:25.640+0000: 37.578: Total time for which application threads were stopped: 0.0048296 seconds, Stopping threads took: 0.0046660 seconds +2021-01-26T15:11:25.660+0000: 37.598: Total time for which application threads were stopped: 0.0002331 seconds, Stopping threads took: 0.0000407 seconds +2021-01-26T15:11:25.719+0000: 37.657: Total time for which application threads were stopped: 0.0008862 seconds, Stopping threads took: 0.0006900 seconds +2021-01-26T15:11:25.782+0000: 37.720: Total time for which application threads were stopped: 0.0379646 seconds, Stopping threads took: 0.0375688 seconds +2021-01-26T15:11:25.788+0000: 37.726: Total time for which application threads were stopped: 0.0030981 seconds, Stopping threads took: 0.0029609 seconds +2021-01-26T15:11:25.810+0000: 37.748: Total time for which application threads were stopped: 0.0168719 seconds, Stopping threads took: 0.0140467 seconds +2021-01-26T15:11:25.829+0000: 37.767: Total time for which application threads were stopped: 0.0134352 seconds, Stopping threads took: 0.0132612 seconds +2021-01-26T15:11:25.833+0000: 37.771: Total time for which application threads were stopped: 0.0024876 seconds, Stopping threads took: 0.0023237 seconds +2021-01-26T15:11:25.834+0000: 37.772: Total time for which application threads were stopped: 0.0005436 seconds, Stopping threads took: 0.0004133 seconds +2021-01-26T15:11:25.836+0000: 37.774: Total time for which application threads were stopped: 0.0008640 seconds, Stopping threads took: 0.0007894 seconds +2021-01-26T15:11:25.839+0000: 37.777: Total time for which application threads were stopped: 0.0022892 seconds, Stopping threads took: 0.0021831 seconds +2021-01-26T15:11:25.840+0000: 37.778: Total time for which application threads were stopped: 0.0010843 seconds, Stopping threads took: 0.0009644 seconds +2021-01-26T15:11:25.846+0000: 37.784: Total time for which application threads were stopped: 0.0004621 seconds, Stopping threads took: 0.0003747 seconds +2021-01-26T15:11:25.850+0000: 37.788: Total time for which application threads were stopped: 0.0031760 seconds, Stopping threads took: 0.0030239 seconds +2021-01-26T15:11:25.852+0000: 37.790: Total time for which application threads were stopped: 0.0003497 seconds, Stopping threads took: 0.0002035 seconds +2021-01-26T15:11:25.874+0000: 37.812: Total time for which application threads were stopped: 0.0001219 seconds, Stopping threads took: 0.0000336 seconds +2021-01-26T15:11:25.881+0000: 37.819: Total time for which application threads were stopped: 0.0001608 seconds, Stopping threads took: 0.0000805 seconds +2021-01-26T15:11:25.883+0000: 37.821: Total time for which application threads were stopped: 0.0002703 seconds, Stopping threads took: 0.0001755 seconds +2021-01-26T15:11:25.949+0000: 37.887: Total time for which application threads were stopped: 0.0006783 seconds, Stopping threads took: 0.0000359 seconds +2021-01-26T15:11:25.980+0000: 37.918: Total time for which application threads were stopped: 0.0068901 seconds, Stopping threads took: 0.0067482 seconds +2021-01-26T15:11:25.981+0000: 37.919: Total time for which application threads were stopped: 0.0003473 seconds, Stopping threads took: 0.0002628 seconds +2021-01-26T15:11:25.981+0000: 37.919: Total time for which application threads were stopped: 0.0003830 seconds, Stopping threads took: 0.0002381 seconds +2021-01-26T15:11:25.982+0000: 37.920: Total time for which application threads were stopped: 0.0005652 seconds, Stopping threads took: 0.0004755 seconds +2021-01-26T15:11:25.984+0000: 37.922: Total time for which application threads were stopped: 0.0004667 seconds, Stopping threads took: 0.0003811 seconds +2021-01-26T15:11:25.985+0000: 37.923: Total time for which application threads were stopped: 0.0003469 seconds, Stopping threads took: 0.0002646 seconds +2021-01-26T15:11:25.989+0000: 37.927: Total time for which application threads were stopped: 0.0041621 seconds, Stopping threads took: 0.0040387 seconds +2021-01-26T15:11:25.993+0000: 37.930: Total time for which application threads were stopped: 0.0002915 seconds, Stopping threads took: 0.0001914 seconds +2021-01-26T15:11:25.993+0000: 37.931: Total time for which application threads were stopped: 0.0005135 seconds, Stopping threads took: 0.0004249 seconds +2021-01-26T15:11:26.005+0000: 37.942: Total time for which application threads were stopped: 0.0085138 seconds, Stopping threads took: 0.0084031 seconds +2021-01-26T15:11:26.025+0000: 37.963: Total time for which application threads were stopped: 0.0058439 seconds, Stopping threads took: 0.0056656 seconds +2021-01-26T15:11:26.028+0000: 37.966: Total time for which application threads were stopped: 0.0001949 seconds, Stopping threads took: 0.0000974 seconds +2021-01-26T15:11:26.030+0000: 37.968: Total time for which application threads were stopped: 0.0006574 seconds, Stopping threads took: 0.0004444 seconds +2021-01-26T15:11:26.034+0000: 37.972: Total time for which application threads were stopped: 0.0026486 seconds, Stopping threads took: 0.0024391 seconds +2021-01-26T15:11:26.040+0000: 37.978: Total time for which application threads were stopped: 0.0013163 seconds, Stopping threads took: 0.0011570 seconds +2021-01-26T15:11:26.048+0000: 37.986: Total time for which application threads were stopped: 0.0012431 seconds, Stopping threads took: 0.0008243 seconds +2021-01-26T15:11:26.052+0000: 37.990: Total time for which application threads were stopped: 0.0003974 seconds, Stopping threads took: 0.0002343 seconds +2021-01-26T15:11:26.062+0000: 38.000: Total time for which application threads were stopped: 0.0101053 seconds, Stopping threads took: 0.0095321 seconds +2021-01-26T15:11:26.069+0000: 38.007: Total time for which application threads were stopped: 0.0039503 seconds, Stopping threads took: 0.0037281 seconds +2021-01-26T15:11:26.075+0000: 38.012: Total time for which application threads were stopped: 0.0003616 seconds, Stopping threads took: 0.0002245 seconds +2021-01-26T15:11:26.078+0000: 38.015: Total time for which application threads were stopped: 0.0003004 seconds, Stopping threads took: 0.0001733 seconds +2021-01-26T15:11:26.097+0000: 38.035: Total time for which application threads were stopped: 0.0080244 seconds, Stopping threads took: 0.0078850 seconds +2021-01-26T15:11:26.102+0000: 38.040: Total time for which application threads were stopped: 0.0040061 seconds, Stopping threads took: 0.0038500 seconds +2021-01-26T15:11:26.111+0000: 38.049: Total time for which application threads were stopped: 0.0058109 seconds, Stopping threads took: 0.0056964 seconds +2021-01-26T15:11:26.115+0000: 38.053: Total time for which application threads were stopped: 0.0028286 seconds, Stopping threads took: 0.0027113 seconds +2021-01-26T15:11:26.120+0000: 38.057: Total time for which application threads were stopped: 0.0013281 seconds, Stopping threads took: 0.0011440 seconds +2021-01-26T15:11:26.132+0000: 38.070: Total time for which application threads were stopped: 0.0021982 seconds, Stopping threads took: 0.0020554 seconds +2021-01-26T15:11:26.141+0000: 38.079: Total time for which application threads were stopped: 0.0040615 seconds, Stopping threads took: 0.0038657 seconds +2021-01-26T15:11:26.169+0000: 38.107: Total time for which application threads were stopped: 0.0029444 seconds, Stopping threads took: 0.0028176 seconds +2021-01-26T15:11:26.190+0000: 38.128: Total time for which application threads were stopped: 0.0084174 seconds, Stopping threads took: 0.0082529 seconds +2021-01-26T15:11:26.192+0000: 38.130: Total time for which application threads were stopped: 0.0001738 seconds, Stopping threads took: 0.0000617 seconds +2021-01-26T15:11:26.194+0000: 38.132: Total time for which application threads were stopped: 0.0001865 seconds, Stopping threads took: 0.0000421 seconds +2021-01-26T15:11:26.201+0000: 38.139: Total time for which application threads were stopped: 0.0031333 seconds, Stopping threads took: 0.0029153 seconds +2021-01-26T15:11:26.206+0000: 38.144: Total time for which application threads were stopped: 0.0044999 seconds, Stopping threads took: 0.0042757 seconds +2021-01-26T15:11:26.212+0000: 38.150: Total time for which application threads were stopped: 0.0041906 seconds, Stopping threads took: 0.0035794 seconds +2021-01-26T15:11:26.623+0000: 38.561: Total time for which application threads were stopped: 0.0004061 seconds, Stopping threads took: 0.0001715 seconds +2021-01-26T15:11:26.632+0000: 38.570: Total time for which application threads were stopped: 0.0009953 seconds, Stopping threads took: 0.0001537 seconds +2021-01-26T15:11:26.674+0000: 38.612: Total time for which application threads were stopped: 0.0076658 seconds, Stopping threads took: 0.0074959 seconds +2021-01-26T15:11:26.733+0000: 38.670: Total time for which application threads were stopped: 0.0103187 seconds, Stopping threads took: 0.0101884 seconds +2021-01-26T15:11:26.759+0000: 38.696: Total time for which application threads were stopped: 0.0029556 seconds, Stopping threads took: 0.0027644 seconds +2021-01-26T15:11:26.759+0000: 38.697: Total time for which application threads were stopped: 0.0001806 seconds, Stopping threads took: 0.0000225 seconds +2021-01-26T15:11:26.760+0000: 38.698: Total time for which application threads were stopped: 0.0002801 seconds, Stopping threads took: 0.0000169 seconds +2021-01-26T15:11:26.766+0000: 38.704: Total time for which application threads were stopped: 0.0005167 seconds, Stopping threads took: 0.0002562 seconds +2021-01-26T15:11:26.778+0000: 38.716: Total time for which application threads were stopped: 0.0090073 seconds, Stopping threads took: 0.0088247 seconds +2021-01-26T15:11:26.782+0000: 38.720: Total time for which application threads were stopped: 0.0019188 seconds, Stopping threads took: 0.0016713 seconds +2021-01-26T15:11:26.807+0000: 38.745: Total time for which application threads were stopped: 0.0231552 seconds, Stopping threads took: 0.0228148 seconds +2021-01-26T15:11:26.824+0000: 38.762: Total time for which application threads were stopped: 0.0123924 seconds, Stopping threads took: 0.0120027 seconds +2021-01-26T15:11:26.836+0000: 38.774: Total time for which application threads were stopped: 0.0050377 seconds, Stopping threads took: 0.0047549 seconds +2021-01-26T15:11:26.850+0000: 38.788: Total time for which application threads were stopped: 0.0056116 seconds, Stopping threads took: 0.0053962 seconds +2021-01-26T15:11:26.959+0000: 38.897: Total time for which application threads were stopped: 0.0224690 seconds, Stopping threads took: 0.0222315 seconds +2021-01-26T15:11:26.970+0000: 38.908: Total time for which application threads were stopped: 0.0001324 seconds, Stopping threads took: 0.0000422 seconds +2021-01-26T15:11:26.994+0000: 38.932: Total time for which application threads were stopped: 0.0165787 seconds, Stopping threads took: 0.0147382 seconds +2021-01-26T15:11:27.005+0000: 38.942: Total time for which application threads were stopped: 0.0100500 seconds, Stopping threads took: 0.0097076 seconds +2021-01-26T15:11:27.115+0000: 39.053: Total time for which application threads were stopped: 0.0137895 seconds, Stopping threads took: 0.0135880 seconds +2021-01-26T15:11:27.123+0000: 39.061: Total time for which application threads were stopped: 0.0002210 seconds, Stopping threads took: 0.0001069 seconds +2021-01-26T15:11:27.138+0000: 39.076: Total time for which application threads were stopped: 0.0036012 seconds, Stopping threads took: 0.0032943 seconds +2021-01-26T15:11:27.192+0000: 39.130: Total time for which application threads were stopped: 0.0198939 seconds, Stopping threads took: 0.0197176 seconds +2021-01-26T15:11:27.204+0000: 39.142: Total time for which application threads were stopped: 0.0044812 seconds, Stopping threads took: 0.0043264 seconds +2021-01-26T15:11:27.221+0000: 39.159: Total time for which application threads were stopped: 0.0130603 seconds, Stopping threads took: 0.0129232 seconds +2021-01-26T15:11:27.273+0000: 39.211: Total time for which application threads were stopped: 0.0003074 seconds, Stopping threads took: 0.0000503 seconds +2021-01-26T15:11:27.747+0000: 39.685: Total time for which application threads were stopped: 0.0003747 seconds, Stopping threads took: 0.0000516 seconds +2021-01-26T15:11:27.747+0000: 39.685: Total time for which application threads were stopped: 0.0001635 seconds, Stopping threads took: 0.0000233 seconds +2021-01-26T15:11:27.836+0000: 39.774: Total time for which application threads were stopped: 0.0003277 seconds, Stopping threads took: 0.0001876 seconds +2021-01-26T15:11:27.959+0000: 39.897: Total time for which application threads were stopped: 0.0312623 seconds, Stopping threads took: 0.0311057 seconds +2021-01-26T15:11:27.970+0000: 39.908: Total time for which application threads were stopped: 0.0003574 seconds, Stopping threads took: 0.0001898 seconds +2021-01-26T15:11:28.021+0000: 39.959: Total time for which application threads were stopped: 0.0034541 seconds, Stopping threads took: 0.0000392 seconds +2021-01-26T15:11:28.300+0000: 40.238: [GC (Allocation Failure) 2021-01-26T15:11:28.302+0000: 40.240: [ParNew +Desired survivor size 8945664 bytes, new threshold 1 (max 6) +- age 1: 10557640 bytes, 10557640 total +: 157247K->12448K(157248K), 0.3576459 secs] 171933K->82587K(506816K), 0.3634702 secs] [Times: user=0.24 sys=0.03, real=0.37 secs] +2021-01-26T15:11:28.673+0000: 40.611: Total time for which application threads were stopped: 0.3741785 seconds, Stopping threads took: 0.0002827 seconds +2021-01-26T15:11:28.686+0000: 40.624: Total time for which application threads were stopped: 0.0104208 seconds, Stopping threads took: 0.0102376 seconds +2021-01-26T15:11:29.115+0000: 41.053: Total time for which application threads were stopped: 0.0003026 seconds, Stopping threads took: 0.0000962 seconds +2021-01-26T15:11:29.346+0000: 41.284: Total time for which application threads were stopped: 0.0299232 seconds, Stopping threads took: 0.0295528 seconds +2021-01-26T15:11:29.361+0000: 41.299: Total time for which application threads were stopped: 0.0007956 seconds, Stopping threads took: 0.0006307 seconds +2021-01-26T15:11:29.476+0000: 41.414: Total time for which application threads were stopped: 0.0250034 seconds, Stopping threads took: 0.0246819 seconds +2021-01-26T15:11:29.511+0000: 41.449: Total time for which application threads were stopped: 0.0115340 seconds, Stopping threads took: 0.0112848 seconds +2021-01-26T15:11:29.722+0000: 41.660: Total time for which application threads were stopped: 0.0107240 seconds, Stopping threads took: 0.0105378 seconds +2021-01-26T15:11:29.793+0000: 41.731: Total time for which application threads were stopped: 0.0026940 seconds, Stopping threads took: 0.0023805 seconds +2021-01-26T15:11:29.809+0000: 41.747: Total time for which application threads were stopped: 0.0031922 seconds, Stopping threads took: 0.0018919 seconds +2021-01-26T15:11:29.823+0000: 41.761: Total time for which application threads were stopped: 0.0103279 seconds, Stopping threads took: 0.0054407 seconds +2021-01-26T15:11:29.975+0000: 41.913: Total time for which application threads were stopped: 0.0001635 seconds, Stopping threads took: 0.0000420 seconds +2021-01-26T15:11:30.006+0000: 41.944: Total time for which application threads were stopped: 0.0042520 seconds, Stopping threads took: 0.0040097 seconds +2021-01-26T15:11:30.007+0000: 41.945: Total time for which application threads were stopped: 0.0001742 seconds, Stopping threads took: 0.0000469 seconds +2021-01-26T15:11:30.008+0000: 41.946: Total time for which application threads were stopped: 0.0004368 seconds, Stopping threads took: 0.0002722 seconds +2021-01-26T15:11:30.009+0000: 41.947: Total time for which application threads were stopped: 0.0001570 seconds, Stopping threads took: 0.0000409 seconds +2021-01-26T15:11:30.009+0000: 41.947: Total time for which application threads were stopped: 0.0001747 seconds, Stopping threads took: 0.0000704 seconds +2021-01-26T15:11:30.009+0000: 41.947: Total time for which application threads were stopped: 0.0001865 seconds, Stopping threads took: 0.0000522 seconds +2021-01-26T15:11:30.009+0000: 41.947: Total time for which application threads were stopped: 0.0001370 seconds, Stopping threads took: 0.0000582 seconds +2021-01-26T15:11:30.010+0000: 41.947: Total time for which application threads were stopped: 0.0001099 seconds, Stopping threads took: 0.0000457 seconds +2021-01-26T15:11:30.010+0000: 41.948: Total time for which application threads were stopped: 0.0001179 seconds, Stopping threads took: 0.0000369 seconds +2021-01-26T15:11:30.015+0000: 41.953: Total time for which application threads were stopped: 0.0003003 seconds, Stopping threads took: 0.0001343 seconds +2021-01-26T15:11:30.016+0000: 41.954: Total time for which application threads were stopped: 0.0001933 seconds, Stopping threads took: 0.0000726 seconds +2021-01-26T15:11:30.016+0000: 41.954: Total time for which application threads were stopped: 0.0001346 seconds, Stopping threads took: 0.0000459 seconds +2021-01-26T15:11:30.020+0000: 41.958: Total time for which application threads were stopped: 0.0001775 seconds, Stopping threads took: 0.0000670 seconds +2021-01-26T15:11:30.021+0000: 41.959: Total time for which application threads were stopped: 0.0001637 seconds, Stopping threads took: 0.0000868 seconds +2021-01-26T15:11:30.035+0000: 41.973: Total time for which application threads were stopped: 0.0003117 seconds, Stopping threads took: 0.0001512 seconds +2021-01-26T15:11:30.036+0000: 41.974: Total time for which application threads were stopped: 0.0001409 seconds, Stopping threads took: 0.0000549 seconds +2021-01-26T15:11:30.040+0000: 41.978: Total time for which application threads were stopped: 0.0002646 seconds, Stopping threads took: 0.0001042 seconds +2021-01-26T15:11:30.041+0000: 41.979: Total time for which application threads were stopped: 0.0001711 seconds, Stopping threads took: 0.0000508 seconds +2021-01-26T15:11:30.041+0000: 41.979: Total time for which application threads were stopped: 0.0002236 seconds, Stopping threads took: 0.0000627 seconds +2021-01-26T15:11:30.041+0000: 41.979: Total time for which application threads were stopped: 0.0001729 seconds, Stopping threads took: 0.0000623 seconds +2021-01-26T15:11:30.042+0000: 41.980: Total time for which application threads were stopped: 0.0001551 seconds, Stopping threads took: 0.0000607 seconds +2021-01-26T15:11:30.042+0000: 41.980: Total time for which application threads were stopped: 0.0002589 seconds, Stopping threads took: 0.0000637 seconds +2021-01-26T15:11:30.042+0000: 41.980: Total time for which application threads were stopped: 0.0001585 seconds, Stopping threads took: 0.0000450 seconds +2021-01-26T15:11:30.047+0000: 41.985: Total time for which application threads were stopped: 0.0004013 seconds, Stopping threads took: 0.0002083 seconds +2021-01-26T15:11:30.047+0000: 41.985: Total time for which application threads were stopped: 0.0004060 seconds, Stopping threads took: 0.0002362 seconds +2021-01-26T15:11:30.047+0000: 41.985: Total time for which application threads were stopped: 0.0001223 seconds, Stopping threads took: 0.0000426 seconds +2021-01-26T15:11:30.048+0000: 41.986: Total time for which application threads were stopped: 0.0001324 seconds, Stopping threads took: 0.0000521 seconds +2021-01-26T15:11:30.048+0000: 41.986: Total time for which application threads were stopped: 0.0001754 seconds, Stopping threads took: 0.0000382 seconds +2021-01-26T15:11:30.048+0000: 41.986: Total time for which application threads were stopped: 0.0001318 seconds, Stopping threads took: 0.0000413 seconds +2021-01-26T15:11:30.048+0000: 41.986: Total time for which application threads were stopped: 0.0001164 seconds, Stopping threads took: 0.0000370 seconds +2021-01-26T15:11:30.054+0000: 41.992: Total time for which application threads were stopped: 0.0001985 seconds, Stopping threads took: 0.0000793 seconds +2021-01-26T15:11:30.054+0000: 41.992: Total time for which application threads were stopped: 0.0001179 seconds, Stopping threads took: 0.0000444 seconds +2021-01-26T15:11:30.054+0000: 41.992: Total time for which application threads were stopped: 0.0001076 seconds, Stopping threads took: 0.0000367 seconds +2021-01-26T15:11:30.055+0000: 41.992: Total time for which application threads were stopped: 0.0003808 seconds, Stopping threads took: 0.0000360 seconds +2021-01-26T15:11:30.414+0000: 42.352: Total time for which application threads were stopped: 0.0135513 seconds, Stopping threads took: 0.0129914 seconds +2021-01-26T15:11:30.601+0000: 42.539: Total time for which application threads were stopped: 0.0057736 seconds, Stopping threads took: 0.0056062 seconds +2021-01-26T15:11:30.710+0000: 42.648: Total time for which application threads were stopped: 0.0025444 seconds, Stopping threads took: 0.0022394 seconds +2021-01-26T15:11:30.753+0000: 42.691: Total time for which application threads were stopped: 0.0015779 seconds, Stopping threads took: 0.0013815 seconds +2021-01-26T15:11:31.086+0000: 43.024: Total time for which application threads were stopped: 0.0023945 seconds, Stopping threads took: 0.0022436 seconds +2021-01-26T15:11:31.095+0000: 43.033: Total time for which application threads were stopped: 0.0003832 seconds, Stopping threads took: 0.0001323 seconds +2021-01-26T15:11:31.921+0000: 43.859: Total time for which application threads were stopped: 0.0005620 seconds, Stopping threads took: 0.0002485 seconds +2021-01-26T15:11:31.929+0000: 43.867: Total time for which application threads were stopped: 0.0006817 seconds, Stopping threads took: 0.0005022 seconds +2021-01-26T15:11:31.962+0000: 43.900: Total time for which application threads were stopped: 0.0134227 seconds, Stopping threads took: 0.0132636 seconds +2021-01-26T15:11:32.046+0000: 43.984: Total time for which application threads were stopped: 0.0005402 seconds, Stopping threads took: 0.0003282 seconds +2021-01-26T15:11:32.059+0000: 43.997: Total time for which application threads were stopped: 0.0002301 seconds, Stopping threads took: 0.0000773 seconds +2021-01-26T15:11:32.062+0000: 44.000: Total time for which application threads were stopped: 0.0002724 seconds, Stopping threads took: 0.0000749 seconds +2021-01-26T15:11:32.082+0000: 44.020: Total time for which application threads were stopped: 0.0108629 seconds, Stopping threads took: 0.0106005 seconds +2021-01-26T15:11:32.091+0000: 44.029: Total time for which application threads were stopped: 0.0081417 seconds, Stopping threads took: 0.0080125 seconds +2021-01-26T15:11:32.093+0000: 44.031: Total time for which application threads were stopped: 0.0023830 seconds, Stopping threads took: 0.0021638 seconds +2021-01-26T15:11:32.094+0000: 44.032: Total time for which application threads were stopped: 0.0003308 seconds, Stopping threads took: 0.0001408 seconds +2021-01-26T15:11:32.095+0000: 44.033: Total time for which application threads were stopped: 0.0009559 seconds, Stopping threads took: 0.0007758 seconds +2021-01-26T15:11:32.099+0000: 44.037: Total time for which application threads were stopped: 0.0002020 seconds, Stopping threads took: 0.0000400 seconds +2021-01-26T15:11:32.114+0000: 44.052: Total time for which application threads were stopped: 0.0149877 seconds, Stopping threads took: 0.0147698 seconds +2021-01-26T15:11:32.122+0000: 44.060: Total time for which application threads were stopped: 0.0077927 seconds, Stopping threads took: 0.0049795 seconds +2021-01-26T15:11:32.127+0000: 44.065: Total time for which application threads were stopped: 0.0048901 seconds, Stopping threads took: 0.0026402 seconds +2021-01-26T15:11:32.133+0000: 44.071: Total time for which application threads were stopped: 0.0060047 seconds, Stopping threads took: 0.0046943 seconds +2021-01-26T15:11:32.143+0000: 44.080: Total time for which application threads were stopped: 0.0089874 seconds, Stopping threads took: 0.0060856 seconds +2021-01-26T15:11:32.144+0000: 44.082: Total time for which application threads were stopped: 0.0003106 seconds, Stopping threads took: 0.0001585 seconds +2021-01-26T15:11:32.146+0000: 44.084: Total time for which application threads were stopped: 0.0003740 seconds, Stopping threads took: 0.0001322 seconds +2021-01-26T15:11:32.147+0000: 44.085: Total time for which application threads were stopped: 0.0006091 seconds, Stopping threads took: 0.0003017 seconds +2021-01-26T15:11:32.148+0000: 44.086: Total time for which application threads were stopped: 0.0002839 seconds, Stopping threads took: 0.0001298 seconds +2021-01-26T15:11:32.183+0000: 44.120: Total time for which application threads were stopped: 0.0214253 seconds, Stopping threads took: 0.0212048 seconds +2021-01-26T15:11:32.196+0000: 44.134: Total time for which application threads were stopped: 0.0023090 seconds, Stopping threads took: 0.0000605 seconds +2021-01-26T15:11:32.201+0000: 44.139: Total time for which application threads were stopped: 0.0004208 seconds, Stopping threads took: 0.0001394 seconds +2021-01-26T15:11:32.207+0000: 44.144: Total time for which application threads were stopped: 0.0055083 seconds, Stopping threads took: 0.0052109 seconds +2021-01-26T15:11:32.215+0000: 44.152: Total time for which application threads were stopped: 0.0057916 seconds, Stopping threads took: 0.0045003 seconds +2021-01-26T15:11:32.256+0000: 44.194: Total time for which application threads were stopped: 0.0237348 seconds, Stopping threads took: 0.0234649 seconds +2021-01-26T15:11:32.258+0000: 44.196: Total time for which application threads were stopped: 0.0001705 seconds, Stopping threads took: 0.0000411 seconds +2021-01-26T15:11:32.276+0000: 44.214: Total time for which application threads were stopped: 0.0095772 seconds, Stopping threads took: 0.0065862 seconds +2021-01-26T15:11:32.306+0000: 44.244: Total time for which application threads were stopped: 0.0019609 seconds, Stopping threads took: 0.0000475 seconds +2021-01-26T15:11:32.375+0000: 44.313: Total time for which application threads were stopped: 0.0254666 seconds, Stopping threads took: 0.0251482 seconds +2021-01-26T15:11:32.387+0000: 44.325: Total time for which application threads were stopped: 0.0103915 seconds, Stopping threads took: 0.0101320 seconds +2021-01-26T15:11:32.475+0000: 44.413: Total time for which application threads were stopped: 0.0015715 seconds, Stopping threads took: 0.0010760 seconds +2021-01-26T15:11:32.522+0000: 44.460: Total time for which application threads were stopped: 0.0143125 seconds, Stopping threads took: 0.0135600 seconds +2021-01-26T15:11:32.610+0000: 44.548: Total time for which application threads were stopped: 0.0531299 seconds, Stopping threads took: 0.0525973 seconds +2021-01-26T15:11:32.618+0000: 44.556: Total time for which application threads were stopped: 0.0020069 seconds, Stopping threads took: 0.0018207 seconds +2021-01-26T15:11:32.619+0000: 44.557: Total time for which application threads were stopped: 0.0003624 seconds, Stopping threads took: 0.0000517 seconds +2021-01-26T15:11:32.620+0000: 44.558: Total time for which application threads were stopped: 0.0001744 seconds, Stopping threads took: 0.0000211 seconds +2021-01-26T15:11:32.653+0000: 44.591: Total time for which application threads were stopped: 0.0002040 seconds, Stopping threads took: 0.0000635 seconds +2021-01-26T15:11:32.770+0000: 44.708: Total time for which application threads were stopped: 0.0103248 seconds, Stopping threads took: 0.0096159 seconds +2021-01-26T15:11:32.856+0000: 44.794: Total time for which application threads were stopped: 0.0341027 seconds, Stopping threads took: 0.0336903 seconds +2021-01-26T15:11:32.995+0000: 44.933: Total time for which application threads were stopped: 0.0203496 seconds, Stopping threads took: 0.0199543 seconds +2021-01-26T15:11:33.020+0000: 44.958: Total time for which application threads were stopped: 0.0242562 seconds, Stopping threads took: 0.0239389 seconds +2021-01-26T15:11:33.108+0000: 45.046: Total time for which application threads were stopped: 0.0194382 seconds, Stopping threads took: 0.0181610 seconds +2021-01-26T15:11:33.218+0000: 45.156: Total time for which application threads were stopped: 0.0143949 seconds, Stopping threads took: 0.0141500 seconds +2021-01-26T15:11:33.231+0000: 45.169: Total time for which application threads were stopped: 0.0003172 seconds, Stopping threads took: 0.0000597 seconds +2021-01-26T15:11:33.238+0000: 45.176: Total time for which application threads were stopped: 0.0005746 seconds, Stopping threads took: 0.0001924 seconds +2021-01-26T15:11:33.257+0000: 45.195: Total time for which application threads were stopped: 0.0167932 seconds, Stopping threads took: 0.0163786 seconds +2021-01-26T15:11:33.264+0000: 45.202: Total time for which application threads were stopped: 0.0052484 seconds, Stopping threads took: 0.0048120 seconds +2021-01-26T15:11:33.301+0000: 45.239: Total time for which application threads were stopped: 0.0117548 seconds, Stopping threads took: 0.0115695 seconds +2021-01-26T15:11:33.304+0000: 45.242: Total time for which application threads were stopped: 0.0006833 seconds, Stopping threads took: 0.0004368 seconds +2021-01-26T15:11:33.343+0000: 45.281: Total time for which application threads were stopped: 0.0134024 seconds, Stopping threads took: 0.0131607 seconds +2021-01-26T15:11:33.385+0000: 45.323: Total time for which application threads were stopped: 0.0121979 seconds, Stopping threads took: 0.0007469 seconds +2021-01-26T15:11:33.396+0000: 45.334: Total time for which application threads were stopped: 0.0054797 seconds, Stopping threads took: 0.0017685 seconds +2021-01-26T15:11:33.693+0000: 45.631: Total time for which application threads were stopped: 0.0461354 seconds, Stopping threads took: 0.0457895 seconds +2021-01-26T15:11:33.694+0000: 45.632: Total time for which application threads were stopped: 0.0003093 seconds, Stopping threads took: 0.0000437 seconds +2021-01-26T15:11:33.701+0000: 45.639: Total time for which application threads were stopped: 0.0060409 seconds, Stopping threads took: 0.0058304 seconds +2021-01-26T15:11:33.706+0000: 45.644: Total time for which application threads were stopped: 0.0010463 seconds, Stopping threads took: 0.0008735 seconds +2021-01-26T15:11:33.743+0000: 45.681: Total time for which application threads were stopped: 0.0116036 seconds, Stopping threads took: 0.0113339 seconds +2021-01-26T15:11:33.751+0000: 45.689: Total time for which application threads were stopped: 0.0030630 seconds, Stopping threads took: 0.0027437 seconds +2021-01-26T15:11:33.772+0000: 45.709: Total time for which application threads were stopped: 0.0124075 seconds, Stopping threads took: 0.0119212 seconds +2021-01-26T15:11:33.776+0000: 45.714: Total time for which application threads were stopped: 0.0016578 seconds, Stopping threads took: 0.0012137 seconds +2021-01-26T15:11:33.778+0000: 45.715: Total time for which application threads were stopped: 0.0003718 seconds, Stopping threads took: 0.0000584 seconds +2021-01-26T15:11:33.783+0000: 45.721: Total time for which application threads were stopped: 0.0025098 seconds, Stopping threads took: 0.0022016 seconds +2021-01-26T15:11:33.789+0000: 45.727: Total time for which application threads were stopped: 0.0030759 seconds, Stopping threads took: 0.0028287 seconds +2021-01-26T15:11:33.797+0000: 45.735: Total time for which application threads were stopped: 0.0009806 seconds, Stopping threads took: 0.0006447 seconds +2021-01-26T15:11:33.801+0000: 45.738: Total time for which application threads were stopped: 0.0008169 seconds, Stopping threads took: 0.0005378 seconds +2021-01-26T15:11:33.829+0000: 45.766: Total time for which application threads were stopped: 0.0189348 seconds, Stopping threads took: 0.0186033 seconds +2021-01-26T15:11:33.845+0000: 45.783: Total time for which application threads were stopped: 0.0116862 seconds, Stopping threads took: 0.0114585 seconds +2021-01-26T15:11:33.863+0000: 45.801: Total time for which application threads were stopped: 0.0093849 seconds, Stopping threads took: 0.0090666 seconds +2021-01-26T15:11:33.879+0000: 45.817: Total time for which application threads were stopped: 0.0045475 seconds, Stopping threads took: 0.0040407 seconds +2021-01-26T15:11:33.891+0000: 45.829: Total time for which application threads were stopped: 0.0032024 seconds, Stopping threads took: 0.0030234 seconds +2021-01-26T15:11:33.895+0000: 45.833: Total time for which application threads were stopped: 0.0008336 seconds, Stopping threads took: 0.0006401 seconds +2021-01-26T15:11:33.898+0000: 45.836: Total time for which application threads were stopped: 0.0004530 seconds, Stopping threads took: 0.0002990 seconds +2021-01-26T15:11:33.906+0000: 45.843: Total time for which application threads were stopped: 0.0015339 seconds, Stopping threads took: 0.0009451 seconds +2021-01-26T15:11:33.930+0000: 45.867: Total time for which application threads were stopped: 0.0220145 seconds, Stopping threads took: 0.0216976 seconds +2021-01-26T15:11:33.932+0000: 45.870: Total time for which application threads were stopped: 0.0004365 seconds, Stopping threads took: 0.0001210 seconds +2021-01-26T15:11:33.936+0000: 45.874: Total time for which application threads were stopped: 0.0007468 seconds, Stopping threads took: 0.0004000 seconds +2021-01-26T15:11:33.938+0000: 45.876: Total time for which application threads were stopped: 0.0004783 seconds, Stopping threads took: 0.0001967 seconds +2021-01-26T15:11:33.939+0000: 45.877: Total time for which application threads were stopped: 0.0001979 seconds, Stopping threads took: 0.0000339 seconds +2021-01-26T15:11:33.941+0000: 45.879: Total time for which application threads were stopped: 0.0002896 seconds, Stopping threads took: 0.0001471 seconds +2021-01-26T15:11:34.024+0000: 45.962: Total time for which application threads were stopped: 0.0534076 seconds, Stopping threads took: 0.0531470 seconds +2021-01-26T15:11:34.034+0000: 45.972: Total time for which application threads were stopped: 0.0025358 seconds, Stopping threads took: 0.0022982 seconds +2021-01-26T15:11:34.039+0000: 45.977: Total time for which application threads were stopped: 0.0038552 seconds, Stopping threads took: 0.0035964 seconds +2021-01-26T15:11:34.041+0000: 45.979: Total time for which application threads were stopped: 0.0013223 seconds, Stopping threads took: 0.0010727 seconds +2021-01-26T15:11:34.043+0000: 45.981: Total time for which application threads were stopped: 0.0015555 seconds, Stopping threads took: 0.0011200 seconds +2021-01-26T15:11:34.048+0000: 45.986: Total time for which application threads were stopped: 0.0046042 seconds, Stopping threads took: 0.0043506 seconds +2021-01-26T15:11:34.075+0000: 46.013: Total time for which application threads were stopped: 0.0041317 seconds, Stopping threads took: 0.0037978 seconds +2021-01-26T15:11:34.098+0000: 46.035: Total time for which application threads were stopped: 0.0118160 seconds, Stopping threads took: 0.0115074 seconds +2021-01-26T15:11:34.101+0000: 46.039: Total time for which application threads were stopped: 0.0001935 seconds, Stopping threads took: 0.0000607 seconds +2021-01-26T15:11:34.104+0000: 46.042: Total time for which application threads were stopped: 0.0002518 seconds, Stopping threads took: 0.0000553 seconds +2021-01-26T15:11:36.105+0000: 48.043: Total time for which application threads were stopped: 0.0003746 seconds, Stopping threads took: 0.0001297 seconds +2021-01-26T15:11:37.106+0000: 49.044: Total time for which application threads were stopped: 0.0002596 seconds, Stopping threads took: 0.0000576 seconds +2021-01-26T15:11:37.148+0000: 49.086: Total time for which application threads were stopped: 0.0003525 seconds, Stopping threads took: 0.0001997 seconds +2021-01-26T15:11:37.238+0000: 49.176: Total time for which application threads were stopped: 0.0023353 seconds, Stopping threads took: 0.0021513 seconds +2021-01-26T15:11:37.240+0000: 49.178: Total time for which application threads were stopped: 0.0004493 seconds, Stopping threads took: 0.0002975 seconds +2021-01-26T15:11:37.240+0000: 49.178: Total time for which application threads were stopped: 0.0004028 seconds, Stopping threads took: 0.0002869 seconds +2021-01-26T15:11:37.241+0000: 49.179: Total time for which application threads were stopped: 0.0001526 seconds, Stopping threads took: 0.0000610 seconds +2021-01-26T15:11:37.241+0000: 49.179: Total time for which application threads were stopped: 0.0003778 seconds, Stopping threads took: 0.0002861 seconds +2021-01-26T15:11:37.241+0000: 49.179: Total time for which application threads were stopped: 0.0001063 seconds, Stopping threads took: 0.0000183 seconds +2021-01-26T15:11:37.246+0000: 49.184: Total time for which application threads were stopped: 0.0047093 seconds, Stopping threads took: 0.0045631 seconds +2021-01-26T15:11:37.266+0000: 49.204: Total time for which application threads were stopped: 0.0012046 seconds, Stopping threads took: 0.0010275 seconds +2021-01-26T15:11:37.279+0000: 49.217: Total time for which application threads were stopped: 0.0106993 seconds, Stopping threads took: 0.0104763 seconds +2021-01-26T15:11:37.287+0000: 49.224: Total time for which application threads were stopped: 0.0003006 seconds, Stopping threads took: 0.0001234 seconds +2021-01-26T15:11:38.287+0000: 50.225: Total time for which application threads were stopped: 0.0001730 seconds, Stopping threads took: 0.0000489 seconds +2021-01-26T15:11:39.287+0000: 51.225: Total time for which application threads were stopped: 0.0001761 seconds, Stopping threads took: 0.0000530 seconds +2021-01-26T15:11:41.288+0000: 53.226: Total time for which application threads were stopped: 0.0001582 seconds, Stopping threads took: 0.0000446 seconds +2021-01-26T15:11:42.283+0000: 54.221: Total time for which application threads were stopped: 0.0061907 seconds, Stopping threads took: 0.0057635 seconds +2021-01-26T15:11:45.716+0000: 57.653: Total time for which application threads were stopped: 0.0002334 seconds, Stopping threads took: 0.0000767 seconds +2021-01-26T15:11:45.718+0000: 57.656: Total time for which application threads were stopped: 0.0001743 seconds, Stopping threads took: 0.0000438 seconds +2021-01-26T15:11:45.722+0000: 57.660: Total time for which application threads were stopped: 0.0013862 seconds, Stopping threads took: 0.0012088 seconds +2021-01-26T15:11:45.723+0000: 57.661: Total time for which application threads were stopped: 0.0003026 seconds, Stopping threads took: 0.0001959 seconds +2021-01-26T15:11:46.724+0000: 58.662: Total time for which application threads were stopped: 0.0001986 seconds, Stopping threads took: 0.0000570 seconds +2021-01-26T15:11:47.300+0000: 59.238: Total time for which application threads were stopped: 0.0149012 seconds, Stopping threads took: 0.0146107 seconds +2021-01-26T15:11:47.301+0000: 59.239: Total time for which application threads were stopped: 0.0001357 seconds, Stopping threads took: 0.0000287 seconds +2021-01-26T15:11:47.305+0000: 59.243: Total time for which application threads were stopped: 0.0001559 seconds, Stopping threads took: 0.0000331 seconds +2021-01-26T15:11:47.313+0000: 59.251: Total time for which application threads were stopped: 0.0035445 seconds, Stopping threads took: 0.0002021 seconds +2021-01-26T15:11:47.320+0000: 59.258: Total time for which application threads were stopped: 0.0036858 seconds, Stopping threads took: 0.0035128 seconds +2021-01-26T15:11:47.322+0000: 59.260: Total time for which application threads were stopped: 0.0001440 seconds, Stopping threads took: 0.0000287 seconds +2021-01-26T15:11:47.334+0000: 59.271: Total time for which application threads were stopped: 0.0066441 seconds, Stopping threads took: 0.0063356 seconds +2021-01-26T15:11:47.336+0000: 59.274: Total time for which application threads were stopped: 0.0001856 seconds, Stopping threads took: 0.0000474 seconds +2021-01-26T15:11:48.337+0000: 60.274: Total time for which application threads were stopped: 0.0002368 seconds, Stopping threads took: 0.0000563 seconds +2021-01-26T15:11:52.223+0000: 64.161: Total time for which application threads were stopped: 0.0062193 seconds, Stopping threads took: 0.0059208 seconds +2021-01-26T15:11:52.266+0000: 64.204: Total time for which application threads were stopped: 0.0129920 seconds, Stopping threads took: 0.0127573 seconds +2021-01-26T15:11:53.266+0000: 65.204: Total time for which application threads were stopped: 0.0002329 seconds, Stopping threads took: 0.0000611 seconds +2021-01-26T15:11:57.153+0000: 69.091: Total time for which application threads were stopped: 0.0002854 seconds, Stopping threads took: 0.0000543 seconds +2021-01-26T15:11:57.969+0000: 69.907: Total time for which application threads were stopped: 0.0003484 seconds, Stopping threads took: 0.0000754 seconds +2021-01-26T15:11:58.969+0000: 70.907: Total time for which application threads were stopped: 0.0002609 seconds, Stopping threads took: 0.0000647 seconds +2021-01-26T15:12:00.075+0000: 72.013: Total time for which application threads were stopped: 0.0002036 seconds, Stopping threads took: 0.0000493 seconds +2021-01-26T15:12:00.080+0000: 72.018: Total time for which application threads were stopped: 0.0004777 seconds, Stopping threads took: 0.0003176 seconds +2021-01-26T15:12:00.091+0000: 72.029: Total time for which application threads were stopped: 0.0021931 seconds, Stopping threads took: 0.0004230 seconds +2021-01-26T15:12:00.092+0000: 72.030: Total time for which application threads were stopped: 0.0002888 seconds, Stopping threads took: 0.0000388 seconds +2021-01-26T15:12:00.092+0000: 72.030: Total time for which application threads were stopped: 0.0002497 seconds, Stopping threads took: 0.0000448 seconds +2021-01-26T15:12:01.971+0000: 73.909: Total time for which application threads were stopped: 0.0002705 seconds, Stopping threads took: 0.0001333 seconds +2021-01-26T15:12:01.972+0000: 73.910: Total time for which application threads were stopped: 0.0002628 seconds, Stopping threads took: 0.0001608 seconds +2021-01-26T15:12:01.973+0000: 73.910: Total time for which application threads were stopped: 0.0002626 seconds, Stopping threads took: 0.0001438 seconds +2021-01-26T15:12:01.973+0000: 73.911: Total time for which application threads were stopped: 0.0003139 seconds, Stopping threads took: 0.0001715 seconds +2021-01-26T15:12:01.974+0000: 73.912: Total time for which application threads were stopped: 0.0003573 seconds, Stopping threads took: 0.0002582 seconds +2021-01-26T15:12:02.226+0000: 74.164: Total time for which application threads were stopped: 0.0017519 seconds, Stopping threads took: 0.0010393 seconds +2021-01-26T15:12:02.250+0000: 74.188: Total time for which application threads were stopped: 0.0015777 seconds, Stopping threads took: 0.0014156 seconds +2021-01-26T15:12:04.251+0000: 76.189: Total time for which application threads were stopped: 0.0002271 seconds, Stopping threads took: 0.0000608 seconds +2021-01-26T15:12:05.251+0000: 77.189: Total time for which application threads were stopped: 0.0002653 seconds, Stopping threads took: 0.0000637 seconds +2021-01-26T15:12:07.246+0000: 79.184: Total time for which application threads were stopped: 0.0078281 seconds, Stopping threads took: 0.0074705 seconds +2021-01-26T15:12:07.248+0000: 79.185: Total time for which application threads were stopped: 0.0002517 seconds, Stopping threads took: 0.0001023 seconds +2021-01-26T15:12:08.250+0000: 80.188: Total time for which application threads were stopped: 0.0002110 seconds, Stopping threads took: 0.0000541 seconds +2021-01-26T15:12:12.251+0000: 84.189: Total time for which application threads were stopped: 0.0004276 seconds, Stopping threads took: 0.0001763 seconds +2021-01-26T15:12:14.252+0000: 86.190: Total time for which application threads were stopped: 0.0003661 seconds, Stopping threads took: 0.0000556 seconds +2021-01-26T15:12:15.835+0000: 87.773: Total time for which application threads were stopped: 0.0003695 seconds, Stopping threads took: 0.0002207 seconds +2021-01-26T15:12:15.836+0000: 87.774: Total time for which application threads were stopped: 0.0001959 seconds, Stopping threads took: 0.0000842 seconds +2021-01-26T15:12:15.837+0000: 87.775: Total time for which application threads were stopped: 0.0003372 seconds, Stopping threads took: 0.0001930 seconds +2021-01-26T15:12:17.838+0000: 89.776: Total time for which application threads were stopped: 0.0001871 seconds, Stopping threads took: 0.0000447 seconds +2021-01-26T15:12:18.839+0000: 90.777: Total time for which application threads were stopped: 0.0002321 seconds, Stopping threads took: 0.0000641 seconds +2021-01-26T15:12:19.840+0000: 91.778: Total time for which application threads were stopped: 0.0005966 seconds, Stopping threads took: 0.0001769 seconds +2021-01-26T15:12:20.841+0000: 92.779: Total time for which application threads were stopped: 0.0003716 seconds, Stopping threads took: 0.0001109 seconds +2021-01-26T15:12:21.841+0000: 93.779: Total time for which application threads were stopped: 0.0002821 seconds, Stopping threads took: 0.0000939 seconds +2021-01-26T15:12:22.843+0000: 94.780: Total time for which application threads were stopped: 0.0006382 seconds, Stopping threads took: 0.0000918 seconds +2021-01-26T15:12:23.844+0000: 95.782: Total time for which application threads were stopped: 0.0003908 seconds, Stopping threads took: 0.0000919 seconds +2021-01-26T15:12:27.847+0000: 99.785: Total time for which application threads were stopped: 0.0006719 seconds, Stopping threads took: 0.0000810 seconds +2021-01-26T15:12:27.992+0000: 99.930: Total time for which application threads were stopped: 0.0001986 seconds, Stopping threads took: 0.0000423 seconds +2021-01-26T15:12:29.993+0000: 101.931: Total time for which application threads were stopped: 0.0003628 seconds, Stopping threads took: 0.0001735 seconds +2021-01-26T15:12:30.094+0000: 102.032: Total time for which application threads were stopped: 0.0002263 seconds, Stopping threads took: 0.0000536 seconds +2021-01-26T15:12:30.095+0000: 102.032: Total time for which application threads were stopped: 0.0001705 seconds, Stopping threads took: 0.0000362 seconds +2021-01-26T15:12:30.095+0000: 102.033: Total time for which application threads were stopped: 0.0001203 seconds, Stopping threads took: 0.0000232 seconds +2021-01-26T15:12:30.096+0000: 102.033: Total time for which application threads were stopped: 0.0001955 seconds, Stopping threads took: 0.0000969 seconds +2021-01-26T15:12:31.975+0000: 103.913: Total time for which application threads were stopped: 0.0002352 seconds, Stopping threads took: 0.0000437 seconds +2021-01-26T15:12:31.978+0000: 103.916: Total time for which application threads were stopped: 0.0001505 seconds, Stopping threads took: 0.0000304 seconds +2021-01-26T15:12:31.979+0000: 103.916: Total time for which application threads were stopped: 0.0001148 seconds, Stopping threads took: 0.0000201 seconds +2021-01-26T15:12:31.979+0000: 103.917: Total time for which application threads were stopped: 0.0001106 seconds, Stopping threads took: 0.0000197 seconds +2021-01-26T15:12:32.980+0000: 104.917: Total time for which application threads were stopped: 0.0002500 seconds, Stopping threads took: 0.0000599 seconds +2021-01-26T15:12:34.981+0000: 106.919: Total time for which application threads were stopped: 0.0004215 seconds, Stopping threads took: 0.0000718 seconds +2021-01-26T15:12:36.985+0000: 108.923: Total time for which application threads were stopped: 0.0005843 seconds, Stopping threads took: 0.0000873 seconds +2021-01-26T15:12:37.226+0000: 109.164: Total time for which application threads were stopped: 0.0011306 seconds, Stopping threads took: 0.0008916 seconds +2021-01-26T15:12:38.228+0000: 110.166: Total time for which application threads were stopped: 0.0002830 seconds, Stopping threads took: 0.0000713 seconds +2021-01-26T15:12:42.151+0000: 114.089: Total time for which application threads were stopped: 0.0018870 seconds, Stopping threads took: 0.0017524 seconds +2021-01-26T15:12:42.233+0000: 114.170: Total time for which application threads were stopped: 0.0004477 seconds, Stopping threads took: 0.0002085 seconds +2021-01-26T15:12:45.936+0000: 117.874: Total time for which application threads were stopped: 0.0001802 seconds, Stopping threads took: 0.0000398 seconds +2021-01-26T15:12:45.937+0000: 117.875: Total time for which application threads were stopped: 0.0001201 seconds, Stopping threads took: 0.0000195 seconds +2021-01-26T15:12:46.937+0000: 118.875: Total time for which application threads were stopped: 0.0003263 seconds, Stopping threads took: 0.0000616 seconds +2021-01-26T15:12:47.148+0000: 119.086: Total time for which application threads were stopped: 0.0002944 seconds, Stopping threads took: 0.0001378 seconds +2021-01-26T15:12:47.151+0000: 119.088: Total time for which application threads were stopped: 0.0003089 seconds, Stopping threads took: 0.0001346 seconds +2021-01-26T15:12:47.152+0000: 119.089: Total time for which application threads were stopped: 0.0004619 seconds, Stopping threads took: 0.0003417 seconds +2021-01-26T15:12:47.223+0000: 119.161: Total time for which application threads were stopped: 0.0018252 seconds, Stopping threads took: 0.0012995 seconds +2021-01-26T15:12:48.224+0000: 120.162: Total time for which application threads were stopped: 0.0003837 seconds, Stopping threads took: 0.0000703 seconds +2021-01-26T15:12:52.226+0000: 124.164: Total time for which application threads were stopped: 0.0008528 seconds, Stopping threads took: 0.0006604 seconds +2021-01-26T15:12:53.226+0000: 125.164: Total time for which application threads were stopped: 0.0002150 seconds, Stopping threads took: 0.0000466 seconds +2021-01-26T15:12:54.227+0000: 126.164: Total time for which application threads were stopped: 0.0002793 seconds, Stopping threads took: 0.0000705 seconds +2021-01-26T15:12:57.231+0000: 129.169: Total time for which application threads were stopped: 0.0029085 seconds, Stopping threads took: 0.0026653 seconds +2021-01-26T15:12:58.232+0000: 130.169: Total time for which application threads were stopped: 0.0002435 seconds, Stopping threads took: 0.0000610 seconds +2021-01-26T15:13:02.233+0000: 134.170: Total time for which application threads were stopped: 0.0002166 seconds, Stopping threads took: 0.0000508 seconds +2021-01-26T15:13:02.316+0000: 134.254: Total time for which application threads were stopped: 0.0019866 seconds, Stopping threads took: 0.0014478 seconds +2021-01-26T15:13:03.317+0000: 135.255: Total time for which application threads were stopped: 0.0002305 seconds, Stopping threads took: 0.0000599 seconds +2021-01-26T15:13:04.121+0000: 136.059: Total time for which application threads were stopped: 0.0006588 seconds, Stopping threads took: 0.0004411 seconds +2021-01-26T15:13:04.279+0000: 136.216: Total time for which application threads were stopped: 0.0018822 seconds, Stopping threads took: 0.0013952 seconds +2021-01-26T15:13:04.283+0000: 136.221: Total time for which application threads were stopped: 0.0004754 seconds, Stopping threads took: 0.0001808 seconds +2021-01-26T15:13:04.284+0000: 136.222: Total time for which application threads were stopped: 0.0006170 seconds, Stopping threads took: 0.0003660 seconds +2021-01-26T15:13:04.287+0000: 136.225: Total time for which application threads were stopped: 0.0004035 seconds, Stopping threads took: 0.0001403 seconds +2021-01-26T15:13:04.288+0000: 136.226: Total time for which application threads were stopped: 0.0003896 seconds, Stopping threads took: 0.0001654 seconds +2021-01-26T15:13:04.291+0000: 136.229: Total time for which application threads were stopped: 0.0018816 seconds, Stopping threads took: 0.0013354 seconds +2021-01-26T15:13:04.292+0000: 136.229: Total time for which application threads were stopped: 0.0003166 seconds, Stopping threads took: 0.0000691 seconds +2021-01-26T15:13:04.293+0000: 136.231: Total time for which application threads were stopped: 0.0007237 seconds, Stopping threads took: 0.0004549 seconds +2021-01-26T15:13:04.295+0000: 136.233: Total time for which application threads were stopped: 0.0006496 seconds, Stopping threads took: 0.0002768 seconds +2021-01-26T15:13:04.296+0000: 136.234: Total time for which application threads were stopped: 0.0007836 seconds, Stopping threads took: 0.0004885 seconds +2021-01-26T15:13:04.298+0000: 136.235: Total time for which application threads were stopped: 0.0007811 seconds, Stopping threads took: 0.0004694 seconds +2021-01-26T15:13:04.302+0000: 136.240: [GC (Allocation Failure) 2021-01-26T15:13:04.303+0000: 136.241: [ParNew +Desired survivor size 8945664 bytes, new threshold 1 (max 6) +- age 1: 11569960 bytes, 11569960 total +: 151847K->13730K(157248K), 0.0293634 secs] 221987K->121939K(506816K), 0.0317307 secs] [Times: user=0.05 sys=0.02, real=0.03 secs] +2021-01-26T15:13:04.335+0000: 136.273: Total time for which application threads were stopped: 0.0333228 seconds, Stopping threads took: 0.0000562 seconds +2021-01-26T15:13:05.341+0000: 137.278: Total time for which application threads were stopped: 0.0002261 seconds, Stopping threads took: 0.0000475 seconds +2021-01-26T15:13:06.341+0000: 138.279: Total time for which application threads were stopped: 0.0003225 seconds, Stopping threads took: 0.0000608 seconds +2021-01-26T15:13:09.342+0000: 141.280: Total time for which application threads were stopped: 0.0003035 seconds, Stopping threads took: 0.0000836 seconds +2021-01-26T15:13:10.343+0000: 142.281: Total time for which application threads were stopped: 0.0002066 seconds, Stopping threads took: 0.0000492 seconds +2021-01-26T15:13:11.219+0000: 143.157: Total time for which application threads were stopped: 0.0009758 seconds, Stopping threads took: 0.0003403 seconds +2021-01-26T15:13:11.289+0000: 143.227: Total time for which application threads were stopped: 0.0004101 seconds, Stopping threads took: 0.0001985 seconds +2021-01-26T15:13:12.294+0000: 144.232: Total time for which application threads were stopped: 0.0004697 seconds, Stopping threads took: 0.0000628 seconds +2021-01-26T15:13:13.295+0000: 145.232: Total time for which application threads were stopped: 0.0001859 seconds, Stopping threads took: 0.0000475 seconds +2021-01-26T15:13:14.296+0000: 146.234: Total time for which application threads were stopped: 0.0006038 seconds, Stopping threads took: 0.0000913 seconds +2021-01-26T15:13:16.048+0000: 147.986: Total time for which application threads were stopped: 0.0002037 seconds, Stopping threads took: 0.0000438 seconds +2021-01-26T15:13:16.048+0000: 147.986: Total time for which application threads were stopped: 0.0001180 seconds, Stopping threads took: 0.0000178 seconds +2021-01-26T15:13:17.049+0000: 148.987: Total time for which application threads were stopped: 0.0007957 seconds, Stopping threads took: 0.0001410 seconds +2021-01-26T15:13:19.050+0000: 150.988: Total time for which application threads were stopped: 0.0003764 seconds, Stopping threads took: 0.0000725 seconds +2021-01-26T15:13:23.054+0000: 154.992: Total time for which application threads were stopped: 0.0004061 seconds, Stopping threads took: 0.0001216 seconds +2021-01-26T15:13:24.054+0000: 155.992: Total time for which application threads were stopped: 0.0001828 seconds, Stopping threads took: 0.0000474 seconds +2021-01-26T15:13:25.055+0000: 156.993: Total time for which application threads were stopped: 0.0002142 seconds, Stopping threads took: 0.0000507 seconds +2021-01-26T15:13:28.056+0000: 159.994: Total time for which application threads were stopped: 0.0002843 seconds, Stopping threads took: 0.0000686 seconds +2021-01-26T15:13:31.058+0000: 162.995: Total time for which application threads were stopped: 0.0002383 seconds, Stopping threads took: 0.0000573 seconds +2021-01-26T15:13:32.059+0000: 163.996: Total time for which application threads were stopped: 0.0005753 seconds, Stopping threads took: 0.0002317 seconds +2021-01-26T15:13:36.061+0000: 167.999: Total time for which application threads were stopped: 0.0005736 seconds, Stopping threads took: 0.0001512 seconds +2021-01-26T15:13:37.063+0000: 169.001: Total time for which application threads were stopped: 0.0002874 seconds, Stopping threads took: 0.0000652 seconds +2021-01-26T15:13:41.066+0000: 173.003: Total time for which application threads were stopped: 0.0004698 seconds, Stopping threads took: 0.0001905 seconds +2021-01-26T15:13:46.154+0000: 178.092: Total time for which application threads were stopped: 0.0001713 seconds, Stopping threads took: 0.0000395 seconds +2021-01-26T15:13:46.155+0000: 178.092: Total time for which application threads were stopped: 0.0001259 seconds, Stopping threads took: 0.0000184 seconds +2021-01-26T15:13:47.156+0000: 179.093: Total time for which application threads were stopped: 0.0002725 seconds, Stopping threads took: 0.0000753 seconds +2021-01-26T15:13:54.160+0000: 186.098: Total time for which application threads were stopped: 0.0003496 seconds, Stopping threads took: 0.0001012 seconds +2021-01-26T15:13:58.162+0000: 190.099: Total time for which application threads were stopped: 0.0004999 seconds, Stopping threads took: 0.0003091 seconds +2021-01-26T15:14:00.164+0000: 192.101: Total time for which application threads were stopped: 0.0002860 seconds, Stopping threads took: 0.0000712 seconds +2021-01-26T15:14:04.165+0000: 196.103: Total time for which application threads were stopped: 0.0002831 seconds, Stopping threads took: 0.0000703 seconds +2021-01-26T15:14:13.169+0000: 205.106: Total time for which application threads were stopped: 0.0002454 seconds, Stopping threads took: 0.0000614 seconds +2021-01-26T15:14:14.169+0000: 206.107: Total time for which application threads were stopped: 0.0002076 seconds, Stopping threads took: 0.0000522 seconds +2021-01-26T15:14:16.261+0000: 208.199: Total time for which application threads were stopped: 0.0004615 seconds, Stopping threads took: 0.0003092 seconds +2021-01-26T15:14:16.262+0000: 208.200: Total time for which application threads were stopped: 0.0005909 seconds, Stopping threads took: 0.0004849 seconds +2021-01-26T15:14:17.263+0000: 209.200: Total time for which application threads were stopped: 0.0002534 seconds, Stopping threads took: 0.0000580 seconds +2021-01-26T15:14:19.265+0000: 211.202: Total time for which application threads were stopped: 0.0002523 seconds, Stopping threads took: 0.0000983 seconds +2021-01-26T15:14:24.267+0000: 216.205: Total time for which application threads were stopped: 0.0004889 seconds, Stopping threads took: 0.0003242 seconds +2021-01-26T15:14:26.268+0000: 218.206: Total time for which application threads were stopped: 0.0002548 seconds, Stopping threads took: 0.0000529 seconds +2021-01-26T15:14:28.270+0000: 220.207: Total time for which application threads were stopped: 0.0007727 seconds, Stopping threads took: 0.0001887 seconds +2021-01-26T15:14:29.271+0000: 221.208: Total time for which application threads were stopped: 0.0005705 seconds, Stopping threads took: 0.0001685 seconds +2021-01-26T15:14:34.274+0000: 226.211: Total time for which application threads were stopped: 0.0005335 seconds, Stopping threads took: 0.0000863 seconds +2021-01-26T15:14:40.276+0000: 232.213: Total time for which application threads were stopped: 0.0002839 seconds, Stopping threads took: 0.0000639 seconds +2021-01-26T15:14:44.278+0000: 236.216: Total time for which application threads were stopped: 0.0002143 seconds, Stopping threads took: 0.0000523 seconds +2021-01-26T15:14:46.358+0000: 238.295: Total time for which application threads were stopped: 0.0001987 seconds, Stopping threads took: 0.0000392 seconds +2021-01-26T15:14:46.359+0000: 238.296: Total time for which application threads were stopped: 0.0002402 seconds, Stopping threads took: 0.0000204 seconds +2021-01-26T15:14:48.359+0000: 240.297: Total time for which application threads were stopped: 0.0002100 seconds, Stopping threads took: 0.0000475 seconds +2021-01-26T15:14:58.363+0000: 250.301: Total time for which application threads were stopped: 0.0002271 seconds, Stopping threads took: 0.0000774 seconds +2021-01-26T15:15:14.370+0000: 266.307: Total time for which application threads were stopped: 0.0003648 seconds, Stopping threads took: 0.0000860 seconds +2021-01-26T15:15:16.371+0000: 268.308: Total time for which application threads were stopped: 0.0002400 seconds, Stopping threads took: 0.0000494 seconds +2021-01-26T15:15:16.444+0000: 268.382: Total time for which application threads were stopped: 0.0001795 seconds, Stopping threads took: 0.0000443 seconds +2021-01-26T15:15:16.445+0000: 268.382: Total time for which application threads were stopped: 0.0001211 seconds, Stopping threads took: 0.0000183 seconds +2021-01-26T15:15:17.445+0000: 269.383: Total time for which application threads were stopped: 0.0004525 seconds, Stopping threads took: 0.0000833 seconds +2021-01-26T15:15:19.447+0000: 271.384: Total time for which application threads were stopped: 0.0002722 seconds, Stopping threads took: 0.0000614 seconds +2021-01-26T15:15:28.392+0000: 280.329: Total time for which application threads were stopped: 0.0002489 seconds, Stopping threads took: 0.0000907 seconds +2021-01-26T15:15:28.393+0000: 280.330: Total time for which application threads were stopped: 0.0003856 seconds, Stopping threads took: 0.0002596 seconds +2021-01-26T15:15:28.404+0000: 280.341: Total time for which application threads were stopped: 0.0004845 seconds, Stopping threads took: 0.0002467 seconds +2021-01-26T15:15:28.494+0000: 280.431: Total time for which application threads were stopped: 0.0005909 seconds, Stopping threads took: 0.0002962 seconds +2021-01-26T15:15:28.502+0000: 280.439: Total time for which application threads were stopped: 0.0022392 seconds, Stopping threads took: 0.0019129 seconds +2021-01-26T15:15:28.539+0000: 280.477: Total time for which application threads were stopped: 0.0004649 seconds, Stopping threads took: 0.0002848 seconds +2021-01-26T15:15:28.579+0000: 280.516: Total time for which application threads were stopped: 0.0004373 seconds, Stopping threads took: 0.0002023 seconds +2021-01-26T15:15:28.579+0000: 280.517: Total time for which application threads were stopped: 0.0005942 seconds, Stopping threads took: 0.0004749 seconds +2021-01-26T15:15:28.580+0000: 280.518: Total time for which application threads were stopped: 0.0005699 seconds, Stopping threads took: 0.0004616 seconds +2021-01-26T15:15:28.593+0000: 280.531: Total time for which application threads were stopped: 0.0002251 seconds, Stopping threads took: 0.0000471 seconds +2021-01-26T15:15:28.597+0000: 280.534: Total time for which application threads were stopped: 0.0005229 seconds, Stopping threads took: 0.0002708 seconds +2021-01-26T15:15:28.600+0000: 280.537: Total time for which application threads were stopped: 0.0003094 seconds, Stopping threads took: 0.0001789 seconds +2021-01-26T15:15:29.600+0000: 281.537: Total time for which application threads were stopped: 0.0002451 seconds, Stopping threads took: 0.0000577 seconds +2021-01-26T15:15:32.601+0000: 284.539: Total time for which application threads were stopped: 0.0003872 seconds, Stopping threads took: 0.0000775 seconds +2021-01-26T15:15:34.602+0000: 286.540: Total time for which application threads were stopped: 0.0002261 seconds, Stopping threads took: 0.0000584 seconds +2021-01-26T15:15:40.605+0000: 292.542: Total time for which application threads were stopped: 0.0009395 seconds, Stopping threads took: 0.0002571 seconds +2021-01-26T15:15:46.607+0000: 298.544: Total time for which application threads were stopped: 0.0003801 seconds, Stopping threads took: 0.0000703 seconds +2021-01-26T15:15:58.616+0000: 310.553: Total time for which application threads were stopped: 0.0002784 seconds, Stopping threads took: 0.0000973 seconds +2021-01-26T15:15:59.617+0000: 311.554: Total time for which application threads were stopped: 0.0004121 seconds, Stopping threads took: 0.0001999 seconds +2021-01-26T15:16:01.618+0000: 313.556: Total time for which application threads were stopped: 0.0003882 seconds, Stopping threads took: 0.0000888 seconds +2021-01-26T15:16:02.619+0000: 314.556: Total time for which application threads were stopped: 0.0003527 seconds, Stopping threads took: 0.0001225 seconds +2021-01-26T15:16:14.625+0000: 326.562: Total time for which application threads were stopped: 0.0003622 seconds, Stopping threads took: 0.0000898 seconds +2021-01-26T15:16:16.631+0000: 328.569: Total time for which application threads were stopped: 0.0001886 seconds, Stopping threads took: 0.0000418 seconds +2021-01-26T15:16:16.632+0000: 328.569: Total time for which application threads were stopped: 0.0001297 seconds, Stopping threads took: 0.0000200 seconds +2021-01-26T15:16:17.634+0000: 329.571: Total time for which application threads were stopped: 0.0002843 seconds, Stopping threads took: 0.0000688 seconds +2021-01-26T15:16:28.639+0000: 340.576: Total time for which application threads were stopped: 0.0002960 seconds, Stopping threads took: 0.0001088 seconds +2021-01-26T15:16:33.807+0000: 345.745: Total time for which application threads were stopped: 0.0010290 seconds, Stopping threads took: 0.0008807 seconds +2021-01-26T15:16:33.809+0000: 345.746: Total time for which application threads were stopped: 0.0006637 seconds, Stopping threads took: 0.0004901 seconds +2021-01-26T15:16:33.810+0000: 345.747: Total time for which application threads were stopped: 0.0003775 seconds, Stopping threads took: 0.0002573 seconds +2021-01-26T15:16:33.811+0000: 345.748: Total time for which application threads were stopped: 0.0006130 seconds, Stopping threads took: 0.0004970 seconds +2021-01-26T15:16:33.814+0000: 345.751: Total time for which application threads were stopped: 0.0002030 seconds, Stopping threads took: 0.0000950 seconds +2021-01-26T15:16:33.816+0000: 345.753: Total time for which application threads were stopped: 0.0002552 seconds, Stopping threads took: 0.0001426 seconds +2021-01-26T15:16:33.817+0000: 345.754: Total time for which application threads were stopped: 0.0005990 seconds, Stopping threads took: 0.0003621 seconds +2021-01-26T15:16:33.817+0000: 345.755: Total time for which application threads were stopped: 0.0003589 seconds, Stopping threads took: 0.0002534 seconds +2021-01-26T15:16:33.819+0000: 345.757: Total time for which application threads were stopped: 0.0005711 seconds, Stopping threads took: 0.0004104 seconds +2021-01-26T15:16:33.820+0000: 345.757: Total time for which application threads were stopped: 0.0004026 seconds, Stopping threads took: 0.0003045 seconds +2021-01-26T15:16:33.821+0000: 345.758: Total time for which application threads were stopped: 0.0004633 seconds, Stopping threads took: 0.0003667 seconds +2021-01-26T15:16:33.821+0000: 345.759: Total time for which application threads were stopped: 0.0001262 seconds, Stopping threads took: 0.0000242 seconds +2021-01-26T15:16:33.823+0000: 345.760: Total time for which application threads were stopped: 0.0001142 seconds, Stopping threads took: 0.0000200 seconds +2021-01-26T15:16:33.823+0000: 345.761: Total time for which application threads were stopped: 0.0002654 seconds, Stopping threads took: 0.0001777 seconds +2021-01-26T15:16:33.824+0000: 345.761: Total time for which application threads were stopped: 0.0003363 seconds, Stopping threads took: 0.0002513 seconds +2021-01-26T15:16:33.824+0000: 345.762: Total time for which application threads were stopped: 0.0003430 seconds, Stopping threads took: 0.0002495 seconds +2021-01-26T15:16:33.825+0000: 345.762: Total time for which application threads were stopped: 0.0003997 seconds, Stopping threads took: 0.0003086 seconds +2021-01-26T15:16:33.841+0000: 345.778: Total time for which application threads were stopped: 0.0003232 seconds, Stopping threads took: 0.0000698 seconds +2021-01-26T15:16:33.847+0000: 345.785: Total time for which application threads were stopped: 0.0003108 seconds, Stopping threads took: 0.0000773 seconds +2021-01-26T15:16:33.858+0000: 345.796: Total time for which application threads were stopped: 0.0024287 seconds, Stopping threads took: 0.0022300 seconds +2021-01-26T15:16:33.861+0000: 345.798: Total time for which application threads were stopped: 0.0021067 seconds, Stopping threads took: 0.0018562 seconds +2021-01-26T15:16:33.862+0000: 345.799: Total time for which application threads were stopped: 0.0003298 seconds, Stopping threads took: 0.0001196 seconds +2021-01-26T15:16:33.862+0000: 345.800: Total time for which application threads were stopped: 0.0005175 seconds, Stopping threads took: 0.0001399 seconds +2021-01-26T15:16:33.863+0000: 345.801: Total time for which application threads were stopped: 0.0004438 seconds, Stopping threads took: 0.0001579 seconds +2021-01-26T15:16:33.864+0000: 345.801: Total time for which application threads were stopped: 0.0003251 seconds, Stopping threads took: 0.0001760 seconds +2021-01-26T15:16:33.881+0000: 345.819: Total time for which application threads were stopped: 0.0020159 seconds, Stopping threads took: 0.0017986 seconds +2021-01-26T15:16:33.884+0000: 345.822: Total time for which application threads were stopped: 0.0010598 seconds, Stopping threads took: 0.0009179 seconds +2021-01-26T15:16:33.886+0000: 345.823: Total time for which application threads were stopped: 0.0012317 seconds, Stopping threads took: 0.0011014 seconds +2021-01-26T15:16:33.887+0000: 345.825: Total time for which application threads were stopped: 0.0011292 seconds, Stopping threads took: 0.0009161 seconds +2021-01-26T15:16:33.888+0000: 345.825: Total time for which application threads were stopped: 0.0005115 seconds, Stopping threads took: 0.0003299 seconds +2021-01-26T15:16:33.890+0000: 345.828: Total time for which application threads were stopped: 0.0011727 seconds, Stopping threads took: 0.0008996 seconds +2021-01-26T15:16:33.893+0000: 345.830: Total time for which application threads were stopped: 0.0005713 seconds, Stopping threads took: 0.0002917 seconds +2021-01-26T15:16:33.903+0000: 345.840: Total time for which application threads were stopped: 0.0006650 seconds, Stopping threads took: 0.0003856 seconds +2021-01-26T15:16:33.908+0000: 345.846: Total time for which application threads were stopped: 0.0002775 seconds, Stopping threads took: 0.0001474 seconds +2021-01-26T15:16:33.910+0000: 345.847: Total time for which application threads were stopped: 0.0002961 seconds, Stopping threads took: 0.0000265 seconds +2021-01-26T15:16:33.914+0000: 345.851: Total time for which application threads were stopped: 0.0013540 seconds, Stopping threads took: 0.0011071 seconds +2021-01-26T15:16:33.916+0000: 345.853: Total time for which application threads were stopped: 0.0001759 seconds, Stopping threads took: 0.0000356 seconds +2021-01-26T15:16:33.918+0000: 345.855: Total time for which application threads were stopped: 0.0016035 seconds, Stopping threads took: 0.0014817 seconds +2021-01-26T15:16:33.921+0000: 345.858: Total time for which application threads were stopped: 0.0004786 seconds, Stopping threads took: 0.0002531 seconds +2021-01-26T15:16:33.924+0000: 345.861: Total time for which application threads were stopped: 0.0004374 seconds, Stopping threads took: 0.0001483 seconds +2021-01-26T15:16:33.926+0000: 345.864: Total time for which application threads were stopped: 0.0001812 seconds, Stopping threads took: 0.0000347 seconds +2021-01-26T15:16:33.928+0000: 345.865: Total time for which application threads were stopped: 0.0010259 seconds, Stopping threads took: 0.0001177 seconds +2021-01-26T15:16:33.928+0000: 345.866: Total time for which application threads were stopped: 0.0002610 seconds, Stopping threads took: 0.0000256 seconds +2021-01-26T15:16:33.929+0000: 345.866: Total time for which application threads were stopped: 0.0001845 seconds, Stopping threads took: 0.0000209 seconds +2021-01-26T15:16:33.930+0000: 345.867: Total time for which application threads were stopped: 0.0002769 seconds, Stopping threads took: 0.0000228 seconds +2021-01-26T15:16:33.932+0000: 345.870: Total time for which application threads were stopped: 0.0002877 seconds, Stopping threads took: 0.0000613 seconds +2021-01-26T15:16:33.941+0000: 345.878: Total time for which application threads were stopped: 0.0003727 seconds, Stopping threads took: 0.0001451 seconds +2021-01-26T15:16:33.942+0000: 345.880: Total time for which application threads were stopped: 0.0003204 seconds, Stopping threads took: 0.0002235 seconds +2021-01-26T15:16:33.943+0000: 345.880: Total time for which application threads were stopped: 0.0004345 seconds, Stopping threads took: 0.0003138 seconds +2021-01-26T15:16:33.944+0000: 345.881: Total time for which application threads were stopped: 0.0005043 seconds, Stopping threads took: 0.0003661 seconds +2021-01-26T15:16:33.945+0000: 345.882: Total time for which application threads were stopped: 0.0004888 seconds, Stopping threads took: 0.0003709 seconds +2021-01-26T15:16:33.945+0000: 345.883: Total time for which application threads were stopped: 0.0004804 seconds, Stopping threads took: 0.0002318 seconds +2021-01-26T15:16:33.946+0000: 345.884: Total time for which application threads were stopped: 0.0003528 seconds, Stopping threads took: 0.0000885 seconds +2021-01-26T15:16:33.953+0000: 345.891: Total time for which application threads were stopped: 0.0006843 seconds, Stopping threads took: 0.0005296 seconds +2021-01-26T15:16:33.956+0000: 345.893: Total time for which application threads were stopped: 0.0011380 seconds, Stopping threads took: 0.0009940 seconds +2021-01-26T15:16:33.956+0000: 345.894: Total time for which application threads were stopped: 0.0004688 seconds, Stopping threads took: 0.0003453 seconds +2021-01-26T15:16:33.957+0000: 345.894: Total time for which application threads were stopped: 0.0003122 seconds, Stopping threads took: 0.0000954 seconds +2021-01-26T15:16:33.958+0000: 345.895: Total time for which application threads were stopped: 0.0007280 seconds, Stopping threads took: 0.0005993 seconds +2021-01-26T15:16:33.959+0000: 345.896: Total time for which application threads were stopped: 0.0009064 seconds, Stopping threads took: 0.0007116 seconds +2021-01-26T15:16:33.960+0000: 345.898: Total time for which application threads were stopped: 0.0005505 seconds, Stopping threads took: 0.0004040 seconds +2021-01-26T15:16:33.976+0000: 345.914: Total time for which application threads were stopped: 0.0004693 seconds, Stopping threads took: 0.0003241 seconds +2021-01-26T15:16:34.246+0000: 346.183: Total time for which application threads were stopped: 0.0005276 seconds, Stopping threads took: 0.0003760 seconds +2021-01-26T15:16:34.246+0000: 346.184: Total time for which application threads were stopped: 0.0003657 seconds, Stopping threads took: 0.0002297 seconds +2021-01-26T15:16:34.481+0000: 346.419: Total time for which application threads were stopped: 0.0001983 seconds, Stopping threads took: 0.0000482 seconds +2021-01-26T15:16:34.482+0000: 346.419: Total time for which application threads were stopped: 0.0001438 seconds, Stopping threads took: 0.0000184 seconds +2021-01-26T15:16:34.482+0000: 346.419: Total time for which application threads were stopped: 0.0001334 seconds, Stopping threads took: 0.0000173 seconds +2021-01-26T15:16:34.482+0000: 346.419: Total time for which application threads were stopped: 0.0001302 seconds, Stopping threads took: 0.0000163 seconds +2021-01-26T15:16:34.482+0000: 346.420: Total time for which application threads were stopped: 0.0000957 seconds, Stopping threads took: 0.0000169 seconds +2021-01-26T15:16:34.484+0000: 346.421: Total time for which application threads were stopped: 0.0002622 seconds, Stopping threads took: 0.0001549 seconds +2021-01-26T15:16:34.484+0000: 346.422: Total time for which application threads were stopped: 0.0002588 seconds, Stopping threads took: 0.0001538 seconds +2021-01-26T15:16:34.485+0000: 346.422: Total time for which application threads were stopped: 0.0002073 seconds, Stopping threads took: 0.0001249 seconds +2021-01-26T15:16:34.485+0000: 346.423: Total time for which application threads were stopped: 0.0002504 seconds, Stopping threads took: 0.0001697 seconds +2021-01-26T15:16:34.486+0000: 346.423: Total time for which application threads were stopped: 0.0001590 seconds, Stopping threads took: 0.0000799 seconds +2021-01-26T15:16:34.486+0000: 346.423: Total time for which application threads were stopped: 0.0002003 seconds, Stopping threads took: 0.0001210 seconds +2021-01-26T15:16:34.486+0000: 346.423: Total time for which application threads were stopped: 0.0001308 seconds, Stopping threads took: 0.0000540 seconds diff --git a/deploy/deploy.sh b/deploy/deploy.sh index ea914d1..53b39b5 100755 --- a/deploy/deploy.sh +++ b/deploy/deploy.sh @@ -1,5 +1,7 @@ #!/bin/bash docker-compose up -d -# Restore the gravitee db in Mongo with a default setup, apis and Oauth +echo "Starting docker containers, giving them some time to start..." +sleep 120 +# Restore dbs in Mongo with a default setup, apis and Oauth docker cp ./mongodump deploy_mongo_1:/home/dump -docker exec -it deploy_mongo_1 mongorestore /home/dump +docker exec -it deploy_mongo_1 mongorestore /home/dump diff --git a/deploy/docker-compose.yaml b/deploy/docker-compose.yaml index eaa7f88..44606d3 100644 --- a/deploy/docker-compose.yaml +++ b/deploy/docker-compose.yaml @@ -134,7 +134,7 @@ services: - "4300:4300" - "5432:5432" volumes: - - cratedata:/data + - ./cratedata:/data networks: - storage @@ -194,7 +194,7 @@ services: - storage portal: - image: orchestracities/portal:${PORTAL_VERSION:-0.1.23} + image: orchestracities/portal:${PORTAL_VERSION:-0.1.30} depends_on: - portaldb environment: diff --git a/deploy/mongodump/iotagent-manager/configurations.bson b/deploy/mongodump/iotagent-manager/configurations.bson new file mode 100644 index 0000000000000000000000000000000000000000..a65112aad7bde701e4ea5fc80693f8da0099026d GIT binary patch literal 416 zcmYk2!AiqG5QfKCsfdT-!E=s!ut}pWS`aK$tI$T2G|^t-CK=j|Nj7XIk@_xzPvX;f z^da2Tiq2*DznOpdnfDEVrq3gIYVCDDK0C1U_3+jxh!GD5M3M(3VF6p9s=@xiwbGj= zT&SjrAjXjDBlQ|#nuC_H6k&HQQ8Fqef=0_6p{b}{rUA;@oJ&C>6bWoAHMw&fe>w&& z!XlJBCoVED*8_c;kYov;FG#oArhX$FeK5z2^aEQ&*p3UmLRl!wA!u9>t7ovU+zX<- zZy1UltziGe>~%nsScp=FKZ)w85rM{X{)|iLD4RPvI}Tz|xz^QdG;-}nue+F8F3r5I zIX3T;z&q{Tk6ep+c5)kEo`Y7PthhQ@|G^P2nIdKI3+p6?#|pv;%T$h3#WRMOihq9@ N;>zFh{Yq`C`Ubt`bS3}* literal 0 HcmV?d00001 diff --git a/deploy/mongodump/iotagent-manager/configurations.metadata.json b/deploy/mongodump/iotagent-manager/configurations.metadata.json new file mode 100644 index 0000000..05d5529 --- /dev/null +++ b/deploy/mongodump/iotagent-manager/configurations.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":1,"key":{"_id":1},"name":"_id_","ns":"iotagent-manager.configurations"},{"v":1,"unique":true,"key":{"apikey":1,"resource":1,"protocol":1},"name":"apikey_1_resource_1_protocol_1","ns":"iotagent-manager.configurations","background":true}]} \ No newline at end of file diff --git a/deploy/mongodump/iotagent-manager/protocols.bson b/deploy/mongodump/iotagent-manager/protocols.bson new file mode 100644 index 0000000000000000000000000000000000000000..81ee2d86f17adc166e55beb85fda53d6b3f59300 GIT binary patch literal 175 zcmZ3_z`(#BpP9mtARzE(-xEUyt~U{Lm@@NA64O)jN*Kg|(itTs1y=g{Krvmgpp}V% znIQvHQEG91X;E@213OR+NLD|EfvKPDCip)5)vQk!@!i1TAW;zSx}Oh zpT}STl~4%HDJe?K$xP2EQ83aoQ1HwTQE&v=si5JPpOUJVRjg2!T2u_wqRAi-A72L4 G1_S`n$1-RD literal 0 HcmV?d00001 diff --git a/deploy/mongodump/iotagent-manager/protocols.metadata.json b/deploy/mongodump/iotagent-manager/protocols.metadata.json new file mode 100644 index 0000000..bc8f2b1 --- /dev/null +++ b/deploy/mongodump/iotagent-manager/protocols.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":1,"key":{"_id":1},"name":"_id_","ns":"iotagent-manager.protocols"},{"v":1,"unique":true,"key":{"protocol":1,"resource":1},"name":"protocol_1_resource_1","ns":"iotagent-manager.protocols","background":true}]} \ No newline at end of file diff --git a/deploy/mongodump/iotagent-ul/devices.bson b/deploy/mongodump/iotagent-ul/devices.bson new file mode 100644 index 0000000000000000000000000000000000000000..17c4f1925ae83c216b44060711b46b1156d50fc2 GIT binary patch literal 352 zcmZ9I!Ab)$5Qe95rCU$MgC~6iDPH#=2rDSGpb+WJZJHgHKz6buvs>!>iLc>{2#$4C za8CKZ{K@|(n+d?Qay4w`r?<-sg8cpCDD&oJ562*r8Ov_KQP|M7hUzrR#D<-{VUBLw zGydX!n{0F)yFeqG*@)r|R2oKjeSW*%NwAXKnS^LeT;gyAiuWDDRFFt#5fqsg;aor; zsh}pgOJ5h?o5kO;gz;eis;t9~Kqcug!ZU%3wMmRCL#DwNi5Dfd0Ztq-Ml$}shU{nk u|2e9QfrAYma=B>rsCD(Ul%~;8>O$nhU)*W^0C^X@chtaSUR8sbWj+Di1z+3% literal 0 HcmV?d00001 diff --git a/deploy/mongodump/iotagent-ul/devices.metadata.json b/deploy/mongodump/iotagent-ul/devices.metadata.json new file mode 100644 index 0000000..8241391 --- /dev/null +++ b/deploy/mongodump/iotagent-ul/devices.metadata.json @@ -0,0 +1 @@ +{"options":{},"indexes":[{"v":1,"key":{"_id":1},"name":"_id_","ns":"iotagent-ul.devices"}]} \ No newline at end of file diff --git a/deploy/mongodump/iotagent-ul/groups.bson b/deploy/mongodump/iotagent-ul/groups.bson new file mode 100644 index 0000000000000000000000000000000000000000..d00be3213dec1e23fa4eb27c5f05a1ff7cd6825a GIT binary patch literal 319 zcmYk0!A`?442De@8V3#&2W~t=OHmOV5Fic8VH9aXt=Od`tpzDfQl(B&_q4nS5-Dr~ zUu=K&|JzqP0MkNN@G?7$7snd*KflN!XPhm6aUcx^6)@h) zcO2lvFJ#HZsi;k#MR)5e$qep8HwgF(s zTpT6IQ`DAYo}n&|4i63vlhJ-+9aDb-4HE;q92ROr)G7J^`;w>H^sGI$?kLA|o8q{2 z!tALR8DT~ER5M=n0{RiA08Jix$DENJ2v>&Ib(&cLL1=C9WN&EOZFS`~dYLwl83h)~IGaj) zXJ@g^Og6kM&q}8H%KO@Cx2)1ME?Ne8;#6w#IFBKek2@AbJ;6drsC;e=&`D!Inc>Dc lpN5$uoX4zkK=qx^HN&!`+tSSFMP4!;ZNLcWzY0jK$5F5-FEdKBp2N#XsT@DMEO8 z_Vaswei;FbcclXafJpIHvE@3e51}-b%W^uE1!b=kMB4-+`8pDutE%5X6o@;?7UdJJ zm7l#~5L#o62l7 Date: Tue, 26 Jan 2021 16:17:58 +0100 Subject: [PATCH 08/16] Added cratedata import --- .../8VBUBMiNRnm9LPxVv006jQ/0/index/segments_6 | Bin 0 -> 509 bytes .../8VBUBMiNRnm9LPxVv006jQ/1/index/segments_4 | Bin 0 -> 387 bytes .../8VBUBMiNRnm9LPxVv006jQ/2/index/segments_4 | Bin 0 -> 448 bytes .../8VBUBMiNRnm9LPxVv006jQ/3/index/segments_4 | Bin 0 -> 326 bytes .../gZc0-gawQkCZmlVZVCcyEA/0/index/segments_2 | Bin 0 -> 264 bytes .../gZc0-gawQkCZmlVZVCcyEA/1/index/segments_4 | Bin 0 -> 326 bytes .../gZc0-gawQkCZmlVZVCcyEA/2/index/segments_2 | Bin 0 -> 264 bytes .../gZc0-gawQkCZmlVZVCcyEA/3/index/segments_2 | Bin 0 -> 264 bytes deploy/cratedata/log/gc.log.0.current | 14 ++++++++++++++ 9 files changed, 14 insertions(+) create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/segments_6 create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/segments_4 create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/segments_4 create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/segments_4 create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/index/segments_2 create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/segments_4 create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/index/segments_2 create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/index/segments_2 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/segments_6 b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/segments_6 new file mode 100644 index 0000000000000000000000000000000000000000..a523389237bc679cdc9bca4a946ca2f6e2aa207b GIT binary patch literal 509 zcmcD&o+HjtoSL4SnpaZHz`(%%|3v=vi$%)+H>${pv8C3(V>DxDWMBu%fPg3vvw$#A zj49rrJ*It@N6>{XSxbv)Sw}QIIDATzQ}a^I4gNy`NDqt+qd{Uo&4y^214+?rgr+%& z6wStHnnQ`#%r20VpPZNzpPZ4JoL!KgnODMSER&m95nq~DoS2pxpIBOwAD@{LUy_-d zT3nKtTfn4i$XimBm{**WpB`UYnwcV&9#oO&U9M{sk`(M|;AIfu>gj2eT+Wk`SzMA| zR0&bzT9M>r>S~Y^Txt|*5mKDwUgTz45-1EeC>${pv8C3(XEb4FWMBu%fB-KLGl4Kr zj49rrJ*It@N6>{XSxbv)Sw}QIIebc!Q}a^I4gNy`NDqt+qd{Uo&4y^2Lx|VRE|8O- zoR|}zoRONGU67xdSHfs0lbcu(Uz%5(n3fu!SXz=FpP3S0l9`)YT#}euz@%%)TT+ym zSDcfd9$#9TnIcwJ5NzOSXp$Zr?p>l=YHFEnW>Asg$di#-T#{c@2~ktxookwykzE;N zmYZYdpW+zelkMSIE(|v)9q84f#FEVXJYX0VSLP)H?G!61D{(3e&khJI3=S>!NX<5g hEDNm+_IJGc7FQ3uyfX3t(;6MNp$`2-<1psISn&bcg literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/segments_4 b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/segments_4 new file mode 100644 index 0000000000000000000000000000000000000000..513d55b58604039c9c636d4648587178a5f6d926 GIT binary patch literal 448 zcmcD&o+HjtoSL4SnpaZHz`(%%|3v=vi$%)+H>${pv8C33U^HQ8WMBu%fB-)bGlMWt zj49rrJ*It@N6>{XSxbv)Sw}RzIDATzQ}a^I4gNy`NDqt+qd{Uo&4y^2{YlYmgr+%| zc+KnrIr+(nIq}IEsma*|`I&hoj7BoKi52msdBurosqu-WCHe80De)zlxv9k^iMa(# zx`wYIl-C!{yyoxu2IDyE|KXx8JWc;`9+lwHA(pf zi4{JT=|R3`K_z9y#olHmq4|NraD&o;;Z&4Zl9`_e4B+C*ykwxAVg=4F-uc;iL4huX nhVicE`Ofh!iRS5CAlDVA7RKl0Ga4PxnEV19f${pv8C33WHe!CWMBu%fB-iTGlDQs zj49rrJ*It@N6>{XSxbv)Sw}PjIDATzQ}a^I4gNy`NDqt+qd{T}>;gIY$%#4f$r-81 z*#-HTc_oYnGP#Kr@uhjiiD{|viKQj^@tG;{C7HRY#U+Wk1x&hzyd_16dBr*T>G7qd znJHq0o-UrjN7kk)@d) zk)C<3fx>Wu(t)lmN-W9D&jWh1xH2ypXs1}DnR!`mR(WNRaiO=Lt9iahn6q!1BNxbZ Z#i@nydHIY62Q((X0Q&<-^tstT2LKp*cwYbj literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/index/segments_2 b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/index/segments_2 new file mode 100644 index 0000000000000000000000000000000000000000..49c8aa9a5713189117838c65595b37ef0633b925 GIT binary patch literal 264 zcmcD&o+HjtoSL4SnpaZHz`(%%|3v=vi$%)+H>${pv8C33Vl-lBWMBu%fB-9m0xA>8 z$xlwqiBHZ*P0lXJ&&(@f(lwOHO{|D7%_~k!ON~z~Ey<71Oo=ba%uOvWNz5$(%JY^K zCFT|98WyO*YTRu!7&I`U*>7MJ7~RYKJG82cv$COevh z9y8ElMoO%+F&qW-qSHO9t90mgimK?volH7-;EjVwT}s h${pv8C33W;9`EWMBu%fB-iTGlDQs zj49rrJ*It@N6>{XSxbv)Sw}RTIebc!Q}a^I4gNy`NDqt+qd{T}>;gIY$%#4f$r-81 z*#-HTc_oYnGP#Kr@uhjiiD{|viKQj^@tG;{C7HRY#U+Wk1x&hzyd_16dBr*T>G7qd znJHo+9&S$lF1g;py8ao7mhoBXfhlR3fjk+R#U=Sgl@K+#74i9Ig-&L{m4)u5zW#1S zhIy_<>B4Y>(t)lmN-W9D&jWh1xH2ypXs1}Fdv-vwQ@D9ZQDM51fn`vLOJrtPIv2=w Z#i@nydHIY62Q((X0Q&<-m|BPL0081~ca#7C literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/index/segments_2 b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/index/segments_2 new file mode 100644 index 0000000000000000000000000000000000000000..98772285441beee6ef6bfd8f5992c70145917df5 GIT binary patch literal 264 zcmcD&o+HjtoSL4SnpaZHz`(%%|3v=vi$%)+H>${pv8C33VKicAWMBu%fB-9m0xA>8 z$xlwqiBHZ*P0lXJ&&(@f(lwOHO{|D7%_~k!ON~z~Ey<71Oo=ba%uOvWNz5$(%JY^K zCFT|9A4N6bVOD#$)$;{7VG-fZZ%u5E^DW;q5Qk?DOX&z)?=40;d i=aTGE;^-B~1#(?+YGHg{KF}=(G$y}*d8V@eUmyU)PgW-Y literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/index/segments_2 b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/index/segments_2 new file mode 100644 index 0000000000000000000000000000000000000000..c40b18a850d379b11ff14edd531b4d962d720f3e GIT binary patch literal 264 zcmcD&o+HjtoSL4SnpaZHz`(%%|3v=vi$%)+H>${pv8C33Wi(=EWMBu%fB-9m0xA>8 z$xlwqiBHZ*P0lXJ&&(@f(lwOHO{|D7%_~k!ON~z~Ey<71Oo=ba%uOvWNz5$(%JY^K zCFT|9$7-g29XBcQ!nVwVS iYLXb0XA+ps1#(?+YGHg{KF}=(G$y}*c}84bg$n>DQdMgJ literal 0 HcmV?d00001 diff --git a/deploy/cratedata/log/gc.log.0.current b/deploy/cratedata/log/gc.log.0.current index 2dc82c1..a1dbc05 100644 --- a/deploy/cratedata/log/gc.log.0.current +++ b/deploy/cratedata/log/gc.log.0.current @@ -776,3 +776,17 @@ Desired survivor size 8945664 bytes, new threshold 1 (max 6) 2021-01-26T15:16:34.486+0000: 346.423: Total time for which application threads were stopped: 0.0001590 seconds, Stopping threads took: 0.0000799 seconds 2021-01-26T15:16:34.486+0000: 346.423: Total time for which application threads were stopped: 0.0002003 seconds, Stopping threads took: 0.0001210 seconds 2021-01-26T15:16:34.486+0000: 346.423: Total time for which application threads were stopped: 0.0001308 seconds, Stopping threads took: 0.0000540 seconds +2021-01-26T15:16:34.487+0000: 346.425: Total time for which application threads were stopped: 0.0002247 seconds, Stopping threads took: 0.0001303 seconds +2021-01-26T15:16:34.488+0000: 346.425: Total time for which application threads were stopped: 0.0002493 seconds, Stopping threads took: 0.0001483 seconds +2021-01-26T15:16:46.743+0000: 358.680: Total time for which application threads were stopped: 0.0009887 seconds, Stopping threads took: 0.0008637 seconds +2021-01-26T15:16:46.744+0000: 358.681: Total time for which application threads were stopped: 0.0003398 seconds, Stopping threads took: 0.0001544 seconds +2021-01-26T15:16:47.744+0000: 359.681: Total time for which application threads were stopped: 0.0001686 seconds, Stopping threads took: 0.0000452 seconds +2021-01-26T15:16:49.746+0000: 361.683: Total time for which application threads were stopped: 0.0004456 seconds, Stopping threads took: 0.0001865 seconds +2021-01-26T15:16:54.748+0000: 366.685: Total time for which application threads were stopped: 0.0001820 seconds, Stopping threads took: 0.0000501 seconds +2021-01-26T15:16:58.750+0000: 370.688: Total time for which application threads were stopped: 0.0002459 seconds, Stopping threads took: 0.0000802 seconds +2021-01-26T15:17:12.756+0000: 384.693: Total time for which application threads were stopped: 0.0001883 seconds, Stopping threads took: 0.0000477 seconds +2021-01-26T15:17:16.841+0000: 388.778: Total time for which application threads were stopped: 0.0002021 seconds, Stopping threads took: 0.0000817 seconds +2021-01-26T15:17:16.841+0000: 388.779: Total time for which application threads were stopped: 0.0001693 seconds, Stopping threads took: 0.0000191 seconds +2021-01-26T15:17:17.843+0000: 389.780: Total time for which application threads were stopped: 0.0004005 seconds, Stopping threads took: 0.0000985 seconds +2021-01-26T15:17:28.849+0000: 400.787: Total time for which application threads were stopped: 0.0003755 seconds, Stopping threads took: 0.0001230 seconds +2021-01-26T15:17:46.946+0000: 418.884: Total time for which application threads were stopped: 0.0004459 seconds, Stopping threads took: 0.0002943 seconds From b36c99a7fea91a11e46cb873fad8e8113d8ba70f Mon Sep 17 00:00:00 2001 From: cerfoglg Date: Wed, 27 Jan 2021 15:15:54 +0100 Subject: [PATCH 09/16] Grafana deploy with plugins, script for sending simple UL data --- deploy/README.md | 79 +- deploy/crate-datasource/.gitattributes | 0 deploy/crate-datasource/.gitignore | 42 + deploy/crate-datasource/.jscsrc | 13 + deploy/crate-datasource/.jshintrc | 46 + deploy/crate-datasource/CHANGELOG.md | 49 + deploy/crate-datasource/Gruntfile.js | 121 + deploy/crate-datasource/LICENSE | 201 + deploy/crate-datasource/README.md | 108 + deploy/crate-datasource/crate-logo.png | Bin 0 -> 5310 bytes deploy/crate-datasource/dist/README.md | 108 + deploy/crate-datasource/dist/config_ctrl.d.ts | 7 + deploy/crate-datasource/dist/config_ctrl.js | 30 + .../crate-datasource/dist/config_ctrl.js.map | 1 + deploy/crate-datasource/dist/config_ctrl.ts | 26 + deploy/crate-datasource/dist/datasource.d.ts | 47 + deploy/crate-datasource/dist/datasource.js | 389 + .../crate-datasource/dist/datasource.js.map | 1 + deploy/crate-datasource/dist/datasource.ts | 425 + .../dist/img/crate-datasource-add-src.png | Bin 0 -> 221538 bytes .../dist/img/crate-datasource-error.png | Bin 0 -> 106287 bytes .../dist/img/crate-datasource-graph.png | Bin 0 -> 52270 bytes .../img/crate-datasource-nonvalidation.png | Bin 0 -> 219465 bytes .../crate-datasource/dist/img/crate_logo.png | Bin 0 -> 19112 bytes deploy/crate-datasource/dist/module.d.ts | 10 + deploy/crate-datasource/dist/module.js | 36 + deploy/crate-datasource/dist/module.js.map | 1 + deploy/crate-datasource/dist/module.ts | 19 + .../dist/partials/annotations.editor.html | 24 + .../dist/partials/config.html | 50 + .../dist/partials/query.editor.html | 149 + .../dist/partials/query.options.html | 0 deploy/crate-datasource/dist/plugin.json | 36 + .../crate-datasource/dist/query_builder.d.ts | 40 + deploy/crate-datasource/dist/query_builder.js | 396 + .../dist/query_builder.js.map | 1 + deploy/crate-datasource/dist/query_builder.ts | 425 + deploy/crate-datasource/dist/query_ctrl.d.ts | 48 + deploy/crate-datasource/dist/query_ctrl.js | 313 + .../crate-datasource/dist/query_ctrl.js.map | 1 + deploy/crate-datasource/dist/query_ctrl.ts | 324 + deploy/crate-datasource/dist/query_def.d.ts | 13 + deploy/crate-datasource/dist/query_def.js | 32 + deploy/crate-datasource/dist/query_def.js.map | 1 + deploy/crate-datasource/dist/query_def.ts | 24 + .../dist/response_handler.d.ts | 2 + .../crate-datasource/dist/response_handler.js | 148 + .../dist/response_handler.js.map | 1 + .../crate-datasource/dist/response_handler.ts | 146 + .../crate-datasource/dist/sdk/query_ctrl.d.ts | 13 + .../crate-datasource/dist/sdk/query_ctrl.js | 22 + .../dist/sdk/query_ctrl.js.map | 1 + .../crate-datasource/dist/sdk/query_ctrl.ts | 23 + deploy/crate-datasource/dist/sdk/sdk.d.ts | 3 + deploy/crate-datasource/dist/sdk/sdk.js | 25 + deploy/crate-datasource/dist/sdk/sdk.js.map | 1 + deploy/crate-datasource/dist/sdk/sdk.ts | 15 + deploy/crate-datasource/headers/common.d.ts | 61 + .../headers/es6-shim/es6-shim.d.ts | 670 + .../crate-datasource/headers/mocha/mocha.d.ts | 147 + .../crate-datasource/headers/zone/zone.d.ts | 66 + deploy/crate-datasource/package.json | 48 + deploy/crate-datasource/src/config_ctrl.ts | 26 + deploy/crate-datasource/src/datasource.ts | 425 + .../src/img/crate-datasource-add-src.png | Bin 0 -> 221538 bytes .../src/img/crate-datasource-error.png | Bin 0 -> 106287 bytes .../src/img/crate-datasource-graph.png | Bin 0 -> 52270 bytes .../img/crate-datasource-nonvalidation.png | Bin 0 -> 219465 bytes .../crate-datasource/src/img/crate_logo.png | Bin 0 -> 19112 bytes deploy/crate-datasource/src/module.ts | 19 + .../src/partials/annotations.editor.html | 24 + .../crate-datasource/src/partials/config.html | 50 + .../src/partials/query.editor.html | 149 + .../src/partials/query.options.html | 0 deploy/crate-datasource/src/plugin.json | 36 + deploy/crate-datasource/src/query_builder.ts | 425 + deploy/crate-datasource/src/query_ctrl.ts | 324 + deploy/crate-datasource/src/query_def.ts | 24 + .../crate-datasource/src/response_handler.ts | 146 + deploy/crate-datasource/src/sdk/query_ctrl.ts | 23 + deploy/crate-datasource/src/sdk/sdk.ts | 15 + .../src/spec/datasource_specs.js | 142 + .../src/spec/query_builder_specs.js | 374 + .../src/spec/response_handler_specs.js | 270 + deploy/crate-datasource/src/spec/test-main.js | 56 + deploy/crate-datasource/tsconfig.json | 18 + deploy/crate-datasource/tsd.json | 33 + deploy/crate-datasource/tslint.json | 61 + .../0/_state/{global-3.st => global-8.st} | Bin 327 -> 327 bytes .../nodes/0/_state/{node-2.st => node-7.st} | Bin .../0/_state/{state-2.st => state-7.st} | Bin .../8VBUBMiNRnm9LPxVv006jQ/0/index/_4.cfe | Bin 0 -> 331 bytes .../8VBUBMiNRnm9LPxVv006jQ/0/index/_4.cfs | Bin 0 -> 4061 bytes .../8VBUBMiNRnm9LPxVv006jQ/0/index/_4.si | Bin 0 -> 384 bytes .../8VBUBMiNRnm9LPxVv006jQ/0/index/_5.cfe | Bin 0 -> 331 bytes .../8VBUBMiNRnm9LPxVv006jQ/0/index/_5.cfs | Bin 0 -> 4055 bytes .../8VBUBMiNRnm9LPxVv006jQ/0/index/_5.si | Bin 0 -> 384 bytes .../8VBUBMiNRnm9LPxVv006jQ/0/index/segments_6 | Bin 509 -> 0 bytes .../8VBUBMiNRnm9LPxVv006jQ/0/index/segments_f | Bin 0 -> 632 bytes .../0/translog/translog-1.ckp | Bin 80 -> 0 bytes .../0/translog/translog-1.tlog | Bin 275 -> 0 bytes .../0/translog/translog-10.ckp | Bin 0 -> 80 bytes .../0/translog/translog-10.tlog | Bin 0 -> 305 bytes .../0/translog/translog-11.ckp | Bin 0 -> 80 bytes .../0/translog/translog-11.tlog | Bin 0 -> 305 bytes .../{translog-3.tlog => translog-12.tlog} | Bin .../0/translog/translog-2.ckp | Bin 80 -> 0 bytes .../0/translog/translog-2.tlog | Bin 739 -> 0 bytes .../0/translog/translog-3.ckp | Bin 80 -> 0 bytes .../0/translog/translog-6.ckp | Bin 0 -> 80 bytes .../{translog-4.tlog => translog-6.tlog} | Bin .../0/translog/translog-7.ckp | Bin 0 -> 80 bytes .../{translog-5.tlog => translog-7.tlog} | Bin .../0/translog/translog-8.ckp | Bin 0 -> 80 bytes .../0/translog/translog-8.tlog | Bin 0 -> 43 bytes .../0/translog/translog-9.ckp | Bin 0 -> 80 bytes .../0/translog/translog-9.tlog | Bin 0 -> 43 bytes .../0/translog/translog.ckp | Bin 80 -> 80 bytes .../1/_state/{state-2.st => state-7.st} | Bin .../8VBUBMiNRnm9LPxVv006jQ/1/index/_2.cfe | Bin 0 -> 331 bytes .../8VBUBMiNRnm9LPxVv006jQ/1/index/_2.cfs | Bin 0 -> 4118 bytes .../8VBUBMiNRnm9LPxVv006jQ/1/index/_2.si | Bin 0 -> 384 bytes .../8VBUBMiNRnm9LPxVv006jQ/1/index/_3.cfe | Bin 0 -> 331 bytes .../8VBUBMiNRnm9LPxVv006jQ/1/index/_3.cfs | Bin 0 -> 4054 bytes .../8VBUBMiNRnm9LPxVv006jQ/1/index/_3.si | Bin 0 -> 384 bytes .../8VBUBMiNRnm9LPxVv006jQ/1/index/segments_4 | Bin 387 -> 0 bytes .../8VBUBMiNRnm9LPxVv006jQ/1/index/segments_d | Bin 0 -> 510 bytes .../1/translog/translog-1.ckp | Bin 80 -> 0 bytes .../1/translog/translog-1.tlog | Bin 507 -> 0 bytes .../1/translog/translog-10.ckp | Bin 0 -> 80 bytes .../1/translog/translog-10.tlog | Bin 0 -> 304 bytes .../{translog-2.tlog => translog-11.tlog} | Bin .../1/translog/translog-3.ckp | Bin 80 -> 0 bytes .../1/translog/translog-5.ckp | Bin 0 -> 80 bytes .../{translog-3.tlog => translog-5.tlog} | Bin .../1/translog/translog-6.ckp | Bin 0 -> 80 bytes .../{translog-4.tlog => translog-6.tlog} | Bin .../1/translog/translog-7.ckp | Bin 0 -> 80 bytes .../1/translog/translog-7.tlog | Bin 0 -> 43 bytes .../1/translog/translog-8.ckp | Bin 0 -> 80 bytes .../1/translog/translog-8.tlog | Bin 0 -> 43 bytes .../1/translog/translog-9.ckp | Bin 0 -> 80 bytes .../1/translog/translog-9.tlog | Bin 0 -> 316 bytes .../1/translog/translog.ckp | Bin 80 -> 80 bytes .../2/_state/{state-2.st => state-7.st} | Bin .../8VBUBMiNRnm9LPxVv006jQ/2/index/_3.cfe | Bin 0 -> 331 bytes .../8VBUBMiNRnm9LPxVv006jQ/2/index/_3.cfs | Bin 0 -> 4054 bytes .../8VBUBMiNRnm9LPxVv006jQ/2/index/_3.si | Bin 0 -> 384 bytes .../8VBUBMiNRnm9LPxVv006jQ/2/index/segments_4 | Bin 448 -> 0 bytes .../8VBUBMiNRnm9LPxVv006jQ/2/index/segments_b | Bin 0 -> 510 bytes .../2/translog/translog-1.ckp | Bin 80 -> 0 bytes .../2/translog/translog-1.tlog | Bin 739 -> 0 bytes .../{translog-2.tlog => translog-10.tlog} | Bin .../2/translog/translog-3.ckp | Bin 80 -> 0 bytes .../2/translog/translog-5.ckp | Bin 0 -> 80 bytes .../{translog-3.tlog => translog-5.tlog} | Bin .../2/translog/translog-6.ckp | Bin 0 -> 80 bytes .../{translog-4.tlog => translog-6.tlog} | Bin .../2/translog/translog-7.ckp | Bin 0 -> 80 bytes .../2/translog/translog-7.tlog | Bin 0 -> 43 bytes .../2/translog/translog-8.ckp | Bin 0 -> 80 bytes .../2/translog/translog-8.tlog | Bin 0 -> 43 bytes .../2/translog/translog-9.ckp | Bin 0 -> 80 bytes .../2/translog/translog-9.tlog | Bin 0 -> 304 bytes .../2/translog/translog.ckp | Bin 80 -> 80 bytes .../3/_state/{state-2.st => state-7.st} | Bin .../8VBUBMiNRnm9LPxVv006jQ/3/index/_1.cfe | Bin 0 -> 331 bytes .../8VBUBMiNRnm9LPxVv006jQ/3/index/_1.cfs | Bin 0 -> 4118 bytes .../8VBUBMiNRnm9LPxVv006jQ/3/index/_1.si | Bin 0 -> 384 bytes .../8VBUBMiNRnm9LPxVv006jQ/3/index/_2.cfe | Bin 0 -> 331 bytes .../8VBUBMiNRnm9LPxVv006jQ/3/index/_2.cfs | Bin 0 -> 4059 bytes .../8VBUBMiNRnm9LPxVv006jQ/3/index/_2.si | Bin 0 -> 384 bytes .../8VBUBMiNRnm9LPxVv006jQ/3/index/_3.cfe | Bin 0 -> 331 bytes .../8VBUBMiNRnm9LPxVv006jQ/3/index/_3.cfs | Bin 0 -> 4059 bytes .../8VBUBMiNRnm9LPxVv006jQ/3/index/_3.si | Bin 0 -> 384 bytes .../8VBUBMiNRnm9LPxVv006jQ/3/index/_4.cfe | Bin 0 -> 331 bytes .../8VBUBMiNRnm9LPxVv006jQ/3/index/_4.cfs | Bin 0 -> 4120 bytes .../8VBUBMiNRnm9LPxVv006jQ/3/index/_4.si | Bin 0 -> 384 bytes .../8VBUBMiNRnm9LPxVv006jQ/3/index/segments_4 | Bin 326 -> 0 bytes .../8VBUBMiNRnm9LPxVv006jQ/3/index/segments_d | Bin 0 -> 571 bytes .../3/translog/translog-1.ckp | Bin 80 -> 0 bytes .../3/translog/translog-1.tlog | Bin 275 -> 0 bytes .../3/translog/translog-10.ckp | Bin 0 -> 80 bytes .../3/translog/translog-10.tlog | Bin 0 -> 316 bytes .../{translog-2.tlog => translog-11.tlog} | Bin .../3/translog/translog-2.ckp | Bin 80 -> 0 bytes .../3/translog/translog-3.ckp | Bin 80 -> 0 bytes .../3/translog/translog-5.ckp | Bin 0 -> 80 bytes .../{translog-3.tlog => translog-5.tlog} | Bin .../3/translog/translog-6.ckp | Bin 0 -> 80 bytes .../{translog-4.tlog => translog-6.tlog} | Bin .../3/translog/translog-7.ckp | Bin 0 -> 80 bytes .../3/translog/translog-7.tlog | Bin 0 -> 43 bytes .../3/translog/translog-8.ckp | Bin 0 -> 80 bytes .../3/translog/translog-8.tlog | Bin 0 -> 43 bytes .../3/translog/translog-9.ckp | Bin 0 -> 80 bytes .../3/translog/translog-9.tlog | Bin 0 -> 840 bytes .../3/translog/translog.ckp | Bin 80 -> 80 bytes .../8VBUBMiNRnm9LPxVv006jQ/_state/state-11.st | Bin 811 -> 0 bytes .../8VBUBMiNRnm9LPxVv006jQ/_state/state-33.st | Bin 0 -> 821 bytes .../0/_state/{state-2.st => state-7.st} | Bin .../gZc0-gawQkCZmlVZVCcyEA/0/index/segments_2 | Bin 264 -> 0 bytes .../gZc0-gawQkCZmlVZVCcyEA/0/index/segments_7 | Bin 0 -> 264 bytes .../0/translog/translog-1.ckp | Bin 80 -> 0 bytes .../0/translog/translog-2.ckp | Bin 80 -> 0 bytes .../0/translog/translog-4.ckp | Bin 0 -> 80 bytes .../{translog-1.tlog => translog-4.tlog} | Bin .../0/translog/translog-5.ckp | Bin 0 -> 80 bytes .../{translog-2.tlog => translog-5.tlog} | Bin .../0/translog/translog-6.ckp | Bin 0 -> 80 bytes .../{translog-3.tlog => translog-6.tlog} | Bin .../0/translog/translog-7.ckp | Bin 0 -> 80 bytes .../0/translog/translog-7.tlog | Bin 0 -> 43 bytes .../0/translog/translog-8.tlog | Bin 0 -> 43 bytes .../0/translog/translog.ckp | Bin 80 -> 80 bytes .../1/_state/{state-2.st => state-7.st} | Bin .../gZc0-gawQkCZmlVZVCcyEA/1/index/_0.cfe | Bin 331 -> 0 bytes .../gZc0-gawQkCZmlVZVCcyEA/1/index/_0.cfs | Bin 4183 -> 0 bytes .../gZc0-gawQkCZmlVZVCcyEA/1/index/_1.cfe | Bin 0 -> 331 bytes .../gZc0-gawQkCZmlVZVCcyEA/1/index/_1.cfs | Bin 0 -> 4704 bytes .../gZc0-gawQkCZmlVZVCcyEA/1/index/_1.si | Bin 0 -> 384 bytes .../gZc0-gawQkCZmlVZVCcyEA/1/index/segments_4 | Bin 326 -> 0 bytes .../gZc0-gawQkCZmlVZVCcyEA/1/index/segments_b | Bin 0 -> 327 bytes .../1/translog/translog-1.ckp | Bin 80 -> 0 bytes .../1/translog/translog-1.tlog | Bin 309 -> 0 bytes .../{translog-2.tlog => translog-10.tlog} | Bin .../1/translog/translog-2.ckp | Bin 80 -> 0 bytes .../1/translog/translog-3.ckp | Bin 80 -> 0 bytes .../1/translog/translog-5.ckp | Bin 0 -> 80 bytes .../{translog-3.tlog => translog-5.tlog} | Bin .../1/translog/translog-6.ckp | Bin 0 -> 80 bytes .../{translog-4.tlog => translog-6.tlog} | Bin .../1/translog/translog-7.ckp | Bin 0 -> 80 bytes .../1/translog/translog-7.tlog | Bin 0 -> 43 bytes .../1/translog/translog-8.ckp | Bin 0 -> 80 bytes .../1/translog/translog-8.tlog | Bin 0 -> 43 bytes .../1/translog/translog-9.ckp | Bin 0 -> 80 bytes .../1/translog/translog-9.tlog | Bin 0 -> 349 bytes .../1/translog/translog.ckp | Bin 80 -> 80 bytes .../2/_state/{state-2.st => state-7.st} | Bin .../gZc0-gawQkCZmlVZVCcyEA/2/index/segments_2 | Bin 264 -> 0 bytes .../gZc0-gawQkCZmlVZVCcyEA/2/index/segments_7 | Bin 0 -> 264 bytes .../2/translog/translog-1.ckp | Bin 80 -> 0 bytes .../2/translog/translog-2.ckp | Bin 80 -> 0 bytes .../2/translog/translog-4.ckp | Bin 0 -> 80 bytes .../{translog-1.tlog => translog-4.tlog} | Bin .../2/translog/translog-5.ckp | Bin 0 -> 80 bytes .../{translog-2.tlog => translog-5.tlog} | Bin .../2/translog/translog-6.ckp | Bin 0 -> 80 bytes .../{translog-3.tlog => translog-6.tlog} | Bin .../2/translog/translog-7.ckp | Bin 0 -> 80 bytes .../2/translog/translog-7.tlog | Bin 0 -> 43 bytes .../2/translog/translog-8.tlog | Bin 0 -> 43 bytes .../2/translog/translog.ckp | Bin 80 -> 80 bytes .../3/_state/{state-2.st => state-7.st} | Bin .../gZc0-gawQkCZmlVZVCcyEA/3/index/segments_2 | Bin 264 -> 0 bytes .../gZc0-gawQkCZmlVZVCcyEA/3/index/segments_7 | Bin 0 -> 264 bytes .../3/translog/translog-1.ckp | Bin 80 -> 0 bytes .../3/translog/translog-2.ckp | Bin 80 -> 0 bytes .../3/translog/translog-4.ckp | Bin 0 -> 80 bytes .../{translog-1.tlog => translog-4.tlog} | Bin .../3/translog/translog-5.ckp | Bin 0 -> 80 bytes .../{translog-2.tlog => translog-5.tlog} | Bin .../3/translog/translog-6.ckp | Bin 0 -> 80 bytes .../{translog-3.tlog => translog-6.tlog} | Bin .../3/translog/translog-7.ckp | Bin 0 -> 80 bytes .../3/translog/translog-7.tlog | Bin 0 -> 43 bytes .../3/translog/translog-8.tlog | Bin 0 -> 43 bytes .../3/translog/translog.ckp | Bin 80 -> 80 bytes .../gZc0-gawQkCZmlVZVCcyEA/_state/state-12.st | Bin 806 -> 0 bytes .../gZc0-gawQkCZmlVZVCcyEA/_state/state-39.st | Bin 0 -> 818 bytes .../0/_state/state-1.st | Bin 0 -> 125 bytes .../sgeQMCbmTjanF7waz7Ne4w/0/index/_0.cfe | Bin 0 -> 331 bytes .../sgeQMCbmTjanF7waz7Ne4w/0/index/_0.cfs | Bin 0 -> 8942 bytes .../sgeQMCbmTjanF7waz7Ne4w/0/index/_0.si | Bin 0 -> 384 bytes .../sgeQMCbmTjanF7waz7Ne4w/0/index/_1.cfe | Bin 0 -> 331 bytes .../sgeQMCbmTjanF7waz7Ne4w/0/index/_1.cfs | Bin 0 -> 9054 bytes .../sgeQMCbmTjanF7waz7Ne4w/0/index/_1.si | Bin 0 -> 384 bytes .../sgeQMCbmTjanF7waz7Ne4w/0/index/_2.cfe | Bin 0 -> 331 bytes .../sgeQMCbmTjanF7waz7Ne4w/0/index/_2.cfs | Bin 0 -> 8487 bytes .../sgeQMCbmTjanF7waz7Ne4w/0/index/_2.si | Bin 0 -> 384 bytes .../sgeQMCbmTjanF7waz7Ne4w/0/index/segments_5 | Bin 0 -> 448 bytes .../sgeQMCbmTjanF7waz7Ne4w/0/index/write.lock | 0 .../0/translog/translog-1.ckp | Bin 0 -> 80 bytes .../0/translog/translog-1.tlog | Bin 0 -> 1505 bytes .../0}/translog/translog-2.ckp | Bin .../0/translog/translog-2.tlog | Bin 0 -> 43 bytes .../0/translog/translog-3.ckp | Bin 0 -> 80 bytes .../0/translog/translog-3.tlog | Bin 0 -> 1841 bytes .../0/translog/translog-4.tlog | Bin 0 -> 43 bytes .../0/translog/translog.ckp} | Bin .../1/_state/state-1.st | Bin 0 -> 125 bytes .../sgeQMCbmTjanF7waz7Ne4w/1/index/_0.cfe | Bin 0 -> 331 bytes .../sgeQMCbmTjanF7waz7Ne4w/1/index/_0.cfs | Bin 0 -> 12138 bytes .../sgeQMCbmTjanF7waz7Ne4w/1/index/_0.si | Bin 0 -> 384 bytes .../sgeQMCbmTjanF7waz7Ne4w/1/index/_1.cfe | Bin 0 -> 331 bytes .../sgeQMCbmTjanF7waz7Ne4w/1/index/_1.cfs | Bin 0 -> 8757 bytes .../sgeQMCbmTjanF7waz7Ne4w/1/index/_1.si | Bin 0 -> 384 bytes .../sgeQMCbmTjanF7waz7Ne4w/1/index/_2.cfe | Bin 0 -> 331 bytes .../sgeQMCbmTjanF7waz7Ne4w/1/index/_2.cfs | Bin 0 -> 8484 bytes .../sgeQMCbmTjanF7waz7Ne4w/1/index/_2.si | Bin 0 -> 384 bytes .../sgeQMCbmTjanF7waz7Ne4w/1/index/segments_5 | Bin 0 -> 448 bytes .../sgeQMCbmTjanF7waz7Ne4w/1/index/write.lock | 0 .../1/translog/translog-1.ckp | Bin 0 -> 80 bytes .../1/translog/translog-1.tlog | Bin 0 -> 3934 bytes .../1/translog/translog-2.ckp | Bin 0 -> 80 bytes .../1/translog/translog-2.tlog | Bin 0 -> 43 bytes .../1/translog/translog-3.ckp | Bin 0 -> 80 bytes .../1/translog/translog-3.tlog | Bin 0 -> 870 bytes .../1/translog/translog-4.tlog | Bin 0 -> 43 bytes .../1/translog/translog.ckp | Bin 0 -> 80 bytes .../2/_state/state-1.st | Bin 0 -> 125 bytes .../sgeQMCbmTjanF7waz7Ne4w/2/index/_0.cfe | Bin 0 -> 331 bytes .../sgeQMCbmTjanF7waz7Ne4w/2/index/_0.cfs | Bin 0 -> 9134 bytes .../2}/index/_0.si | Bin 384 -> 384 bytes .../sgeQMCbmTjanF7waz7Ne4w/2/index/_1.cfe | Bin 0 -> 331 bytes .../sgeQMCbmTjanF7waz7Ne4w/2/index/_1.cfs | Bin 0 -> 8789 bytes .../sgeQMCbmTjanF7waz7Ne4w/2/index/_1.si | Bin 0 -> 384 bytes .../sgeQMCbmTjanF7waz7Ne4w/2/index/_2.cfe | Bin 0 -> 331 bytes .../sgeQMCbmTjanF7waz7Ne4w/2/index/_2.cfs | Bin 0 -> 23556 bytes .../sgeQMCbmTjanF7waz7Ne4w/2/index/_2.si | Bin 0 -> 384 bytes .../sgeQMCbmTjanF7waz7Ne4w/2/index/_3.cfe | Bin 0 -> 331 bytes .../sgeQMCbmTjanF7waz7Ne4w/2/index/_3.cfs | Bin 0 -> 8752 bytes .../sgeQMCbmTjanF7waz7Ne4w/2/index/_3.si | Bin 0 -> 384 bytes .../sgeQMCbmTjanF7waz7Ne4w/2/index/segments_5 | Bin 0 -> 509 bytes .../sgeQMCbmTjanF7waz7Ne4w/2/index/write.lock | 0 .../2/translog/translog-1.ckp | Bin 0 -> 80 bytes .../2/translog/translog-1.tlog | Bin 0 -> 2487 bytes .../2/translog/translog-2.ckp | Bin .../2/translog/translog-2.tlog | Bin 0 -> 43 bytes .../2/translog/translog-3.ckp | Bin 0 -> 80 bytes .../2/translog/translog-3.tlog | Bin 0 -> 4058 bytes .../2/translog/translog-4.tlog | Bin 0 -> 43 bytes .../2/translog/translog.ckp | Bin 0 -> 80 bytes .../3/_state/state-1.st | Bin 0 -> 125 bytes .../sgeQMCbmTjanF7waz7Ne4w/3/index/_0.cfe | Bin 0 -> 331 bytes .../sgeQMCbmTjanF7waz7Ne4w/3/index/_0.cfs | Bin 0 -> 22814 bytes .../sgeQMCbmTjanF7waz7Ne4w/3/index/_0.si | Bin 0 -> 384 bytes .../sgeQMCbmTjanF7waz7Ne4w/3/index/_1.cfe | Bin 0 -> 331 bytes .../sgeQMCbmTjanF7waz7Ne4w/3/index/_1.cfs | Bin 0 -> 11271 bytes .../sgeQMCbmTjanF7waz7Ne4w/3/index/_1.si | Bin 0 -> 384 bytes .../sgeQMCbmTjanF7waz7Ne4w/3/index/_2.cfe | Bin 0 -> 331 bytes .../sgeQMCbmTjanF7waz7Ne4w/3/index/_2.cfs | Bin 0 -> 8444 bytes .../sgeQMCbmTjanF7waz7Ne4w/3/index/_2.si | Bin 0 -> 384 bytes .../sgeQMCbmTjanF7waz7Ne4w/3/index/segments_5 | Bin 0 -> 448 bytes .../sgeQMCbmTjanF7waz7Ne4w/3/index/write.lock | 0 .../3/translog/translog-1.ckp | Bin 0 -> 80 bytes .../3/translog/translog-1.tlog | Bin 0 -> 3381 bytes .../3/translog/translog-2.ckp | Bin 0 -> 80 bytes .../3/translog/translog-2.tlog | Bin 0 -> 43 bytes .../3/translog/translog-3.ckp | Bin 0 -> 80 bytes .../3/translog/translog-3.tlog | Bin 0 -> 4538 bytes .../3/translog/translog-4.tlog | Bin 0 -> 43 bytes .../3/translog/translog.ckp | Bin 0 -> 80 bytes .../sgeQMCbmTjanF7waz7Ne4w/_state/state-7.st | Bin 0 -> 910 bytes deploy/cratedata/log/gc.log.0.current | 2876 +++- deploy/docker-compose.yaml | 6 +- deploy/grafana-map-plugin/.eslintignore | 2 + deploy/grafana-map-plugin/.eslintrc | 50 + deploy/grafana-map-plugin/.gitignore | 5 + deploy/grafana-map-plugin/.gitlab-ci.yml | 29 + deploy/grafana-map-plugin/CHANGELOG.md | 118 + deploy/grafana-map-plugin/CONTRIBUTING.md | 82 + deploy/grafana-map-plugin/Gruntfile.js | 137 + deploy/grafana-map-plugin/LICENSE | 21 + deploy/grafana-map-plugin/README.md | 8 + deploy/grafana-map-plugin/circle.yml | 12 + deploy/grafana-map-plugin/config.sh | 1 + deploy/grafana-map-plugin/create-table.sh | 211 + deploy/grafana-map-plugin/dashboards/map.json | 276 + .../data_sources/crate.json | 23 + deploy/grafana-map-plugin/dist/CHANGELOG.md | 118 + deploy/grafana-map-plugin/dist/LICENSE | 21 + deploy/grafana-map-plugin/dist/README.md | 8 + .../dist/css/worldmap-panel.css | 291 + .../dist/css/worldmap.dark.css | 79 + .../dist/css/worldmap.light.css | 21 + deploy/grafana-map-plugin/dist/definitions.js | 158 + .../dist/definitions.js.map | 1 + .../dist/img/fa/automobile.svg | 2 + deploy/grafana-map-plugin/dist/img/fa/ban.svg | 2 + .../dist/img/fa/battery-empty.svg | 2 + .../grafana-map-plugin/dist/img/fa/bell-o.svg | 2 + .../dist/img/fa/bell-slash-o.svg | 2 + .../dist/img/fa/bell-slash.svg | 2 + .../grafana-map-plugin/dist/img/fa/bell.svg | 2 + .../dist/img/fa/bicycle.svg | 2 + deploy/grafana-map-plugin/dist/img/fa/bus.svg | 2 + deploy/grafana-map-plugin/dist/img/fa/car.svg | 2 + .../dist/img/fa/clock-o.svg | 2 + .../grafana-map-plugin/dist/img/fa/close.svg | 2 + .../dist/img/fa/info-circle.svg | 2 + .../dist/img/fa/question-circle.svg | 2 + .../dist/img/fa/question.svg | 2 + .../dist/img/fa/trash-o.svg | 2 + .../grafana-map-plugin/dist/img/fa/trash.svg | 2 + .../grafana-map-plugin/dist/img/fa/tree.svg | 2 + .../grafana-map-plugin/dist/img/fa/truck.svg | 2 + .../dist/img/fa/umbrella.svg | 2 + .../dist/img/fa/video-camera.svg | 2 + .../dist/img/fa/volume-down.svg | 2 + .../dist/img/fa/volume-off.svg | 2 + .../dist/img/fa/volume-up.svg | 2 + .../dist/img/fa/warning.svg | 2 + deploy/grafana-map-plugin/dist/img/icon.svg | 1 + .../dist/img/map_marker.png | Bin 0 -> 4172 bytes .../grafana-map-plugin/dist/map_renderer.js | 76 + .../dist/map_renderer.js.map | 1 + deploy/grafana-map-plugin/dist/module.js | 25 + deploy/grafana-map-plugin/dist/module.js.map | 1 + .../dist/partials/editor.html | 259 + .../dist/partials/module.html | 16 + deploy/grafana-map-plugin/dist/plugin.json | 28 + .../dist/utils/data_utils.js | 178 + .../dist/utils/data_utils.js.map | 1 + .../dist/utils/datasource.js | 26 + .../dist/utils/datasource.js.map | 1 + .../dist/utils/map_utils.js | 159 + .../dist/utils/map_utils.js.map | 1 + .../grafana-map-plugin/dist/utils/string.js | 30 + .../dist/utils/string.js.map | 1 + .../dist/vendor/fontawesome-free/css/all.css | 4463 +++++ .../vendor/fontawesome-free/css/all.min.css | 5 + .../vendor/fontawesome-free/css/brands.css | 15 + .../fontawesome-free/css/brands.min.css | 5 + .../fontawesome-free/css/fontawesome.css | 4429 +++++ .../fontawesome-free/css/fontawesome.min.css | 5 + .../vendor/fontawesome-free/css/regular.css | 15 + .../fontawesome-free/css/regular.min.css | 5 + .../vendor/fontawesome-free/css/solid.css | 16 + .../vendor/fontawesome-free/css/solid.min.css | 5 + .../fontawesome-free/css/svg-with-js.css | 371 + .../fontawesome-free/css/svg-with-js.min.css | 5 + .../vendor/fontawesome-free/css/v4-shims.css | 2172 +++ .../fontawesome-free/css/v4-shims.min.css | 5 + .../webfonts/fa-brands-400.eot | Bin 0 -> 133034 bytes .../webfonts/fa-brands-400.svg | 3570 ++++ .../webfonts/fa-brands-400.ttf | Bin 0 -> 132728 bytes .../webfonts/fa-brands-400.woff | Bin 0 -> 89824 bytes .../webfonts/fa-brands-400.woff2 | Bin 0 -> 76548 bytes .../webfonts/fa-regular-400.eot | Bin 0 -> 34390 bytes .../webfonts/fa-regular-400.svg | 803 + .../webfonts/fa-regular-400.ttf | Bin 0 -> 34092 bytes .../webfonts/fa-regular-400.woff | Bin 0 -> 16800 bytes .../webfonts/fa-regular-400.woff2 | Bin 0 -> 13600 bytes .../webfonts/fa-solid-900.eot | Bin 0 -> 194078 bytes .../webfonts/fa-solid-900.svg | 4700 ++++++ .../webfonts/fa-solid-900.ttf | Bin 0 -> 193792 bytes .../webfonts/fa-solid-900.woff | Bin 0 -> 99004 bytes .../webfonts/fa-solid-900.woff2 | Bin 0 -> 76120 bytes .../vendor/leaflet-sleep/Leaflet.Sleep.js | 235 + .../images/markers-matte.png | Bin 0 -> 14323 bytes .../images/markers-matte@2x.png | Bin 0 -> 31113 bytes .../images/markers-plain.png | Bin 0 -> 7946 bytes .../images/markers-shadow.png | Bin 0 -> 535 bytes .../images/markers-shadow@2x.png | Bin 0 -> 1469 bytes .../images/markers-soft.png | Bin 0 -> 56965 bytes .../images/markers-soft@2x.png | Bin 0 -> 165517 bytes .../leaflet.awesome-markers.css | 128 + .../leaflet.awesome-markers.js | 125 + .../leaflet.awesome-markers.min.js | 7 + .../MarkerCluster.Default.css | 60 + .../leaflet.markercluster/MarkerCluster.css | 14 + .../WhereAreTheJavascriptFiles.txt | 5 + .../leaflet.markercluster-src.js | 2690 +++ .../leaflet.markercluster-src.js.map | 1 + .../leaflet.markercluster.js | 3 + .../leaflet.markercluster.js.map | 1 + .../dist/vendor/leaflet/images/layers-2x.png | Bin 0 -> 1259 bytes .../dist/vendor/leaflet/images/layers.png | Bin 0 -> 696 bytes .../vendor/leaflet/images/marker-icon-2x.png | Bin 0 -> 2464 bytes .../vendor/leaflet/images/marker-icon.png | Bin 0 -> 1466 bytes .../vendor/leaflet/images/marker-shadow.png | Bin 0 -> 618 bytes .../dist/vendor/leaflet/leaflet-src.esm.js | 13986 +++++++++++++++ .../vendor/leaflet/leaflet-src.esm.js.map | 1 + .../dist/vendor/leaflet/leaflet-src.js | 14080 ++++++++++++++++ .../dist/vendor/leaflet/leaflet-src.js.map | 1 + .../dist/vendor/leaflet/leaflet.css | 640 + .../dist/vendor/leaflet/leaflet.js | 5 + .../dist/vendor/leaflet/leaflet.js.map | 1 + .../OSMBuildings-Leaflet.debug.js | 2372 +++ .../osmbuildings/OSMBuildings-Leaflet.js | 48 + .../osmbuildings/OSMBuildings-Leaflet.js.gz | 0 .../osmbuildings/OSMBuildings-OL3.debug.js | 2280 +++ .../vendor/osmbuildings/OSMBuildings-OL3.js | 46 + .../OSMBuildings-OpenLayers.debug.js | 2333 +++ .../osmbuildings/OSMBuildings-OpenLayers.js | 47 + .../OSMBuildings-OpenLayers.js.gz | 0 .../dist/vendor/turf/README.md | 27 + .../dist/vendor/turf/bower.json | 21 + .../dist/vendor/turf/index.js | 66 + .../dist/vendor/turf/package.json | 111 + .../dist/vendor/turf/turf.js | 8205 +++++++++ .../dist/vendor/turf/turf.min.js | 17 + deploy/grafana-map-plugin/dist/worldmap.js | 612 + .../grafana-map-plugin/dist/worldmap.js.map | 1 + .../grafana-map-plugin/dist/worldmap_ctrl.js | 292 + .../dist/worldmap_ctrl.js.map | 1 + deploy/grafana-map-plugin/docker-compose.yml | 28 + deploy/grafana-map-plugin/drop-table.sh | 6 + .../etc/grafana/grafana.ini | 849 + deploy/grafana-map-plugin/get-crate-plugin.sh | 2 + deploy/grafana-map-plugin/karma.conf.js | 91 + deploy/grafana-map-plugin/package.json | 70 + deploy/grafana-map-plugin/set-up-grafana.sh | 13 + deploy/grafana-map-plugin/setup_dev_env.sh | 32 + .../src/css/worldmap-panel.css | 291 + .../src/css/worldmap.dark.css | 79 + .../src/css/worldmap.light.css | 21 + deploy/grafana-map-plugin/src/definitions.js | 892 + .../src/img/fa/automobile.svg | 2 + deploy/grafana-map-plugin/src/img/fa/ban.svg | 2 + .../src/img/fa/battery-empty.svg | 2 + .../grafana-map-plugin/src/img/fa/bell-o.svg | 2 + .../src/img/fa/bell-slash-o.svg | 2 + .../src/img/fa/bell-slash.svg | 2 + deploy/grafana-map-plugin/src/img/fa/bell.svg | 2 + .../grafana-map-plugin/src/img/fa/bicycle.svg | 2 + deploy/grafana-map-plugin/src/img/fa/bus.svg | 2 + deploy/grafana-map-plugin/src/img/fa/car.svg | 2 + .../grafana-map-plugin/src/img/fa/clock-o.svg | 2 + .../grafana-map-plugin/src/img/fa/close.svg | 2 + .../src/img/fa/info-circle.svg | 2 + .../src/img/fa/question-circle.svg | 2 + .../src/img/fa/question.svg | 2 + .../grafana-map-plugin/src/img/fa/trash-o.svg | 2 + .../grafana-map-plugin/src/img/fa/trash.svg | 2 + deploy/grafana-map-plugin/src/img/fa/tree.svg | 2 + .../grafana-map-plugin/src/img/fa/truck.svg | 2 + .../src/img/fa/umbrella.svg | 2 + .../src/img/fa/video-camera.svg | 2 + .../src/img/fa/volume-down.svg | 2 + .../src/img/fa/volume-off.svg | 2 + .../src/img/fa/volume-up.svg | 2 + .../grafana-map-plugin/src/img/fa/warning.svg | 2 + deploy/grafana-map-plugin/src/img/icon.svg | 1 + .../grafana-map-plugin/src/img/map_marker.png | Bin 0 -> 4172 bytes deploy/grafana-map-plugin/src/map_renderer.js | 63 + deploy/grafana-map-plugin/src/module.js | 13 + .../src/partials/editor.html | 259 + .../src/partials/module.html | 16 + deploy/grafana-map-plugin/src/plugin.json | 28 + .../src/utils/data_utils.js | 128 + .../src/utils/datasource.js | 11 + .../grafana-map-plugin/src/utils/map_utils.js | 135 + deploy/grafana-map-plugin/src/utils/string.js | 15 + deploy/grafana-map-plugin/src/worldmap.js | 510 + .../grafana-map-plugin/src/worldmap_ctrl.js | 208 + .../grafana-map-plugin/test/data_builder.js | 44 + .../test/data_formatter_test.js | 182 + .../grafana-map-plugin/test/worldmap_test.js | 330 + deploy/grafana-map-plugin/yarn.lock | 5461 ++++++ deploy/grafana.db | Bin 0 -> 536576 bytes deploy/send_payload_to_agent.sh | 10 + 554 files changed, 91163 insertions(+), 802 deletions(-) create mode 100755 deploy/crate-datasource/.gitattributes create mode 100755 deploy/crate-datasource/.gitignore create mode 100755 deploy/crate-datasource/.jscsrc create mode 100755 deploy/crate-datasource/.jshintrc create mode 100755 deploy/crate-datasource/CHANGELOG.md create mode 100755 deploy/crate-datasource/Gruntfile.js create mode 100755 deploy/crate-datasource/LICENSE create mode 100755 deploy/crate-datasource/README.md create mode 100755 deploy/crate-datasource/crate-logo.png create mode 100755 deploy/crate-datasource/dist/README.md create mode 100755 deploy/crate-datasource/dist/config_ctrl.d.ts create mode 100755 deploy/crate-datasource/dist/config_ctrl.js create mode 100755 deploy/crate-datasource/dist/config_ctrl.js.map create mode 100755 deploy/crate-datasource/dist/config_ctrl.ts create mode 100755 deploy/crate-datasource/dist/datasource.d.ts create mode 100755 deploy/crate-datasource/dist/datasource.js create mode 100755 deploy/crate-datasource/dist/datasource.js.map create mode 100755 deploy/crate-datasource/dist/datasource.ts create mode 100755 deploy/crate-datasource/dist/img/crate-datasource-add-src.png create mode 100755 deploy/crate-datasource/dist/img/crate-datasource-error.png create mode 100755 deploy/crate-datasource/dist/img/crate-datasource-graph.png create mode 100755 deploy/crate-datasource/dist/img/crate-datasource-nonvalidation.png create mode 100755 deploy/crate-datasource/dist/img/crate_logo.png create mode 100755 deploy/crate-datasource/dist/module.d.ts create mode 100755 deploy/crate-datasource/dist/module.js create mode 100755 deploy/crate-datasource/dist/module.js.map create mode 100755 deploy/crate-datasource/dist/module.ts create mode 100755 deploy/crate-datasource/dist/partials/annotations.editor.html create mode 100755 deploy/crate-datasource/dist/partials/config.html create mode 100755 deploy/crate-datasource/dist/partials/query.editor.html create mode 100755 deploy/crate-datasource/dist/partials/query.options.html create mode 100755 deploy/crate-datasource/dist/plugin.json create mode 100755 deploy/crate-datasource/dist/query_builder.d.ts create mode 100755 deploy/crate-datasource/dist/query_builder.js create mode 100755 deploy/crate-datasource/dist/query_builder.js.map create mode 100755 deploy/crate-datasource/dist/query_builder.ts create mode 100755 deploy/crate-datasource/dist/query_ctrl.d.ts create mode 100755 deploy/crate-datasource/dist/query_ctrl.js create mode 100755 deploy/crate-datasource/dist/query_ctrl.js.map create mode 100755 deploy/crate-datasource/dist/query_ctrl.ts create mode 100755 deploy/crate-datasource/dist/query_def.d.ts create mode 100755 deploy/crate-datasource/dist/query_def.js create mode 100755 deploy/crate-datasource/dist/query_def.js.map create mode 100755 deploy/crate-datasource/dist/query_def.ts create mode 100755 deploy/crate-datasource/dist/response_handler.d.ts create mode 100755 deploy/crate-datasource/dist/response_handler.js create mode 100755 deploy/crate-datasource/dist/response_handler.js.map create mode 100755 deploy/crate-datasource/dist/response_handler.ts create mode 100755 deploy/crate-datasource/dist/sdk/query_ctrl.d.ts create mode 100755 deploy/crate-datasource/dist/sdk/query_ctrl.js create mode 100755 deploy/crate-datasource/dist/sdk/query_ctrl.js.map create mode 100755 deploy/crate-datasource/dist/sdk/query_ctrl.ts create mode 100755 deploy/crate-datasource/dist/sdk/sdk.d.ts create mode 100755 deploy/crate-datasource/dist/sdk/sdk.js create mode 100755 deploy/crate-datasource/dist/sdk/sdk.js.map create mode 100755 deploy/crate-datasource/dist/sdk/sdk.ts create mode 100755 deploy/crate-datasource/headers/common.d.ts create mode 100755 deploy/crate-datasource/headers/es6-shim/es6-shim.d.ts create mode 100755 deploy/crate-datasource/headers/mocha/mocha.d.ts create mode 100755 deploy/crate-datasource/headers/zone/zone.d.ts create mode 100755 deploy/crate-datasource/package.json create mode 100755 deploy/crate-datasource/src/config_ctrl.ts create mode 100755 deploy/crate-datasource/src/datasource.ts create mode 100755 deploy/crate-datasource/src/img/crate-datasource-add-src.png create mode 100755 deploy/crate-datasource/src/img/crate-datasource-error.png create mode 100755 deploy/crate-datasource/src/img/crate-datasource-graph.png create mode 100755 deploy/crate-datasource/src/img/crate-datasource-nonvalidation.png create mode 100755 deploy/crate-datasource/src/img/crate_logo.png create mode 100755 deploy/crate-datasource/src/module.ts create mode 100755 deploy/crate-datasource/src/partials/annotations.editor.html create mode 100755 deploy/crate-datasource/src/partials/config.html create mode 100755 deploy/crate-datasource/src/partials/query.editor.html create mode 100755 deploy/crate-datasource/src/partials/query.options.html create mode 100755 deploy/crate-datasource/src/plugin.json create mode 100755 deploy/crate-datasource/src/query_builder.ts create mode 100755 deploy/crate-datasource/src/query_ctrl.ts create mode 100755 deploy/crate-datasource/src/query_def.ts create mode 100755 deploy/crate-datasource/src/response_handler.ts create mode 100755 deploy/crate-datasource/src/sdk/query_ctrl.ts create mode 100755 deploy/crate-datasource/src/sdk/sdk.ts create mode 100755 deploy/crate-datasource/src/spec/datasource_specs.js create mode 100755 deploy/crate-datasource/src/spec/query_builder_specs.js create mode 100755 deploy/crate-datasource/src/spec/response_handler_specs.js create mode 100755 deploy/crate-datasource/src/spec/test-main.js create mode 100755 deploy/crate-datasource/tsconfig.json create mode 100755 deploy/crate-datasource/tsd.json create mode 100755 deploy/crate-datasource/tslint.json rename deploy/cratedata/data/nodes/0/_state/{global-3.st => global-8.st} (65%) rename deploy/cratedata/data/nodes/0/_state/{node-2.st => node-7.st} (100%) rename deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/_state/{state-2.st => state-7.st} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_4.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_4.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_4.si create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_5.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_5.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_5.si delete mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/segments_6 create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/segments_f delete mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-1.ckp delete mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-1.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-10.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-10.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-11.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-11.tlog rename deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/{translog-3.tlog => translog-12.tlog} (100%) delete mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-2.ckp delete mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-2.tlog delete mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-3.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-6.ckp rename deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/{translog-4.tlog => translog-6.tlog} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-7.ckp rename deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/{translog-5.tlog => translog-7.tlog} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-8.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-8.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-9.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-9.tlog rename deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/_state/{state-2.st => state-7.st} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_2.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_2.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_2.si create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_3.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_3.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_3.si delete mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/segments_4 create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/segments_d delete mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-1.ckp delete mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-1.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-10.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-10.tlog rename deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/{translog-2.tlog => translog-11.tlog} (100%) delete mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-3.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-5.ckp rename deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/{translog-3.tlog => translog-5.tlog} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-6.ckp rename deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/{translog-4.tlog => translog-6.tlog} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-7.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-7.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-8.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-8.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-9.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-9.tlog rename deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/_state/{state-2.st => state-7.st} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_3.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_3.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_3.si delete mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/segments_4 create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/segments_b delete mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-1.ckp delete mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-1.tlog rename deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/{translog-2.tlog => translog-10.tlog} (100%) delete mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-3.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-5.ckp rename deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/{translog-3.tlog => translog-5.tlog} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-6.ckp rename deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/{translog-4.tlog => translog-6.tlog} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-7.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-7.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-8.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-8.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-9.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-9.tlog rename deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/_state/{state-2.st => state-7.st} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_1.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_1.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_1.si create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_2.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_2.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_2.si create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_3.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_3.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_3.si create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_4.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_4.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_4.si delete mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/segments_4 create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/segments_d delete mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-1.ckp delete mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-1.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-10.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-10.tlog rename deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/{translog-2.tlog => translog-11.tlog} (100%) delete mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-2.ckp delete mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-3.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-5.ckp rename deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/{translog-3.tlog => translog-5.tlog} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-6.ckp rename deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/{translog-4.tlog => translog-6.tlog} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-7.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-7.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-8.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-8.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-9.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-9.tlog delete mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/_state/state-11.st create mode 100644 deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/_state/state-33.st rename deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/_state/{state-2.st => state-7.st} (100%) delete mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/index/segments_2 create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/index/segments_7 delete mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-1.ckp delete mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-2.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-4.ckp rename deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/{translog-1.tlog => translog-4.tlog} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-5.ckp rename deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/{translog-2.tlog => translog-5.tlog} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-6.ckp rename deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/{translog-3.tlog => translog-6.tlog} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-7.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-7.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-8.tlog rename deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/_state/{state-2.st => state-7.st} (100%) delete mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_0.cfe delete mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_0.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_1.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_1.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_1.si delete mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/segments_4 create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/segments_b delete mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-1.ckp delete mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-1.tlog rename deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/{translog-2.tlog => translog-10.tlog} (100%) delete mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-2.ckp delete mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-3.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-5.ckp rename deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/{translog-3.tlog => translog-5.tlog} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-6.ckp rename deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/{translog-4.tlog => translog-6.tlog} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-7.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-7.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-8.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-8.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-9.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-9.tlog rename deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/_state/{state-2.st => state-7.st} (100%) delete mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/index/segments_2 create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/index/segments_7 delete mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-1.ckp delete mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-2.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-4.ckp rename deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/{translog-1.tlog => translog-4.tlog} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-5.ckp rename deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/{translog-2.tlog => translog-5.tlog} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-6.ckp rename deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/{translog-3.tlog => translog-6.tlog} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-7.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-7.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-8.tlog rename deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/_state/{state-2.st => state-7.st} (100%) delete mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/index/segments_2 create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/index/segments_7 delete mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-1.ckp delete mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-2.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-4.ckp rename deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/{translog-1.tlog => translog-4.tlog} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-5.ckp rename deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/{translog-2.tlog => translog-5.tlog} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-6.ckp rename deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/{translog-3.tlog => translog-6.tlog} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-7.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-7.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-8.tlog delete mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/_state/state-12.st create mode 100644 deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/_state/state-39.st create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/_state/state-1.st create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/_0.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/_0.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/_0.si create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/_1.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/_1.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/_1.si create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/_2.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/_2.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/_2.si create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/segments_5 create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/write.lock create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/translog/translog-1.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/translog/translog-1.tlog rename deploy/cratedata/data/nodes/0/indices/{8VBUBMiNRnm9LPxVv006jQ/1 => sgeQMCbmTjanF7waz7Ne4w/0}/translog/translog-2.ckp (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/translog/translog-2.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/translog/translog-3.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/translog/translog-3.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/translog/translog-4.tlog rename deploy/cratedata/data/nodes/0/indices/{8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-4.ckp => sgeQMCbmTjanF7waz7Ne4w/0/translog/translog.ckp} (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/_state/state-1.st create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/_0.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/_0.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/_0.si create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/_1.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/_1.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/_1.si create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/_2.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/_2.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/_2.si create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/segments_5 create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/write.lock create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/translog/translog-1.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/translog/translog-1.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/translog/translog-2.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/translog/translog-2.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/translog/translog-3.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/translog/translog-3.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/translog/translog-4.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/translog/translog.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/_state/state-1.st create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_0.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_0.cfs rename deploy/cratedata/data/nodes/0/indices/{gZc0-gawQkCZmlVZVCcyEA/1 => sgeQMCbmTjanF7waz7Ne4w/2}/index/_0.si (59%) create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_1.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_1.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_1.si create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_2.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_2.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_2.si create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_3.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_3.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_3.si create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/segments_5 create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/write.lock create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/translog/translog-1.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/translog/translog-1.tlog rename deploy/cratedata/data/nodes/0/indices/{8VBUBMiNRnm9LPxVv006jQ => sgeQMCbmTjanF7waz7Ne4w}/2/translog/translog-2.ckp (100%) create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/translog/translog-2.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/translog/translog-3.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/translog/translog-3.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/translog/translog-4.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/translog/translog.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/_state/state-1.st create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/_0.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/_0.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/_0.si create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/_1.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/_1.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/_1.si create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/_2.cfe create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/_2.cfs create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/_2.si create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/segments_5 create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/write.lock create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/translog/translog-1.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/translog/translog-1.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/translog/translog-2.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/translog/translog-2.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/translog/translog-3.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/translog/translog-3.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/translog/translog-4.tlog create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/translog/translog.ckp create mode 100644 deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/_state/state-7.st create mode 100755 deploy/grafana-map-plugin/.eslintignore create mode 100755 deploy/grafana-map-plugin/.eslintrc create mode 100755 deploy/grafana-map-plugin/.gitignore create mode 100755 deploy/grafana-map-plugin/.gitlab-ci.yml create mode 100755 deploy/grafana-map-plugin/CHANGELOG.md create mode 100755 deploy/grafana-map-plugin/CONTRIBUTING.md create mode 100755 deploy/grafana-map-plugin/Gruntfile.js create mode 100755 deploy/grafana-map-plugin/LICENSE create mode 100755 deploy/grafana-map-plugin/README.md create mode 100755 deploy/grafana-map-plugin/circle.yml create mode 100755 deploy/grafana-map-plugin/config.sh create mode 100755 deploy/grafana-map-plugin/create-table.sh create mode 100755 deploy/grafana-map-plugin/dashboards/map.json create mode 100755 deploy/grafana-map-plugin/data_sources/crate.json create mode 100755 deploy/grafana-map-plugin/dist/CHANGELOG.md create mode 100755 deploy/grafana-map-plugin/dist/LICENSE create mode 100755 deploy/grafana-map-plugin/dist/README.md create mode 100755 deploy/grafana-map-plugin/dist/css/worldmap-panel.css create mode 100755 deploy/grafana-map-plugin/dist/css/worldmap.dark.css create mode 100755 deploy/grafana-map-plugin/dist/css/worldmap.light.css create mode 100755 deploy/grafana-map-plugin/dist/definitions.js create mode 100755 deploy/grafana-map-plugin/dist/definitions.js.map create mode 100755 deploy/grafana-map-plugin/dist/img/fa/automobile.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/ban.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/battery-empty.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/bell-o.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/bell-slash-o.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/bell-slash.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/bell.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/bicycle.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/bus.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/car.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/clock-o.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/close.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/info-circle.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/question-circle.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/question.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/trash-o.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/trash.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/tree.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/truck.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/umbrella.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/video-camera.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/volume-down.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/volume-off.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/volume-up.svg create mode 100755 deploy/grafana-map-plugin/dist/img/fa/warning.svg create mode 100755 deploy/grafana-map-plugin/dist/img/icon.svg create mode 100755 deploy/grafana-map-plugin/dist/img/map_marker.png create mode 100755 deploy/grafana-map-plugin/dist/map_renderer.js create mode 100755 deploy/grafana-map-plugin/dist/map_renderer.js.map create mode 100755 deploy/grafana-map-plugin/dist/module.js create mode 100755 deploy/grafana-map-plugin/dist/module.js.map create mode 100755 deploy/grafana-map-plugin/dist/partials/editor.html create mode 100755 deploy/grafana-map-plugin/dist/partials/module.html create mode 100755 deploy/grafana-map-plugin/dist/plugin.json create mode 100755 deploy/grafana-map-plugin/dist/utils/data_utils.js create mode 100755 deploy/grafana-map-plugin/dist/utils/data_utils.js.map create mode 100755 deploy/grafana-map-plugin/dist/utils/datasource.js create mode 100755 deploy/grafana-map-plugin/dist/utils/datasource.js.map create mode 100755 deploy/grafana-map-plugin/dist/utils/map_utils.js create mode 100755 deploy/grafana-map-plugin/dist/utils/map_utils.js.map create mode 100755 deploy/grafana-map-plugin/dist/utils/string.js create mode 100755 deploy/grafana-map-plugin/dist/utils/string.js.map create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/all.css create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/all.min.css create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/brands.css create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/brands.min.css create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/fontawesome.css create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/fontawesome.min.css create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/regular.css create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/regular.min.css create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/solid.css create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/solid.min.css create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/svg-with-js.css create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/svg-with-js.min.css create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/v4-shims.css create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/v4-shims.min.css create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-brands-400.eot create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-brands-400.svg create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-brands-400.ttf create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-brands-400.woff create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-brands-400.woff2 create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-regular-400.eot create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-regular-400.svg create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-regular-400.ttf create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-regular-400.woff create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-regular-400.woff2 create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-solid-900.eot create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-solid-900.svg create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-solid-900.ttf create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-solid-900.woff create mode 100755 deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-solid-900.woff2 create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet-sleep/Leaflet.Sleep.js create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/images/markers-matte.png create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/images/markers-matte@2x.png create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/images/markers-plain.png create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/images/markers-shadow.png create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/images/markers-shadow@2x.png create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/images/markers-soft.png create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/images/markers-soft@2x.png create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/leaflet.awesome-markers.css create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/leaflet.awesome-markers.js create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/leaflet.awesome-markers.min.js create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/MarkerCluster.Default.css create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/MarkerCluster.css create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/WhereAreTheJavascriptFiles.txt create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/leaflet.markercluster-src.js create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/leaflet.markercluster-src.js.map create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/leaflet.markercluster.js create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/leaflet.markercluster.js.map create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet/images/layers-2x.png create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet/images/layers.png create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet/images/marker-icon-2x.png create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet/images/marker-icon.png create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet/images/marker-shadow.png create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet/leaflet-src.esm.js create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet/leaflet-src.esm.js.map create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet/leaflet-src.js create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet/leaflet-src.js.map create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet/leaflet.css create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet/leaflet.js create mode 100755 deploy/grafana-map-plugin/dist/vendor/leaflet/leaflet.js.map create mode 100755 deploy/grafana-map-plugin/dist/vendor/osmbuildings/OSMBuildings-Leaflet.debug.js create mode 100755 deploy/grafana-map-plugin/dist/vendor/osmbuildings/OSMBuildings-Leaflet.js create mode 100755 deploy/grafana-map-plugin/dist/vendor/osmbuildings/OSMBuildings-Leaflet.js.gz create mode 100755 deploy/grafana-map-plugin/dist/vendor/osmbuildings/OSMBuildings-OL3.debug.js create mode 100755 deploy/grafana-map-plugin/dist/vendor/osmbuildings/OSMBuildings-OL3.js create mode 100755 deploy/grafana-map-plugin/dist/vendor/osmbuildings/OSMBuildings-OpenLayers.debug.js create mode 100755 deploy/grafana-map-plugin/dist/vendor/osmbuildings/OSMBuildings-OpenLayers.js create mode 100755 deploy/grafana-map-plugin/dist/vendor/osmbuildings/OSMBuildings-OpenLayers.js.gz create mode 100755 deploy/grafana-map-plugin/dist/vendor/turf/README.md create mode 100755 deploy/grafana-map-plugin/dist/vendor/turf/bower.json create mode 100755 deploy/grafana-map-plugin/dist/vendor/turf/index.js create mode 100755 deploy/grafana-map-plugin/dist/vendor/turf/package.json create mode 100755 deploy/grafana-map-plugin/dist/vendor/turf/turf.js create mode 100755 deploy/grafana-map-plugin/dist/vendor/turf/turf.min.js create mode 100755 deploy/grafana-map-plugin/dist/worldmap.js create mode 100755 deploy/grafana-map-plugin/dist/worldmap.js.map create mode 100755 deploy/grafana-map-plugin/dist/worldmap_ctrl.js create mode 100755 deploy/grafana-map-plugin/dist/worldmap_ctrl.js.map create mode 100755 deploy/grafana-map-plugin/docker-compose.yml create mode 100755 deploy/grafana-map-plugin/drop-table.sh create mode 100755 deploy/grafana-map-plugin/etc/grafana/grafana.ini create mode 100755 deploy/grafana-map-plugin/get-crate-plugin.sh create mode 100755 deploy/grafana-map-plugin/karma.conf.js create mode 100755 deploy/grafana-map-plugin/package.json create mode 100755 deploy/grafana-map-plugin/set-up-grafana.sh create mode 100755 deploy/grafana-map-plugin/setup_dev_env.sh create mode 100755 deploy/grafana-map-plugin/src/css/worldmap-panel.css create mode 100755 deploy/grafana-map-plugin/src/css/worldmap.dark.css create mode 100755 deploy/grafana-map-plugin/src/css/worldmap.light.css create mode 100755 deploy/grafana-map-plugin/src/definitions.js create mode 100755 deploy/grafana-map-plugin/src/img/fa/automobile.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/ban.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/battery-empty.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/bell-o.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/bell-slash-o.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/bell-slash.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/bell.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/bicycle.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/bus.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/car.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/clock-o.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/close.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/info-circle.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/question-circle.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/question.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/trash-o.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/trash.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/tree.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/truck.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/umbrella.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/video-camera.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/volume-down.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/volume-off.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/volume-up.svg create mode 100755 deploy/grafana-map-plugin/src/img/fa/warning.svg create mode 100755 deploy/grafana-map-plugin/src/img/icon.svg create mode 100755 deploy/grafana-map-plugin/src/img/map_marker.png create mode 100755 deploy/grafana-map-plugin/src/map_renderer.js create mode 100755 deploy/grafana-map-plugin/src/module.js create mode 100755 deploy/grafana-map-plugin/src/partials/editor.html create mode 100755 deploy/grafana-map-plugin/src/partials/module.html create mode 100755 deploy/grafana-map-plugin/src/plugin.json create mode 100755 deploy/grafana-map-plugin/src/utils/data_utils.js create mode 100755 deploy/grafana-map-plugin/src/utils/datasource.js create mode 100755 deploy/grafana-map-plugin/src/utils/map_utils.js create mode 100755 deploy/grafana-map-plugin/src/utils/string.js create mode 100755 deploy/grafana-map-plugin/src/worldmap.js create mode 100755 deploy/grafana-map-plugin/src/worldmap_ctrl.js create mode 100755 deploy/grafana-map-plugin/test/data_builder.js create mode 100755 deploy/grafana-map-plugin/test/data_formatter_test.js create mode 100755 deploy/grafana-map-plugin/test/worldmap_test.js create mode 100755 deploy/grafana-map-plugin/yarn.lock create mode 100644 deploy/grafana.db create mode 100755 deploy/send_payload_to_agent.sh diff --git a/deploy/README.md b/deploy/README.md index d4949b2..4d2ba32 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -1,23 +1,68 @@ # Deploy example +In order to launch a local deployment of the platform, you can do the following: -## Todo -- redirect to keycloak:8080 not working (of course) -- Load an example group and device - - this can be done with the mongo dump -- Load example data in context broker - - this can be done with the mongo dump -- Example subscription for above data to ql - - this can be done with the mongo dump -- Example data in ql - - this can be done with the crate export -- Example dashboard with map - - clone the plugings and run them from the filesystem - - create example dashboard, export it and import it at creation (see code in plugings) -- Example send message to ul agent (with key and token) - - curl script -- Write a readme +## Add Keycloak to the local hosts file + +In order for the Portal to connect to Keycloak correctly, they need to be added +to the local hosts file pointing to the local IP. +Open `/etc/hosts` and add them like so: + +``` +0.0.0.0 keycloak +0.0.0.0 portal +``` + +## Start the containers + +All the containers can be started and configured using the script included + +``` + ./deploy.sh +``` + +and for stopping the containers, there's another script for that as well + +``` + ./clean.sh +``` + +## Set up Keycloak from the Admin UI + +There's a few necessary steps to setup Keycloak to work with the Portal: + +1. Access the Admin UI from http://localhost:8080 +2. Login with the default admin user (USERNAME: admin, PASSWORD: password) +3. Under clients, find the admin-cli client. Under Service Account Roles, add + all the available unassigned roles to the client. +4. Under users, create a new user. Give it a username and email at least, and + set a password for it. Ensure to tick the box for verified email, and untick + the box for temporary password. Add the user to the groups + /WasteManagement/Demo and Admin under the Town group. + +## Log into the Portal + +You can now log into the portal at http://localhost:8000 using the newly created +user. An example Device and Group has been created and filled with a basic +temperature attribute. + +## Send some data to the UL IoT Agent + +With the script send_payload_to_agent.sh you can send some basic temperature +reading to a new device called TestDev2. The script can be invoked as: + +``` + ./send_payload_to_agent.sh 13 +``` + +Where 13 is the temperature to send for example. + +## Log into Grafana + +The Grafana dashboards can be found at http://localhost:3000 . Login with the +default admin user (USERNAME: admin, PASSWORD: admin). An example dashboard +can be found under the general group. # Todo (next) - Use newer keycloak and load scripts -- Use newer grafana \ No newline at end of file +- Use newer grafana diff --git a/deploy/crate-datasource/.gitattributes b/deploy/crate-datasource/.gitattributes new file mode 100755 index 0000000..e69de29 diff --git a/deploy/crate-datasource/.gitignore b/deploy/crate-datasource/.gitignore new file mode 100755 index 0000000..952eb7e --- /dev/null +++ b/deploy/crate-datasource/.gitignore @@ -0,0 +1,42 @@ +node_modules +npm-debug.log +coverage/ +.aws-config.json +awsconfig +/emails/dist +/public_gen +/tmp +vendor/phantomjs/phantomjs + +# Builded dist +# /dist + +# Test artifacts +/dist/test +/dist/spec + +docs/AWS_S3_BUCKET +docs/GIT_BRANCH +docs/VERSION +docs/GITCOMMIT +docs/changed-files +docs/changed-files + +# locally required config files +public/css/*.min.css + +# Editor junk +*.sublime-workspace +*.sublime-project +*.swp +.idea/ +*.iml + +/data/* +/bin/* + +conf/custom.ini +fig.yml +profile.cov +grafana +.notouch diff --git a/deploy/crate-datasource/.jscsrc b/deploy/crate-datasource/.jscsrc new file mode 100755 index 0000000..dcf694d --- /dev/null +++ b/deploy/crate-datasource/.jscsrc @@ -0,0 +1,13 @@ +{ + "disallowImplicitTypeConversion": ["string"], + "disallowKeywords": ["with"], + "disallowMultipleLineBreaks": true, + "disallowMixedSpacesAndTabs": true, + "disallowTrailingWhitespace": true, + "requireSpacesInFunctionExpression": { + "beforeOpeningCurlyBrace": true + }, + "disallowSpacesInsideArrayBrackets": true, + "disallowSpacesInsideParentheses": true, + "validateIndentation": 2 +} \ No newline at end of file diff --git a/deploy/crate-datasource/.jshintrc b/deploy/crate-datasource/.jshintrc new file mode 100755 index 0000000..300d6de --- /dev/null +++ b/deploy/crate-datasource/.jshintrc @@ -0,0 +1,46 @@ +{ + "browser": true, + + "bitwise":false, + "curly": true, + "eqnull": true, + "strict": true, + "module": true, + "devel": true, + "eqeqeq": true, + "forin": false, + "immed": true, + "supernew": true, + "expr": true, + "indent": 2, + "latedef": false, + "newcap": true, + "noarg": true, + "noempty": true, + "undef": true, + "boss": true, + "trailing": true, + "laxbreak": true, + "laxcomma": true, + "sub": true, + "unused": true, + "maxdepth": 6, + "maxlen": 140, + "esnext": true, + + "globals": { + "System": true, + "Promise": true, + "define": true, + "require": true, + "Chromath": false, + "setImmediate": true, + "expect": true, + "it": true, + "describe": true, + "sinon": true, + "module": true, + "beforeEach": true, + "inject": true + } +} diff --git a/deploy/crate-datasource/CHANGELOG.md b/deploy/crate-datasource/CHANGELOG.md new file mode 100755 index 0000000..4584f0f --- /dev/null +++ b/deploy/crate-datasource/CHANGELOG.md @@ -0,0 +1,49 @@ +# Change Log + + +## [Unreleased] + + +## [0.5.1] - 2017-04-05 +### Changed +- Use date_trunk() when interval set to second, minute, etc +- Override limit only for Raw agg queries. + + +## [0.5.0] - 2017-03-22 +### Added +- Checks schema and table (prevent queries to different source). + + +## [0.4.0] - 2017-03-19 +### Added +- 'Auto' (uses date_trunk()) and 'Auto (Grafana)' (uses floor()) time intervals. + +### Fixed +- 10K issue + +### Changed +- Use explicit aggregation by time interval based on floor() instead date_trunk() + +## [0.3.0] - 2017-03-02 +### Added +- Table mode support +- Ad-hoc filters support +- $timeFilter variable support +- Quote column names with capital letters [#28](https://github.com/raintank/crate-datasource/issues/28) +- Support GROUP BY in raw queries, issue [#30](https://github.com/raintank/crate-datasource/issues/30) + +### Fixed +- Schema queries (changed in Crate 1.0) + + +## [0.2.0] - 2016-11-29 +### Added +- Special "Raw" aggregation type [#9](https://github.com/raintank/crate-datasource/issues/9) +- Alias for each field in SELECT + + +## [0.1.0] - 2016-07-10 +- Initial release +- Implementation by [raintank](http://raintank.io) +- Documentation contributions from [Crate.io](https://crate.io) diff --git a/deploy/crate-datasource/Gruntfile.js b/deploy/crate-datasource/Gruntfile.js new file mode 100755 index 0000000..589d8ad --- /dev/null +++ b/deploy/crate-datasource/Gruntfile.js @@ -0,0 +1,121 @@ +module.exports = function(grunt) { + + require('load-grunt-tasks')(grunt); + + grunt.loadNpmTasks('grunt-execute'); + grunt.loadNpmTasks('grunt-contrib-clean'); + + grunt.initConfig({ + + clean: ["dist"], + + copy: { + src_to_dist: { + cwd: 'src', + expand: true, + src: ['**/*', '!**/*.js', '!**/*.scss'], + dest: 'dist' + }, + pluginDef: { + expand: true, + src: ['README.md'], + dest: 'dist' + } + }, + + watch: { + rebuild_all: { + files: ['src/**/*'], + tasks: ['watch-ts'], + options: {spawn: false} + } + }, + + typescript: { + build: { + src: ['dist/**/*.ts', "!src/spec/**/*", "!**/*.d.ts"], + dest: 'dist/', + options: { + module: 'system', //or commonjs + target: 'es3', //or es5 + rootDir: 'dist/', + keepDirectoryHierarchy: false, + declaration: true, + emitDecoratorMetadata: true, + experimentalDecorators: true, + sourceMap: true, + noImplicitAny: false, + } + }, + distTests: { + src: ['src/**/*.ts', "!src/spec/**/*", "!**/*.d.ts"], + dest: 'dist/test/', + options: { + module: 'commonjs', //or commonjs + target: 'es5', //or es5 + rootDir: 'src/', + sourceRoot: 'src/', + declaration: true, + emitDecoratorMetadata: true, + experimentalDecorators: true, + sourceMap: true, + noImplicitAny: false, + } + }, + // distTestsSpecs: { + // src: ['src/spec/**/*.ts'], + // dest: 'dist/test/', + // options: { + // module: 'commonjs', //or commonjs + // target: 'es5', //or es5 + // declaration: true, + // emitDecoratorMetadata: true, + // experimentalDecorators: true, + // sourceMap: true, + // noImplicitAny: false, + // } + // } + }, + + babel: { + options: { + sourceMap: true, + presets: ['es2015'] + }, + distTestsSpecsNoSystemJs: { + files: [{ + expand: true, + cwd: 'src/spec', + src: ['**/*.js'], + dest: 'dist/test/spec', + ext:'.js' + }] + } + }, + + mochaTest: { + test: { + options: { + reporter: 'spec' + }, + src: ['dist/test/spec/test-main.js', 'dist/test/spec/*_specs.js'] + } + } + }); + + grunt.registerTask('default', [ + 'clean', + 'copy', + 'typescript:build', + 'typescript:distTests', + 'babel', + 'mochaTest' + ]); + + grunt.registerTask('watch-ts', [ + 'clean', + 'copy:src_to_dist', + 'copy:pluginDef', + 'typescript:build' + ]); +}; diff --git a/deploy/crate-datasource/LICENSE b/deploy/crate-datasource/LICENSE new file mode 100755 index 0000000..8dada3e --- /dev/null +++ b/deploy/crate-datasource/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/deploy/crate-datasource/README.md b/deploy/crate-datasource/README.md new file mode 100755 index 0000000..062e9b7 --- /dev/null +++ b/deploy/crate-datasource/README.md @@ -0,0 +1,108 @@ +# Grafana Data Source Plugin for CrateDB + +[![Crate.io logo](https://raw.githubusercontent.com/raintank/crate-datasource/master/crate-logo.png)](https://crate.io) + + +## What Is CrateDB? +CrateDB is a SQL database that makes it simple to store and analyze +massive amounts of machine data in real-time. CrateDB customers have +reported improving predictive analytic query performance of machine +data by 20x more than MySQL, while reducing database hardware costs by +75%. + +Here’s how CrateDB makes this possible: + +- **Combining SQL & Search** into a single DBMS - allowing you to process any data structure...time series, geospatial, JSON, full-text, etc. +- **Distributed query innovations** - that deliver real-time SQL performance +- **An auto-scaling architecture** - grow CrateDB with less DBA expertise +- **Dynamic schemas, adhoc queries** - quickly adapt to data structure changes + +For these reasons and more, CrateDB is your perfect datasource for Grafana. + +## The CrateDB Datasource Plugin for Grafana + +### Features +Enables CrateDB clusters to act as data sources for your Grafana deployment, providing real-time analytical and time-series data with SQL. + +### Requirements +- **Grafana** > 3.x.x +- **CrateDB** - All stable versions are supported by this plugin + +### Setup +![](https://raw.githubusercontent.com/raintank/crate-datasource/master/src/img/crate-datasource-add-src.png) + + > The screenshot shows a connection to http://localhost:44200 which is a test database for the purpose of this tutorial. CrateDB's default binding is to http://localhost:4200. + +1. Click on the Grafana icon on the top left. +2. After the menu opened, you should see a link `Data Sources` below `Dashboards`. +3. Click `+ Add data source`. +4. Select `CrateDB` from the 'Type' dropdown. + +#### Cross-origin Resource Sharing (CORS) + +CrateDB supports [cross-origin resource sharing](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS) and if Grafana is running on a different origin (e.g. another domain), it is required to configure CrateDB accordingly. For example by this is the minimum required configuration in your `crate.yml`: +``` +http.cors.enabled: true +http.cors.allow-origin: "http://mydomain.com" +``` +> Replace http://mydomain.com with the domain Grafana is running on, or use a "*" if it's OK to allow any domain to access CrateDB + +For further options look in [CrateDB's documentation](https://crate.io/docs/reference/en/latest/configuration.html#cross-origin-resource-sharing-cors) + +#### The CrateDB Data Source + +Name | Description +------------ | ------------- +Name | The data source name. +Default | Set this data source as default for new panels. + +##### HTTP Settings + +Name | Description +------------ | ------------- +Url | The URI to any node in your CrateDB cluster. +Access | Via Grafana backend (proxy) or directly from the browser (direct). +Basic Auth | Enable basic authentication (only available via NGINX proxy in CrateDB). +User | Not available in CrateDB. +Password | Not available in CrateDB. + +##### CrateDB Details + +These are specific settings for the CrateDB data source and it's required to set a fixed `schema`, `table`, and time series column per data source. + +Name | Description +------------ | ------------- +Schema | CrateDB schema to query from (defaults to `doc`). +Table | Table to retrieve the data from. Has to be available in the previously defined schema. +Time Column | Time series column, has to be of type `timestamp` in CrateDB. +Default grouping interval | The grouping resolution (can be changed by query). + +![](https://raw.githubusercontent.com/raintank/crate-datasource/master/src/img/crate-datasource-nonvalidation.png) + +> Grafana will not check (yet) if the `time column`, the `schema`, or the `table` exists. Be sure to double check these values to avoid running into problems later. + +### Querying CrateDB + +After adding a new dashboard and having the query editor open, define and run the queries you like - it's just like other SQL databases. For example we have added the [NYC yellow cab data set](http://www.nyc.gov/html/tlc/html/about/trip_record_data.shtml) in our cluster to show you something interesting! + +![](https://raw.githubusercontent.com/raintank/crate-datasource/master/src/img/crate-datasource-graph.png) + +> This graph shows the number of yellow cab pick ups between on a weekend in August 2013. + +### Debugging Queries + +Grafana runs queries almost immediately after change and it will also auto-complete columns or previous values. However, sometimes queries might still be invalid and Grafana will then show a small exclamation mark in the top corner of the graph. Clicking on it will give you the error message. + +![](https://raw.githubusercontent.com/raintank/crate-datasource/master/src/img/crate-datasource-error.png) + +The CrateDB data source for Grafana supports a great range of scalar functions and operators. To read more about them, install or scale a cluster, or even to contribute to Crate, please have a look at the [official Crate documentation](https://crate.io/docs) + +### License +- This plugins is made available under the terms of the [Apache License, Version 2.0](https://github.com/crate/crate-datasource/blob/master/LICENSE). + +## Getting Help + +- Read the CrateDB documentation [here](https://crate.io/docs) +- Issues with the Grafana plugin can be reported or discussed [here](https://github.com/raintank/crate-datasource/issues) +- Issues with CrateDB can be reported or discussed [here](https://github.com/crate/crate/issues) +- Join the CrateDB Community Slack channel [here](https://crate.io/docs/support/slackin/) diff --git a/deploy/crate-datasource/crate-logo.png b/deploy/crate-datasource/crate-logo.png new file mode 100755 index 0000000000000000000000000000000000000000..22849e8dc2092604aedb359f4354f5192bd7c12d GIT binary patch literal 5310 zcmeHLc{r4R*B{fQL70@1Bn~+2DP)&^cyG(|Jn#1B``7!vb6qp@y}xtL=bX>yd);&Hb0W=5^!Ry2c|jl$ zKSBSLIS2%f0@jI8F!0&^04D@|aZ%0nPJ(h<#J&R;Jl^^js2~vE-if>KdI02T-;okX+uN06w}TOj|yIpsvXLUHq^xsgc{8@TokWFHzl`6C_@$N2upk)506`=`T&56`zY6z7U9?F(-`5Z!l7 zXg6!q5-QQ!xn;y)pur7==zDgs4FtfC{zPEI89*G^gJ%zxLBh828dQC@_9cd5K(jwv zWJMrb5P0^p9orfBL2kSFA>T-B#%F+LjSg>R1}&9lU@E9Q+$XjmZo5ou<$=;qjODNaFL+b11sI02?{P~Ie&Ki!-EO`slke;>x!{Y1|u;~ zM+l_HJXztD0SgoFZXU3$4mub(`}OPBxv|zR>w5Najn%sAf+!T~J=-bcOMidh-^(+1 zj+)-TrSw--pr5z5oyZGa(==Q{>QA+~Sh${7D(&jkbj3b5hnW3JfiJDzT7APr^G|R% zrx4}%J)L9YWXj{}z@=Q#=|Y#*f?``%|4w)CJu5@}bBU{19FG04`NRCekI!f{+Fho7 z`PFA{I)0U9kW+B)`z_XP&J7tiR`P8S*wPSxR-1oMOiT>iqwuF?s82w^^F_tzR!cFC z){%=80hn2H_pQnP5;BvPUWc-+CI4tq3dhz*AKLh zHk>eL4i$fQ5jbh5&9xxt?izOvyQY#No~3!y^hlZzJ;vqq2S*4oRrsDs;$ZBp&Iyc> z?o(ldx|>D_Og(!Ubg4-OJsOq4#M^_Di^}A~0}90^573b|gwg@^$P*MVQoh1Uz^jfn zt-rd&wDtG|Q!+}+k%x`CW!glb;W3V`$|u+ zMTCyFpb}QZJ;Mq;L}lf2bk(<>dAB`rhamMrZ6M;+R~+TZ^n(+v&HS>|QdLiXKFS+r|_pu0l4J{ljtIwJ4J4h)&= zUrHz=celJ=o%^zLH?n5pUaIEQm%nwH1-GiM?cXmfQujeYT`0V;K4na@YGu#&H10o6 zw+;&Tl8oHH^}joItd5!8X@GY)7&`5YgS-;JDkQrLJkV!{=AB@V{ei=;YyQ5lI?{I} z_ye`+?T_x9i=vaFf`1JC!X}L+Nw01@lu#C8z&VFvXR5Vt4&g6btUG)=FdS!JRv;iD z_2vCOnP&%H??xP%Qg-iCn&Dt))E#GKk6)E#>SuQH#Wt~F`BlYm+9x3soO|KW{J4U2W&8K_m)m#I4tco|&# z*#^RTzV}&kf$62fGZn?@#&>&6EY`AQj91@HO_6>Z3g%_;j2A7bs?AK=NBm^g)bF|R z*;&|Fb=ND~1)@__B<9}NrgOCrH80+l)CwE5NxrCoqG$Ggkw%Bi#~ogJR6skV`ip*WZilT-q4yW%4L215W!2Mq!x`N{S4V8G=(h;SSl{bzaRF`SwrV4&1C zDx$~zxMStFK03`#VDY|XBMi}@n9>{@k_3Q~2 zS%lx@O;uP84tgAp_wIj5RmwR7PAR)w_I#&HRW!x}QPo{@NU?#YZ`f3iEX(_p%~XkO zZ>mtTMl?N&0*y=vNVj&C-34pGCA>YN_=T)=*^BQ%10!A>Zw9l+~nG@d9zxd z(($C!tH|p>r3(Yide(e}L2?=RDMI|=UXu8c>8QcCB^7yf(eP^QK&vv#k3ireF%Yd$Rt8O@6+lV7{SUV2=d9<%yb2J3MKH_T}SrWI63-$tJoyW5_Q5nMWU z_M_L_=8cR1>LNMvvHU1EtnFsG&FSJpj@C*q-aq6IiXwZICC4#zVT>9G00D8m4`$9o z=JzI-9Vu<^?7f^+OnOvF3e{us(5|!ip&3#P%u^`>4whts@3X;wWyMYUlqAcxE|Leh zsqB~tRmuDu;4HirFeARYLmW;9LnFJi_=fwrzH*mx7HYYZqWZ0$q_8i7c#`osp7>2a z>SZK^W@^bbsX`uXhuT>?R&ZtW6sTnK6r$e3m7bMVJ+$WVVBcb7^VxSLF1$fa=k#|lCnamD#wKUf zWf6M#4l}H*lkN2EY(WoA^|(*5aWuwyR3IQjSthLJ$zD8Lb1Zj_W}>lA0icZ-9W;cqCfag0F>p@VJ&g5!Q@Ccs#zq>X++O^AXYT%P}<-4h$qA=O$MLsNz zGzHU~^*nw<7v^oqNa!bBD)fnnjxtevNo=;`a89=w-?%8vT}OO(ZJ|8ZXwHP0QYO=% zALO4EN#11(*2ctPM|iSGvcjJdStCH1Z#WXB#~y_ar})s2A2!i)J{E&d+z^N`7_xE>>=g zo#-|%q{!l2XZnsZoV=@0u2 zo}X+K3B;t6PFf^$RD~~TJ6`%WY|Z|9H67H+wL-MpZA{iJH z8*7=;_mkM0+2(e%!og|B=S+31$_s0{KKAZ|9D}oVr&kR6gQo6stEnixuYBjAJT^ax zvAhzD_Le_y3(-VE;Y?Y0Yu_KtHCA6;Nd`Qx|x2YNXsgJDo$3&NCRhppGIr)eY2SJDwPnM7YJFKKfn#u?7=%ibxS|_Ut zp3iw(+hPMz%j3nls?GJS1lK1mIH~5Te5DPBbdSHqz2v#t?mH8VCAEW4)a3 z*+)KHD?%?1{a_U)N5DrTtuEc^dCZ;3b+z`a{OtX=C`TbfeC@&e?e9ikDLm-2Hv?Nf zuyjr1o?U$4)BEXK>DZxt9E@@5p*q%>RO=j8U*H)u3n5b}TiK$Jvu21^#A?=Oyl{{+vn1|QkxI{%nbwnZ=~ziDuD;SFV(@R6S#Tc3HppHwT}38X$T+Ud;={P z{pLHlZS{>9O9O&B0fx%R+}2I+3Ug|A78awMj0YEp>fu)_)YSb^-7UmsT@{qqNYp843%DE{tGysXyTVlanBG7Yrirz z;Cwy;GUxNiwP&y7=rl%7CG-g%MmS~iWQj(s@j?rOE!}E=G~WH%+k4^HVt&4>dawDL zFxxJ!o&3dnA*fF>x4mW`#91X8F|IiF95ydj-Q|1fJV7J=myrV@2(G;QjwbRD@kw97 z+fzSuh&~Ip{B0rS_TS%*W}nGSvCbMxrUtq?wHTuF$RAQ&{io=S)N>(Sj*67(gbI6N zt~bd+l7}9S>a)m;^07{DV5(Ykc?(Y^$@y z8-nO0!Y`h!2G|>D_I!tVcW*XyT+kw*(j-FCw)<91pe5GKt@(e)t%kn{l8f4Z(>K+0 zdqe=Sf!QtotmPNs+R}0ys9k^5dLp*0OC^A@f%lFx+Y^ZuKv^7rvEpc^+0^V-5?@Bvc|K21Bw)>Px6DTqGRVRvY2$S}kL<`@6>LN23Rf~Eh`!jRb; PLq)=AlT*1T?O6W?eOR8K literal 0 HcmV?d00001 diff --git a/deploy/crate-datasource/dist/README.md b/deploy/crate-datasource/dist/README.md new file mode 100755 index 0000000..062e9b7 --- /dev/null +++ b/deploy/crate-datasource/dist/README.md @@ -0,0 +1,108 @@ +# Grafana Data Source Plugin for CrateDB + +[![Crate.io logo](https://raw.githubusercontent.com/raintank/crate-datasource/master/crate-logo.png)](https://crate.io) + + +## What Is CrateDB? +CrateDB is a SQL database that makes it simple to store and analyze +massive amounts of machine data in real-time. CrateDB customers have +reported improving predictive analytic query performance of machine +data by 20x more than MySQL, while reducing database hardware costs by +75%. + +Here’s how CrateDB makes this possible: + +- **Combining SQL & Search** into a single DBMS - allowing you to process any data structure...time series, geospatial, JSON, full-text, etc. +- **Distributed query innovations** - that deliver real-time SQL performance +- **An auto-scaling architecture** - grow CrateDB with less DBA expertise +- **Dynamic schemas, adhoc queries** - quickly adapt to data structure changes + +For these reasons and more, CrateDB is your perfect datasource for Grafana. + +## The CrateDB Datasource Plugin for Grafana + +### Features +Enables CrateDB clusters to act as data sources for your Grafana deployment, providing real-time analytical and time-series data with SQL. + +### Requirements +- **Grafana** > 3.x.x +- **CrateDB** - All stable versions are supported by this plugin + +### Setup +![](https://raw.githubusercontent.com/raintank/crate-datasource/master/src/img/crate-datasource-add-src.png) + + > The screenshot shows a connection to http://localhost:44200 which is a test database for the purpose of this tutorial. CrateDB's default binding is to http://localhost:4200. + +1. Click on the Grafana icon on the top left. +2. After the menu opened, you should see a link `Data Sources` below `Dashboards`. +3. Click `+ Add data source`. +4. Select `CrateDB` from the 'Type' dropdown. + +#### Cross-origin Resource Sharing (CORS) + +CrateDB supports [cross-origin resource sharing](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS) and if Grafana is running on a different origin (e.g. another domain), it is required to configure CrateDB accordingly. For example by this is the minimum required configuration in your `crate.yml`: +``` +http.cors.enabled: true +http.cors.allow-origin: "http://mydomain.com" +``` +> Replace http://mydomain.com with the domain Grafana is running on, or use a "*" if it's OK to allow any domain to access CrateDB + +For further options look in [CrateDB's documentation](https://crate.io/docs/reference/en/latest/configuration.html#cross-origin-resource-sharing-cors) + +#### The CrateDB Data Source + +Name | Description +------------ | ------------- +Name | The data source name. +Default | Set this data source as default for new panels. + +##### HTTP Settings + +Name | Description +------------ | ------------- +Url | The URI to any node in your CrateDB cluster. +Access | Via Grafana backend (proxy) or directly from the browser (direct). +Basic Auth | Enable basic authentication (only available via NGINX proxy in CrateDB). +User | Not available in CrateDB. +Password | Not available in CrateDB. + +##### CrateDB Details + +These are specific settings for the CrateDB data source and it's required to set a fixed `schema`, `table`, and time series column per data source. + +Name | Description +------------ | ------------- +Schema | CrateDB schema to query from (defaults to `doc`). +Table | Table to retrieve the data from. Has to be available in the previously defined schema. +Time Column | Time series column, has to be of type `timestamp` in CrateDB. +Default grouping interval | The grouping resolution (can be changed by query). + +![](https://raw.githubusercontent.com/raintank/crate-datasource/master/src/img/crate-datasource-nonvalidation.png) + +> Grafana will not check (yet) if the `time column`, the `schema`, or the `table` exists. Be sure to double check these values to avoid running into problems later. + +### Querying CrateDB + +After adding a new dashboard and having the query editor open, define and run the queries you like - it's just like other SQL databases. For example we have added the [NYC yellow cab data set](http://www.nyc.gov/html/tlc/html/about/trip_record_data.shtml) in our cluster to show you something interesting! + +![](https://raw.githubusercontent.com/raintank/crate-datasource/master/src/img/crate-datasource-graph.png) + +> This graph shows the number of yellow cab pick ups between on a weekend in August 2013. + +### Debugging Queries + +Grafana runs queries almost immediately after change and it will also auto-complete columns or previous values. However, sometimes queries might still be invalid and Grafana will then show a small exclamation mark in the top corner of the graph. Clicking on it will give you the error message. + +![](https://raw.githubusercontent.com/raintank/crate-datasource/master/src/img/crate-datasource-error.png) + +The CrateDB data source for Grafana supports a great range of scalar functions and operators. To read more about them, install or scale a cluster, or even to contribute to Crate, please have a look at the [official Crate documentation](https://crate.io/docs) + +### License +- This plugins is made available under the terms of the [Apache License, Version 2.0](https://github.com/crate/crate-datasource/blob/master/LICENSE). + +## Getting Help + +- Read the CrateDB documentation [here](https://crate.io/docs) +- Issues with the Grafana plugin can be reported or discussed [here](https://github.com/raintank/crate-datasource/issues) +- Issues with CrateDB can be reported or discussed [here](https://github.com/crate/crate/issues) +- Join the CrateDB Community Slack channel [here](https://crate.io/docs/support/slackin/) diff --git a/deploy/crate-datasource/dist/config_ctrl.d.ts b/deploy/crate-datasource/dist/config_ctrl.d.ts new file mode 100755 index 0000000..f88c36f --- /dev/null +++ b/deploy/crate-datasource/dist/config_ctrl.d.ts @@ -0,0 +1,7 @@ +/// +export declare class CrateConfigCtrl { + static templateUrl: string; + current: any; + timeIntervals: any[]; + constructor($scope: any); +} diff --git a/deploy/crate-datasource/dist/config_ctrl.js b/deploy/crate-datasource/dist/config_ctrl.js new file mode 100755 index 0000000..fcc62d4 --- /dev/null +++ b/deploy/crate-datasource/dist/config_ctrl.js @@ -0,0 +1,30 @@ +/// +System.register([], function(exports_1) { + var CrateConfigCtrl; + return { + setters:[], + execute: function() { + CrateConfigCtrl = (function () { + function CrateConfigCtrl($scope) { + this.timeIntervals = [ + { name: 'Auto', value: 'auto' }, + { name: 'Auto (Grafana)', value: 'auto_gf' }, + { name: 'Second', value: 'second' }, + { name: 'Minute', value: 'minute' }, + { name: 'Hour', value: 'hour' }, + { name: 'Day', value: 'day' }, + { name: 'Week', value: 'week' }, + { name: 'Month', value: 'month' }, + { name: 'Quarter', value: 'quarter' }, + { name: 'Year', value: 'year' } + ]; + this.current.jsonData.timeInterval = this.current.jsonData.timeInterval || this.timeIntervals[1].value; + } + CrateConfigCtrl.templateUrl = 'partials/config.html'; + return CrateConfigCtrl; + })(); + exports_1("CrateConfigCtrl", CrateConfigCtrl); + } + } +}); +//# sourceMappingURL=config_ctrl.js.map \ No newline at end of file diff --git a/deploy/crate-datasource/dist/config_ctrl.js.map b/deploy/crate-datasource/dist/config_ctrl.js.map new file mode 100755 index 0000000..f40350d --- /dev/null +++ b/deploy/crate-datasource/dist/config_ctrl.js.map @@ -0,0 +1 @@ +{"version":3,"file":"config_ctrl.js","sourceRoot":"","sources":["config_ctrl.ts"],"names":["CrateConfigCtrl","CrateConfigCtrl.constructor"],"mappings":"AAAA,8CAA8C;;;;;;YAK9C;gBAiBEA,yBAAYA,MAAMA;oBAblBC,kBAAaA,GAAUA;wBACrBA,EAACA,IAAIA,EAAEA,MAAMA,EAAKA,KAAKA,EAAEA,MAAMA,EAACA;wBAChCA,EAACA,IAAIA,EAAEA,gBAAgBA,EAAKA,KAAKA,EAAEA,SAASA,EAACA;wBAC7CA,EAACA,IAAIA,EAAEA,QAAQA,EAAGA,KAAKA,EAAEA,QAAQA,EAACA;wBAClCA,EAACA,IAAIA,EAAEA,QAAQA,EAAGA,KAAKA,EAAEA,QAAQA,EAACA;wBAClCA,EAACA,IAAIA,EAAEA,MAAMA,EAAKA,KAAKA,EAAEA,MAAMA,EAACA;wBAChCA,EAACA,IAAIA,EAAEA,KAAKA,EAAMA,KAAKA,EAAEA,KAAKA,EAACA;wBAC/BA,EAACA,IAAIA,EAAEA,MAAMA,EAAKA,KAAKA,EAAEA,MAAMA,EAACA;wBAChCA,EAACA,IAAIA,EAAEA,OAAOA,EAAIA,KAAKA,EAAEA,OAAOA,EAACA;wBACjCA,EAACA,IAAIA,EAAEA,SAASA,EAAEA,KAAKA,EAAEA,SAASA,EAACA;wBACnCA,EAACA,IAAIA,EAAEA,MAAMA,EAAKA,KAAKA,EAAEA,MAAMA,EAACA;qBACjCA,CAACA;oBAGAA,IAAIA,CAACA,OAAOA,CAACA,QAAQA,CAACA,YAAYA,GAAGA,IAAIA,CAACA,OAAOA,CAACA,QAAQA,CAACA,YAAYA,IAAIA,IAAIA,CAACA,aAAaA,CAACA,CAACA,CAACA,CAACA,KAAKA,CAACA;gBACzGA,CAACA;gBAlBMD,2BAAWA,GAAGA,sBAAsBA,CAACA;gBAmB9CA,sBAACA;YAADA,CAACA,AApBD,IAoBC;YApBD,6CAoBC,CAAA"} \ No newline at end of file diff --git a/deploy/crate-datasource/dist/config_ctrl.ts b/deploy/crate-datasource/dist/config_ctrl.ts new file mode 100755 index 0000000..21b5221 --- /dev/null +++ b/deploy/crate-datasource/dist/config_ctrl.ts @@ -0,0 +1,26 @@ +/// + +import angular from 'angular'; +import _ from 'lodash'; + +export class CrateConfigCtrl { + static templateUrl = 'partials/config.html'; + current: any; + + timeIntervals: any[] = [ + {name: 'Auto', value: 'auto'}, + {name: 'Auto (Grafana)', value: 'auto_gf'}, + {name: 'Second', value: 'second'}, + {name: 'Minute', value: 'minute'}, + {name: 'Hour', value: 'hour'}, + {name: 'Day', value: 'day'}, + {name: 'Week', value: 'week'}, + {name: 'Month', value: 'month'}, + {name: 'Quarter', value: 'quarter'}, + {name: 'Year', value: 'year'} + ]; + + constructor($scope) { + this.current.jsonData.timeInterval = this.current.jsonData.timeInterval || this.timeIntervals[1].value; + } +} diff --git a/deploy/crate-datasource/dist/datasource.d.ts b/deploy/crate-datasource/dist/datasource.d.ts new file mode 100755 index 0000000..47b08fa --- /dev/null +++ b/deploy/crate-datasource/dist/datasource.d.ts @@ -0,0 +1,47 @@ +/// +import { CrateQueryBuilder } from './query_builder'; +export declare class CrateDatasource { + private $q; + private backendSrv; + private templateSrv; + private timeSrv; + type: string; + url: string; + name: string; + basicAuth: string; + withCredentials: boolean; + schema: string; + table: string; + defaultTimeColumn: string; + defaultGroupInterval: string; + checkQuerySource: boolean; + queryBuilder: CrateQueryBuilder; + CRATE_ROWS_LIMIT: number; + constructor(instanceSettings: any, $q: any, backendSrv: any, templateSrv: any, timeSrv: any); + query(options: any): any; + /** + * Required. + * Checks datasource and returns Crate cluster name and version or + * error details. + */ + testDatasource(): any; + metricFindQuery(query: string): any; + annotationQuery(options: any): any; + transformAnnotationResponse(options: any, data: any): any[]; + getTimeFilter(timeFrom: any, timeTo: any): string; + getTagKeys(options: any): any; + getTagValues(options: any): any; + setScopedVars(scopedVars: any): any; + /** + * Sends SQL query to Crate and returns result. + * @param {string} query SQL query string + * @param {any[]} args Optional query arguments + * @return + */ + _sql_query(query: string, args?: any[]): any; + checkSQLSource(query: any): void; + _request(method: string, url: string, data?: any): any; + _get(url?: string): any; + _post(url: string, data?: any): any; +} +export declare function convertToCrateInterval(grafanaInterval: any): any; diff --git a/deploy/crate-datasource/dist/datasource.js b/deploy/crate-datasource/dist/datasource.js new file mode 100755 index 0000000..332e1bd --- /dev/null +++ b/deploy/crate-datasource/dist/datasource.js @@ -0,0 +1,389 @@ +/// +System.register(['lodash', 'app/core/utils/datemath', './query_builder', './response_handler'], function(exports_1) { + var lodash_1, dateMath, query_builder_1, response_handler_1; + var CrateDatasource; + // Special value formatter for Crate. + function formatCrateValue(value) { + if (typeof value === 'string') { + return wrapWithQuotes(value); + } + else { + return value.map(function (v) { return wrapWithQuotes(v); }).join(', '); + } + } + function wrapWithQuotes(value) { + if (!isNaN(value) || + value.indexOf("'") != -1 || + value.indexOf('"') != -1) { + return value; + } + else { + return "'" + value + "'"; + } + } + function convertToCrateInterval(grafanaInterval) { + var crateIntervals = [ + { shorthand: 's', value: 'second' }, + { shorthand: 'm', value: 'minute' }, + { shorthand: 'h', value: 'hour' }, + { shorthand: 'd', value: 'day' }, + { shorthand: 'w', value: 'week' }, + { shorthand: 'M', value: 'month' }, + { shorthand: 'y', value: 'year' } + ]; + var intervalRegex = /([\d]*)([smhdwMy])/; + var parsedInterval = intervalRegex.exec(grafanaInterval); + var value = Number(parsedInterval[1]); + var unit = parsedInterval[2]; + var crateInterval = lodash_1["default"].find(crateIntervals, { 'shorthand': unit }); + return crateInterval ? crateInterval.value : undefined; + } + exports_1("convertToCrateInterval", convertToCrateInterval); + function crateToMsInterval(crateInterval) { + var intervals_s = { + 'year': 60 * 60 * 24 * 30 * 12, + 'quarter': 60 * 60 * 24 * 30 * 3, + 'month': 60 * 60 * 24 * 30, + 'week': 60 * 60 * 24 * 7, + 'day': 60 * 60 * 24, + 'hour': 60 * 60, + 'minute': 60, + 'second': 1 + }; + if (intervals_s[crateInterval]) { + return intervals_s[crateInterval] * 1000; // Return ms + } + else { + return undefined; + } + } + function getMinCrateInterval(ms) { + var seconds = ms / 1000; + if (seconds > 60 * 60 * 24 * 30 * 3) + return 'year'; + else if (seconds > 60 * 60 * 24 * 30) + return 'quarter'; + else if (seconds > 60 * 60 * 24 * 7) + return 'month'; + else if (seconds > 60 * 60 * 24) + return 'week'; + else if (seconds > 60 * 60) + return 'day'; + else if (seconds > 60) + return 'hour'; + else if (seconds > 1) + return 'second'; + else + return 'second'; + } + return { + setters:[ + function (lodash_1_1) { + lodash_1 = lodash_1_1; + }, + function (dateMath_1) { + dateMath = dateMath_1; + }, + function (query_builder_1_1) { + query_builder_1 = query_builder_1_1; + }, + function (response_handler_1_1) { + response_handler_1 = response_handler_1_1; + }], + execute: function() { + CrateDatasource = (function () { + function CrateDatasource(instanceSettings, $q, backendSrv, templateSrv, timeSrv) { + this.$q = $q; + this.backendSrv = backendSrv; + this.templateSrv = templateSrv; + this.timeSrv = timeSrv; + this.type = instanceSettings.type; + this.url = instanceSettings.url; + this.name = instanceSettings.name; + this.basicAuth = instanceSettings.basicAuth; + this.withCredentials = instanceSettings.withCredentials; + this.schema = instanceSettings.jsonData.schema; + this.table = instanceSettings.jsonData.table; + this.defaultTimeColumn = instanceSettings.jsonData.timeColumn; + this.defaultGroupInterval = instanceSettings.jsonData.timeInterval; + this.checkQuerySource = instanceSettings.jsonData.checkQuerySource; + this.$q = $q; + this.backendSrv = backendSrv; + this.templateSrv = templateSrv; + this.timeSrv = timeSrv; + this.queryBuilder = new query_builder_1.CrateQueryBuilder(this.schema, this.table, this.defaultTimeColumn, this.defaultGroupInterval, this.templateSrv); + this.CRATE_ROWS_LIMIT = 10000; + } + // Called once per panel (graph) + CrateDatasource.prototype.query = function (options) { + var _this = this; + var timeFrom = Math.ceil(dateMath.parse(options.range.from)); + var timeTo = Math.ceil(dateMath.parse(options.range.to)); + var timeFilter = this.getTimeFilter(timeFrom, timeTo); + var scopedVars = this.setScopedVars(options.scopedVars); + var queries = lodash_1["default"].map(options.targets, function (target) { + if (target.hide || (target.rawQuery && !target.query)) { + return []; + } + var query; + var rawAggQuery; + var queryTarget, rawAggTarget; + var getQuery; + var getRawAggQuery; + var getRawAggInterval; + var adhocFilters = _this.templateSrv.getAdhocFilters(_this.name); + if (target.rawQuery) { + query = target.query; + } + else { + var minInterval = Math.ceil((timeTo - timeFrom) / _this.CRATE_ROWS_LIMIT); + var maxLimit = timeTo - timeFrom; + var interval; + if (target.timeInterval === 'auto') { + interval = getMinCrateInterval(options.intervalMs); + } + else if (target.timeInterval === 'auto_gf') { + // Use intervalMs for panel, provided by Grafana + interval = options.intervalMs; + } + else { + interval = target.timeInterval; + } + // Split target into two queries (with aggs and raw data) + query = _this.queryBuilder.buildAggQuery(target, interval, adhocFilters); + queryTarget = lodash_1["default"].cloneDeep(target); + queryTarget.metricAggs = query_builder_1.getNotRawAggs(queryTarget.metricAggs); + rawAggQuery = _this.queryBuilder.buildRawAggQuery(target, 0, adhocFilters, maxLimit); + rawAggQuery = _this.templateSrv.replace(rawAggQuery, scopedVars, formatCrateValue); + rawAggTarget = lodash_1["default"].cloneDeep(target); + rawAggTarget.metricAggs = query_builder_1.getRawAggs(rawAggTarget.metricAggs); + } + query = _this.templateSrv.replace(query, scopedVars, formatCrateValue); + var queries = [ + { query: query, target: queryTarget }, + { query: rawAggQuery, target: rawAggTarget } + ]; + queries = lodash_1["default"].filter(queries, function (q) { + return q.query; + }); + return lodash_1["default"].map(queries, function (q) { + return _this._sql_query(q.query, [timeFrom, timeTo]) + .then(function (result) { + if (q.target) { + return response_handler_1["default"](q.target, result); + } + else { + return response_handler_1["default"](target, result); + } + }); + }); + }); + return this.$q.all(lodash_1["default"].flattenDepth(queries, 2)).then(function (result) { + return { + data: lodash_1["default"].flatten(result) + }; + }); + }; + /** + * Required. + * Checks datasource and returns Crate cluster name and version or + * error details. + */ + CrateDatasource.prototype.testDatasource = function () { + return this._get() + .then(function (response) { + if (response.$$status === 200) { + return { + status: "success", + message: "Cluster: " + response.cluster_name + + ", version: " + response.version.number, + title: "Success" + }; + } + }) + .catch(function (error) { + var message = error.statusText ? error.statusText + ': ' : ''; + if (error.data && error.data.error) { + message += error.data.error; + } + else if (error.data) { + message += error.data; + } + else { + message = "Can't connect to Crate instance"; + } + return { + status: "error", + message: message, + title: "Error" + }; + }); + }; + CrateDatasource.prototype.metricFindQuery = function (query) { + if (!query) { + return this.$q.when([]); + } + query = this.templateSrv.replace(query, null, formatCrateValue); + return this._sql_query(query).then(function (result) { + return lodash_1["default"].map(lodash_1["default"].flatten(result.rows), function (row) { + return { + text: row.toString(), + value: row + }; + }); + }); + }; + CrateDatasource.prototype.annotationQuery = function (options) { + var _this = this; + if (!options.annotation.query) { + return this.$q.reject({ + message: 'Query missing in annotation definition' + }); + } + var timeFrom = Math.ceil(dateMath.parse(options.range.from)); + var timeTo = Math.ceil(dateMath.parse(options.range.to)); + var timeFilter = this.getTimeFilter(timeFrom, timeTo); + var query = options.annotation.query.replace('$timeFilter', timeFilter); + query = this.templateSrv.replace(query, null, 'regex'); + var data = { + "stmt": query, + "args": [] + }; + return this._post('_sql', data).then(function (data) { + if (!data || !data.rows || !data.rows[0]) { + throw { message: 'No results' }; + } + return _this.transformAnnotationResponse(options, data); + }); + }; + CrateDatasource.prototype.transformAnnotationResponse = function (options, data) { + var list = []; + var titleCol = null; + var timeCol = null; + var tagsCol = []; + var textCol = null; + lodash_1["default"].each(data.cols, function (column, index) { + if (column === 'time') { + timeCol = index; + return; + } + if (column === 'sequence_number') { + return; + } + if (!titleCol) { + titleCol = index; + } + if (column === options.annotation.titleColumn) { + titleCol = index; + return; + } + if (lodash_1["default"].includes((options.annotation.tagsColumn || '').replace(' ', '').split(','), column)) { + tagsCol.push(index); + return; + } + if (column === options.annotation.textColumn) { + textCol = index; + return; + } + }); + lodash_1["default"].each(data.rows, function (value) { + var data = { + annotation: options.annotation, + time: +new Date(value[timeCol]), + title: value[titleCol], + // Remove empty values, then split in different tags for comma separated values + tags: lodash_1["default"].flatten(tagsCol + .filter(function (t) { + return value[t]; + }) + .map(function (t) { + return value[t].split(','); + })), + text: value[textCol] + }; + list.push(data); + }); + return list; + }; + CrateDatasource.prototype.getTimeFilter = function (timeFrom, timeTo) { + return this.defaultTimeColumn + " >= '" + timeFrom + "' and " + this.defaultTimeColumn + " <= '" + timeTo + "'"; + }; + CrateDatasource.prototype.getTagKeys = function (options) { + var query = this.queryBuilder.getColumnsQuery(); + return this.metricFindQuery(query); + }; + CrateDatasource.prototype.getTagValues = function (options) { + var range = this.timeSrv.timeRange(); + var query = this.queryBuilder.getValuesQuery(options.key, this.CRATE_ROWS_LIMIT, range); + return this.metricFindQuery(query); + }; + CrateDatasource.prototype.setScopedVars = function (scopedVars) { + scopedVars.crate_schema = { text: this.schema, value: "\"" + this.schema + "\"" }; + scopedVars.crate_table = { text: this.table, value: "\"" + this.table + "\"" }; + var crate_source = "\"" + this.schema + "\".\"" + this.table + "\""; + scopedVars.crate_source = { text: crate_source, value: crate_source }; + return scopedVars; + }; + /** + * Sends SQL query to Crate and returns result. + * @param {string} query SQL query string + * @param {any[]} args Optional query arguments + * @return + */ + CrateDatasource.prototype._sql_query = function (query, args) { + if (args === void 0) { args = []; } + var data = { + "stmt": query, + "args": args + }; + if (this.checkQuerySource) { + // Checks schema and table and throw error if it different from configured in data source + this.checkSQLSource(query); + } + return this._post('_sql', data); + }; + CrateDatasource.prototype.checkSQLSource = function (query) { + var source_pattern = /.*[Ff][Rr][Oo][Mm]\s"?([^\.\s\"]*)"?\.?"?([^\.\s\"]*)"?/; + var match = query.match(source_pattern); + var schema = match[1]; + var table = match[2]; + if (schema !== this.schema || table !== this.table) { + throw { message: "Schema and table should be " + this.schema + "." + this.table }; + } + }; + CrateDatasource.prototype._request = function (method, url, data) { + var options = { + url: this.url + "/" + url, + method: method, + data: data, + headers: { + "Content-Type": "application/json" + } + }; + if (this.basicAuth || this.withCredentials) { + options["withCredentials"] = true; + } + if (this.basicAuth) { + options.headers["Authorization"] = this.basicAuth; + } + return this.backendSrv.datasourceRequest(options) + .then(function (response) { + response.data.$$status = response.status; + response.data.$$config = response.config; + return response.data; + }); + }; + CrateDatasource.prototype._get = function (url) { + if (url === void 0) { url = ""; } + return this._request('GET', url); + }; + CrateDatasource.prototype._post = function (url, data) { + return this._request('POST', url, data); + }; + return CrateDatasource; + })(); + exports_1("CrateDatasource", CrateDatasource); + } + } +}); +//# sourceMappingURL=datasource.js.map \ No newline at end of file diff --git a/deploy/crate-datasource/dist/datasource.js.map b/deploy/crate-datasource/dist/datasource.js.map new file mode 100755 index 0000000..fe572ea --- /dev/null +++ b/deploy/crate-datasource/dist/datasource.js.map @@ -0,0 +1 @@ +{"version":3,"file":"datasource.js","sourceRoot":"","sources":["datasource.ts"],"names":["formatCrateValue","wrapWithQuotes","convertToCrateInterval","crateToMsInterval","getMinCrateInterval","CrateDatasource","CrateDatasource.constructor","CrateDatasource.query","CrateDatasource.testDatasource","CrateDatasource.metricFindQuery","CrateDatasource.annotationQuery","CrateDatasource.transformAnnotationResponse","CrateDatasource.getTimeFilter","CrateDatasource.getTagKeys","CrateDatasource.getTagValues","CrateDatasource.setScopedVars","CrateDatasource._sql_query","CrateDatasource.checkSQLSource","CrateDatasource._request","CrateDatasource._get","CrateDatasource._post"],"mappings":"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AMA,CAACA,CAACA,CAACA,KAAKA,CAACA;wBACjBA,CAACA,CAACA,CAACA;wBAEHA,MAAMA,CAACA,mBAACA,CAACA,GAAGA,CAACA,OAAOA,EAAEA,UAAAA,CAACA;4BACrBA,MAAMA,CAACA,KAAIA,CAACA,UAAUA,CAACA,CAACA,CAACA,KAAKA,EAAEA,CAACA,QAAQA,EAAEA,MAAMA,CAACA,CAACA;iCAChDA,IAAIA,CAACA,UAAAA,MAAMA;gCACVA,EAAEA,CAACA,CAACA,CAACA,CAACA,MAAMA,CAACA,CAACA,CAACA;oCACbA,MAAMA,CAACA,6BAAcA,CAACA,CAACA,CAACA,MAAMA,EAAEA,MAAMA,CAACA,CAACA;gCAC1CA,CAACA;gCAACA,IAAIA,CAACA,CAACA;oCACNA,MAAMA,CAACA,6BAAcA,CAACA,MAAMA,EAAEA,MAAMA,CAACA,CAACA;gCACxCA,CAACA;4BACHA,CAACA,CAACA,CAACA;wBACPA,CAACA,CAACA,CAAAA;oBACJA,CAACA,CAACA,CAACA;oBACHA,MAAMA,CAACA,IAAIA,CAACA,EAAEA,CAACA,GAAGA,CAACA,mBAACA,CAACA,YAAYA,CAACA,OAAOA,EAAEA,CAACA,CAACA,CAACA,CAACA,IAAIA,CAACA,UAAAA,MAAMA;wBACxDA,MAAMA,CAACA;4BACLA,IAAIA,EAAEA,mBAACA,CAACA,OAAOA,CAACA,MAAMA,CAACA;yBACxBA,CAACA;oBACJA,CAACA,CAACA,CAACA;gBACLA,CAACA;gBAEDF;;;;mBAIGA;gBACHA,wCAAcA,GAAdA;oBACEG,MAAMA,CAACA,IAAIA,CAACA,IAAIA,EAAEA;yBACjBA,IAAIA,CAACA,UAAAA,QAAQA;wBACZA,EAAEA,CAACA,CAACA,QAAQA,CAACA,QAAQA,KAAKA,GAAGA,CAACA,CAACA,CAACA;4BAC9BA,MAAMA,CAACA;gCACLA,MAAMA,EAAEA,SAASA;gCACjBA,OAAOA,EAAEA,WAAWA,GAAGA,QAAQA,CAACA,YAAYA;oCAC1CA,aAAaA,GAAGA,QAAQA,CAACA,OAAOA,CAACA,MAAMA;gCACzCA,KAAKA,EAAEA,SAASA;6BACjBA,CAACA;wBACJA,CAACA;oBACHA,CAACA,CAACA;yBACDA,KAAKA,CAACA,UAAAA,KAAKA;wBACVA,IAAIA,OAAOA,GAAGA,KAAKA,CAACA,UAAUA,GAAGA,KAAKA,CAACA,UAAUA,GAAGA,IAAIA,GAAGA,EAAEA,CAACA;wBAC9DA,EAAEA,CAACA,CAACA,KAAKA,CAACA,IAAIA,IAAIA,KAAKA,CAACA,IAAIA,CAACA,KAAKA,CAACA,CAACA,CAACA;4BACnCA,OAAOA,IAAIA,KAAKA,CAACA,IAAIA,CAACA,KAAKA,CAACA;wBAC9BA,CAACA;wBAACA,IAAIA,CAACA,EAAEA,CAACA,CAACA,KAAKA,CAACA,IAAIA,CAACA,CAACA,CAACA;4BACtBA,OAAOA,IAAIA,KAAKA,CAACA,IAAIA,CAACA;wBACxBA,CAACA;wBAACA,IAAIA,CAACA,CAACA;4BACNA,OAAOA,GAAGA,iCAAiCA,CAACA;wBAC9CA,CAACA;wBACDA,MAAMA,CAACA;4BACLA,MAAMA,EAAEA,OAAOA;4BACfA,OAAOA,EAAEA,OAAOA;4BAChBA,KAAKA,EAAEA,OAAOA;yBACfA,CAACA;oBACJA,CAACA,CAACA,CAACA;gBACLA,CAACA;gBAEDH,yCAAeA,GAAfA,UAAgBA,KAAaA;oBAC3BI,EAAEA,CAACA,CAACA,CAACA,KAAKA,CAACA,CAACA,CAACA;wBACXA,MAAMA,CAACA,IAAIA,CAACA,EAAEA,CAACA,IAAIA,CAACA,EAAEA,CAACA,CAACA;oBAC1BA,CAACA;oBAEDA,KAAKA,GAAGA,IAAIA,CAACA,WAAWA,CAACA,OAAOA,CAACA,KAAKA,EAAEA,IAAIA,EAAEA,gBAAgBA,CAACA,CAACA;oBAChEA,MAAMA,CAACA,IAAIA,CAACA,UAAUA,CAACA,KAAKA,CAACA,CAACA,IAAIA,CAACA,UAAAA,MAAMA;wBACvCA,MAAMA,CAACA,mBAACA,CAACA,GAAGA,CAACA,mBAACA,CAACA,OAAOA,CAACA,MAAMA,CAACA,IAAIA,CAACA,EAAEA,UAAAA,GAAGA;4BACtCA,MAAMA,CAACA;gCACLA,IAAIA,EAAEA,GAAGA,CAACA,QAAQA,EAAEA;gCACpBA,KAAKA,EAAEA,GAAGA;6BACXA,CAACA;wBACJA,CAACA,CAACA,CAACA;oBACLA,CAACA,CAACA,CAACA;gBACLA,CAACA;gBAEDJ,yCAAeA,GAAfA,UAAgBA,OAAOA;oBAAvBK,iBAuBCA;oBAtBCA,EAAEA,CAACA,CAACA,CAACA,OAAOA,CAACA,UAAUA,CAACA,KAAKA,CAACA,CAACA,CAACA;wBAC9BA,MAAMA,CAACA,IAAIA,CAACA,EAAEA,CAACA,MAAMA,CAACA;4BACpBA,OAAOA,EAAEA,wCAAwCA;yBAClDA,CAACA,CAACA;oBACLA,CAACA;oBACDA,IAAIA,QAAQA,GAAGA,IAAIA,CAACA,IAAIA,CAACA,QAAQA,CAACA,KAAKA,CAACA,OAAOA,CAACA,KAAKA,CAACA,IAAIA,CAACA,CAACA,CAACA;oBAC7DA,IAAIA,MAAMA,GAAGA,IAAIA,CAACA,IAAIA,CAACA,QAAQA,CAACA,KAAKA,CAACA,OAAOA,CAACA,KAAKA,CAACA,EAAEA,CAACA,CAACA,CAACA;oBACzDA,IAAIA,UAAUA,GAAGA,IAAIA,CAACA,aAAaA,CAACA,QAAQA,EAAEA,MAAMA,CAACA,CAACA;oBACtDA,IAAIA,KAAKA,GAAGA,OAAOA,CAACA,UAAUA,CAACA,KAAKA,CAACA,OAAOA,CAACA,aAAaA,EAAEA,UAAUA,CAACA,CAACA;oBACxEA,KAAKA,GAAGA,IAAIA,CAACA,WAAWA,CAACA,OAAOA,CAACA,KAAKA,EAAEA,IAAIA,EAAEA,OAAOA,CAACA,CAACA;oBAEvDA,IAAIA,IAAIA,GAAGA;wBACTA,MAAMA,EAAEA,KAAKA;wBACbA,MAAMA,EAAEA,EAAEA;qBACXA,CAACA;oBAEFA,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA,MAAMA,EAAEA,IAAIA,CAACA,CAACA,IAAIA,CAACA,UAAAA,IAAIA;wBACvCA,EAAEA,CAACA,CAACA,CAACA,IAAIA,IAAIA,CAACA,IAAIA,CAACA,IAAIA,IAAIA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA;4BACzCA,MAAMA,EAAEA,OAAOA,EAAEA,YAAYA,EAAEA,CAACA;wBAClCA,CAACA;wBACDA,MAAMA,CAACA,KAAIA,CAACA,2BAA2BA,CAACA,OAAOA,EAAEA,IAAIA,CAACA,CAACA;oBACzDA,CAACA,CAACA,CAACA;gBACLA,CAACA;gBAEDL,qDAA2BA,GAA3BA,UAA4BA,OAAOA,EAAEA,IAAIA;oBACvCM,IAAIA,IAAIA,GAAGA,EAAEA,CAACA;oBACdA,IAAIA,QAAQA,GAAGA,IAAIA,CAACA;oBACpBA,IAAIA,OAAOA,GAAGA,IAAIA,CAACA;oBACnBA,IAAIA,OAAOA,GAAGA,EAAEA,CAACA;oBACjBA,IAAIA,OAAOA,GAAGA,IAAIA,CAACA;oBAEnBA,mBAACA,CAACA,IAAIA,CAACA,IAAIA,CAACA,IAAIA,EAAEA,UAACA,MAAMA,EAAEA,KAAKA;wBAC9BA,EAAEA,CAACA,CAACA,MAAMA,KAAKA,MAAMA,CAACA,CAACA,CAACA;4BACtBA,OAAOA,GAAGA,KAAKA,CAACA;4BAChBA,MAAMA,CAACA;wBACTA,CAACA;wBACDA,EAAEA,CAACA,CAACA,MAAMA,KAAKA,iBAAiBA,CAACA,CAACA,CAACA;4BACjCA,MAAMA,CAACA;wBACTA,CAACA;wBACDA,EAAEA,CAACA,CAACA,CAACA,QAAQA,CAACA,CAACA,CAACA;4BACdA,QAAQA,GAAGA,KAAKA,CAACA;wBACnBA,CAACA;wBACDA,EAAEA,CAACA,CAACA,MAAMA,KAAKA,OAAOA,CAACA,UAAUA,CAACA,WAAWA,CAACA,CAACA,CAACA;4BAC9CA,QAAQA,GAAGA,KAAKA,CAACA;4BACjBA,MAAMA,CAACA;wBACTA,CAACA;wBACDA,EAAEA,CAACA,CAACA,mBAACA,CAACA,QAAQA,CAACA,CAACA,OAAOA,CAACA,UAAUA,CAACA,UAAUA,IAAIA,EAAEA,CAACA,CAACA,OAAOA,CAACA,GAAGA,EAAEA,EAAEA,CAACA,CAACA,KAAKA,CAACA,GAAGA,CAACA,EAAEA,MAAMA,CAACA,CAACA,CAACA,CAACA;4BAC1FA,OAAOA,CAACA,IAAIA,CAACA,KAAKA,CAACA,CAACA;4BACpBA,MAAMA,CAACA;wBACTA,CAACA;wBACDA,EAAEA,CAACA,CAACA,MAAMA,KAAKA,OAAOA,CAACA,UAAUA,CAACA,UAAUA,CAACA,CAACA,CAACA;4BAC7CA,OAAOA,GAAGA,KAAKA,CAACA;4BAChBA,MAAMA,CAACA;wBACTA,CAACA;oBACHA,CAACA,CAACA,CAACA;oBAIHA,mBAACA,CAACA,IAAIA,CAACA,IAAIA,CAACA,IAAIA,EAAEA,UAAAA,KAAKA;wBACrBA,IAAIA,IAAIA,GAAGA;4BACTA,UAAUA,EAAEA,OAAOA,CAACA,UAAUA;4BAC9BA,IAAIA,EAAEA,CAACA,IAAIA,IAAIA,CAACA,KAAKA,CAACA,OAAOA,CAACA,CAACA;4BAC/BA,KAAKA,EAAEA,KAAKA,CAACA,QAAQA,CAACA;4BACtBA,+EAA+EA;4BAC/EA,IAAIA,EAAEA,mBAACA,CAACA,OAAOA,CACbA,OAAOA;iCACJA,MAAMA,CAACA,UAASA,CAACA;gCAChB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;4BAClB,CAAC,CAACA;iCACDA,GAAGA,CAACA,UAASA,CAACA;gCACb,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;4BAC7B,CAAC,CAACA,CACLA;4BACDA,IAAIA,EAAEA,KAAKA,CAACA,OAAOA,CAACA;yBACrBA,CAACA;wBAEFA,IAAIA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;oBAClBA,CAACA,CAACA,CAACA;oBAEHA,MAAMA,CAACA,IAAIA,CAACA;gBAEdA,CAACA;gBAEDN,uCAAaA,GAAbA,UAAcA,QAAQA,EAAEA,MAAMA;oBAC5BO,MAAMA,CAACA,IAAIA,CAACA,iBAAiBA,GAAGA,OAAOA,GAAGA,QAAQA,GAAGA,QAAQA,GAAGA,IAAIA,CAACA,iBAAiBA,GAAGA,OAAOA,GAAGA,MAAMA,GAAGA,GAAGA,CAACA;gBAClHA,CAACA;gBAEDP,oCAAUA,GAAVA,UAAWA,OAAOA;oBAChBQ,IAAIA,KAAKA,GAAGA,IAAIA,CAACA,YAAYA,CAACA,eAAeA,EAAEA,CAACA;oBAChDA,MAAMA,CAACA,IAAIA,CAACA,eAAeA,CAACA,KAAKA,CAACA,CAACA;gBACrCA,CAACA;gBAEDR,sCAAYA,GAAZA,UAAaA,OAAOA;oBAClBS,IAAIA,KAAKA,GAAGA,IAAIA,CAACA,OAAOA,CAACA,SAASA,EAAEA,CAACA;oBACrCA,IAAIA,KAAKA,GAAGA,IAAIA,CAACA,YAAYA,CAACA,cAAcA,CAACA,OAAOA,CAACA,GAAGA,EAAEA,IAAIA,CAACA,gBAAgBA,EAAEA,KAAKA,CAACA,CAACA;oBACxFA,MAAMA,CAACA,IAAIA,CAACA,eAAeA,CAACA,KAAKA,CAACA,CAACA;gBACrCA,CAACA;gBAEDT,uCAAaA,GAAbA,UAAcA,UAAUA;oBACtBU,UAAUA,CAACA,YAAYA,GAAGA,EAACA,IAAIA,EAAEA,IAAIA,CAACA,MAAMA,EAAEA,KAAKA,EAAEA,OAAIA,IAAIA,CAACA,MAAMA,OAAGA,EAACA,CAACA;oBACzEA,UAAUA,CAACA,WAAWA,GAAGA,EAACA,IAAIA,EAAEA,IAAIA,CAACA,KAAKA,EAAEA,KAAKA,EAAEA,OAAIA,IAAIA,CAACA,KAAKA,OAAGA,EAACA,CAACA;oBAEtEA,IAAIA,YAAYA,GAAGA,OAAIA,IAAIA,CAACA,MAAMA,aAAMA,IAAIA,CAACA,KAAKA,OAAGA,CAACA;oBACtDA,UAAUA,CAACA,YAAYA,GAAIA,EAACA,IAAIA,EAAEA,YAAYA,EAAEA,KAAKA,EAAEA,YAAYA,EAACA,CAACA;oBAErEA,MAAMA,CAACA,UAAUA,CAACA;gBACpBA,CAACA;gBAEDV;;;;;mBAKGA;gBACHA,oCAAUA,GAAVA,UAAWA,KAAaA,EAAEA,IAAgBA;oBAAhBW,oBAAgBA,GAAhBA,SAAgBA;oBACxCA,IAAIA,IAAIA,GAAGA;wBACTA,MAAMA,EAAEA,KAAKA;wBACbA,MAAMA,EAAEA,IAAIA;qBACbA,CAACA;oBAEFA,EAAEA,CAACA,CAACA,IAAIA,CAACA,gBAAgBA,CAACA,CAACA,CAACA;wBAC1BA,yFAAyFA;wBACzFA,IAAIA,CAACA,cAAcA,CAACA,KAAKA,CAACA,CAACA;oBAC7BA,CAACA;oBAEDA,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA,MAAMA,EAAEA,IAAIA,CAACA,CAACA;gBAClCA,CAACA;gBAEDX,wCAAcA,GAAdA,UAAeA,KAAKA;oBAClBY,IAAIA,cAAcA,GAAGA,yDAAyDA,CAACA;oBAC/EA,IAAIA,KAAKA,GAAGA,KAAKA,CAACA,KAAKA,CAACA,cAAcA,CAACA,CAACA;oBACxCA,IAAIA,MAAMA,GAAGA,KAAKA,CAACA,CAACA,CAACA,CAACA;oBACtBA,IAAIA,KAAKA,GAAGA,KAAKA,CAACA,CAACA,CAACA,CAACA;oBACrBA,EAAEA,CAACA,CAACA,MAAMA,KAAKA,IAAIA,CAACA,MAAMA,IAAIA,KAAKA,KAAKA,IAAIA,CAACA,KAAKA,CAACA,CAACA,CAACA;wBACnDA,MAAMA,EAAEA,OAAOA,EAAEA,gCAA8BA,IAAIA,CAACA,MAAMA,SAAIA,IAAIA,CAACA,KAAOA,EAAEA,CAACA;oBAC/EA,CAACA;gBACHA,CAACA;gBAEDZ,kCAAQA,GAARA,UAASA,MAAcA,EAAEA,GAAWA,EAAEA,IAAUA;oBAC9Ca,IAAIA,OAAOA,GAAGA;wBACZA,GAAGA,EAAEA,IAAIA,CAACA,GAAGA,GAAGA,GAAGA,GAAGA,GAAGA;wBACzBA,MAAMA,EAAEA,MAAMA;wBACdA,IAAIA,EAAEA,IAAIA;wBACVA,OAAOA,EAAEA;4BACPA,cAAcA,EAAEA,kBAAkBA;yBACnCA;qBACFA,CAACA;oBAEFA,EAAEA,CAACA,CAACA,IAAIA,CAACA,SAASA,IAAIA,IAAIA,CAACA,eAAeA,CAACA,CAACA,CAACA;wBAC3CA,OAAOA,CAACA,iBAAiBA,CAACA,GAAGA,IAAIA,CAACA;oBACpCA,CAACA;oBACDA,EAAEA,CAACA,CAACA,IAAIA,CAACA,SAASA,CAACA,CAACA,CAACA;wBACnBA,OAAOA,CAACA,OAAOA,CAACA,eAAeA,CAACA,GAAGA,IAAIA,CAACA,SAASA,CAACA;oBACpDA,CAACA;oBAEDA,MAAMA,CAACA,IAAIA,CAACA,UAAUA,CAACA,iBAAiBA,CAACA,OAAOA,CAACA;yBAChDA,IAAIA,CAACA,UAAAA,QAAQA;wBACZA,QAAQA,CAACA,IAAIA,CAACA,QAAQA,GAAGA,QAAQA,CAACA,MAAMA,CAACA;wBACzCA,QAAQA,CAACA,IAAIA,CAACA,QAAQA,GAAGA,QAAQA,CAACA,MAAMA,CAACA;wBACzCA,MAAMA,CAACA,QAAQA,CAACA,IAAIA,CAACA;oBACvBA,CAACA,CAACA,CAACA;gBACLA,CAACA;gBAEDb,8BAAIA,GAAJA,UAAKA,GAAQA;oBAARc,mBAAQA,GAARA,QAAQA;oBACXA,MAAMA,CAACA,IAAIA,CAACA,QAAQA,CAACA,KAAKA,EAAEA,GAAGA,CAACA,CAACA;gBACnCA,CAACA;gBAEDd,+BAAKA,GAALA,UAAMA,GAAWA,EAAEA,IAAUA;oBAC3Be,MAAMA,CAACA,IAAIA,CAACA,QAAQA,CAACA,MAAMA,EAAEA,GAAGA,EAAEA,IAAIA,CAACA,CAACA;gBAC1CA,CAACA;gBACHf,sBAACA;YAADA,CAACA,AApVD,IAoVC;YApVD,6CAoVC,CAAA"} \ No newline at end of file diff --git a/deploy/crate-datasource/dist/datasource.ts b/deploy/crate-datasource/dist/datasource.ts new file mode 100755 index 0000000..ef777e4 --- /dev/null +++ b/deploy/crate-datasource/dist/datasource.ts @@ -0,0 +1,425 @@ +/// + +import _ from 'lodash'; +import * as dateMath from 'app/core/utils/datemath'; +import moment from 'moment'; +import {CrateQueryBuilder, getEnabledAggs, getRawAggs, getNotRawAggs} from './query_builder'; +import handleResponse from './response_handler'; + +export class CrateDatasource { + type: string; + url: string; + name: string; + basicAuth: string; + withCredentials: boolean; + schema: string; + table: string; + defaultTimeColumn: string; + defaultGroupInterval: string; + checkQuerySource: boolean; + queryBuilder: CrateQueryBuilder; + CRATE_ROWS_LIMIT: number; + + + constructor(instanceSettings, + private $q, + private backendSrv, + private templateSrv, + private timeSrv) { + + this.type = instanceSettings.type; + this.url = instanceSettings.url; + this.name = instanceSettings.name; + this.basicAuth = instanceSettings.basicAuth; + this.withCredentials = instanceSettings.withCredentials; + this.schema = instanceSettings.jsonData.schema; + this.table = instanceSettings.jsonData.table; + this.defaultTimeColumn = instanceSettings.jsonData.timeColumn; + this.defaultGroupInterval = instanceSettings.jsonData.timeInterval; + this.checkQuerySource = instanceSettings.jsonData.checkQuerySource; + + this.$q = $q; + this.backendSrv = backendSrv; + this.templateSrv = templateSrv; + this.timeSrv = timeSrv; + + this.queryBuilder = new CrateQueryBuilder(this.schema, + this.table, + this.defaultTimeColumn, + this.defaultGroupInterval, + this.templateSrv); + + this.CRATE_ROWS_LIMIT = 10000; + } + + // Called once per panel (graph) + query(options) { + let timeFrom = Math.ceil(dateMath.parse(options.range.from)); + let timeTo = Math.ceil(dateMath.parse(options.range.to)); + let timeFilter = this.getTimeFilter(timeFrom, timeTo); + let scopedVars = this.setScopedVars(options.scopedVars); + + let queries = _.map(options.targets, target => { + if (target.hide || (target.rawQuery && !target.query)) { return []; } + + let query: string; + let rawAggQuery: string; + let queryTarget, rawAggTarget; + let getQuery: any; + let getRawAggQuery: any; + let getRawAggInterval: any; + let adhocFilters = this.templateSrv.getAdhocFilters(this.name); + + if (target.rawQuery) { + query = target.query; + } else { + let minInterval = Math.ceil((timeTo - timeFrom) / this.CRATE_ROWS_LIMIT); + let maxLimit = timeTo - timeFrom; + let interval; + + if (target.timeInterval === 'auto') { + interval = getMinCrateInterval(options.intervalMs); + } else if (target.timeInterval === 'auto_gf') { + // Use intervalMs for panel, provided by Grafana + interval = options.intervalMs; + } else { + interval = target.timeInterval; + } + + // Split target into two queries (with aggs and raw data) + query = this.queryBuilder.buildAggQuery(target, interval, adhocFilters); + queryTarget = _.cloneDeep(target); + queryTarget.metricAggs = getNotRawAggs(queryTarget.metricAggs); + + rawAggQuery = this.queryBuilder.buildRawAggQuery(target, 0, adhocFilters, maxLimit); + rawAggQuery = this.templateSrv.replace(rawAggQuery, scopedVars, formatCrateValue); + rawAggTarget = _.cloneDeep(target); + rawAggTarget.metricAggs = getRawAggs(rawAggTarget.metricAggs); + } + + query = this.templateSrv.replace(query, scopedVars, formatCrateValue); + + let queries = [ + {query: query, target: queryTarget}, + {query: rawAggQuery, target: rawAggTarget} + ]; + queries = _.filter(queries, q => { + return q.query; + }); + + return _.map(queries, q => { + return this._sql_query(q.query, [timeFrom, timeTo]) + .then(result => { + if (q.target) { + return handleResponse(q.target, result); + } else { + return handleResponse(target, result); + } + }); + }) + }); + return this.$q.all(_.flattenDepth(queries, 2)).then(result => { + return { + data: _.flatten(result) + }; + }); + } + + /** + * Required. + * Checks datasource and returns Crate cluster name and version or + * error details. + */ + testDatasource() { + return this._get() + .then(response => { + if (response.$$status === 200) { + return { + status: "success", + message: "Cluster: " + response.cluster_name + + ", version: " + response.version.number, + title: "Success" + }; + } + }) + .catch(error => { + let message = error.statusText ? error.statusText + ': ' : ''; + if (error.data && error.data.error) { + message += error.data.error; + } else if (error.data) { + message += error.data; + } else { + message = "Can't connect to Crate instance"; + } + return { + status: "error", + message: message, + title: "Error" + }; + }); + } + + metricFindQuery(query: string) { + if (!query) { + return this.$q.when([]); + } + + query = this.templateSrv.replace(query, null, formatCrateValue); + return this._sql_query(query).then(result => { + return _.map(_.flatten(result.rows), row => { + return { + text: row.toString(), + value: row + }; + }); + }); + } + + annotationQuery(options) { + if (!options.annotation.query) { + return this.$q.reject({ + message: 'Query missing in annotation definition', + }); + } + let timeFrom = Math.ceil(dateMath.parse(options.range.from)); + let timeTo = Math.ceil(dateMath.parse(options.range.to)); + var timeFilter = this.getTimeFilter(timeFrom, timeTo); + var query = options.annotation.query.replace('$timeFilter', timeFilter); + query = this.templateSrv.replace(query, null, 'regex'); + + let data = { + "stmt": query, + "args": [] + }; + + return this._post('_sql', data).then(data => { + if (!data || !data.rows || !data.rows[0]) { + throw { message: 'No results' }; + } + return this.transformAnnotationResponse(options, data); + }); + } + + transformAnnotationResponse(options, data){ + var list = []; + var titleCol = null; + var timeCol = null; + var tagsCol = []; + var textCol = null; + + _.each(data.cols, (column, index) => { + if (column === 'time') { + timeCol = index; + return; + } + if (column === 'sequence_number') { + return; + } + if (!titleCol) { + titleCol = index; + } + if (column === options.annotation.titleColumn) { + titleCol = index; + return; + } + if (_.includes((options.annotation.tagsColumn || '').replace(' ', '').split(','), column)) { + tagsCol.push(index); + return; + } + if (column === options.annotation.textColumn) { + textCol = index; + return; + } + }); + + + + _.each(data.rows, value => { + var data = { + annotation: options.annotation, + time: +new Date(value[timeCol]), + title: value[titleCol], + // Remove empty values, then split in different tags for comma separated values + tags: _.flatten( + tagsCol + .filter(function(t) { + return value[t]; + }) + .map(function(t) { + return value[t].split(','); + }) + ), + text: value[textCol], + }; + + list.push(data); + }); + + return list; + + } + + getTimeFilter(timeFrom, timeTo) { + return this.defaultTimeColumn + " >= '" + timeFrom + "' and " + this.defaultTimeColumn + " <= '" + timeTo + "'"; + } + + getTagKeys(options) { + let query = this.queryBuilder.getColumnsQuery(); + return this.metricFindQuery(query); + } + + getTagValues(options) { + let range = this.timeSrv.timeRange(); + let query = this.queryBuilder.getValuesQuery(options.key, this.CRATE_ROWS_LIMIT, range); + return this.metricFindQuery(query); + } + + setScopedVars(scopedVars) { + scopedVars.crate_schema = {text: this.schema, value: `"${this.schema}"`}; + scopedVars.crate_table = {text: this.table, value: `"${this.table}"`}; + + let crate_source = `"${this.schema}"."${this.table}"`; + scopedVars.crate_source = {text: crate_source, value: crate_source}; + + return scopedVars; + } + + /** + * Sends SQL query to Crate and returns result. + * @param {string} query SQL query string + * @param {any[]} args Optional query arguments + * @return + */ + _sql_query(query: string, args: any[] = []) { + let data = { + "stmt": query, + "args": args + }; + + if (this.checkQuerySource) { + // Checks schema and table and throw error if it different from configured in data source + this.checkSQLSource(query); + } + + return this._post('_sql', data); + } + + checkSQLSource(query) { + let source_pattern = /.*[Ff][Rr][Oo][Mm]\s"?([^\.\s\"]*)"?\.?"?([^\.\s\"]*)"?/; + let match = query.match(source_pattern); + let schema = match[1]; + let table = match[2]; + if (schema !== this.schema || table !== this.table) { + throw { message: `Schema and table should be ${this.schema}.${this.table}` }; + } + } + + _request(method: string, url: string, data?: any) { + let options = { + url: this.url + "/" + url, + method: method, + data: data, + headers: { + "Content-Type": "application/json" + } + }; + + if (this.basicAuth || this.withCredentials) { + options["withCredentials"] = true; + } + if (this.basicAuth) { + options.headers["Authorization"] = this.basicAuth; + } + + return this.backendSrv.datasourceRequest(options) + .then(response => { + response.data.$$status = response.status; + response.data.$$config = response.config; + return response.data; + }); + } + + _get(url = "") { + return this._request('GET', url); + } + + _post(url: string, data?: any) { + return this._request('POST', url, data); + } +} + +// Special value formatter for Crate. +function formatCrateValue(value) { + if (typeof value === 'string') { + return wrapWithQuotes(value); + } else { + return value.map(v => wrapWithQuotes(v)).join(', '); + } +} + +function wrapWithQuotes(value) { + if (!isNaN(value) || + value.indexOf("'") != -1 || + value.indexOf('"') != -1) { + return value; + } else { + return "'" + value + "'"; + } +} + +export function convertToCrateInterval(grafanaInterval) { + let crateIntervals = [ + {shorthand: 's', value: 'second'}, + {shorthand: 'm', value: 'minute'}, + {shorthand: 'h', value: 'hour'}, + {shorthand: 'd', value: 'day'}, + {shorthand: 'w', value: 'week'}, + {shorthand: 'M', value: 'month'}, + {shorthand: 'y', value: 'year'} + ]; + let intervalRegex = /([\d]*)([smhdwMy])/; + let parsedInterval = intervalRegex.exec(grafanaInterval); + let value = Number(parsedInterval[1]); + let unit = parsedInterval[2]; + let crateInterval = _.find(crateIntervals, {'shorthand': unit}); + return crateInterval ? crateInterval.value : undefined; +} + +function crateToMsInterval(crateInterval: string) { + let intervals_s = { + 'year': 60 * 60 * 24 * 30 * 12, + 'quarter': 60 * 60 * 24 * 30 * 3, + 'month': 60 * 60 * 24 * 30, + 'week': 60 * 60 * 24 * 7, + 'day': 60 * 60 * 24, + 'hour': 60 * 60, + 'minute': 60, + 'second': 1 + }; + + if (intervals_s[crateInterval]) { + return intervals_s[crateInterval] * 1000; // Return ms + } else { + return undefined; + } +} + +function getMinCrateInterval(ms) { + let seconds = ms / 1000; + if (seconds > 60 * 60 * 24 * 30 * 3) + return 'year'; + else if (seconds > 60 * 60 * 24 * 30) // TODO: check defenition of month interval + return 'quarter'; + else if (seconds > 60 * 60 * 24 * 7) + return 'month'; + else if (seconds > 60 * 60 * 24) + return 'week'; + else if (seconds > 60 * 60) + return 'day'; + else if (seconds > 60) + return 'hour'; + else if (seconds > 1) + return 'second'; + else + return 'second'; +} diff --git a/deploy/crate-datasource/dist/img/crate-datasource-add-src.png b/deploy/crate-datasource/dist/img/crate-datasource-add-src.png new file mode 100755 index 0000000000000000000000000000000000000000..0d2c4e42ad9dfd7410d7223a1a27dc09eaef31a7 GIT binary patch literal 221538 zcmaI7bwE_z+CGd3q97okfOI2DcOxMoFo>WuL#i}G4lNB5L+22Rh)Q=e^f07!=M0@g zH{bZ2^SwXM`=00F4`ycXz3RT#y4H1H_uApF07``TRQOm}ScEFd3a_!Sa9~(iw;Au= z!CbjlP4*NE3%}S(UjCJeygb7zCx>@dww72}%HfGgc-mTeRPbG|^{Au=w>Un#f4z$n zL+ZKKIC=LTYXaqM*_P=0(Izim;5?GWQ>obBu156&_&mLN0eUu~p zP~80h0OD&EBpG68W&b7$3NiR5Y9B%m7`R6Ok_Tg9Nv5`uuwp+y4;p!#I-{TvswO{S z*o-82;HESYp5DI52#qLF(VzOnAst*IJ0r8sa{WR8@Ds7f^3r3)=-chxehrFmPG#2v z+o$ufNl!D4f>+slF$oS%rzC+hl3V4_ zOwtVr5xBZOMY#M|DfTeQ+})HU>2d00f$F!4uTxG8i8Y6O!RQ^jp*jXbabU{g)6s|D z?(`jHZLk*Ry$^Yr)%V=DL=UiXiqp4_qjG{*^8CqNrMO!GAD@-rsF@H1-0BJgN*!t3 zu71?YNg~6?5!fOJP?rqkT1ZRfs(pG zh?Q1#n?XWMXLuL;`JKtOB)KBp1Tign4I|!H3J^C)LE%1}@2#Zyg zFsCWI^uyCMf8iGr*^PsXAGkePJ*7OU>u`*M?VkhXWuBjWQTipr`!MopC#5;W)cgx? zc*>g;Ni~vhq|QXnw8O#c@JQ2AUGcZ{HW5diistd9HYL*~p(RHX#7ZWO?iXYf!m=DR=!uAz>zA*Derl`#*aI%e&6q99<$iykLaK+Jbq_nf!u{??g z#M;MsssOw2Ett!wJ?`nL&B;mw>=|X){Jy?=;`xx`<$cz`vcT8swJ$wn&p721`QlA` z_AG?E61oMuT)G<)S-Up6%Pf)+?|R4)nX!%R5}Zmg!|~4X$gaZVXNeL#<6I(7H4>|1 zh!Zs8=h=YFeyYCDZ{=m@Eqrd)>Utyk)A7w`$fqyXTC?8`H{NaVZMa&?5ULL6m0BSx zu%}e?CF~S5WkH|Kf|jg1UUx)%A{GBsr1XARYh7YJZymA*T>a5!-WQQo?P@&R(C>kK zd5~zBu#~u;xRF?w(DYOwK`KEj!Tp)YQyCrEe99j<`30}V3Y?5A!P0h3ZQeVVmuGpa zGMd3}qO|3;$G_9PY0MY@`K@RrmrYwD+wF~=Zbs40m&}4DovXO>>^pDTR04}jb&zG9 z)FDiP9mXoY3U#C{r){T^>7VN_>Wk?g=?_$fPpNI=Y&T97PBDv9iC>G` zxLUhru93Q=)~VE8xK6vkj}DKRj;hv#HVD_At(PB_AK4sbJ$`i`O8Ayan^ID+or<4O z>pt=0Igx;rv}}}Q5@h}=!79}plL?k-R{AzmHi{w#0zG^- zf?oB{-^=y}%o0qIU-DK9YY54_yB?8iX@xVvzf3L#=Eky)myPUye$>%DY#sO}e)J-^ zlK@FUXFOr9UU^(SXEtknHQPC+Xrc99;6uJSwT;)Ws&p0eJABoA4pXLEhTFmuMkNd?=`L+37N6^ih^u}rNYI664`ed&rulmpcr5dGhIDrP&fWm9Hj$rcXn>pR!BJ6sE-a^dZf4N+?TvXyLe@JTsV7$Y~N1|I|e#}z&1g) z?QvlnVQA%(u2yB0k$~^6n(klTd^sCb=c`ExOX*G-?4XM{;o1S3HL^G$a&pgAb$A*p z)hzWk$|8C!lbw^Y!aLd(JIC66kvL9IMRPz~HGv>zLy;Zdod*NK)yX21yOco68}Syt z&%CA#gM1*3C6hSk*P27T^HIQ7zpSkc!z9T}(iA62OMW5#N@>C@@^m-jYzAc#Lxayv zW=EfhK9}-pJkhg)In8&I#1?<&r+o=bn@fm$!`I9^dSYFKY&w<|tYw}15OyymEoxJu?H%Ppapu-eoV&vOcibSMZoMps7l@io8y}alUw)Ux-(A-L<+r&&|v8 zj`Tf}z9G`l;?)`xkk@`F9@E$)^grTPqaok!gi?F3(q+i*C=qjC)!4(nxia_$S?rr{m>=-B+uo$!)Hd)|R-I zK*%2CFu^NPM0@ScL)s3yKFRY9-S*NdUt(fA;^kMg3csCRPLCGhnJI(0UJD<%A!*Yk2;B>JGcRV(Pn@@f zw+T;dcZFuF>*r@mzawAgIj<(-?GW2bTF5jEKl(L_esZa)aS~^*LR|cQ0knZU(csTg zlbk)hf53TDJ9F@b;wR73Yu?KoV>9O3iOo5$6U()pJfE4S&oaX|mt$EMpZ0&QRd#M} z-0JZs2+RyTndkH!mSLeuqwK#(znmv(5(0Z2XY|z9Gix$m?Y`J$m$AM0eu+NK3(nG4 z3RDC}=0>SUuKK;bHarSG%iXp?jgOP%H!U_j@)Nn7yKFmwmm?|=DvV0)sa4odSQdkD zu%v15K9Uk*9Z6#;q&|j7(*BAp&SKlk0(UBD;4K+OGs%A?!1Cw9qDkFnpeC^k3XIWD zA^2EW@bwI$tWi=19b^(>8vFXeX`gwC5EO#ty_*Szet<$Rjl%^maL|0_0(0I|@I4Z* zXwG9mRry<-YoTi*P5C>xkeyj!EG+ChR@%BQy6S4;<_>n;rWOunmfT=FM+~*aFg~z2 z=Bu5hizx%x&eq;p94y83*AwEH@4qkeFfsh~h>MLBldk$J26+c3O9mlsL2h0qX?z9- z21zH2cjB)V6#rcu^Gk~9gNuu!I1i7zyF0hL0JnqFdmcV9F)2Uiy!sX|J?e2J^iDo?jJ=3_{IJ#`p2z5ivI44xQ3IJCB{s@jUmk^$@71%{rh=Ip5K=G z!*c&}%U@S9ev!tPTOXI6qm1|>RJ;zc}kktm?+G@nhwtSJe13P!?5C7H9CL|k2 z_*9v{@)phuP2Pp<=qD>@=9DjJ2Q?M7X&!Y5_Rni7wii5+HI1Qp@dZ0-V%FkATEAGs zQK1oVwsLdJd8cuXA1G_(D9KF;>o6^Hi!-ut7#p`5?6?~&YB z$9uSP{;wDw-u-VM6M~PzP~+b`=9xDB?vdZ+jGsI}6dQ*<`J=fY?DTKgfx<2m z&vc3sSXGlI@W%6Xij#zFe!A}vQ}RBqtE;nEX!hqfYrp$g+PmgHRYi;Z%&)k1?|-Ut zQ^lV!NiR*tuZdH)@}>B>u+#&GthAa zQQc>6?}X4hK;)}jqoe=HX?@22z8b!a>q723h8Kr#XX)un8)>SJl%2CAtxFnK&y}W# zI=oslz4ukTyh(X_l}I^X{^MAGeSNN@g`BElL<@NxZ%MN@NjL41i=l%(<{NrM#ccCQ zq(VO8P{)~oDRdM5sb8oCW@?XckHI+m?!=ri1oVas z?!88A7tz#DmF#4uO0G+ld&7Z&?K}!g6pT6lXGQ#B$RKRYs8xIymyf+?2HQNMSjHQc z^DX8+jgAGy8_^Gw0YmeYXxEkM=TA)o2COdZIGkN)Y8Y=%vW`nO=@yL<6Oh^~etUv!l%u%3q9DvhL_KBu%?hn0?3&w1KRzDu{Wn5hA|eIbO|*IFP*y|Sj- zh-GMY#il15Oxh{_4l}5uus5NXzn9v=tbvWz-V;>yPAc>2j1;>Jsh(2|j@JMk8EV!G zP{IvmD_2NuBIu=P=d7D+Tj@f zre6MaV*cjZy>_dt2UQBEJK%43{fD{sQOhJF4yfGEsbA5xSjXcqu4R~kPpVto;PP(z zD+PRsWdd&Rq1HdhG6{i9%mD&24leDM_ad%klWj=|NI~gCJ-bR#RIKb--en7egIPD1 ztBrtnQk!}Maby~jnlU&ReGb0EPW#*uq!fRTKDM3s_ebEH0O0hI%o!^FcrzNjRl+&E z%9DH|Y143@euj0ZQt^%pVb^hVttu+f4?1eT)FXf{y9D+^dEym`;;g124|5Tt5LehK zT~pZY-D@g=caijU#znCOQ`Y%~W8qQm2^mh^97%_D``yo`*+|pbJeI=QQFWU|@w9Fe zve8nnB{!wK7IATj&Zm#Bf0m3>1#tJHDpSQ+W8#+DiunQwuCL6mR`kPZF)l;dH z+JQuyqS|jty?N3{9A4gKEk__xQl8rroa2mXY zIY<%NJ3b%U1YR!#Er!0TR2s90-kguax*xxXYT7{l0gu%2*Gda2pNaYmYsDcWVZBL3 zjNSAN;?n{Sey`tg8BX%AN9W)ns*P(ZIYlkqYgdjWx+~!tNoTuhOskFF24c49i<5qH z`=d_XZy;SkgSVFxC8Bz_8+1#}I@mz`A0|pn`JGT*t}neoeL6<2i8M}Kj0MNtOq0PE zp~UgQ%7Pg#Ln`|YH^&Z*X5hS>Xz`bGhu=gH26Ox5^9^su1M!HHG`yF{l1}By2oSQ8 zbK!7(y!(_4U>U0Oe}J!F@z^##lGf;@4kcaH{KG|(L1j+7iMzbgPh`IO0GP_Z7!?HB}Rw;dt zNWyEQt{Q>zp+t#B?z5wS?~G>^+?IJ6ZW{+VnaM!k+RFtznXX|#rlj87`B-)LPW>*o z*H&q$(Z%)F#7e-fulzp9hyc*Oc)h5@4Ld4yKva$!r^nJ`is9z|WA7VV9x)8* zeDQb7TGITH?k0+Yjz>W*UrWpkZtA&Y6D7T0qgZ$N89tq*`?Q>VgiPwfUQD5BZ|Ppz z=|)`YK{DcIuJYBpegnpMI8joLJ2m5lomg)t%z7Y}-=kI7X|0xcGGV^KuE=|J*`P`d z5`?H@i`UQI{Co?+bSb`kj~&Xen&FN)lw_!@(4qw;sTrKs9omSz4~buzYrBCu_m|>4F`j_!HeFEdG~XtE z*wC{@0Xq$zaUPJ8iaz2?7zc+YV(|XPYyKirEkk@XE~I|D%0ODI`sVtg$Hw@8DpeHp zC4;D~zU6xN=6ZmxtzEQ%V8>_IE9;7C?QAv6q4YB?F8f%_-US-sXAAoo?*4soP(!ja z9JtVKRj%Q?AJ6Z53BHKE<)e{Vxd?w`-+1))Y+b`o-+$;N-}vaMM0h9;T}7I-Pn}h; z&BONns_Mo*I++)wE@%78`(4bCu4>qoomZ%FYtY|rK)$a`3gdyw{ENdswyOI~^l~7Q z`>65VYfYKl;LdSvX?jK9!oqy(i96V0^hm(ZgN8Wwv|mxm5~3e>hg2b!F?NM#3Wo zuZNxITpm}$5{bPRZYSZ$krLd4YH3JSF4I~o-}k|ICHV$pw<;WxRmJ^#XhXM2%YY#5 zyi$4$u80-9J8P=?&9bBqKNBN}{Z8AUsMhedVSt4CFZYY>>gk&C#vRwB)BOi5KVwW< z*Xwq@S0%=RfnDu6-;kYAJw?h2jSILuUE9i+i`tXq25Tw`me~we!6-Uk=tqoOHrvC+ zBE=4R1qLlPUts^D_z<8lt0Z%-d2w;MpA570-VIa&zz%bH5K7YfvC1DkOqay}JJr@z z!W|Po3)TW|#{tbliDGz~yuZ*io;XVFj{58qz|M7(%#Z09os)}fRlEmxq3NqVH6*uD zWIU7(Ur%WH6`MQ`BvXYP61}zKO)O>A)Y*q(pilfVNZ3DeH=Qn#mdb7@Kb1ON2z0{C z_^BT`?o9_70ZPIS_1nU=7d!RKgG%(3WU|tfEcP)mtrEq@lke#b*y#k?!#`UMfAbix zZ0a-*Qa)zj2*MeURid-HN8cXEGIE<((u6(Nk^eq|9;(}_da)RqJi^Qv>>e}geb5(> zyveLLV$bQDNXA~#y`K-f>W&N0-MxiJV?qxtYc+JAbxk&OY{A{%Ya^cKZ3iC?DoqQ; zh29*<+?b1B56fJ|FMxiv5lQp{Ad9SLmtI^q(%uppgiPpQn;GH;hb=+}a9|-W`*FY2 ziDA7%%553Jk6!*L%Il_>Q*3(nvAvTcjQtIb(Vuj5F&Ha)`ICJjg^ay(j~TbdUHA5( z=vsClCrHTsCWKc0Q34DephZ{h?AnV9&DG{ygnH-*8R zHMiS!W>ry<&sGuP1A}lnI3a&OpI20jgE1`IWmETNMFeKWp17C7fFDP8<*NS^*={FZ zUsuPu9;}4k>zd_*)0iV3v1rE3$PIO6@nheCFfdsK!1rFoY{@PWORAxaVju~^_S$Q~GvHKiG6Hoxa%v}0(xo?B%K0P}WjTbnQ^!+q(75YU zyl`dgwOyIK0KXN(*^UP>St?cN^@nqVoQNQfOHvMbS-zftZ;QECz>BGI&cPrQSsc)Z zBaHBp+P$*QIX+uJn4i1JjxA>4}VIrefm0&VQr~?FUZbKIPvLn75GUYa!e{A z?F-n*zP^30mR*KGW~wp3C}I0(=>71>yiwn@@-Mkd`o7JevST4exc? zV(z}-U){~;h++>_^s^Wni+59PLlLJX`Z$El9E|fI zFL-Pv1Gqg_yInP{&wuYK^&5|?q=!UzrDf&o_WpoeBfKQjD zV0JfayLx`^dWT5r@KvgmSCte$K0UO5Kd;NtA+~1e$FtMJ+=U9N&YT57ia37)3ho52 z-Nx#Wmip#bziy%&yxWRMcmHAJAx9jwk`*#fyo1!LBpB5)E?@yWfbrlCp zE8IZV+aWAF3!bEX5DUYmsBz_wi-Lm<9tW9Y?G#HbD)cw~JPlp6dEXqV3ac@gVd0T~ zEyql136}NpdkC$NW5UZTzQ#ars`07o3vw3wY-T#x){nj9$Lr(ir70J{n0!fjmhuQ&3nqm9~w;L{f(w7(|0?ghP2bz8Xe=* z?zlpD@EE@BgJdxnjTR0Gh?gOjI*iF!Xk~T=r-}o}7c=xkaf40_81=Gf_(;2=`ThUEL~n|sRKb7zkb zJWnb9X3gok{{}N5?^8$B0EWjc`}Gn@-H4lu1n=EKB&TVB#cfjdxu#uK=H&yJK^LQw zf3(M{hX%rZUi@wJgmc)8xJ_`=g0bHfy5-S+{dAqiB#nUU_smNz2HnuphIR5n$pT{=0XDE#8AVQ1n zkLe5!WnO+n(QABRL9B}!5tGj3m$&i#K7pfd}!%3My*5u z@ML@xFz@yCYQ#pd8@HM(ahm=+0BN#SJI)oGzhlG(|9%t1cN-QzLE9S1KetVgvLP|FXJanak}pKF_R@(*uMU%XM?- zJr0(P7_})7oOU^}*gKcCvpHSRDsIs+U^^LhnajGfx0yx>iPr&Jkg5!Yld-4K$A5}! zF<_hIy`v&``TW-0WQdXs2?1TB0>9n);kug>flA5E<-kqFNx3Nz+r#3fbL(1kCp8xW zm%e}`T)Kb&A(s%fZ1Dx?XBhh5RkHLl?Az5CZDV-+-7V4WfcEjBT-9xhnD-2fN9EMX zh}v;$rmeYUr_0Z67Ew)Gbg<*QUY9LxC}MZcc=(EIR#i(1^)8T6XRcgs$EQNv6lcX( zf+&H$(Y@gQsC$94B+Cy zWX2iNc(8eWv74Ok(4<$?u-~0T9LKI)wg6Ir&a@(!8*~U%1R6|e?|sR{r^}Z&yL&=> zkH_0FN{JH`w-rFZ9rK&BhRBlMyAtIH#-Vh1A-Cm^M_1y@lD9W8XPIoo=DgZpdGeMq zHjqzb)+N3$PsH5AGqTj&&hM-TxTQdInnFf?LXKc#so49@uHkTni2=%h!3sL+E{dc?uXe%RKLKufTxq*-1j++9I}JyfWbL zRV;hlJ8NF4bpo$uw;Su^%5c;DB(KMQc<;M1qqNRj6s}oMv#utY&MtYTAW}S&*v@_ zyJZ@cH9oH2JkGueb?ZbvTMnSs>2k1N^R2y@h`o&(#Ur#rXTd&1sfk(Ib1g2v$Dk~j zeI(?`RpO;wLH$l$K8^bf==fQLa?(PqbY^#}5I(86a>!!P1Az6S1qq$J!cxBX;mDo# z@ppO8SzyBT26O~O|4r{-3&ys&>gOo~P2EvR&7`X>hm+xLO4JL6m%mf5p7pr!-@o3j zL)|VOZBJoyi$Sed&H54?28~x}@O(%=m7}3v0x1>M%Wwg-e9#fV3iuOr7Y$%{fkb-k zqY|^J=H413Kz}je0V(ZeZrgPvtM1=1od@`m@eg%ZG24etP`uJ9ugWmXuWPNkp<9dHV@e6YF%y03<5(NU}9)o;ko&scjB>?=dFuJ)rE28ezj^V z+z-x%xt=X|8`NnyU9BzcpvdVU4O<3n7F*xBbBmIu^NN$6IT$UQ_m8KL?RHL$(7X2% ze2VxxiuF6OK18~DmpsJoEWudWgu&w zCjgm1Q3G!AZ9wJ&SqPQ?PJ9Z&9{7Mern*n?iBYWb>Ug>bLy$4rHDlSoGeC_GVLYFf za2|I;XvBu-Kr|9=w!n~3hrh4xbMw1`W=~aLO)ZxEJ-reW{|qdHO6$aoJ8j`5Lg!i# zOzNwO_!9Iwk{+`mV-q5Hpr@adXny=X-~H{3xu+#_@xc2yh-cn=5izPsoUt7d6w{b= z6f6cuzU87J=CW0yO)-+v6e7AL{?C)BL>S+8ua`7VPc5iWy_t{gA3e2Jh;7v9dLQ;r z6XlhOmKH-CFnx+P0{l;&@+`#Qk0;j~(SJ&v*ji(H=k9A~jqUo$9g{W7sLSDbIFXIN zRW)r-?b4LO`QN)c@$eyKNe8)swoGLWhXOUN5{@*No?5YnPQnY{p8oE8o;>|Hxr%vCADWrI)Q`lEjv5s{G+?Y|&+iwa zl^Br{froeU0}7|-bKMfrX%bVVVb%kt+7LT%-EQG!>?xtuFs>(amYa@PXV-Ab1>5B*A8JKa3wlBtp-bI z2Ts&UxTNk8-22#FJ97KSlrUfbexA8g#@D{*VpEdZ55pv;yD)+fM<|`=_XVoueu>=# zjLNUbUAM+mzoTJwM{UkDRQRT2bHFO#(SM|tOwuV6Kf?(j^H^rc;T}2rx#t@-Zq(Uq z7Itj*4I_LG&m(Fsy~Q;vWj9|mpcwD;szgtY=Gz=miP*(igQ&h*Gm1<ymKv`O^OOc~N;|c(Nz&TvZZ!GT=NWW=QD#Xxj0r`yghz z|NQJywDEYRS9P0mtmfK`?xJ3EJPG|`X07^lBz!(J3x23}QmN$)g-rCy21XAY1q^`u z)L~s5H*`)7jtU?s^nomNYIJ{>X6J+ZTb}9U5HMH&NaoqgF2ikR7*5VCeDjE*n!FmB zRM1%$ku2Gpj2!XZ*g_t0MhuFG`jGI{R*DWc7>X3a1&y7dtHK@W=TZKA`ua;1V>`t( z?_0`CJG^Iegugsnqq8j6S}@x6O!nS!&a$cB@i9M?G+StpDe6vOR zKdjp<{=_7Gj0l-7%%4Ba8YJ#mW758FrCc7ln-|6T`>sV?;7sT<8{BS`NTG zWQ9gYOhXS3d#ABvBd!)&KP!2Ba@+kX#i6VKx%=g9cg^dJ6RsPnBxs0ut?=#I4_`C; z-xZznF-_30hkTxsZ{Pw2qFD348B_9bdA2a}=&kkN_$HvKN+L!2T17qPUlw)r zoQW!OO?h$Bgx30a7tO9{y&@nsf4$xmkmH$z^f5Bpy6J27cGQTZQ(tQ3*<7pTzNXXL zoW516I9c%UbdlKa1AEiumt-Cw_wU0BB+QDZ?`rp236?Q&Q~=ug-< z)Vwv_Uc)!>ZJ^Ya{dD z@x4Ev@Qm|AST+XdUkhcX!w*EGX*v<&7mZxCzt}dB$O5*F>kB7O_oY~eHgs}d4Ys&$w@R0Z#r;B9~C&&`0Dopk)MmQ;@Ui;-jlsGG{9R@F!&^LbAnlZ z{kDsFtj>jBgxV1{`bDtteCf#fnInQAs&Vn3Ns@kPc&?qP$WHJ$rjg}{PP5!Y`Nqh2 zS6UOpBY(Tdc;|}6FX`xaszv2{5v2IGPjDTV2q5BLdNU++ntrF0Fghu7D2-DX4XB-j z-)>4!3>hh4F;<|r;yj|Mbg%PJDLfu{_1TQ~&s^tPF7`x_%TwRLL=jG_$YSTV(ePmD z{ty;C5nopLxSf3X*-!|6dil42z7+I_QF@xl1IcN{IHhSU6lZFFQzwsyJza$Q=43#G z7!`i)nl(y4^cb8OQT;V8*)APS?GbIzscIZuZqyJt+@XGD|!IQ-EuM7 z#9uq}ST**v2Dr-m@{M1q)o&e1)w(Z*F9$R=n4@H1W;-Bt@=y}n1Cv`RI*@2yLh0m; z3{w6H8t0l=>6+xmUIwZ(rnjNO1$$^;3qif}Nks$N{mw~rSBGNiwJ_dCZbiSouEqD% z&JGB4QcJ8-`V?Z*&Drp%(nFFMsWsafr63}`u0du#;0M!q4W`WU_EDR^pXNJeot0bsaq z+6NJiDv#GD^hPeJ5}c90AAQvkWwRewDT+`fx4)n*=OqO`VEWCFYf?9a8y?pe-4wy1p&es9i zkrKBlhB3Ach{;#f#uQeaY2YCS8+q>MWK~G3e_Y|~gfTXp53uRx>1?dKaW{hB>GJ0W zQ`29Ao_LP0mU<|cz8;@-`E{>-Tori!TI^^py?r8=$OC3-*Fy`k+g2J503PnrQt zPw7kIWYm-GiraqrpMX=JJtszP8Lz;jS%q z2*z@Iqmaak$>W(gt+7%*cAghDpa<)PyTzc9A8+BFh&Mf7NtP<(IOA@4G*0;&=hwT& zZ+a*Wma;;Q1S8bnAOm|m482FjJKdL#nK0~0m))Zx?Bz6hE0=u~ybKfki?(P$r=fp%jv6zf!@7%qrqS8)8vFjV&&Og9*CcCl=yu4m`N;eE#ZD zR;bU#J?}tMvk7;$GjfEYZx|7w>{}T8fsf_SXy97=<4sP#fvv7450`N9+`!T+*tgcP ztztk`sr`bPeC8D?MCGefG&whT1BL7enE{vFj|L5WJDwS+TV1bQT@fXl#~_$0z>1c_ zC~9WJULKKC*}22hn=xKE-lkS0{OM(_I!6xpnee-T0(_UGM>gxMwsbZeRv%k4G&#fGyn@$Q^wdNt+3!E|;5wix3@cB|ep&H*myAu< z6>bRcIkKU5&9*dT6)C1jGllx-kl&coUVW3-=kciMY`b{UrwD82-ApXerOyQnzYji|Z&51ztv3WUEbxN?j@4{Su$HP~C_bM`XCaus~n8H(X zzGmv}zHws zU=3@#@M<2z2%e7FR-3T#6?OF3l0`#>AqD4Hc89^R?DY50BLSj;VsYzx)WZal=kZ#) z_g{Pl)`KU3<=u)6m7-B&eK~#v6uv)iVD5^2zbNe^*i4j0F#3cT+|LS(psr>zt?JhfR8?nN`0G{}Da{8fMJ?*opLJv=b) zj5cask5JmZ`JN|#MhQXK8u8f5#;32R_nhR7bXgv3NTp z@_60AT5U8l)Ainfm}i_{!(gupLY`U0H%G&6)^dm5=Xmx!7=?e%FSGt!x>Ll-K$DA0 zsOVTfLvqB`z88t)(pYy=Rs?}t637Cdr^>}tY((9(k{+7V}6p%DJ9UA&#|Ri#t5J|%C(+YK(f zv{!rW!bAq2w$*ftYR!tiXegFCKvOY2{n!5Y1b5D{xpu#D;JVxQtaKQfqXbFPlJN;> zxWc?biW=K&0&kU$zYaG4Q#jjHx}_Q|DoD!qWX{Q4&4&6=u=67KTiTBgvyyK7d`PYu z)&anZ;{#6NQT>-ipkL8Z!gf<1-xnd7{Y`>53$16vajN3;u29DzO49MqwwHo|%px7~ zfCyLg5~;USZ(SW^Ty&)4&f8eaSydmhJo3D%RGA|ea^;6})xCvj^~fNI@BWpU-%um@ z`#i8%w4}cK%|aaVxtBh(ttxa`bpOL+`fPpu8dNfkNRgXgLW?Isv2_WU3qav+H}?=v ztb(%t_4QTaIn}^A^bDT?Lf)%L=Uv6WMU3U0R5pOuLX-Q%t%NsB_8dkfJ>q(?1LtE?4t4v zVe3_5zrLB5mcGlPheQc)3Il(dw?W+at*flJSFC1FH?lmYR*?OYaLclu60S5D9m za#Em0C0|S=Jl&rD_LfUIku4nDxr!O46i{jEJ44S^ zEj+Fwf=*EGPa2oY&;^w!1s zm1SQ2NnE`>l&hTHubb(y)Vr@+e69qKYvG0a)wnu`HZB;cLr3g3`JYkC)H9QGD_h4> zzOf;TbtIQB>CE`SotnGBlACxynTarG`I-1W>YMh$F9o6>nC3-s$A$OnifHmSd629W zY6(=tu2&XBq&S)RM>Om%3UUmrxLtkZ$h1>j$ib>88O3(z+dD4_bf)!Bx#!~G;Y)pQzAvS~G@j@)?hs((FGj zE>3PpYwF%RAx7#tP|$yi`WH7E{?SaP>OeNRE-!6oo~S~Ioe6xqhXxvpzy_{Q|}JH>ptkI-e!Idu;Ju~ zQ=5-W0=?1Im~kv*=0pVAtF`=<3$xoeQs;lSP>q`}uf{UoO_)WFNuwH5?@Q z{^LcO^h)dr!ScPS=>~L%qKI9B=~;^|hSp3;%BMYJe@Fv4FhQzi_GzmBic-6811Q`p zkE*RkfmQJzSD;F=TnC12Fd7%H^r&4FYS5Y|)3SipEwsS#yHBNp68bAK#A+~b{5 z26~W5_Or=-o6@nLKAFUHFQc+L4ZOK`x=RxWToVjO1Sk%~?W5z-LmQO4p_MU#XHiO< z;5G9G%G*-5wi4Wz2uyB3jegr26_<6f9(pIEoSc2CVr1-%&>=S91Pw8#d;#pvF z^`yiQHkBqlRyb3E(KYNun<{wi_afD}#StAx`U$K(pz_-C*r&GE7CnK0RDHb&+F z_oyt)k7QmPyjZfKO-DHy)_Y2y$pNMebt*g?)D69qwDfa!$FY9mJYR}~TQv{~10*g_ z`R8cfQ*)mQ1N5SjKtoKF7>T7OTlOiJq1^yz!}aldgn7oyemm7StHq-LRVjW72ClGi za7A5FlK7ZTLHbc|4&5OuBx#1NhtJwziG>1L0W)e4k9ssrp<`ue)dODCH{jV+2epcU zY(VxxLaszf%u5JdNz9u$WU=l(@9JK7uQ|g|0}dcjL~9t(J5UelSGa~i(7v4I?BxST?0+<(j* zblo7_xxFg;4s4|e-7%qF9EiEP{5)>?VEGfwN8ZZl4LW0%nrL4RoF%wI`*(Hr+LBN*Hpt6*vsal zi_37vT5~nl=CyrnZZ0_-9P*c`iO-_d=9a`dQw2>wd84Dsm*0zAM$AZWitPI*-)L5) zm%yaDYrL1uYByU5mM{E%?mRm5DWAJtbbtsJP?vx;)ezwdzs23SkrN(!!d&#{_9QHT zo6^u)<}n+etFVU@t@210ncG7u8qpTeQiE(K;$Qd?Xj~w8xhZLgH#;#HKsBy7{oHtz zbH%K*9q(*PH{Zr?pD*iRmCTdiNfMVy|YDwQa zW2r+l`lLz=iW=My?KS^o0$p8mEu0H6h$vrpd)hwQLCw{C#XNhcG$_Hgezc#z#3p5{Zq#(YbJfqF7;k$1vbE#DVkE4zY(KMqiG%^v*?3NUm<@b7;&+mMC(kYD1h1Y(4zaz<|rAGclRF8hP zUjAAVnHQjRmO?3SA&*B`rgQ<2+OR%bp^r`=39SBA70dtCrT|ykq?tj=LwGEu?M_s@ z>1}r18@lO+8vPVs;yAvv2X)%D=1$YUWOFQFw8pHvp6KG`IEf|`#7|ixd8eDM&t#~s z_kJ%|cs#U=>Q)VEX(^B)yB`X;9~T_Fod)$wc>f|F3rVS~yQ9Ap6Bw%?xwzoaT`=jF zw7PrkCg!+GHo=+`VwYMBDjiP3s~)|vQ@Yf>s_wr2|M+^(s3xfp4NGMW6OCZz`WEe%H2`ESx5l~v_gqDbufT1ZRK!5;AXrUz#N2a_3i*7&3vKVf~BGvcM|E8`)Wb z%Z+?TG)m(5wuJfi?S9e$OGn$B62v)@ueSfe_wB2md;yReLcA55SkZ4XAKbei41`_* z$c-2D3yC|P^8VOWh4RFVLaZ((me`w@=2O`)J#a>!pV##R(KmUx^>V<#uZPE3l=_+= zVe$nT6>Foz9~t&Z35*SS%fJsqYLPyKvu!gFFDYEVYU1rC*sdv_T+CGu@`m%OG^BjRv;*sW-E4-}E6r z8g4tc`jMq1 zoRE(*-Uy7|>`w5l8R#f8pBY^>dC3sx#BW{wG-5L27kKB2eBhyhA?9hq^3g2^*5cbC zM0#M);+1n7x#td-P=qYGZHss1Oi6QjmHUF|8tu8=rBR;&yr6=Jwt-;Uhy`J&xM2fj z{2FJ9>k{jq@7M5me+2y?i(T7VuM)sr?hEZXP`@96OYhSoNh_hX*VeTdh;_+S+kMF` zkPnw}`l#p8qqmt*bBxi6e~q7>DMx*U2^ZhhjY#AQO8Zot*+j`@vei%5x`ZP<@a-Ks z99gO4yEF-<@#^VKn2QwVUuYr1R#_{bkDrJ94FSq<@P*+z5uYxn8!)#o@+!970^y5k zo~9q&BrB}%0qEIZ(g+Rg#Dsz*2s4PR4eQF26@?}Fj0Z40jAMnJ;`D9H1Q2lhhgL*_ zggic1d^x{8b0N>J2Np2p*c&k3U91d8?qKV8kWC!}@9rx*;`yHsZ&V-la>(?6hO|mI zRre;*gJTbYGW5M>zgFZ3tSR#DpSVm0#3v=xW%AN$5XGHILMx_v)lH^NT)UMcD52(l z=Lr!O+U%Qe9KN_EiSG{DurQjp??2CxRseE;I9-De{#L(OyG|>#48Lvmc=>75jzCV5 zz#bbs%ApBRw=}ZSI*z?oZLO`@n?#;JA2_>XNbp(Jvo<)M$+lc zmZw$(@bS%5;7z8L@5KIt)|6XcvCjZ`c2=DDd$KI`@=XpeO%|^G@jqDr6PG3+r)y>$ z$u`CG!=H>x-Xc7A)9$KX2|&0RnQsThp~Li~cxco+Aj@_)`gxpA@DV5q0|>X`R#Tj? zKZnUtM^qmR(Q&UBMXk2laCavRVReOqvt|Z0jiac^_1Td-+U-Vq9iOCEY=88L2%Uxmd17l$U4 z5_;0kD;VrQc>#@8uy}k=yJ`Q`c#E)fa@ zSUDj+=7Bxs@i|kJSLT-Nhok>O&A*%~r<(lulQ=ncSXvzFnVFpLKbhcVQaf9C4Bpg! zxM7z6cjS$$UPYs`+=|r=UGFIp?07K}@_@p>++pM;3-mJ|H{gxNzbj?(0sKm2WEH3S zSOWzpvH2+_kKOl@#B4fU3FKzAW`)-TWgtM+L)&6~npy3>3ekzHLK#D6qlRH#lWjFY zVy^B8PhnAWDnbWa6ItBek!Y!I^|fQx30D_l7o#yWWaS{SJmVbRBjj>)3@bA9jPOJS}0Z;C|=SVl0bO@463ztu3o(#de_oddMyrID!dwFqcf@iO{NflC@;+8uk z!aJ>*x#4=Y260kyc%(fBxod-@4>p1e|39{8B}hrSYzU~1Qb3j?!g zJ%@b)=1hNQ4iNO@2^PJn{5jhhx>q>?bZPCUm?lqL!kGHZ2kh|gklZf@B{ws7$6orF z{`GIL>cFXTlQM6VlEX)YPsQ8yXce|2XteD3v)p2f&MMUMv_XRexh&i4&Bq>fjZJEZ zZAVOy2dFy-z;+_hl#RnZ3U(#YULApPM9WR=meqTknjHearU#mM#=C#MZ zX>AAUp6g4M4iIMsHv<^6nnU@C8Dm=6+U2GMR;X0L9aZJhvSR0Kf3sb7F!@?)$WPSe zUMp<(u(yB;OtqFL>&c$mwhG(}Ox-Zp&F({0Q9s}5f-S1g^7S31+)L4=o9!l9#)!kt zlvNhUe4&yqLig33N&0-!kQ7C`i~FJN9GY{VPJ254Lf$i1K6$0x5$*!luq>mubr) zh-CEJP${f&!IJOm*fZ+jULA_6iHK6tL;bp|Ke!1HX!tiNop2Z;U0`b^C~h6mr$azh zeCMo%5KD#Lsx-TsqAmmX4tr-X6s&6;<0L9qq3Y)WU_I_w=mu`In8o;ZCHi><@?=Hc z-l5`TkZtV5tzJF%=eyJ*^JPh|yWU|;N!;t580kdS5Rc;vo9dO1_I%q@sn0o?7b4ZI zgF9FD6*((G#>1(M7svSkE_^doVh1wtLhZjNqsKhlPFuFz{f{nj2<}A33rqUi8p{1y z8ngJrlRb&3!{RM;g;Z@DS*4g}(>|!GI` z(qji|QSj*gsKcV2vKmNvT;5UKsd_gCl0rN8gHM|8b`A9!1F;%Qq8eH@nU`T!6?b}^ z$!aT85v_hR0xFUFE3)z_ZuQh!m08g)8Pg`5z&-s_K$XRHk?!vh2MIL21m#AVDMnqY z)7_TY>CMM?O@!n4l&{@}bON7F-Az+N-!F>zuE1U0%U6U{bc-E&`riMzjg0F)^~R>R z>TZ6lWJM`T=(Sd#0ey6fW`q z33dQD@_qZ&>dX}Y#`sdO01(nAK7I1R;Bxr6g17)JYzh6>(uBwEw&pFh8RGs`m%Tl^ z)hwkOrwyc+r!thDp(&q?O}dMrcDVu2!+?|iZpqyn*qjI`BXHS&5p>KGIe~HdhPq7|Z}`Ul@cvD|St@HntRyqHWXWZ&FcEhu6>Ibybo z5b;)5Xd&T?x6m^lmf!Yv$+rNk+$ z4J164zf3$W@&BPki8xi>Q`S4ATrn^h->+F#cvVYE+{5U0eud{2z-LMFR7L<~``ziy zueG`Ib>-tZZ(?j zUALO;GRJy_&BRs(>hrNTIzF%4j6YMK=P@h8W=72pOv2@+g)I1S^mhy=#Nf}w{R zSmz22i$S4jA!f)8=;h%4PlLJe$7a%ymO4(#Nepefpg~pXSz9}TAIsG-j`U~>V91eo zSB)rP%c9pQRlmHF`mHLX)C{oMu;FqnY)u=zVah!#%?(Pu0X|F~N!TJ3k0Y&-UcOQH zeJ~irT{+g{we0XFC^i_5AApY4eG;a3dRt~}2$ykR3Re&l{BIl)?;wAnCd*1(pOQ0@_NlK;xh zTH2` zSCuB~(g|T7*;M*h@|m5GG>TIrqeyV~)*Pmbf;7>ELjmns_4eqwA4KZOuM0izvXLQ6 ztNPb^jRtc-nE<-S-J~0;`_gdY2A!1>xIkbQ3YPmNu6MxT5PZOp{bKn;xnk{NAdfUmpE~Nah5r}B0?^q z_Ia`1rEFXHw~#n!-Y;&_=z6#CxV*R$*X$ULoKF`ttc`5!wPUwxsjWFYar>Pccx$+k z6n$#3re`iV+Na4Bv`nCMMex-{xboERHY~hu?P2Kzo;-+$Id{07PpGwP5)s;ERVg!= zSZ6R#>0YED#Rx?a+dI>=swM9Gs$v5jIao*gpv-Ei$QfbPn0CjEvDt^Qu@cf zoI1l}H)kj{BJhPdC5o|=!p)X^9Kr$_lLM-i$Jt~aXQXT;ha51cz`;IU=C-9Gm5&*< zR?N(H2}SjAyz_1iO0rFRCA$5ySG9d*PKw0EhpHW~Y&JuU;_HSE;FrBWm7OGN#zWVO z_z`!2^i_j*Jbn4z{kA>~ zz`8pv2|HjmQCWYQkT#nl<_yNxHH83^N}wzS(ZC)H$|wCEIl+_s9g(ts9UJ439M(jX z(Sa|E`0eZ{Mkc@0gDneAi3fSiL?9b%3+meR;6~?YQ9sM}l@zP#ja^H0{H<>Y+K0Ay zu(lvX-zaA}^?c6h!Zr0?1B=SDo(t^y@$lpV6x%_$%{E4DXuavORB`g5V%fe(=xS60 zYHG-lC%|?KRPXg`ameEKen9^%`RZN}E9@n99?}<>G0c7L@+30G+^J~cP`EG42@p4@ zD`u7*r?3BC`GCyNlW=BY$;#s&<%F&pPq}sah}auBsQ6U%Ef=6=pSBXoU7;wVG+Nwk zyUw>_T6v~C4(L$szHVB!g?};b*CVRyD;&9Z_mAyI=pn?_GVNp^UAVA3e)NSAw!Ki% zrtN#DvoBRPgJQ;20!h23&&M$O@2^04eu_{WbR^nf3i9LDD~{#>H5s%-N}v^SQh4Q`Kd>fwV|l|yEUFK z#@t9N9%Pdt)S&5|6Et+4@po9^7nj_h_QV*HM9i^&#%T4)ZXysa~%UB1cVd{)LLv?a-=y_ag{@ZFTeu3wx4kMOLrnV4ZV>WfxkTWkXb_$2}9*{+OQisRWW)mT)bxlTo75C+8~>FjT;6a*>M zU121#=J|+@#vwsv?F*D4`WV*%nU7$k13Oyyhp`H_%+eg#M+`U2(ed*}F|0b7b^Yy` z4u_^|;L<9bi~8X_hHuRcxocyR?7{v1`2+})#${>r2{(m39 zhlAs7V@H0sdtX=k&`dm7F6C3iRu#azf8n(vw;X0TZIG@@C&p=U?-MRYd5sMOQC`oL zBoJrULC5}Z$gF-+-2PU%#|p_)SI-U4m>@S&$C($O)P!K3$RnoAl!q-Si}$V+YrwwG z-tS^DzQ%#NQ-!6U7~Z+3-LJAg@>Is#tA2+&@a`yp&7s3g}HdE1dDm= zj$K#o%fVRli@(2@D+gTGZ&H`qwR0z!tPipg5_Al|31~BQSbm;Kj;6HaXoo24_cX1% zSS;#~MD1WdTXwa7K}sikpH}>@*jV=zFK==dmgDsHA0%$=*yCpzU{C*t?~X;*{CYrG zxA!ZNlON&oO{K2}w%E^8-34|zpZuKJ>i3;^%4atJ*IRM9bVfc{A!reb?69f3#?;N?wN3~Xs3~LX4zlzwmI{86Hl1K2>*k8okb3{X`uO`gHqmGpW7W!=H}1uDE#Tf1GMx z)XaYI{!r0!$KhJHE$O$y@_4tB@RmcAe4W+ZgDA|gvSRJPme|3Hh4u0 z8f<5*hZuzo@$1GCU^X?qJ;-ejo?~RZsNU9ad!C=G#Q0iQ$M|X~Fq~i#O>7x!xz$+b z9@n2QYq}Z*V>=*YMRi5sq;>+zCbpOXk__9(lTAHx)i$o92jyd=9HjX6=mZk(9(Twt z#3uY;k|F9pNge?HpOs8&oM!be5S|zPWq!WM$-7E=9o9CjmM2nR z0LIV_zhH7K1W}z`!rc2CK~p`IU-(l-X;m1nRG)1ajy@!e*ja7s5!z3R(vD$-9Tn6iB>uO0dG`I!5*F1c0sVIgt3Eis#7@3wRW6Hlt7zGbP8&1@T6uP79IapK z6KA!_q@wbB#KXUwFigKlx{iibC+KFVwA+c}HQfckMHUix8RE?Pcv}}NiPza^nHD4H zueKFW9OV6p5M~`h?2|{u&S+r@N(55ms=OHQvz5*`odODX?6G){qJDP_>ASOAe^Hs$ zIZk~R)RlWjl;}W5gp_-WprUyhVOL`fjetHUCSg+KXmwyR{-?)@r4&UW&P{; z#y)wL;i~+)>#EL9Zk!7uZ%GNzGTGO0E%)Yw%C$QYK>VnI4gDR-uY#dmZ`|?t&5BQ- zERO0TRsS*q_9H-M`J3aQLQHWr^^FA=&XfD>#1`q=csXUdd4Pc1^N))KF&;Hfpc
ID&L9I++nIB4PiR8;jWH{4(SEQ633cRAfOlRna}aUSLL#%%f&EWI~UBRryFlNXK%IY{%l@KZ9d1z5Jzor z@i&`|IJOuQ-D(FtR-I{~q>5U#QI;xwr|=L5vN>x_*@(K`^&xMwr^bbLkS@|$^hy{RE<*jSyyDO!{qf` z#smJJ4zpyOwuNQ&=d31g4SZ|URH#%(VMCm3f(7RRZ?uu94z-1Q*`K`yu5_c}$2W>Q z{16?6wsMcIW`~S;Y8$2xm6U$LyRR%h?8q2?6|mM>w063J`k@!&b&SZLp{bOz9-5)) zaYd?h&Ru*%IT$QNFO*i)%6}q=gzh!R5{GS>)$u>AL|T*aFb_o&P~_$pR>;V1gP=73 zNzA8YGnfC?FVUa%tA2dJ%JpBJ80GYo3(@r1yhlcf*Rz3+cidBQ#KZ$`mz;qbKiqt# z9rLm@t7{p7uVWXpujjI_8Fe~@G7|Z6Wjeeo;Bbhe)LI~2;HF3W;bE6 z8?VWqn>gc7 zcjg^w0lE7t=pwgIW%g&}G1%;m;A~>rr~f2T=??tNfL7xQ;@STf^?o3l|CCRKs>>gL zrX2j<2l(OXU;E*SE{GJA6)C~{U7k0F#h7SoZrZg)Z&oL60sID<0M|>^94afsg!$t- zB8JR9>(6=^8=s{GwcwG@+!!JXogkLO#Co?h)H(C{9UzcrMd9^hu)(*wHsWq-wBUEg z{@}Tq^4jr)5P`bIFLew>?5V)?{2wPK*jdt?zYQIOktC|~9SJ-)G&hCOGFA)tJL0 zX1`|SI#vLyaD3Y9-Brhwf6jxI&rx5QxFgJaCp@RjCjejFow|R0jo=Lp*0yI;IRkw4 zBbYp2{l8s3Jt$YNLuTG%O_px}j6czPt;d$sf&jQ*=F}HEpo?&wh>GKd z!gAwRi5XrqjuO1aq%9^0G%lMXfysSu8gFgcC(&^adPw+kyGdEy)X+?|2krZZL&%5s zCC_dL*D0=lD!2%`wI&9P|gK}GU z>cc1AX5sbR(=NS3mYYttHqtx8tC-<3?BHo`OwQTP@Bh6A+)lsati4CYl5t|?<>bp45FT!mkr zk9ZL7mYKMBAAc%u=NMi~I2sJhEwuWu6Y8wm^-Wic_^GIDz>#sje9q}SI6+6a6p z8m2CFmDfU5XY)+q71n0F{)0Kl{*&X@j^`n$&UTXPx*=gCzPzVs_n4>SwF(Lb$iIDI z<%yTe-Aq%*S@;uNk)het-Sm(W32fiWUm52%uj;`2-{&H!HoJV;jzYpOYpVxnur z^Et&I((}}3<8UNj4#T*-e>M)7_;Z#_AfCL%N1VC+=YeGrgZt$U&B`ZkN)@_Kdqhe1 zZM$iixvR-X^yI+a@Fanb#wT3M^2`J%Wv~g}mm4zhqM!|ZAvydt%egNU>Eaq7T6+CM zZ}8w*%W#v2j}FFeDfuCe9mRCy$`XlPynq4AwtuMZB%{BHZsVxMuNw+1CCYOskLu=Z zSC>+UXN!q{1KMLSt%B$Yfa!cpu>S+$y67iRg&7)I ze>ehZC22J&KP~`)E5XFIz@n0#(J-L}8Ul=-+X*rc6%ef8)eFG0gBcS}3Fd_e`DYPI&CGO9U&s=4@BrAdUhW=Kpu=12p)`yBwx#>P*Dn2JCsNC z%T_nP=D9^8jUy<{bN73QQ)*EizZiKBJ#5~c+=|3&YxO#c32@I+hJr`_HX*4?o-Ch@ z0!aJVK=*ViR=jWA2j?5}0hIqXA{7Mp3tdoTDb$~{s0yGz)%8NlhMX*nt@}AFxt-4$ zPd90}aNdo658zjExC1iX5d0ZT;k73`4$F{$^5G#E(b{6$Yh&plvrJqRp!=`}vWD`t zCQES4nf~WiK6t~_1En?34ZJnF5Q_qMvwt%aV+>R{hF zG?fc!cx;gH&1A>%Yg_cS^&dul%^IToCM%}OJ(rV>!grdGJG#`H&}IC z)$7fmD9*@gOc%q#cu5^;7~{jQGfFq-G+PWO@C)?cQfRBm0)!{#HGdhXOT%I2}T>g zQqukZRHc7LQAr{GZa&+9$%1>~X38jLcT(!?caP?enovejROy9@y0d-lwosy~x}>Jj zOorgphskIoL9Ug&%IH}$l5v9R_=S~&qC*etBQKYy$>IvAf$&??hN}&aSLl?5vduu3 zqDnjXf=X$E5qP7`I?2CK5Q7Af>O z=Ztj^(MuFaXL72Hy=g4@vi9e&MW_VRZ3wMu8cS5|$m4mrdG6G%p@373tJF8O@J^IS zA^R#=@0By_lxT3Zmg$45wXwnsH_MnZU&Bx)(MX*9)nt84w=0KY?`2v|sVukYp|5rh zVZN`{*RNovD(v+X^z;hRajtffY6?mo+W|76M7WB{aOn@ z$RhL(*O%-;>AGAh=tl5!gLAo#ftScTw^)_Cw1mlXtL%}w{_)0Zv`bpt zNIV^V&s#=6g-+j%I+pl6VO(|&wfA_Zr}}bI>K;`Ft}pWtA5IC|Hlj48bgn+iNknTI_cXeOO51*@(_b{Ji6z_&sT5)(>NLEFNooxzfiLb$hKN8LL-C6XT5O~MTvcql=&6MU=zVw{|*@Ac3 zqN%BeH5zX0*7&F-REr{?L^ew8j4?M>ZQ{@nYt%+t&Pc?(K0yP!&%dcxzI&+=24R0I zknN6ZnECT7}GI2Un-E z`hmk(Cse8UuT^7%wG^)Yz1AFxZce_jw;Or=SRu!=zQu3fJM(*Ep#ce|o)_2m5C9lF zx?y5ZOLEf7Qip6fITZ%G+Go%( z4ePcRD6`|oP7y`n##sDu%#7C}_g`&02*Dt5L3ZM48QPrQd? zbmxr4X=;H8=LT$6)Ek| zs)O>7hz$A~0kwP;HND0raYcVfKcPougZCCblff&ojfJ{Xo21kz>~1ryyXCp$w1*a` zvNesf(o7P1xdK|+b*!gVNGqCg3?&022yl8?5TM+ifYeSTF}oT^eLcwZ`LkwmbRZq{h8dp?N@i~+8v;;f{~)$KRp>2pgv z08Ttw1#c+XUVB>6b+ul;f#^Fmw`|$>JuCglz^Hna3E2bZ5zJYZw(A`a6B1I8-tJbj z8*hbhCYgAl*^r&@@0+vdq`6Gyw`mzdogSl&`AGD6Z#^$@VU?l7DkDV#ng)pYuTHR=UtsEk5|qf&o7 zg*FXrOa{+(!D!O%_;*+Z8y63pVMU(qU`vLc6hf2Qu zXN7+{>ZW$^VZ+{&l9^4V`?|dE&*G&s_u_IzhS4c3kZJs7VBuKEug_XZ^}-xTkzMTEZIbf z%{!0Z;cj zkxRP%SnnApD8ytF9+y~e{~=Kz#?(4|h0u5KtYLtWN{}0P&SQsdrASmV+R8RN+`;`* z#JD;FJQS^M2>NR@j}k0Rc~Z#E>ODbJf1>=_Zaw4}A|4~9=#BrQa8Sd4?9JYd7x|nr z>@j?DO}vVnyr)4!e7Pi^9#Qd7AZu2X4cLC^+MFb*IyX}C<(|b<0sAY5pNWN8B znzM%N=r5Bxm-hxBsH=hBwFh%g1(bTTUVIa zY-n;q4E<2rc-1Ube`B|YcPtS65G(Y8scPLMYKu9DLxplFhoW{wZ!90+^(o76s?IUA zvgnT%Vr8b?O2feFc;zdp*+>;(lZj28QTZ*Z@?M)!Wt!hi4Y{)8T>r&K2>4&9<$6glp zpXY_p$uzrIYSVoBl^mv&vV?)#xPDQ6~ zX(h;CXW06%B(!P#bS?UR_H~f?C(LPI!S17(zI@(AIyk224@l!~?b~6&3*UrrQ@+t%WIK;odYYoBTPz;OS-x%hUR9oBGZI&>vAmBFSN>57G} zrv+Gkm&fh&5eDW+yF*4Q$~nlHowXao?W2WD@#x0DGNKB}kfB$z`&Q5_o1HD0y|mI+ z=_JMZ%Jshs^%|S@gjALe3gK#ZVcNen zp;)D~oa|7?oiZYQJ>cr*yICJxVDMsBBuyxXJXFlNW5)SydR}KdWkpb*W95m`8O?HX z)wA)DZfa=SY@JJ0xdB;e)3(CZ0xO8K;(KG&>U!?dddX5awLXbx82u!k{4htnpgPgvP7|cK^?2HG zkI0U=)9lSoafP0NZ_;}BDGSr(z>v7E+Nk24Zx4Y%BbwUs{w`&96kk44!>35QDj&a@ zt^m->yW$3363&)Q-8FO&x!Za7Sq$OArB{3BvL*;E>>kLzRO_F-1MuAfB*?x5Z&euuk>jDT zBBR-v257H1{Jl8)snYLZ)#Xe1@^1Q}=y8!|Zc`M;i2LrVR5NKxOHIM|+G$L*;Ln|? zLNHtnL+*s{aVV`tVD@N^QchSw)(Z(;E*0(_m{Q)fBa~yiH?OnMHbt9DS(TcU=C{%W zHCTD`YnQKr9))rq?R(iu0~<3M;i_T&kA5*6LF;iJXuoT0YFe|+vB73If`eE52#2=z zNpNruQBitp_mSv+FEg)iG|(iU*1XZ}y5tnOUptOIlyMTL3)c&Kvr#G8T0-LVRv5sk z@j5>Q)>ra1*OEC3D#);4*{o29T{PBLZ^hoW3|p}~EsquBH+;9hVyRb!T;kuam0%}` zjwAME2uXrC!QKMMM$?ACUnMqyQMp_uZDqb2w4UV@+tjd2-QR6v#`S(apTmWRcrAOE z&!OmQ#R(2r=GXNF!H!nif?)uEmL-`js$jEjepuf(2``b zOLpLr-k%57%P@d=Ipw+UQBu<6!oYTY$;7(FJ13znr*S12>r%zXJ!*fXdCeapOMN$^ zlLzY!eSG6{Gmz_%L!3Vmzf1cKYllVdrI^Oy>Gy4BtoJoTx+)+$oa4X)0@?oGURjnD zsvC#fUkIy|SutEIb zOY5CjWvf9}V|p)i*wB(&k38b-PfIC;t!J&i6jRWDF^mMGS=RTz6W{Hp=J1-r)Q4eb zGIBBvv)ay*A!eiT(7jgdoc^&IElb21#uglDXMF{27-F|&xI~^nb5<7tVR4{gN>+{#sw#0#FLAr}gsutjgH8`}$;%p#N`f zQEya$L}_H#{+y3j7%^S)y@4(-U0&$g>73Q8NKWbAV+FF-;r$q3txkPN>I<#iF(zZ1 z)$d%tmIt(zL|)EWYB5hxa-}TW^XKkN5i+y6d&!NfC5a{1K!c@)0t7RypQ*Ih`|FLyvoOxP?XxaD4h>I)PN zPrnyckR^d3MIvs3*P8kgE^6mAwe_Ih>7UYcdmB^H3z4WxEM({UB*YhDp%eHXL?=o= z8}_|2N9f&wn45YFQrqXf+hm=lgt9TC*TTDmS3`Z5a&_(V667WZM-QKsCUyvG_}@p{ zVsiNsB7*L+v%dt{kP8Zk?JcK{EY}B{&D@kJ~Bo?n#pg>+M}0^e4Sg|w_%D0tg#jnO71?hEM#?5~umcBCdu1XGn34i_tI z(i7?>$Fo-c3W0`+`OCnm$Q|}u>1G${9o>OpUwRs?0=G}3Wpa}okQdc;NGw-r?K+)L zjT;_Ye2h_6N>DTNlO5%Nx`)GR?n+}5HAAR#Nu~h3rQQ=5KiykJ4lhF&UJ@c1%IkON z_$c-r7qp`(aMrl4{`H`6dJRo_`B0(|FklkPG1d|P zSwc|0@`W!2zY0|+zBQ{YGMwml1Jyn}GW$Dw1Tcgt)dRe4ih1?@w_3N@U?5!*7F-yI zR_%*S)bO3T-1CYs=pO0LsF%w1i&W4fx+_}kiq2t#Kdn(kwX=-u+$r@le-y5_dT_xy zLsxBKbV+EZbS5OCIOJENUVU%FYc;nMXD$Iac#V|IczH*GlJ=bv= zLHid(LSjy9(9dFhD$1Jn#sZaDqX@h+@tSCJmMPGA7ZD*Oq13(RjjW-2P&QDH(|gI|6mZFh9S>=KqoZTb93 zu2sQ70?2Z;>s5ya&y57e9>=K^>zr$>1kK-166#noZMI}&x#zjyM1ljhZopC}gDN;~ zvzHvLrK%uDh8nw2LyQ%}WvAu@K|69V1;1&OfSb8Te|??bmCxnxrT6l5zss*?=*5$_)Xdh#Rgncs89gXn5*`9n_L-5U1bwZ50Z&D4R zg9U4gQ6M06MEAtd5-cqf`8hf8eD!vJuyL~_ap#AnSDD#vW3^b>p$=h7)~T0hMAh0)Qc>c0)TuP@AZ7vQud36EJ|cw5@lHS|YOUQ8cdUMEK@-r4FaTgY23jxYaA= zA6UcXEGo_&ri!UtF$iaO3lr3U$X2~J473ilu|gXN=lBrF$Z2~GH@rpN#D|r=gm-$c z1+!26LXvzxyvl^*BMk)u0tZG_Tvp=G_T=h_H8wQu<&_@#q(+de)9SYfSkSEdRVsTT zY%Bc_ozSp)4&@zn1_}*6riYlJ#@$BW z0Sd%KrNwo2p2X-20>~2X!nWMbLlE&RZO-0#)yJjF+F3A|x|D7PzSbBtGWAEYX8Ym; zV;j2ZHa;|qg?h?=Jv=!IKWbhX2-tMamu60Cm(H9f=oTc7hXUMtNulVj+QQtBJ;-?c< z6Mv+(PzWom#Cw4ldaq`C`RdDW{7$aRoV*z|e*#IADf#3UIkaNH6?!H3^!A#D^u$E# z(?EshwBE9YZOcZ|$5UA3W>@QkLwx%jM7fFH4}|~bqceX-lGa3)IRCV-U7;@=7EIfT zq>Zj}7vN&Jl3+S~Z97Lfhud4YLc8n z5MS&!O!jK7g>BFQb}NJBE#0&RlbB&?Z4C^5$hJPW%2yU4t+9AH%cW7rf9#LwKfsOT z198fhIg_b-u6)zn5$4Fw#DsIJ%E!QY%{>7^;p)W1a6t3;vVYJ@tRZEoSYo5Cdu67X zI&w!E!J1{3a39f(%ut~_#pGrpBv~i5wNNlM99bqsm`Gnar~uOG-VH(`*VynD!8jY< z<$~c840J-|xOys!ghJZJ%%tBO8d&L7EhcVbD&{NRBK-qVHu4&5Vv6WK)oeB}#OtxE zVBdddplTC-fXw)|%`Jm~>ggGSKJGfQ^fLf9zV?MIHIh={BmObZ)AJMGrpc38$1B@o zpWL0CMZ}x5eGW;ao;GuzBEw3n%<43U4&z(01jYXkUGE;wbpOYXSMGA(w^-ffP{S&B zsfH!xFf)~+5-K?lg;F^Vi!GZ<4q3=8XCsw_F~^)wF{fb;G3UcDhec-QFvIVy`@VnQ z@BO)cziZdEw|}Ws>{*a~598_8t@(^rKiFGuDhA2x zEhG!_4LO?Gc(v{v*-znF=IH!6A9MNHqfT$K+eT;b0l&okKbF{1MNAcMPTv1m;XZj7T>HTU0D}Tu~K&JQxgS($RS~=S2Ju)=( zN1FXCJ z9zQB`X2i@lTsBKW=4gH>fPKy{V|)>?R{uqu$ z4sR8`s@sD4ByQHjkc6L2-dUz;Ysn}HIgn<)`u-ISC${vsGQVC|B3rYsC2}i7M4t9x z%^3>9pXVQ?P@JgLV$T#&0?zuhWQ%EP9sx`jwq4Rk0lz%^H`y2DbR&}VLPTBdMKELh zi$`kNc#1y@s|l4&>l%^&QIzvZhwq@=U|QT>)M>%{+AwZfu7&D3!0ogyQ7w!iCMKDE z$xQRf6G~crqx?7?($_t*wf}Bd>+gv-ce{qvQUsG@W-uG|<%X&!!uy`Yy0cI#e@OSr z=-O_~m6hf4^@Bl!F_mYwnyofS>SZc%_j85f&ETDAc#(o8zDUVYY;na(kp}TwPmT$i z53{1}HP@cUdI`qjR`YTsZ0DaeC)bxfne4oGV?YIC!?UWNGxL>uh^!%=muKo4p6pr7sPU( zyvQ^40GiI;8v{bptFPn-0>Q9VsmlY*FMXqdHj^vZnY~J^NY^kq1Lmo>d~$y0Z(A)p zL9Jw)qR|stGNAdrkBvxGOUDOVt%CW%*{Ii#DlNb1Z0V*HwS6#3B6Djli){5!FO7B&AR61mn$`0JrhWL@(<0ZZm551*pF80Y;WcL#7VU=M-0+p2;}s3th|v?r zpzdWGxM6Mly6Sq;Cns8;KbKZB1i#Z)abW{?v_Il1KkRci>6V6I*%L@K=h7#?Mp;Fd zwGHQ$FH#*<2_@(lCksLzs(kUAM?J`?4asNFMg||)GhD62+LCSC>Q~;JVl{XA4R-mC zeDTp9y(I9s*LwRVqoFVu9T{%*Vc1VB{l|BJGW#Kz z_ovy1BPs#XuLW3HswAmoUC5Z+oE)F}Vf{qk&k?IZ=w4th3XBN3zFVB9!KJ*m^%%2F zo-mDWOTb{)hr$(CWR}mD@rjb_wkrkUXKYF~r#&=5#jdue$z)i5OJ99t zGc;zM(T>EeCy%?g%r99DX++!2$*g|OjESab^$tHR8paZ^lUo3J!%Z$PFUNKhIu?^W zX~2%+!ZN;+B3;nq*k3b4or-3_v>bjgq9@w8wl+5W&9TL18b$F3VX4J~QSvm}({WC- z-Btm3vq9?x^uMqfcQ4>Ftk zeJ3*EDZ4pBN(`shQNt}V3wO+BZ=is5hlYer_`d+)>Jb zrhRPQUYl%N)_o9d;E)u7!QR)2}&fjf^hU#*eUY9m@@gGM%M$1j(GKd)a}w|xsM@LOYgOwu7tL7m;>VL@m#Ij;sSmB2D*!e&9euw zKRTn$2qo=rBw@C>wb9EYyQ26Jx$viGC0kxC6x=i#WwT4-`z z%#b~Qq>5WIIk~=x(OA-Cx>jtoc&tv3XEw59Y^*n@J?Sx=n7L8|)zvA9Ph%-U@xi~ns3cMJ0Lu5%=jvD?=VpK%;yS-nu2 zzo{B1QTiROjvZXy-&q}7;Z`^%F9gt=fXP5x&f|YIz0bmn&$K^t)Gu>iv}6f3Kx##pa29j|weDm!n(0kiS*x zyZCA<#v6|{gJq3xaf~+Yu-)^;8FRSJzcND0lM* z`D-$sd4T3kSSC)+W;}fI{UK${Nqdtv`JC>1-x?~1AAd!Gxn+;+rD4`5>yrgkH$}hI z`Z9DifTvC64MrHI-=uvQNT5MBVn(b8i}k6km`cx?tW-H`UjlY@WwY~Kw(S8{{tETD z=DrQA)^07!mZeznzhA5S{>c!Dq8&Yf$G3s*#o9glTOy>NnDj;F*O|YXKOsMM{tD2Gw81;}c=wulX?f zN>;wOe4jXIbJ;u#Vo5gfTg}T3)_9@W+4s3^w-BPBPTZCvkC+f9>a-YCywm_O0_e`4 z5)eh-ep4DsxN0)h}99z6m$;N?XVVgVbvU6QSp;P0N|YA zyIoaimYUyzE!78_?{_8peixz1FqF6nbz2Q0uzEeY@Lx6Sm-;5hVA4uO)&%YELhDLt z>oHFC#jTZVGZ5Rs^|;dKC#bg8u4Qx0i+mC7L$aHDcWHRV;P-MCzPpG-=b*}R%FhWV zn^$7&6W6~lR_jbf=Q~=u4t98RzS5pBP~Lx@6D#Zxmc==&^~$V1UUi~H6~Ux6v$MP{ zlxz#liC~Ji%G}df^_-Q)wMj!whcf4t--n;fbuN}x)MwVV+(7y~Tr1ybubm`H+~d_W z==i~Xtv%Yylm0mp#c|N;+V@(!M*}mQUlP)7&A4dix>AGgXK7pGuMARDA7bUsH47>I zxZaGIIDF2Tc~%k!N3s;7!OCX}aupOh{N-IkB=uCi9?b8DM?~Z93*%~1+a7D}*<0A| zRJmTPleGG5tUunTc;07Lz9OUvhf%Z0$}fhpOUIJgrDhbT0NsKV!_aYF4_rJb5hIOv zg5sI6lcWpjZZYGGQ&YxC2aC*LDVj={{;IMp+`h2gJ)!VBzg=qfMM6V#NOFyp5`$!z%fKiQyRcGq{RA-h@;Y*cd-Vw?y@6XP3 z_#GwQ>14YWJ3-?o^@%oqr#ko0L#ob=#~mtd4>wW<>~0FP^4a2Q%4Pafb~i8%2Jp1L zIC1s3-&<-ak?HJ@ZU5BV|FDmDPgfh8kFJkp>N~&AN&iDl^`R6De9pO8 zHzB3>?eqB(sF~n#6AcwE{P1jS5tqnB{AUpIV7kqEd`()*{>Ow^KyoY!MPED%m+ zOr}3+Ww*VLLDX4V%}jjODjEI^_0mXN2gyU$7W||Pj>j!Cte&qKuJd~Q9wh&B-2U-H zg@7N59L%|Rk@lqE`7K~mjQN*-=_Y!0V!daPa(%Jeo6#eF=BJm`T{F&rWHVZ0u z0t4^%KA*eZ(?IR^U2wL+`Nu3ZS6RyLF(((_>naUIP50Fb2cZ}8CGb-$g8OZ)3`3qC z&Sb0om9LGO<;*X(2Jk!x(-+BR_l#|R%hz+8fFZn6jV0{IKm_J>v|928Rli5+0|xyH zx-nFKB^@McS)}kTK1N(P=;k+3d1ANk7p8-Vcfo>__1*&Llm`-hzG@AwAz$3~!La2O zkzE&{%@Y?kUWPFi5=XK|bALYnD|$c}Zq|w)>$r z?p|Z;*MKyJMO7hUXQ+4ZczES{tsB)utNMU8SE_($tVUiE{jT@Dnn;mc+y=t0i^m4p zrrnv2d+?92;vad1w#V+pow3>Z-MXoks}5Cor`IlFZa&2q^LGGZ99280>+s1`Cv?+( zqaKakH<7~72)jnUPfMm7xA)9nZj6GsAfL&LuYK}V8}1cFIPtkmqu}b) zp0v;}qLlSWCq@ly5clTNWmZ3iRV4o1r-tWisjUDea~%r9ny=U*q{{;UC_3E~d*7Pk z=vH1=NDI>^wNK&XjCeXDvfs?IoLX_3*{eA{aP7V3^UX5+<83x1mKk<7k|^(FAgUxd z%}IF$H*qUH#PB_%l;q5MgdhD&K`HSMHQ??Bfa8~T3rQRP$wqwB!I`0mhh_^ncir3v zae3>_)Kvxxu|2~PCDx6yx_rpS|+GD@94ZD1taCf z9x&<|V+Iyt(Z%>1_}R<8+qx?-A8IT8FgHk$G2CpdEl^a8Ut(G!EZX$btX^NKKwB(@ z2~psGSQ=$YSMVDuT06uc@VZvea1XnHvNdBj03Uuz_HF_R5XP2Vp*W%-d-I zgK~ltLP7BW1(Z`16xnbqrq0B-aN>=rkLn3hVxY}}gUder;voD%5ilnRo~mbxSk^-k zB_Su#4m=!D9;&pF2o+Nhe1o8s>jQa~aun+Pkq~BHG200pgg%6A%Hi{8ZQ5v=KlQ@Chx+kyk|S- zKEJ4KrKr6ANWp5vPFa>QA(gq<$Uy{4GL(vE_I`5fIcv7r%Q8`77ApTKvLVs#jQykw zrullfkQe<$45EmYS}(?d&JnTt7QKxYW352c%T!_IDq+iBQp z;G;3tbnvT?KENc;WEZLh3`H=a38aGfm8*Y55H#}B`n>2kquN;sSCKLxu-nK^>pG>x3K<^l_t|`^&3vvgVM@x@U=Ir{sZO+isbm{zE|Mv^> z?sxYtdtBMp?H_n&_gUSm`kBBou!&Def^+oH$76PKC#oKghl!4mOSaYOih zJZg}XFv7Vf6i4%AmQL#4L=++R=9r^v`^yE?P#%#z5}~6Q1%2*XBOav68#`8!A?%V+ zts*@bdxfwZKc8WYwTxYt8)m*YsbESfdF?i0yN-U+8MI&AcO7V+e;`6)eg%@~wjXlr z`kkV)N0sWk{||k19bs|iJPb;z)yxRd*7%~tx!YaW#lEg|!bG@evCEgNi9W=-yGE<8 zGUkjrIstCif-+tT%&4utNHZFj3TGa&})j%N(6Tard7B z7l++i3ekh09a`1cbK52VKIYx5fI{V&33a}ucVX*Jx7-%Tj#jhaB&qA%#WbalpSIO37?2ja;aX!O5Gq=LNW$*KUKxm2Epr%L9vqGh)`_K9`Bf`73 zdiIu2wUetwDZp_p9Xn2{{;xX)J=t9lx0v;2ZoS{+OaI*_JMM?*jdRg1tYaB$urMdi z3Ol&!_-?9A`bMN&LUC{7B{$xbk4T+oOTIrL!{4hbBt~&(Qq6cBqnqV+_CF<-6Kvo@Ts3hEZQ-3Z1FUu9t)jG@rjwFu(Dv zKf6@cpm>esPTU2=O`Hyl2Q0du5j_hyE#GEaq( z1$VemqvbdTfHImt$F5>tP)XDOW5~z5b4qS?VZQY4qwZ-`Gq>72Oi|_LSY#sFp32rW zCs!U~C7e7J4Z+IB@Q&GlYnzX&W|6peSN-v1#(KfDzGLpUKa-rhoyemFzjS~|Og>^S zBZ7SHto*0Bh?0^j=B3Cbas8xF6D5HrlKD}^;;MtEZaMO>DiD&G$AmXh-DsBIgNX-o z=j*1_mn_+;@r7&?z3KD{11hmM;%cjcc&P8US#^0etycKAeOot zP4LRada#1~GUY-o^>vQwN#v$*1e=?q*8QB@LywlGjaYQPj!`_vd>);}y%}yBHE=gT zzS1XgctbO$jnxCFgq2gGG5u0YS%Bk3V}fM%F@KkQQa!o8Lu?!Hr}C=-N9)WsrHfLIGNYR{ML$69f+clV!jTA{ojGn>1RUY z1v$Bw#_K_#Y%_YYqA5tmhM(+{LTY| z&*xi&^h#A2x#s3&EvEdC`4*GJ**iSbNRJ9#wY(GmoNz!Uu*U9# zjuV*VoZHk)K$WhA$Lo$!iWQYqL!vTkW8>vKm4W}2d56tiDB2Ov|JV^GJh$Agd&Voo z?M-`JNig@9do{Vat;&6 zcpKiYe(07EFmC@REV1DturkqD0;!?xD<0$A(7MU2ejjH&^Hv);=j91J!`&-$}Xk_@uffab$T z*C;F06a!qhaFvxde>oTcS&^$sWtEa5rKsG>D*pX^gcz&Z42IIq-B_nkff=~~{G zJdX@yXKR@8+EjhwtTr@bF)cA!{1ljBp+t2#OGsqSXRp&h7H*9%z|yeBfp}dKr2KRApFD zegOH8e&U}tvYPA*$Q^$>(Le+6(R?WyVLjuBw#d7I;50<<&HH}3K8eDfwZTp!UppWJ zXFTrb?$k;2$=kcs*wTtvHD~*<5-?`2X~w9BJA&v<{RqcFv68(Ca1!yB*7O6TA-=I+ zsxju?UAiOPWA)_R^)%{5x5@W(mT#_Qye=8FlnSPZm#CgV);G2S*&)2)#(2}Qw*EH* zC;E5xHiFR0?amwBSS##8_T*h|G^@u_^4lciPJ4GdD-cn=DOY2e77m%C~mlVUl zlrHrcF|!<5jpXX4p9l1YwLIp(2UN#+r_1fqtwpy?8s7DDr|wCZ4Po%=)NfVU-2PZQ zUn;e}wZ6k)JnRpSZ&!Eu6T$>mn(<4RPfmz8p*s`nO%&7={x&mL+y-QlP}@RP`rLnos zw^jn+MWZl1xTh%A6>CygMroG;NmY+DS_4CKOB=7qkaizHK#Xls-Or`RpWy2>LFi7= zx9WMg3V=B@hP^;}ry2WxYmN8Glb(1{pGAozhH&ls%@HA z2y*TnJ|FrO#CY9M==M2}8u&Z@oJHAP?Ihp)Pq)@0#?b(Oh1P;uM6rMS+@T@$d$zTk zM<^v+6et5DK>M8f>}u6Jhi0zq>p4xL1{$tf=-3XY->gm(eD#2Y3^2T zlR@c;5KOyOrl@dM(COS?=WhbM)!P{Oz=gCJZnk89I|acz6ejQV+DY=eH~hTq>;*%n zN@7PnbXgsD2qsI`I<1GFc%YK(Y`-DpRl#3Ts)+5xQ6s6+g%U~)1)HL-4Z`)13%bz3 z_Iu-BkxPW>%UR@iMTDZ~vY7ZN+Vg0x^K!0i{y`d1CY77M>aP4Es3Al4K}40yWHI zcJvqXJLRoFw}ah>zBw{djHLmwD*9f!v4k?S`K(2zPIr^$lL<%FZSm`Cl-k5gn}zn% zlJ=x3^_*Das=u}MNDqE(;9=Xu$LEt39v4zYZOYED27NMv=cgjMBbmk;%jhwGEQ3_i zE{9z5!YRLtUL6{N)Pagy9CPE+oQ^&sfj84ZN<48S^J|rVY8d(rOi(SJX1NCJT#)Ys zF8*rawnN>pY(_@@55T-|`kett?dAzThp_`-HRpocnVXM7V#ems{TCi2t@c+Ry@`^& z>G0XDv@U8p=g0OoMzHs;c_Pr%t~Y`gP6vAb^cZAE@b*x88lE$S>4IvV!8dF)bY8+% znkXX6sU*~;JPCoR_E@o<_Bt!&xw7*hY)M9C!gb#Y*P1JD&VPH(cZhUta|H6QW5bxB zZ7gbVv|D`}i6RR`m3kj`)?oD0oZ~^-U^YMxa&fk(*>kQ0h{eMRVZX+J$il<&*$O=I zp{ld=#jEm>mtZ|dMPxc>q6tzf#K-9%&(ZdCvg>l$Yd4DohYH7u#xBz@t30XC1FHDn znN9IaUu5_A{%JKM?JiCi$R$-<8hshPHw=6q@{?*w@FOu&DBN6jLq^moiCK7r&9(yo z6IY`l3Clw=b$tcbS?H{M~dA~G7B%7DpK@*JP@KS$yC2+&!Y*=?&eCw<^IXx|& zeurQ3b@1p?%_sX{_-!9*HjC}ecY>sfDlPUU^7YU)&$PQ1N*+BZ=TRf5mNPJX_a74o zGyp`UGU{Itv1_#P&7@*i>KvK7P9!lalR_4gi z_o(RcLaUy}(|a!3wD#1-0W zAMCaT`saRTQ2G5TjQ`t~Jtld%+-YB zC*dEBRX3VPLiGFR(>*$3hNJ6sUuOdN2>+Im9?>7maZoYiYdKpBQ#_~7>7gB(4(!<6 z1_)C2t71Z+ndN;U!o&xrKPaQkK+b(r<|E|ZLy{ls!A3XedE+ZIs`Pvp_qH~q{fc!b z!t0Hkljn41K-&_#RN(E2wraS<>}k%@sW!5Ymfn zJkI?P08mtL;R#pvy(667!b-2%k)daq>YR)$L3!IKsJJE~d&gQp{gAGVvSO0OG<){U zBE@+r6T*KrkR>#4chYcUJ1&*%0^-tJ5oFiD-AMlg`gZ8M)`O~s58-?Lsk%Wus_?$A zYU@Ya_B@=8)CD#+c=j?qgr=l9nBdE<%@HNBACMLdFk^EEcMg6Gfe)%K?^(R@p3i<5(yJxq9{9hl{#BSfH`t9MtqLhZd*yBbU&*xD=&0Xv- z;b5Gi9=Ue$g8X*fWSM8P+W*GuiR!v?3xfLmib`2$y84X)K*Mk7w?p|`IwIaETBD;# zZ*t(~_;Dhyp8W|uu4nC%ByGXnFR8I`A#yiGG&ahR^DRi*XZan^2fZJ*jY26eP_LoZ zc7p^hJHN#jlMD^dDQN_ZWI<4mt|8o;0+9vInT9_cl>{rZ;wqkTpBSw?M0(O^s+MQU`F?+nwQTh#vIK396T4br?79cP;?W6Z>l$V_<)Bis7k~%- zCOg;>gDle}ZU)-4(vIn}vsAfXM@ry3#vd=?J_!~eoa)O?CcQm0-x++0Ad{yy80+Yn zA#YpcAuo=(>R1@X#(P*E(Swsx#c=pL!hsrkY#`5~w(@{_C0%<0mvn|j-vcGNa?~W( z;G}s7Txdcvo-QGMBO$f2rIo-smaSmFk4?zCB@70U9| zj7vJNn&$-oC7g-mlC`_nxP7Lw{Krc=HnwIg7TjL8e?mA@GyOEgc`d>bFS8s%$7Xte znRv$LF#igYck&f~Ck_(ZW}NIJos<&>n~iM|Y=5v{a{0($yqH;+m)(0+hG^UMw5eCT zTD{Gv50&&x*<9BaeecQsJCoPda__pLT@XF6?8RsLI}S`g27;1t);5aY?Ll|=pFA|_ z_lJ=$MM3?IUmXjMHgEO@hsOKFGwPR4CNb^CLF!&Uf8|_LQ+>cZo6MePel-5FP(Gmk zN?r+bKil(CS~1IC0^a9|Ps|ZTu!j7o7{Bb=jfDNVz`|g>>dQ?DGm4yCs>+m}Z)dA` zZ@EuiFa_7-e4zY}mK}b6AD=wJ@l9eI@JwtmQk;X=Z6;Z~doI)KhwlNc{V>DaW^s5O z^h-j~5#Iih8LxM&%qW|>1-t@YD4`@Qv>ccGCa6iYB0earg+{Rwal1TYB14^Y#>q@d zqNaijtKJw|%=|WgK@B6eblZ`c7Z^NsInP3#Ri0eZxu1Qcu6bJZHFwes!{9-Y0%*~6 z6lDBkm%^e$#hAR-(HzuA^_DYA=nlG{+DEn7TkiRqQ1?#pRU>)QD5G_&jI!aU`P-^w zgI{0M`~z>ZJ~y?}vSu!G4)|MdP3AnT^C`#J`OA+070Z!O=2a`!BZUEkcBkCP3Nx+O zc|^qVBU=~!QIQLv&q;y#na`Zg~!O!nb{+b!B9szpq z;qS+K?K5F@lXX8Zn_J!^Z@u`um4HPtur|`I$1@o&kumDHp_gp(+O-G0Z-rwnxUh0h zE$)$inPu52P7z5gc$c;Idj^4rKVn0`=T`SGS5)5GN2Ezt7@Zc`AUiqPaBxSz2%K$b z?^=CmwUghQg3`(I(On>ljW+NVZJv9FG~60WZ%JQNF|ya|ZP*&wYMm|Byvlt37xkgV z^oK%6n`I-Lt1_483P*$G2fF%+uX9(Lv&#FD#nn@P7u3g%2n;q!8mYc2t^f5OKnC%7 zSE>G8r)ySV#Z`vrkc3<~d#l)E+)VAIf2Ha}m#Nl|ha?%f5if~aAHisn;bnJ6xBYoi z(5$XUp2cOyJ*hEsUJsPAg$;1Z=O;YAKJfMLw+MeujQ6>xw)6yGhIf;v#lwx4KUVgT zT2f(Yw@1l{b((PZ7R9#T zXEKy;PMqDxtLxoU)Fq_0YDq-XX*F87HMN?lbP;q9C~W7KrPFC%DrTJtBQVa7zYMR* zuLd7F&k*Om0R~$bniFMaWR7aEq-}n55HTjM4GN{6(i0vukqMsp<+|9f}s{yxk%Oh(6WBs2{iW+#@7`CJWARngoFE zh$(u(W2ImF%UhK!h^Lt^EWJz6+TAeqEe2^Jd-`C~;zLmjnAsc5i}2M91|tN$Q1>25 zH!GPAGOTL^^=Lpd1$n`qVR7}5tq5?W>+}IN#s?b651nzv(69H~8z`Zr48m|?ben1~ zg=cjY+yNXf#ySoRXR{yG1lNvTey+ogDZqr`bUIB(xzlQOs4F@+40KHL?08j_!eDsD%HYtQ}PgPNN z6U7|SGi87Mcs~2Xtij;uDKXFCK-5~z10_3hRcD+)Q+9AJMewU0v65S|sfF8bToMON zE%5pF+lKp>PixL9McCt2K+1X=*L12>1y<#{J=~j$hBF{w6yl`~w8K2pC z!iG^4JKA5kdf}B^CZlW|hZuqUx`<%jbOg{nj>Au$f4p?y%7QM6N`v58R}|v84z-~1 zO?JEhEQY`0E#j^9GF6^?AIzbilGtnsH>aL&_DvF3=ln#eV4NF&qpAPCyL*~E1D~?; z_|m&jSKq95IU@vMP{2QNs)^Bl4WQ3H02xoVJ`?8evuI$(vWu1Od#_fUB)K^ncKEyp zE=^ALqZJC6FMZ3s#;89^G#ZhRsp@qMR2MhrBjq_1%kZyVK8Tnw5CDTekV-5-j=22h z2>>az?H~_bvqdFy!+JVEkrn>IjCTZ7nj82r8A}p|s50aU({&#iM>psD_D$snB%h~z z^1hCrxoh7RnT48ZEe`_#j1);W*_S)eDRTMTx4W5Qub`E)M4tt-!$JtygWaya+m&l5 zW#-TSVgQ3);_bS>i8Sb@S++Fnxe8XqWo_iv(13=E^YqZS8bH^E-D0L`kaYhx*Wd8z z28u;Py^1unfJnxmnbrMro^eK~{6$K1&`w#mKxxZwxz@j^^?;OEb>7-i936RKBC@zo z2j?$G$_wu14}~PmU6-$oZ^#h4``%>!84O>b*!&ftLhjLShgL-yj(eddTTKz>tC?<$ znka3SauV5Emo1=P15$;PyxcGQ&A54FIo}G|8_xJv$APQ?>4Dk!ZwpRCo4ox-5=hKO zPmGPBrhM@{WXsSRW}95sx(N{dPqvVD)wcJhGG#}nfBZEpA7^F@OA9{CCSt;tO6OZd z{j#chubycK!-Y{Zk)mNrXX*9t!(t`r3QN~upT5$^!?knaA<=Hzj;AD^ zev1E({H*xU>39A)&Ly05@KLsXWYmT^#JPIU-vAZ2Ymcgx>*&OkY0%ZnY0}IGGQFes zWmP8VKTvd2Y)PpR!Abp;YN>aMkUW*&`Tx13spo;gFAPrvvaPOejb1-}k&bFDU z)0L98xSI&xbXu6MSN=X6o*C z4glN4XCg3J08Z6?taAE7n__lJkao`r{MwEi>_*gLOO;1%Aj*58Darsx?MCoRRnk4S zA=J+2>a4$9ZydHotwpfWqZt_ZwhtX>=5F@z4;cpEd&aDmRq{n`T~7`o{F+EDf}rP+gi6dIzI^ETnpy?k}n4FmxGKugEZHwfpe<+tJ8tptRxU*%cJz`fFidbE)e&AG?dxNoUan)N ze}T;~aouWA>!{4q>Gspb^$jdJZiGi;;g4f~m;toZeg{!hwwWor;p2I9)1hh6Bx*-8 zeJrZM59~7?ZpCr&dEZF~=~Ce;#1&QVqLkCbeP$DC2l%!DB35`GwE7 z8W%Hf!}ayfY`wvwph{*xW`$sgYsyEGEf;(*;Ad;iLu_YQULDXaIiDz6xy^`S8auSq zEPI8@CfiVUnz6~Kv9FJ{`d$bN=QpPLt#pQ_8z|Yu>p1d|&qQrHhIVaNr!zk}6GM_? z^na_OopKigQ4cV}+U+ zL%{kEoVV+3c;SS1KG)|>aIc_CP3U-n6IHLfx(^y{G}~VtyRXz62QZ6qG@mZ0Vc~>D z8@ML5@}kUVdI81j7)+2#v80%(7~Jb=LZk0TXkx{6L55M{BwyB(tqB zIj2}b0k$sN)srvJdxS~N{Jfn;rvH@QW_+LcAFudPy!}()*5t_JH;Sr;00MRP{x$;T z{0{<^k<)+IZcq)C7?W%@l=7i9J})@I1*o2xUw4JE26J4z)F_oe^#>e~%9bp6g?4G= z?+>%fwmoBV$-+e_&R)hv)r$z|GhN11?NA;L1DEBlQWSj2ul&_H4jQ1Xk1-cr-dl&r zv&EQ!!)IZn4DRC%sx4wP-N=;C_jsdHcbc(ITvJdbt2g!EFIW)L_N*9bwR+2Mc~z

3%owD{JFP<=*)GZ5{v<5L!tqK9Jd9yHp^{asRk?e+|I&STxq)1; zNv2qSsJBDA$zUZ!1g8nreK4WFU_~R`##?Fis0eu5G5_}J#kAX|xu#)2H@Gc?BG87a zBA)^{GScs0lzYL-jO_qS!@VDO-=$sJ4BOjvC}ky5!_LxH9ngkX!Viz*Kq)Uo1mP3x=zxXVaVzB-m#vt%J-p!1w(MCw z#U=6r6e%;XM)RI%Gg$3GI30%dNY1~Vlz*X6H;$VIC#A}cbf7sF$ikI{N85DAwf>@n zdGj(I3sm6P2~xZZQ@6^ZohZM?w#}5hd>>q{eYgti8}XVmUg-9J#j!08v?fOF?6XTj zrNXO@3jZI>j>=)od8^}9NaY+1&KJyCIloJyt-PDo#R3hef}LtVj_UPVt8 z$2fsZ4pc#;sl#KyCUc}_wq*or)U<84r3f^y$KJ`5?F+sVlL9dwHHj85i;9zOx2Cc# zW6S@RXqWH^WS+2W;a(+HBWPkq81@GEPwj!(+n=CV{(5xcDaA}lvm9i$?##V}m|KIB z1KRz={ZlsP2h_uhdOV+%hI_9>cwCJ`_M(Oh06;xBWKZJ1MNR=hKj9RSRNHU_J6Pi; z1W9U91lRxcX!^A-9aSv*UjP>h0Nn1jElCqeC`ze}-(Tv^E6%U*WXmkv$n8D`4pn5o zq!nFE(v4vfF8_Aofe#gcQ_Y^$Y@MaL(2uT@Yq=^5Dm~?cCQ;gC@too^SEx-u$t>B_ zkG3&eKb*U|-FA0We9o#l$}Q3^0P!^58wo!h)E+(^WCA_9_-r4+uby}diGA{HKs0-< z;=;V30L=AfVFZbL1)2B^(X-}%8o|5_(y+OYm@)BbC1TZ;TMPdCRZ)Wi%EVMm-WjTr z*GB`@xxW{{*-N7ep&dZZsfL3%#pG+mS8rQ3Uy(`$-Fsr5H6Q9FATr*j&I#OL$r2jj zOjmy*@QxBwMxnGohQKf$sGVd~zDgr3fZK|N+BbG3R$U7;aIRtO7DuWQ3*bkc$GhQq z*_f&U1#ErlMRV)gI=mHQJqO@mZFbes92#^ubi3F|m{xpLGamqN>X!cM`*Rdj4M2_^ zOYlCDqg+g+Wa;Vr_Vy7!H-~FNZEZ4Q@VN77P~3~>>YX2LBvxcG^3%Ud3H;B0ybm~% z6JE`hB%S%)+cS|pNm27HL$rF}^v#W726+WVT|>;a?Tb!?gOctgIoiKEgP=qW!Zc#B z*ui0Y)zDb(a5R0#{q3)Jw34{C`@DzV+UxMti$POU)XeUOu-Ck@d0P}iOuJ1uu}a56 zcYg|?SUYsYv)D0%?jT|suZTaWx@f%aou_?O#qN>2ZZ^Qd&^H4RAm${pQysdYW};Ag z5)yF1e~k!@JCnCRix)_ zzP*Xlo3nSTe0BAfe_-r$6UOWQ=bhuNQ=&4z;5d()zDxMyXS-jkKF;@^KZMA|Kh!#; zY%tI+CT6Qh5gOm<<7+x@)|~@=TQob(uH88x`93F(nAw3ORxpIbjr^lp$Tk3(3S~Mn zw<4;la)*U;0L&e92N^~}O%+r8G?dn4L3|h)DgEj#K;X4uyxSjc_3L!k=iLHL3pRF1 zj@^#4jJnrGeh~a!$@>-6o<<|o%FGyB+WCb1fPL9N(H>~6(3ES>MJo7dtiFD+J#V)j z{lkkSF92l8Mn0#~X1X`>-km;4XyzJAig#^~xk*r8ZR791?*af&Q-9@av>tXUNvzqQ zmu_hrwGdDMZ{$J-ca&0J&@#rY{opl3FUvOG)l_|6B9_S{O zTYX(!5sIhbEPX=5Y2xPh3FyOjpO}}m_gk~OiAy(As$KommumOAxXlfD(}}kV3T1l6 zDABz_ai;tM)m5eyX4MZSm{Qhv_n!A^4nTSK%L7VYp`9BRTg-2itJQYvN10~4%v=6x zq$>+Q`JD8z$|iEUAx~w>*c;MP4Bbo?tf@hb@)~sA+b+5vojKh!?6<`PKiT`T7|LDl zaVWF-x&$AESp4{9(aUrc-f#3&-k~0PUM{p4w4BtD%8TFqqR9K1^Kh;5tZa55s5;q9 zNOM_>!fVH%emM~8c`kT(i{9BW$*CE4m9=9ax55-pEAvx?t>OEd8jdf26F!}~glXWA z0@h?zU|35GC>w8#y1$DW*vM;eD5!|bHe@3RmqT1Mox2(V%0ZeH+{AnXbEw9 zi~0g@p9~B=hd93NbAcOQd~DOz=HOOok2w~aE8Hz&kmK&NH9S?L)4@`Gnn9?hA2o;5 zhh?3VBjZuI8vjG1SGGLzOO3jf^xA;us+i$`=&z1w`lRQv>nqKV0pVctjxj#t@t=Zr zT8CME0_zN!8C(Ws&3A1dj*1>R*0N7E+;eT*$PJWukUaA|`@vg@Ct+7_-MDpAk>{n7 znF;w`RZ^+Vik#gflTG-ZYtpBQGF_FNhZTNvwhl92jE!vjURNC{oDXi6f3$R~zHxZK z$ZC6_-5d1-qIYuhY1NU?6P6ds1Gxr^I5yY#>^)CuqieemYCvO|ruponzxn3M6!-Dx zu-=32L>q}041J=Ac~dDD#^&;#W(8A;ywm3nnbVx+Uvkx&>wTL1Ih&1{AB>A`DVTm- z`y|3D?eKBNXjkBHs_+>5o;)icZq?(}@aBwwl3(rI_zTs_8{=(l1By;d20t2;JkIM3 zx_>b%G{o+9ZT81?$Iym9Q>e5p_t#m9fw;8%Ca(n&$L4pP>iZTZUmg!6Bs@I&(qb@P z*<|Fu&Jr^At37CG{^791yt6|B1SKTV!IJ}rTxwBJ~a6eHyD7*v!qZnYS$KM ziTU9OOuEJ^vxaf)Nm+yLp5Ocnx%cOGDv6s8&123 z@33^8KwSE$|Mt?~4Fgp2^+Z~`UjGMYAudcNkT%i$i$AvE^WQA zME~iRU+co`P%>FQ8EcdfY^Pypsm;7BtDBW&*IsnQ%KOw&ev#G5v+dM{1OwEV4x0S0 z>QWG>v|Y-x<1ZJY39QxZ*>Bl*X)vucI>0ur;LCfJgqF?CKqdyoPo>rR%Qt`iu<6`{ zu-?kogBUhFU};S_{Lq&sZnU>KDH879=$({NY0gztiO>NAk`YoRmY@9gIa&SC>dXq2~0w z+mmr!9gbg{%zs?+8vj0H-8g0Plox`5~ ziS87ox+i-pKL*RlCgJk4k#1W}M1+sR=2 zf>B8IMnZ|>=FZtdHug}fX@RmRCiA5a)8y(Jb~~=A82)frzIpY&uNpS8=*0@6y3Yjq zV+;K}%gJ`4c{%$L#v$SAZ=ZE5Al**$7?|!E;IR-J3CDMccNE{QsCM0JJ@7f3Z+Tt% zVN)}Jci`%%SAXK-E8cQEw$|^7r-xc8+JRogHBom%tnco(G$c+0?uz+->QD0kJp2CE zTGH}w;pd-i#uPjTuN*uwf!A-$CwU~TdiUC}^t>|<>?ApS!0+h&&sjGxcaSu$L9)_# zSvgLM#r0XW#16#|0Mo*4C->l7Lg$KL*2J4>GVC^xJk}e86G++xPO>XY%jiqXPov>< z2K-$t=nJ463uS#O8h2S6@ig|pP^~e<4Nx0&3!#$t^d*1|?<6u8BxFf5stqwJy(Jvh zix4L}YtM(!P0&9FI~*}^!##kj_?s`gwztV+L%lBP*LT+d^oYv)K=VWW*LB95XA3FV zy!0m}t-D1MHpyVU>ZM+Ml3ULn|9IENz_<9Pz|FCV8?y<~u0j=BhgdJ#9=n~}vqwLN zrpBeSlfKmbnt!8@4<4(2hMg4fn2|fWQINIa(O+2CLzsDleK?!6=uN3BYayrmO zno>FTcE#hI)-7RaV|K8#>3M}s1LFKkbb-r)?02|#W#eafzKJg_dbzu4w)sINsqcC1 z`1pKn!^BO6?{(eF+3^!1vc`OvV|%C4Yx&1Xb_?akKHcGE0sd7co}1Sl-u`q9$Sq&~ z^ zv7;toJ$^^d^K?@-pjE=;CERe_w0z*_2t%>Uyd&J=Pz{@?S=5!>d5W*R{@8!;2e0VX zZ~?byPwR|!H_7xJZ!GNau$9zj4fAZMld&f{+U~s}~sFNS<*U0)AW0!xQeR`iobEZ!-IW?scezv$NU(f@vMD|*}e&;z$t<>RG$h@(+^qlRi4^=aVY$$Eh=f(rp`vSj zWS64O?0fZc@q<*c+uw$j!o_p-_e<*TyJd|EvRuC#kWFkpRjZsV@>#dJxzSYhS9#3A z&-D$VQni-&n1S7&n1f$OEQQ2SBkhrf;KB#L|2gM~(FsJiDJPi3+r=a>aH^`jB2yK+ z;S3d*r{dqKsu2-+K-&i-;_IkhcYHIeY>>Hy6FQR6Msx*nnS8gal51E>g7{KuSy2O; zVNJZxu=N(6q9-_W&?TZN3TR$mW)G zXPW4B|8)0-;*Xcc<8i--MX~ZPmhj}ey9OT%)rWkWeR|Au((Jm3l}_lA!^egCeQf%~ zPTzeBuoG+DVP-?HtXK68?BsaICoQ_cUljEj!y`}T!c#(b4_RttPtIg7nMcJz#!7Ek zt(Cw>Pj&qux>K?9{?}_{qTOr0oGdqOmnC95CZ0G68!ljAt621=MzkbGlwELm-{+53&;lwd}eC#41FX>Jm8Szp! z^Tp*Lvv0N@;X?CZbA~;^!4T7bh&Y3C^#jpl?@@Ez+{@ctjnAQA&ag)yy1r`81t;>Q zOVov}cO_j%Z`_Unx=6S7UiT`Ih49Y_c8+BhnP-OF+A(3J!E^xYhnRbI62X%9*2?F> zG^k2TJch-ZR0O_^h_p7TG7He~c2H{VhvEI1X6ZKx8mVauzMipG(fV?T6_uMeC+lE6 z{UB=#D^qVoa~l7lGkClx5N%U9W48M?^5@3|%ci`$+15MOr<$Hhic&`YA55|*3TNqt zrr!NhFrI&F!SMyJ_*8x~9$HH**|~G{W-4qsVs~}Sl*RNYeI)0)ecIi>BHqE{R-$i$HVC z+-%t6qE)wSYQ9V$#Y|iz?zAAbH9eO5MucpD(~9qiUlJT3ier+o%ASPKWZj@DB) z$DnR1<;p+s={C4BrKG0x7Vfoim-v*<6{ZB40gay3>XNO4M&gda9oR2+K~vV7R5Y;P z{te5~6TLH42c)tp-$smsU%GuazJZ^pD@P^7D82U6@Q+gSSFm*FU_@!ihN?MwrTL}s;A0WHs7Sgrf)~&ECy7S#c9?^FuSkNUY3W@)I zm7%~o?aYTAp=;*tA9q7HOLDnwYc-iAYq)nNY@lW!(kGiZJ@%Dy9Mo$ubRKS#h;=&0 z@X7U`y)VeAQahv2X3t68GrDIBrTdvkC^H3+~ZX9L2=-TAx zH${+%Uvx`)CTXxRa^Y?UXcsx1?{Gx&0yFmoVcrCgIfdZg(;~;dyWj6*%JgpFQ%{2Z z8(bkp2IV&tRI2@XePtT2F{Hd$J<({eST_1D{!uS^;84$Drp4F|KV-}%l&;vjHfF|J zG;nBCg(!l4tTM=cTCHx294~DbY*Bp@gg{kXN!(QNu&A85SrYaGx_iloR(fqi@gQyg z%&D^SJb`_E)VPFijd-=vVMz3I=d-f~nqw=MFMg*m_?boc^Iu6E=I7`b{B&*bktw|P z%tk$Pti@yhS9F}F=LG+=y?53V8|9 zZp?^ExaLlOag5zfS0m?t>g)OBC;ykeD)1V8|`e?#u)dONT=!jZcGc0cGD;?%K&?!s#cuy@$tghR|80Z#%E>| zu6({VbNj{}Dfng#^U8Y2Ti`}f7mdx^eXZt)zVMPYledvAz}>5*T~Q%1+Rl=C&U>F` z6D-p$K78u=8mlxiP%hGRDnV{}o|9Ec{>(!y{l*d6h;?^b=`G#OA6lEl_-Eeg=R(>p ziID!GC_GxEe~2x^eC^TZ9_xqF11F?U^s?ruAI$@ujh>7O-d=-NOqB`Vv{KTR^F_!OK{oPwH;a0 z?CocnpejQ)nDqm=h2lmce?B2e7PdD+&Lye7`-l)u2F2c{P1B+?aLUM2+Kcxe9cdK2 z>O5OyZ~K=x+ccWY#CSlxv8EE57aPQK415fwy_)sEF1WT_f^W2Lx|UTXH=9aq?xjkGHj_ZJT_9-ptd_dD!QujA$_N^ z((A^r!5`&myR^49Umv%bC-~023x5`8#u?V)Q}_IP(J092^`?SSqHjxwrq0oalV9FK zgF@lE5?v`W&PggwM=V!UX1Pk;nsu`E_TNoie<)$MXz+|kljc~@FYr`mu_yFMjnfCn z?K3$8Eh9g|;3AEUn~vWb>ZQ_--}toXBxX~enGDtv-x!!F=XcBohF+1Opbtnq~+ecBiQ z?&gXK5QaOeN%lR~LlRG)-#invt%IIV{yfFUb)5dwmLdC%0u^F~fr0zCa&qadnh>$e zbl%0UE(LdRA>#tWF9o+*bxBfT-&u$$)WB}^%UJWa=IheKfd`BpYIR_{#-P9II?-JI;b)plwWTs)k&4_y!p%_1hB`95YO?BcOBnc!iutYti# z=eOb?ZWugweEg2xPZH`aM38yYr-q8{<^v_}bJO#ZO{M#`#-E)1rQ0gT_#?a>YA*D{ad|X7i`PE6;yg zE7b7|kT*S8Pconx?+5o?v;*9#$oP53tQJ@4H*2F$ajCWIHA!&bVt5d9=}bM zTu`#^AFnH8qRH+As4~Xzfav_jRn9dQ>$~{0Ao;Bc%HyM#->JnK$Gwz7(D%JpS+Jy$ zcG?oF__W6QNE%95P@YA153yC+E}Xo7>Z_>$TEq8k-B0y# z_xouW?iR_vf7?BVPINxn?#)%tZ6V!m+VDq&EgP`wV_wdGu#J{1X;}9qka<(R-|v~` zAD3o12j(~O`wmt&&O)L7U)aol>!_Oli&--wl=PHJw8KPdL)KMMYy7n9#7$&PetX625E6i-}E7k{SQLA5L%@+7#_y8QwlF)$kz zx0cUovj4dMwJyXsCrF*wHG_t{O9R%x@q--B=Yy?>wa5V)0>nc8v)Eq6r9r^+Gi_Dx zJh}o}qE6Xf@h5LfS(EzAO4q(Mc!l(&r!uSy;la#0Txy`DbwAu0SakdHAjw>XZ$A*_ zze#mHfnQ2J2na#4q<>B(iLWasz9O5jzz}?ZrFlzv+ZVV)V_>=-%95R7^lc&N`=4j1 zlFq2INo16GAn1M_3fV9Y*Lyt8tm-AV8OGm;1;1691~K@1;p|D02%>3VgVE>|h}u;# zn#@Q3D9u$Xmzjuk^D49#T?^5~P8Y!;;91HP#o1(g8&*PvDo-d*66kU9={u*jYQ>mx zK=%86>c7f<>xlpYU-CX9ZP;Za{Rc6$U?I3!65;Cwm?D@Nko`Q|jvNq*6th!BUS(9J zpm}T8cxQHxk%}Qb9M|S$nT=%#!ywj!&0pCaLWj4zy=|Wv zmCB-_#1&(U8R!UY=+)A2%_bK(idzxZkD#cpC0^j8ThlzI^?e8{QEUIy{i+f-;vZ?3 zDx(-lvpxYR$LmM)FCW z?kp=yL#76{bkB)Ht4pHE5>psc4#i#x;sBj2_(5@^GIJXWMSHNAAPXM_rdl2M6f#w! z#aln&YO)us9vy3tsC}veZM2Q~W1~Osx(68qX*M|+<-VV<(uyjwPR`yc@047i=WmTc z1a-pQ2ViTsd#;Adt^Y5jdj$&iC~%2n-af35POgNIIflmc%@Q4VjF{|TsvVm0=twX0 zk3hWGWYEI|n{Jt?iY3E@{BMDH+$kG`dz^tkTB;+04Q`*c!P8C;aSytGrhfn$VTSFd zp4{L&eIvTtb*O4qTq4|gPZ8$=ImVtP+DAu|+(OoOO(bKivJftc*d*^KzplWj$AIA* z`eLq*soB%`d)WN92pLc)vCEJ?B1U#PNCk6&*h?%!F;bOE!01jzjlrRyz`M*^m6D1U zo2v@5@bjGqEwvTT=Tv%%89thhU_mk)({FY2qwY3NYU6ZR{N^nDm^Go|am;-gUDY6A z_nmt4<}O|>X24XYIg(QUTddQcTHC#6Yf>glJ_Qd5_9Ht}F&>r7k#wu6Wj)H}i!haJ}*M1L)3?E|z!EV>a#V zI1sTsfLXm4dY`v<$}jLD0NJIJ7x7I%A`z=go<86X2r?qm&8lq2AAPMeH(}J9xu82) zwx>`N?w|(I2aeT<1#H6h{dVyGN9hXAA?W`g^)((4eya=iNn(P7?@JNiI|jDomUmX2 zVe7@TB07tSYenvmRr7RoWXy}(BDh`u;ft_FwIbTbFrN{hAP>2>K7~d2+^b~lCm3!3 zsI0j-F95lOR}FST1Dp-bxge{22Lcu4zi9z6L!gWIxXO3M=9{#TIo7;+W`+)mt1|wn z6HgkGVcfIN6)!a4#1!6yEGidA{{Ik6Qza1DT97z@!K=oN*rV0N#ROlY zA=`a}LvXNAdo^5I>d$okZXz#`Wh~=zvcZzDtm&>qaU_Ebp5&V{!eNpi*qd{hksC16 zupDBen^?8)T2z^bMpqSZX3GLvQ9$Wsn7vJ%3XJK6aWyvgRI!xoa~~J$bF(p1$0Us( zVt*&%7S4nY(9rSiUl*VY5PwynXw08nJEir6qkVyJ8O$c~-`pvR9r#l`|ETZ@nC4no zhwaJkiE)X2Q!I;>8W6L1{J2IIyfhR(pRhnTfn;6^RcGkVNd&h)gag0DH)jZ7m~I83 zG0o*Npt{0#>zdYPmeE+~?&Q{;viZy06tc*`%k}RP zA$s8vr2=yPRb{9uz~j-L#>isxLEV^FWR>r5CjlZ)FMl5*1W{+B|VwGqgX?@f}<0`c(Rw<0f`k(`W37aWEjF4tz zxb?_`)sn}<4MLq{iRY|nZOsU^1Mq&d%oDO!0T-s%k<)PKFP(+%=5K0O-PZx{3E)=s z-CmolvX*e3{6MC@!b_Hq`t85}rL_S5?Mu#uI9gNxbXuSrSMd^%NKeeZN=#Nh`|dtW zG0*l#JUOS3N6^Qa3O=~4na_Gn{u{gMQdJx%hEiq4mouxM*gRl${++jBxMC$wp1`9I zH@5Fe_u5hUeg!YME8^SzTW?7%pcPl0>^}TSK(?t61{u|bcjC+4id`f?)ZNXR4?Gsa zeOmM*yCz*0W$5N}n?a$XofE_BBt(EW(sNVYcP(9~OV%5@D)qZPcLo2N}GroNM zI9&9h+z9XO7{I|!Q757eHb)XB0$T2^q3ksOuQFqw+9ih?3`C#c{)m_Zem(lX7&WAn z3BP>iDQz_a1Kp^N z^?r) z|LjlQ0a=i;V<1j8MvTWJUoewge{XFlc3Vthr-&lXOT)XXoM6!qnP#W@5bV%Jawb>N z>gYc;87J>LaoBA8T=YOp_+e{(%_+#;j={lSSR%3u<-p5 zSy`>aDVpbHA#o?p=f65tsjv>cxIq~xuyg8Rmy9AxMJa{=m~Trd2koCqwuEK+ya&d~ zge~g&ys^!Pwhjk1L;0G1zcUOe<{A`Ne3zELMed%-vI(5}zw3UE*YGrfJ&o`0J@Ce9*f z@Zdem#$IbXh!e7rJV~B4t_8EmDL8$uxU2~suJdYF8O?s)!fR5_03ZHvd5QXhGkSNR z@AC@*3>$SPkeq!ErLALC_1b-Q^>UEo_C=R)RCy~W#5%8X{+BGSSgpMyqc)m>>ucnu}*{|)jEZJy2zA>$AfoLrnSh_ph^BDI;*n2Ph~^vr10xNqbx;Kjz0w~z0ce8z zNrpcGX4t_29AF%dNDFS}TPWrmpL5V?zbAhrV1|-uJahM|K<9kK`>9$*E)&$(YU4|y zK4%@RKF0wIoWSBMe*$4&fR1vrC$?HA3#wOeiLEvF5Y3 zfCE}vJj!tS+}LkAx+$FCe2bVvjN!@@`^x5?5Nbx{cc$K7?gwu{WrncS0~uK(@Y_VS zr9w=tEL>plXv-pFQr_=AHF#7LHd%KvYH_(!u3}NhR)EZ!G>jJa;oCaTmOAXV1{;i9 zdy4{diUXX>TfhY&k51^d=V)J?w~t9!XzT;H!w zA`X5_!7xesm&2~EUeN7?!RNJO9UWX!XSV{YKrxMX>X5-UM=B>>lA~>DU5WMb;po%O zN!nS)3*APHZ1LL#h7=5N%O4NmdWG%Ewpcx!cYI#)^&SN6IkV^g>v2nC8zM?mlIFu- z5Ng(&E%)O@1YnbU%DzSX=jmp0iM-JUi8C581576e`sShW2Wr=A4g$>x$zp)P&|hIT zO>sBzGCK6;nJ+Y^A@_}7GVp6aMRceq!}2WicOBh#TXf|heW{NqZK>5p5R!(g^T71p zDVN^4!C*Z1*)(vkxrE>&>{IfTgJKT&tJ}k(^RKVs?jTRv5CD*6;1EdG&KeYH1BUlf zoe`8&3*t`}jI1~mFB}gOWF~Ev*fa5x7(@)qfe*m97F-z4=%;%BQ7PEXNw<)qC;9TH za?MOLU+f1-44!AL2N29P9n;8r{&~gNN}_|`L~MZ7RE6kNYP@$@mOG&e(is+vp`!Hz zL6}vtEJM87CG|+QEw2H*T%nSQMJ^54dMLUQJ@hUbicO(n+v%2!l#1aJ+1llQEY#7( zpdT4`LNeg(*b)M;auyB;mP!kGu2)Uk*!~E-7jj+Ebx}pY5>x!frwC~ut1LL744!HY zdf@>F9$%&W1LhxkHozgUcMhRp{Y?B%f!l8mQhUX%mP`jJZeEb&(7|P6?QQ2vXpP}X zYe;{oeIU=@I@5n3*_s^f;CCUKuGnr6I+6`eMDBf*xL~A!FSI14S_oCwL)MFvnP35o z`@p@S5^OT6VHBAiTLdtO?nfBPnPQF)k$MZ45u0&`oT?g@S&i2IVbQp>Q*QpwXp}!d z9mZUs*qDmg)xQ-<|0>a_%lSYvoM!Q-QLHApL1g$ctC zr4p#*OLT)Np$|3Ss*M&kZ^Ye{tY!1fwte515J@5X3nBXjMQ zi{np?IUcueqeW;QcYATH-dd3WeaT)yij;ZkPW2OfE0R8n6=! z%4u&*v;_hIZG0(%IedrA0^qP5t zOK3#gjCr(rsv#o#j*nO8U)z1H3}IOU?rHj`gX`b8nu~F}cM4NiKVzC@gl!;+3i`;= z`P$bS^=)TLd9yLuw2IPjCsj=pr(%C$PISxGEY=2d(-5TA7wtVMxfPkH zW_krqc19NNbvlQZmxCOojuwYfhCrF~c~8L2Y1Z<52VsAxnuQChCU%@(F-#B^ecAZ7 z0#`*0^AUZD_j))ZZH2N5Bj7aUl<-Z!6rx7I0n?#xC7qO;SLgele!f%DGOyb3{C;cx zHqoA4i%TPerIK5EjVN#_izWp!RWQ5dd1!`A-KVhKh!RTdux3hELE78>Z>X*Lw%J?H zGE4pnA=Kqu;B$PP3rJ(Jg9lYGu=wZe{oJZxOK0FF`Y^31HQ?O)tP5DJ*9aILm+Qk= zR#Rb#tcqbNb81k~Z9}_CzcAW0HIqz!SL}CM2+o1%9%7tWNyucGLafiSlCy;m&|J5V zS>vlycl4UW^n%zfY`1bE<8-r2tfjB0XS+E!6eK@m|29YH{fgx(~8 zRHX_??;WH`2_-ZUDN2b_qzM7((mO^v(mRCSq(cHCB|s9&_ptXqfqbhUqqUcwzGX~bu}7sug_sf><49T6=>yLpn|XV(h1-fPc~eIry}nYpe`KYv<%#rrWqY&*1ScU{DVZh4Nq z3p;;2UDLOAX!!hCa+gkAYapR!x?f_APRzD@+Ef?iQ}UU-BZ*zI2G~-bLy4&<$2x9^ z5*+m_?KJvIEHS+}e!`}D*UVul0gAh;+ufTa;Bc@?^bgIJ4*aVvi}*ROsNIYEyCf66 zCA#eW81dEdR-sJRoysyGz6)od`mLV25_{M

NWQVM_X^EW4mCm&sAf3<_q(l{$MP8=;jPtgj!!0MtNgIs# z$g=Tds?iKcSV%74xp1BiFS^7CGB`TChnFvCCyesusI_ciG z#h^1D_x3k?jhzeXraWNsQf7qBiLJ{~+;Qu=w%baF{I72|QFNV@^D6<}d#6jUrtTpO z&zMEX()Fk76zuusongOk+D{X*K6~M={nnrKSNWZenxM$o+Ux_>YZ&~ z>@Mem#f=@AAAVm2d=!n0Z|{U7e)sK6useTsxdBAs?ndoN^ zM?B7|&(<56c9%}`UH0_Z_kn(G=l)nSUnL#NIJ88OnMEzB>;m7MJa{{^+oWYqskO2z zMAeNN)36w+pWU5uhj-D#J$kV7wL0I-DxdWm?$L{>$3+H3#zZs_YWUBRzOO`gm|hdT zn=yaF6!`XYU|$sMu9D%!0u~5~X&i|T{%8d_tfG`#ESY>qfI$o5gnhs4)0g8kc&p6>yr+PlY{~F4K z*J$c}XVoAT+(Guq%=^`~-6B3W<{x$*W@*IH{ga|VCf8Op1D*|a4GQu(;bURdN9-0v zI22sG@OJ8+qPvkQtK`AQy(nVi_XQm`mo}z4sYC%^4EVE`H?b||%e228et&SbUwF^I zuT}TjMRbt&=dvrWpRxp@S?CdT&ikV&10T60fYtwKJ7e}Z?0>X7GKlcrL4 z<$6A~{NCEq`axYub%@(pUuyZ`Xe&^ysffDdqvh%1Z*U+o5aT1DfGKY+-PG9eJ` zW<4jZ2;B#L<<%}dtjkUMDIRhRl741fZFXF&t>NaDw}H+K*4Z!PWjtowh&fg}GOZX= zUgA(2InG75&t=WqXpjw+tB9n57DtwsF>K)b$Z+^7#+rbEX46huSnNw*hZK*(TE*zo zMHyTJ=VO_u-W-ig6uUUncaz6#TR^q{HCu43Vf3+#v(It5(Mcc1DtS(Zc*Jqw$;X3h zPW<02vyB4x3*55S!uJ#H$G8+*?%rz+%YT+LzXPX-Fe`q?&%viMgAQ2S#(a=?4bw8xXF^ZQ!~^J_wkHF z5l$CB7y8|_t(aVjQ0OT3ddYUBgElR0y75poiQnPlXAT%oRo}?`iZ#D$;VIAIu~K!h zDc7MhBl}^A2{UZ<=}6&<+nH)#xeO$Dy2KC^u;#lm`0J6|;SKV4`+L3(H4njCfw*)D zUIsg6Q~&)ZlisZfE8CIkPX}MEwrH2Tb#YS{HJXMUG;l)tSggqNJj(j1zfTp`47&P`|fk#`CulyFcRFR`hic4qPRqio}n&!fh3j1p7^1V6q%v}oMS2Emy@b6c#&cW3A5T;^6IXc z%kY{!{6#jT0Zh_xKs!2_xk1u-OE}S(w|+vLiu;3;)I3|s=2Y8#_&*UrBe224 z{B~5hAU`|MQ4t&hv>O2-TR6$mH82*Ui@hmG5c^_(mP{4a&z{ZF-%c?$N*?&*f01c zk0CG_Otrrs<|A5oeFKy5YbcOYNgt*F7ye~Qeiq?4JNKZ%#!v1Z_$=IYY6@atqbjD% z)8Ll2$U%IN?RU8C_XKHJIab)_Mrg5JRuJl;nN(O0-ZJ;YG8`-77Qco?3|HuOW^(oO z6uS*mm~@ueju?Df0jjz8lEbW$qZyAUW!*-J1}2m9sb*QnKl>tkO&jDI1|oQor_Uq< zC+n}QX07b5N73_}{|bzMXWVgp3G;Jc|9uo80+&zKlR2Ko6}twG(*~M5jB8GdxRYN! zZ-7lgcab)qsqnh~8{%S`g?WDTy#ehtEzrkIhyLdAb(iD#3$4Ul3}|c}^o;d| zSucKucZ#Oc3cFTT($PN3>^RBiMg^HbOw~>*(-H)*nxH@Xp=Q`A=!;ff|UK z+%+XioqI*us^e2YwF@O|G0Le0cl_0HZiY*svfaYiOM0B12GZYO;mV@;^0+iDlkw)- z;?u`eB}Vnn`y0)J=ZIkyv&8S+cb@OvIoW(psS-%gC@UR}Ksx1R=NyPm8d15-W*Eh~ zFQ2;T)=?48Qaq;D9qvcF%+dK6bf_TO*TA^9V_B1Z$?DNj!`Dse}#*kUhUY_ z3tT&Ji~-L{RMLFTQJ4-aH>B@T81IGmd+ZgUop$;D;Dn5Vkk<#To?L>HP-;m7eO0`K z?WfWVH-HS4?r9d*QSzt!%pEB+(C3B=BE|?>J3$LQDomszjnnfmAsY3ADxDuAd?_Sn zO&NE}K1ooUpT07t(VBVPA?|usXn7&8@X^m0Th#}}IhqMH62Rodq(!uAz!i`ZWeLwf zsV)l0Yx)LCBSiI4#eb!wu%1?9E~52adpQSEz7c?HX}qbX&nl${QLHXG`8-ps3#sI; zS7$Jm&}n?A{;}Hqr=(MY15f?v@oV+DePjJ%T_2-Cw%w=f+?rAh%vzoJqrXG);K(!ghH16 zylj-(bKoW5zLyw1l-f4pBy}-np~|BW=KS`R$V$KGWlc3&HD)Tgqi6h-Fh4a@W~u5q zn*LeXBuB|X@Y=@%=W5xo-@Zpr>S-Ru8tfTar@S*S$5Oq zEV{6^sCE&3JvC({rm*6!!5Ert>8`ibXu(r2?yZq5ADsW_c3X_~ZskHlzHYt0&Tp0S zPa%(X^O9E>$GH|gCB8q;!6=Sq^r?S+W7~DAOWqX)V=ZVT!T~{!SvzvUD3_{Jm#sy4C+)-74DfE)Iv!5Nde76(xdPjvlS40E*52 zN;dsG1d2{5B5zcF?ffiQ{_qBcLbSlWJYq*#n=HK=zYxmtwU5B6l(ZyHUe}fjyF-rj zEKy9L$ITzQ*2J76%A!f`kNrf~ez^<1?bn)ZABSS0bG3XSNdZju72}b<6sWKiBAzk& z6YYH?;EnQUiQ6KL7B{S4{`QC@*!1q4k5ay1Ph{FkN@4j|*}(W?oo~9HQU&c)Qwt0P z&H^f3J%9`%;b!MS@qWQTx?e~Wh zNBv~}-+X0+$pIY9aQ;nKX*Dbx^HXxNszjdArbyQdJC5>u#^~n19NrK+i+8L%9TW6+ z#)}@8pDEouMn06V#)*txMY9Y!u+8h~8KPa9?Pl*w&H6m$X*hBjwL|y#K2~fKo5=bU z38TZw%y4+xd71l}JNF2bOC_5g6=^QnLi)EjJe3^=`iuNQ1Ckts(PMrVHPew#;~S%f z^h=3zr{7HbN?Nj2bQbCYtG3lye|z1~_0HIuc@8oa4KOH4PZ`mV%ru=uFXkg`lu1=< ztMT=NlWFz4wSWbfr4{Bpgm=dIkY>xfY%%2H9rYUJO9nARhBDxfiX#Kn$3|RCYLVj% zLfs;4?KR~z0xz8f8{cbr+(IyRIZt87Fm9NbHC)h(wBKp}AWUD$a7k;CJ^&K*%b_1S zpulX3Pl_x`lwUGps0D<)#nmf*yb5Z@hIhee`0TUv@3}fvJzCb_xc8kSv^Vd5!_9cS z_{~=K*@U7NQ3J?>ca;B_1rUyle=$Sq!vgoyl4$kE6omt0U}@3}_;+P}_9+8c(-!;( z<7kdM$uWF=iNEQ%i(P*p?}T~ZfB758Y03c;i=s1owM~`HUt)g+D)1opuhpw6MWhaK zklG4qOKu|D(guwscyr~?_@{LfqGJQg!Rah*JiXUV6>_KJ^?+3|2Z`=YCB1n9ND0KI zKo%RzMn*Dwb6&IE*|!bklJAWFX5K}$HD1Gm>Uir)xL)VzmA8%ju^mz}9qaT{N2zR^j0r*2wF4f+ZpO1a% zy`{9QcfExg_J!NEVYDpH`O8l5wgx;pIm4}#_fkr9-NQhC{aSe~Egs_v9fR-l>xZ0` zl3Dk~#Xm3d#Dxf;j)x1<56FVAjd2YW;~ad9TrN6~)xjU>KVs(37&9EA~=u?Y^sQEp9JJSKC{jpX7=(;r-rl=Ff7i&V>HTK9i(;=H` z+}_#I3D$$~ym_}#3D$y5Vx-);z*kS7RK!v5R^p^EkK8;)Z*3S-4v0L>cABB9XLeU~ zT^vYx)9ugw=)P|=Ua5||#2e&~_2nZ=@TQj>w4K?gm`a=TdB=^I;Lxpp7$$4D^>vi= z7va4mWudNc2_adc+&m)E5a;A?LKD(Ons&k84`i!4P&+}4KVJXEDH$70@5@r0BzAGt zV>c+PF|%u$b}#zyqO)(^`eMWu;|#|EI1r~CxbDvx{*R#rb&sytwKq*jpVwYAKh4v6MXEcP!F4FTQ{*b%4ChRhQ|}3Tf1)iaUDzc=Y%mNnzge*per$rng?0$>)PQsPa=kjoT|hjv zHP9|a?ERr5{M1Red%5+=MV#Ck6o2d3T3pJcdW$ki_|P$Bd+H!-(wfmftnn7nHoKp- zvvUF|j{$QDy+iyr`aqk;K+7CxC+LJLrj2pHA)d>*R;C(Kp_V3fTAXj;tjvUIThb{kiGu zXAGvh;eqRf-1)n!s9pLT9Qe&^4Z(v$AHR1p79@{{0;iWdMM^e&><)>g#Ke5Jsiu8T zT9?7N)!V)!-vhu0n7}>6JnN~u*w*2u);2cw`7h9_&mkfdfw6Tf=4&wj4~)3?@gbu7Q+^UFwK3Hx;>l5=|Fw5Ere9VPi%f%Q`!vgGah z$iRSE;tgb7@>Q~sCZIafT5I-4po1kWW@!5-MWBT9tjltY)LA5s(&+T!k?piRA`n4q zTCk<4>tD^^*ekgPufu`i`+-1A%!5zynt1Y9Vu79WbS%Jct|qF`bo*)S;g* z;awQMv1Ge+V1a1w#8vr|2jc9#?-^@UKX; zTAOj+CZNu$Nlq9EzVyN)bNFiADU+pR5%CrR2z9To3Ldy5EafXOcQXLTwH5E|xAn9B zdjn*g=cVMmLNU=wSjd*^?;hj58=j?S3P0{DpN*WZT8eH!zx)5RbVlMB5(BXXrp~@N z^E8re{Jf{y?IY|{`OC9a{13)Fq#`zH=fC%4dzJ>vzS)|qe4{v@^be*1Fz0k`p(KpV?B~gs%PXy+>s~YN=-(rY+jvb%l=&gKaLn(79hBmnk(KagOXQ7r<@EHfG2Kd=9P3nqv z;o%6C|AGmji!8);hd)3{nohP=l)=?GUG$`35_uVU{&{ z0UOXwznMn6p>>wm;NAJnqb}VkqIvHUf3vykDGS8IodYg4Bn(>#EBKEDs;d6Ol8H8( zMy%kpi^Un4LO{UMUE#9>o6NFpTdL_cDMh=IcU+DX*Qc$)z8eAGBYn2N*V%<`)pUsZ z;+v=aRSBmKG_zCi7fYBOhk#e9;Pqd&wlPwdW+a%s=aU-}y!?Lz-lL&(8NMSm`e`>X zcH8}!|J~tP!&%FxM@<})n^b*l_g5Mr^b0DTnYj1I2#sAb@|7>4%$JBA5kzrK9 zW#twjF7Wwj9HC)>arw+T#jW#>;lknbl7hqaE%hBr7sgWhW1?*-H=h^weI#>dy{Ef@ zb-6x96<*D-gRx%@e0p^_cl)=8QuZ-tGf_t_+jMn{B1x0a19J-ViBFFYk8#cN-;V~? zf6zNF#vYceAZ{4dE-Yy%(pzuiDh@-hc^)7dzITwdIy*^?(>7e^c>jm#c67dMr-@P+ zPX`1n1-1KamB~gekT}q;65)N?;lLkk_xrimb4MXRgMBeMiUSr>@Tu7bewM|5qoY4;i$iu#WXEE_*5%;J9-=&v;q7@vc0l<*f9tG}#7 zeYsCDaqIH_#8PN_?L8V62j2RJd~S%dB_y_~KRo4v!zq<@VeW*@ZAQIi;!*Lr9wKKL zwkQb|9yz^oCBU`u5%T09=xY&%#Ky8kmGdlYolK+=uhxIGWb^&_n0E4*h7iC|rO4RE z<#e!q;_Npowb~DtEbVmO{yxcQ6Y<_O=Sx zkGd-9P3*oSXJT+?r5B^XFG@X4Bbuvp0(rh+s#Z%j&8niTZF&)BN4R~&P*nN^M69*Xuj?D%w@dVmj6veF@v z+O-~W{8h3uFxA=Wha|QmcN*dn7)I~@GwrnJ;-~4p`6OG@x}14CLw0>u7thO*C;95# zM^l>(Uy=7IZe64}+PZyJAnRd+xZr_`&>tBQI=WP?JH?HWS`7Bhw3Siji$zL+_-nj(ZbbXju)2j+pjSPQ! z=G8g}onF$Ig&fqHJ0whfl9dLo+4MMaYYjGgC+^WDW~NKbrP;S%=kw{161BRc!-WLp zKpn#iMw??_bTJk4wi9H)e)y|0&gL_}DcT*mvwg;N6g0b#X%T#5+8t@)%Em@Df@q7c z+9GUz#0s~upb?s^QVp=;fYXT6D3^yN_&qF(Ayfulwv5I!vy`;WZBl8#A#c7+@m^gg z+75f7@B1h6`qz6Cn+%gm#0##Ho~M=t(VZN7?MUO*ke$VM>*KJ^R%vrd=3c7e2#9Ft z0_Z91<0>*z&?B!ST&S2Ls%*o$9_57IS3^bkpN#6-4sYehBJ(a{mg>U?o4u*^87;XB z(JDyL3fJ&)kz&cZZCW9vP+0?KyR+mc&nS@BPfG}1uR}Z{+<^C{|4Z|$hxu%mS|2d& zIV4tACH#dD|9MWwOPB4`nkJq&L}c%@`pg;p%Ei*z7Ou5EeMZ>dXtB#jH!THQFIhtA z9_^V|q%$7Ag`#9tn0v`Hb8f9lge6kJ2C-C_tszzHiZ})q%Y>~+TU%hGm2K}XRz96taHrs+(=%vypD-njF?@v^L}je=vT$rN*5OC zkoA?CydmEisr|u2DzRnpe9XrjjbbW=TL;SB*1ZY_Q(-3z#)Yl*G9*RsfhU=B5+$C; zIvxd;Pt6ec#IsuWxvi*(0oG7RM)yDjp>tP{6aB z2gevtS;}J;HkPcVFr{h=g^cNjW3)ed#4Yt>DU9^lJtjGgZ*skt9=~iA09Dn)pWlst zf0e$YOsCLk=Y1K|tU+U5D&AdJiygkep=V|Ipf8h=ST({KB-5M8z#NF2FabvAa(P$@-Trf( z)$@i2tDVO*#MWE)|2XB~ zwVm|?gP}I{C9u2@$e=WrPstD4{u|IW3MpcyDW#? zd!l3aK9Y>Ek1dH)3tGQ*eIrSeY5D^R`jN7hE~KC7lM%e5M1`r~sT@?abcEsPEBwrP zF?cA*tRY&W+*!kGETo}v*crly5u~-66+&kpUp*bu$~{z`H4;Ia`I{x+Ay6G8bQV+4 z;~NHqU>>T{tGeTFv*%@*&N{MeU(lalD?P7E1-d2GqXjy+`9=VgI&YncPy|lS4AX*M zw+ReLSej+A{iQ6lZ!VlM44jR9qF^J&o9AV9LVD^zw7=(Ht~Q51A(g#SHW;$eQYXF| zE63|Hj1Na~S?IfL>Z03UUd?LM;?3E?yU=Jb4xebF75q`Ee4LpKn0(BNq~w4fdX)f% zY6Td(n5M=%>w|Ojz&B8WE4kj6OC0b|R;y3%p4OEABN3u+(v_Q?{iN^%u9@7ta>@S%kvEm#LV zCJvSI&#CabvF93lx@Z(U~37a-A1sn;ujqR zysbO_&LDlMY%Hoopj!6kmqr+~hvEJr2KYUrR35p18jkCij%49yK^ELOP>%D5?Vx%A zz8@uVT&g+YUU@aiQWJD*h3aU|q0>R1Mj7feyQsh^8doGpwk<4D)0(z4SZFY)#0k;EFHd!RXZ z0{RiOlo4&k?crOCKacMtnrvJGAX{fwK_bpGrQR)8A=u*+wZh(G{ese!uk=}KY)DiWU^)!>coxX8N)ucpu8Cmx7 ziwQ_>qQg{B1r5}35Gyb1EYkIqwS@=q+~C+G&t$i#c#;{u^CcbvQZD@d$fjOK1o0x1 z=jH3@Mj1HYXawH-%pX=Lby?H;Sxrg5lE`+L9{@HQ#7T{NN7zZTL zyd*(T%35~jh2dY9_Rp*PCk{`(+`>(hxi3s~^-L>=E^O#hrd45kV4h8I+n#+M+55r1 z&>KI>243sXNV%$41#qh?On|U%VTHPdhL)+>zg`>UM@%=FY$ixpBA)&xdzH;&X%KOz zx^PL%a-$l37ipyeSwCDaGyT1itR0~DC+1^B3X*kC$^NCY|8y+EM3>BO-#xrYL|hbE zwLp}a`B|Nm8RZgXkQs*I_4b2@KMTVkj84*y1lXjXA@#qX%_F4(4?N;&pj;m2$qJgDFt*7s? zLzorXJw07aj?ong5HVo-TGI<5|2)z^#3sOWVK3WJu(ex{R$EY|w78cG>OHH+k?CW; zZkF2EV)l$!X}ziR*(xc^p1TTm4B0sV8!U;WM!Oo1DHBGqZjzXL*u_&>I7LLhmVC0s zjEEvCVXW*IgK_VI30M70M_oL8>8m zjUZL4{T&}(M;J31?eZtSm5OM({8pa>W#h)1Cz>UL@b^QCmT#ZEb*`ftS{v7M;V#^d z;ZeW=K|5xM3lBNm#_UYk7sH|VkcnKFsK>v{82p!OUP(U!Kr9)66hi+uXlNtHq{7^Y z@VoRdN!YqkFhEr8@;Aho>*umGau(LD@m$i(>?tWS+V}Tc{C4iOlUaO(Q|}u>%Q|WI zPQFk--L9`6svB$-57eL%dV7;)HLpW&LsJUl!*EJr3eXB8cq7~4D1Wgq?1nhT8$ri= z7gtERsb_jO-!M&&bT~~B(hfkc^DA)fcrRHw{pooB4I!imTm(tjS(90^Qa_x$pmZyd zWGSb}^^OmKxN3{{Wk?j1ht1#e2+2q#3Da3JSlB<8N5CQnmGFa34jPtUDfa-|;c$~T zMrMFTHM5Y^f0Km5#kv=2G2=b~#xl=CefMSZG+G{;@@=}H^brH6i;{vn>GZH$hhti{ z=me}n%$%IrRRFu(xL98O?@;jkb5LKDG)QzKXZIQt2t4<)HS8n~Xp)WqMivg_lA>F9 zpJbNF)F*~f{J?Pz$7MVl$rHqen0#bxk2BQPEb!6GI1 zFhH9LQtXT5W|Bn_m5=D~(J zzt(w-rYjTv`vFrfM3wS~UW^0wjZ~2D<@A#B^XeGTD7rVSy)DyR*AR*Pl+_BX1-Ng# zIh0EZQAg)f5>t*n$jn#F9BdKA0{cuf2TA~^ZaWOGLRqTFp!&)N<&_GYX~?gk`OaaL z$DTg{s_$i*%8N{Iy_%F20j=$aY9&G$R%-nF`(O0+W5ou2(iDvprE7 zV7E|BWnAi$sZ%s|{W$l9AyO9HSK*9$K5mGSXY@f?W|_S2bQo2|6(K+GC1OeG1L{AF zX|YfEnDELu-qy6k3({5;543o6(hZBF+b!zpYzS28?hQh>mU z>F*%U_kKh9k z?!@P7gL2nfJ6$Rxd1YP_MRIr7fs|M8tWhVC0G+du)IY4~+9b$m`*ryc7nE~UGlvar z*JVluqfYW7!XLQIu&<_M*wodwTcg6(OEhb8P0%dtqp45~3_=ox?9AjL%afdCqbE%+ zxWfW>A5kH_;x-@;>eP$?n-RE1sCKYCwO-u&7VevBE*&qRv#bcQ~fSk*9E*9B{l?8d|ZDYrg z%c_**$czsEugH0HnDVUKRAWlg*uUhn%C0@o+5MQU+OEwvC z8L?(y=>rvK+G}B$rN~nF?aX0TM_aj&U8G9fZ}3?GUG)FX6*zxHZQ;743+z?!qHeJ^8imj1*=_a9{~`8?1+9!-zAD?%(OS!4`6uQm zOR&txj9brEITvOySn|i0n@n+eyfOwN`j1MfoHFo|4?8t}^Y+mv1|oe7qUyed&?l8fAgP zNb}3AEboY)i!nOHPRi1^w_kc0$zs$28+ZiGV+?&hoFUlf=D3>Afds0%PA4T zVM$lxI{7FRN2clF=rjLb4fs$;T{!QT#oI1(>FO+x@M*CGl6_XiGVsv3R6jvk(9-&!t&hTKb@j4PggeXAw&XFT?k^jH6 z>Q5yzBV`7bv()rr_(L^fBN=FPerT<_7DfuHeF($o!7)l;53`>~qCkASpA7E0%n3~* z54KmCtpx98Opkq0P|58YR6a3~isV{PXG6yil~mlsO4!gx`rIUBo6MXs8FO=)++T7* zb+M0r2!?gW!y?OgwG+|K1yuHc@VL)WnY;nvpA^_%ADZqdFsa;bT=TnhmG~LD^;Z6k z(nOV|+EsDTBWuf&H1bTgBGO%wFM_ zj=BLs^IK40YfX(^ZnxuklQkVjr(qZ)FNE{3`TD{;{^K@StC=h$FFR5%GJwLJzRzy# znei2h_0NFl`Y9ZU{^o=Duf5$^s8OQ?ZerGh;4p=|%)Rma;7-_5TZQBu`}xlu#kYlYz7v<*6$TkYFTcy zYohtsAjF%h^>h#sQ5|gP$E)-J$)~{F)_M3*a0+BMBd76Soa60lgZt^%#_lNxv#r{H z7A+NTw7Duve8WfZrQ1BzLP8$IUu7bRyUTg{>3|1Xk!BhP6MQWrQk2`kF3iHA3C_l% znvpDQOAkHX!yM|@Ez=16F|y|{g8os~x0VLLhr7IJ95k<2MV45mnuTE_Lm0jdI$F)z z)Bd-o<#uiG0?|d2gfihcyST~~@-KSmX1^zmV>ei?wnvJrDmrr{_afLF1i|~mNWk5Z zY=k;a!40Joz>(I*jiL8njHN=&f!(txIfz2Icf_|l6>2Ji#MEQsu*7J*A+rNrR)p)X zkz8dW$JaauSv;C3IWy2XS`98g_!}5}lqj7D4mcC6?gl9+@q62GQ)nkqS$2J1lwjF2 z`;i{P7p%A5;$dz=zjv+Fic^Twp;+V~lgDCH5*dxnT97~x^2nk1g4GY0Y)Loovq)(D zGtpnP<0wT*X!jphJ;86+1DSr#qA*Ks4BJJp7FGyNN+p9j6gZLj=eNy^{)tblO>XV)R0A8N-DjC*dEds|#QOFoTEI1_2-Tx0*qNUh z3@l{1^Yh+*LN%hLSc`X-WKILeIDT2q3IX>k~VWU*-lK zhFB9E7oQmYH*ggL=noT7vbi<)jbuI7J zZ3MzcEu}{Zgc=zp@Ab(IAEdGson4-oTGv42=#8xfFtpYxmE}sJ-u3ARYF(XE#5luL z8A4CmkSzC3%IES5u7%0OS3kUviY-CuzQ~O98G<1wc?8uUWzW zlc)tmH+U<3GEV&h>qyRKLOVII72|M3JX&CE&m491pq=1hPNq#*qcnT=fjzE8T1h85c_=1&vfB%8Y?5<6LhR#Lrnx zi1k~F;B!_}PO6cWGCZ@FG_^7sYXd>&_{$cIsnW_tJtL6?fn7Y%qB zbsu}aC<5xAhRn+-PQXFWsrD7g2Jm))HkHo|$#|haTQ9l$oSW3fr<1}ZSVk*|RLdGg zE>!Hm*7j zWDnM#uH=QCIG?@ZD)w z@u0Q5j>#iu2^EjT2~<5y?4?EXgFQHBc|BtmwANZdoQ5tX2_%thy^2{T)O-Mc@IY;r z&Oc4u-0bd&-`UR(V{78EJli7b?u=+}1U~V-pWBu1StC@j(LikQ7YqHrXtpB2kF%X) zrB6V%Bbg9|p_5*`7|-ETC^o0RTDEx?_Gks;e>k z_EKKvm_q>-GXMfEpM!u4`i6fO-9BYH#~t<%KV&4Yf!z_WW=3xWABgKwln<}PU`yT; zm3Ech)~kztclWwD6UFTPe{h2Lc@Z9#jha*ugTqL=l%XL?-A!4Njnl7UZ(XmXW--QV zBQYnFrh}6(OfCFj_LwS`FI}?I?<}AXCdQy(@Kt191o{!6-T%+1JzQGqVzQd~&m+OU zQor4I#Of3u4Oc_H4%7%mGfR#6Xo8eNOzibWk%Ax55GCW@s!`HR_WfJ3Ot(`CzRpP? zc47O^eKlO*JW%vi`a&SD<6-eNNgq6$74jUdmB8L)!2o5wY5pKb@}(AKkooNoI3bm( zsedr%{{n7Ilvmw5eOInAs|?@C1M^z-EiSzCoJs-Us`_3u9)it=79kU5Y15}wgrV}ujT&Ltc5iK$ z^^c_TcjW(1_U9sn9Xo&crTiNFSp)~x7n&iZ;DTG{YY=%S?LqJo^t)2vSPtfyoY~R z@_r9?LPqs6@l!dSSSo?mZShu*FcNW)I-9+EFQAccobIg^y|g-^I%!+3j59FkkeC|)QsCaVkhV>z=5 zkw!K(n9b9NRZ)NYH?OZcf-Zgkxsh#kYlYH)r;k#b_k;H(F6Qd&j28e)TbYumKFgb9 z@y#|4Irw%+dt*g%wH`oDHvSY50r|9;i~>NHnM)^u;Twy2PXAJ%e}ud$v)f#`%F?}7#;|%p{S9{g2?7|r z#J4N@7dMJe{0h}V{uc%VFb{=~FQ$EcA8Xtoff(Gy@FvFWXr~?TzB?T_ZF$EP_=LPD zlDDwjnIHMGzB6p$3VkJ~MO;bZK}}(VKgl}t`NRIJnB#AmZ2&ClDPEFzc14!7XiH8T zq}-Lb*u}XzUbbD)s0l&IOR8|Am%}AMdil|kvstaT+7rC;3=b-9-Vo#gqV}8TQTwgp ztpAMKfv0Tde=W;h$H&L#&C7a80vCsdNXM?#r?tW7vTuj(@bWq>TX)^~ zpn@Ul|Ksm9@p96tn-p!x-Q7b|8Vsq2-tovsV28U(c=LG4gRkQvxkKBv=|}tuc%avf zyE*>v+%q7i-?X=yo^duX#j3x?2}S0N#Tq!PnA2g*%;c5%u*qU71TG8{g@X2F#4~ZR z9G|zs#&+>|R6ff-0NnJ>fm=l70mXj+H{i!0EYtI8Ib7B!hY;6zvafzJr0uuKxM@_h zjkX6)zwm5ljIDUTFZ^CK$Ej^hu^tCRT53B=M*qu24iErjA|LO!OG=#3*e;H{>mZTK z{v{aNw{G{=L`6t|2s(nqFH?n4EBm8YVM$pJ|BK-Uv_~Mwqx?O4UTqpX(m?%1bJOCr zBD9rG0O|v>>rQ4s5kTkYL10}>5eCE?xiS^ShxwFzSgqu9l{A~~_nP=2B6?cOwb=>D zneLxfDYexBSA;R7x|kvtEK`n*^Zot~&!W<#`E&Ky)ipB^>YB~zN};;ct+g$9K}LtX zj>O)A;SZcp*K#hhYRxd1o^mSZ!KnUt3O?`IUy3T-EwHsIGEhV0_4&D#N=^M?qBUaP zE82Khy<_rGTO`l_rf$KvAKqZ2T7Aa(i=zEbd+hzHoZ9%cwl#kZkt73D9|a6mlv%Pd zNz(QlEZ=KuNjB2Ca}RUtM4QGc5pXy>*VfBAE_%Qv0-S{#bRL;H*39_C&NfC;`G5T=b zqFfMJ3O0D3Z9+z%g}OgVd`=k@eQkYtoT+Kxl|}Zf>j)X47h+Sum}t+4`|UUFGIKel zbg4{urBlqazq!J31|8ywi|>0@8fyzKqdZ7-ghTxD{nt(B?lQCY)s31|ZF{7w!__2D zHkEww`E8!9Hxwt%Y6>SURrlBt9tHG|zv;U)oMwcTRD(}@>^%`+gxlcVgD{hhUrX#0 zqT8}(86@B;cyGsC*kn>kl5N=PO#fpa`N0|fkNCh1o6cB=W=nn-cw)`5`k(wW|!&`(Z}yRN#m)OMK*ZdGEl zo{I*oGN%YQ!E}PJ2|0JPZfUbWDi7m9m{*75{vToQ8P(L*b`2{cNKr%t0tkqJNRcMJ zi&SaSd+%L(Zz>>NK{_PTrT0z%>Agc}0VPsHhXA2|n{z+k`#wj{ecmzR81iQ)d+oL6 zn%A}FoEvT_YQ&%jPJ^YEF8al&ZuylOTCe&dp8Bjh<;`w$G>&N$^UMt?l=a39R}c&} z^_IX_d577ELXNrT3@$djj^Gg_Gd|I~-}9tN559sZ_g6AjJZ5Fj=n%G@;%7*H-5J9H z!)caTiv~)UU(#LRs~y8?MBE-~B%O42wD~fV`gs%z;ht)mN5$Fi{+hn1;mRh}<>=@L zPA|9R#M=ONySVVkwyqg-I1i|;h55OIMH~1{VoEtvn{;)){qGv)KmRXNeh?T$9L1rY zd3eP06Zy-NxN* zRe_z^d7l!MRxwDG?&P*v3atvV4V!sPZ+qz=wO1o8w6NcI} z)BaV@%i*E2mS)cy$dryn3>Dwpf`?Vss6fElBcH{agXfCl!xdL`8!YX;rMU_f7f(ej z2z;_kAoQLS`!_p=wJOnq;p7knec4PP{rAx957^9c=3xw(b3D-Va|4Qb9}h$wg+4ExPc5MuW<$Rl~D$QrT)RNTDznI8FDs=)QbSQTv&k}JAFH|q7nTq z=E!_k&cdl2Mk)BCjQ0wvMW`n+r;Kbi@@H=tx*j7+M-YLT|7jL5|LF9WvQhDMhi#vw zIj%yF9?l(`Tf`ZZjd%|f+m9_dscz+rzx8XNtP)hR@H!qPv~8-uskx%jOfM1$T z>7BhtuvPPJayt#66L;1ih{>V~pXSvT<9#Jyu7Z7D3N@VkqK(*EOdP6V)8m9i0}5QG zfM0uS{CTsK{+W38^F!UUJ_{8cBD;MvJeQ+*n{InO%L;?psYYj%uCE(3e(!|=kPX5y zd;d*DIX-;wV6#1NAIZ13412HWZ!9!b@-p!>BhIy4z0iS!8cR3s<8d<wxwZkH*sN;ECk@J33o7-+i?JVSx*GX%2%$0MA-}cY;ty`g#sm|wzQzZNa?i7e=XtQw!Wwm8xXPi>h zblukYsU^wm;>Db}px+VM;Ch*5;w&_#q)ON$mFhyhpS7AgT5$5xhZ8|{K!6Nzo_9?Z zBCIZ|x~lW`Ib&dxR``QX7$N9(qgv9&guFizX|fl*jV*|joI#0hTC*=pllkeV;TM|3 z7~~sTAvlp}?qhM5D0Z+AvM{cpQ>W$7aJEaja0J*Qx9gPEL=7rWtnxG^(E~x-0Q&rRTP0x-oA(9?#La{SkUN z-P|LaU;!e7utlkyO^H$&<0YnBL+V#@bGz(wXBW7dHCSp&ug;Q>;@Q&UVB1aoKW9#K zybpqph{+6>6J=q)Q|_`+!aME#g(mn}xaw^;n903;jrs8Nxil!$_SQ@|M?R6ho-qCJ zk$3xDlADRi;Ro&F&~-g(l!{r@M3mlN=fA*hfj&XJCN@b$Ip=mpRP8qIsS3L!!}rqr z?Up$%X%5(INJP+hm6L@^<*)MO%W{tOEJO{hk4A1?e#~Bd)cR=W$`dW`GZ-{}!7IU9 zV@slM$#&HJjDbhGb+eayK=jDaVpupv_~{H2Z%qlh)6G4wbnza&ko8eq>Y%|UcXN;E zrvTJ`@X>oqhf3>aVi6U5+Z}(C+;lGcf~ey~46ot4nzIL`>~n6UEE+_AP|j&BoQ_^L z-e}LvaE99b-hzZSFD7OR4gU=$3Qd2?E-m5=QpoW#2Zd&xgY`t`L{h`&Plw<7lcqL) zkv`79`yODR)!F9*;|fbPy=4W7#{MIEL&05vsLz!l=;~Qo$J{@TqVESOB)9U4)_Lq? zMc;A=33-@#1+Mac-`{;2S=sl|CT=K3-o!70HL^lO|0D6~+SFZd&K4V{4G&4N7~v9n zZIG^Mvaadi^7Agv=1*1s@+B!^oS%%?N3FuoUQ$2roUp|&069ptC5bN@8h?rx=&jq& zFM1{1)x3Dwb0H*7;04t2?OD-`Eo>$R0Ev{jK1VmUW&Q)>fojJVqgO0^`25}I2N500 z)KT#8n$4J$XeyqR2D---q#5l04A#)w^tv&6!^dFSmhotUS0h~(@Xg5QFn<)wyDt2~ zHJ5&$h1Z227}H4PyOD`J=V-SZXWqAkv||&3@hpZ)Bc4v2GL@JHpuNT~Wh!q$?B;Ta zW-nDS6RuY*>K0)M_GaXSjE6rN;Ra}tK2bvRA4m-_c3Bhm2Y1;c?s9Rz_i&Wv&H_W z;kCqY%EZNrqmc2W<51KYefw@UFiuST?oVLF2k>&*PG8dM9$&1Nu^h;EQBCv6W z16M2Qd9C>eZi!*~-@BP4ZulDF2r*2mC42B?qJ+46`bzcK?YwuUFn`v34#Pww972zw6ntv)}*B8p@W zK&5{xIC}TJlQdVHAu9N0g6k`WEg~%9!_mHv7b&CQBsUciz>Zk%8VCNjj^bksW+djt#;3~Deui!J*9hEW;`P%R)>|%Kyin9!{!Fs4+vZO|FZxx^8RNAvh+0i zO#Uv6BJU8_oOump^-ewyY6k7#ug{Y(OTMC5?y~5d58Vxu z(?8a??SX@Gd8@sNDwmLM?QSi-FkAa(tk4-q6Z)y3XEzQ%`osI73foJ!6#Yq)FH~=L z^?c?o$6Xv;$|vl4xf*8#ZBusiJ;T$z&vPb^OJ-iF4v0*k{f;#YBvE6nK7$5_SbW`kY_mFgtbKkQyr9qAQu7b&1!BfsA z$@b7m%+!+R7Hi`MZ6Ivf(Izg zIpa&K)U*4Sp!wIjM?Z3oJ_i%|!t-lhC?;+B7wDf%@w@lmZJb?}8&FJ#_C%)(2`|S? z3(F0a56{0%R^UI>@mc(-x>W;Vt+GBFE{EHfUv#r+%#M!d&XsO=8LXGfZ^q3D0=)%8 zBkXNHMk%nrdq=|g1j@k<*7$25Z|j5?>^Sb8JiqD4yp>^|I2$^ZwV)?H7wmGjD{Gk~ z%m)+Ux)NqYq`NQZvR1*tNu&&$(L&ogf^Ju)_DekM!Ed^ShK0umlvaWJTAem+NwP#d zh1mEwIv%wn&ymhnc&q3gPKtmc=w{E%(MV?f(bk#1%~izKdufPqT-?mzAy9D7J$Kn; z_E@yQe&msL(R-=7#c=$*=GIX<_bGSX8Ozzg@%P&Nz2KS=)~h_kW`Y`jyBvc8s^9zw zRbN_0e|C1W1X)@|x^>YsID4Qa*lT$iAI7-N|GkBknPfVO0Ai`T#=H#oh?l~jy7<{D?X0{utx3LB>=Z20q9D#OI?Z91x z?c{!^dp|s4%WI923wC+(_;^d_(4rYFE;xcTMEwvSKK9mBDuXjXj4c(Zv{${)kc?6Z z&#Us%I=9)9?7OpnGD?GueHv*{9i@)ASvv#-Da&1n=+)xqHK8h$)FSJ{7v@Y`!l@Hw1kle}7gm|77RK-mQDKDNit zv%mQDqei#*FgVV>kL%7C0Pp<-cXrtOFE?VqwFKa%k>(R=r5T@q4DWzf~DWLC0szwO@$Tkpp^r zx}bQ*1fqV(&%6|6e1(~24!TQZN#!PDQK)TUf3M#C%7!=A-|zEH z;1Er_*?45_(`hzr=oAONn74MnY$7{qXla_D@<`8T^J)p$_n);#i8r=J)z$i561y+A zfQ?Bn+O>~@cMKDrO1FQZ1-gs~x;dfLgL*RepS+gSwxv2haER=N;Y!w{skVrxb;(ud zHiBDAv_e;R&gSMwLw{7pG+V-vl+SaPHzJPO4WsK`aKQ(gEKWZ_?;S@FHf~|_&ZH6~ z6T>vqnxPlde%NgMzn`2V2vGmjCo{MeE+6owdAvU~B9EoUp5`wTtxmY;v5*Z5m z>|9bq7Z*4^Li~)jOO9YL1Qo-~XKBNI};=9T~qhrV3Fd zOTF#6^CIc%N@2?R!z{z-(kLpV_}!7PV}JdL#A9Y4{(LGo2k7)M-W0ycePgG_zweHH zYWn#W%t^b6(xUs3cR|#F^u9ySiW~>rW!*y725(#2s>NlqoCmRtx4Cb6J_=c2cN-j}H3wm4o8gc+R2)>Wlb`vYkJw#NbSGt5dtqFBMJAb*RsSyKSd%y7AM?v!A)s2qZiwS!6i~HS1)K{a)N0iiaT`ker)Ga+j zf&jrvKT@o;onmkK6`>aHxfL)}9a?K>4XHa4N?iidUaveG{5FXaXD9Tds}aJ85U`!w z@5@{Y!}yVx@p3NTIK(TL483K1I!zgIM6#j)C)Ut;?fajBsZo4$KcfWNxwl39Nmrvq5%{6yve zJ1$1}Hnkl};ph`3l9YL?`7^UmWFilOIeSdDoB>?V+OW5>GN3z@vYtq5T{IyG7r9K9 zyC@fdcw2P%qgurqJq_nCKbg&O`*9pp!Nx9MRSkf#Tp(;pUiMK}OjXrzlDXJ!k~v`qwXKwu z9cVz1D6Syf9n95FJ?a|gQsjl?ZUOsW+B7=txw(sR3NSQpa-OZ1uFOvOJq5V!{JGAU z#)q!oAK6oka}Q~dzJV4uaq$xo__77!oJ@O7Y((EABGw&9?ww}r13sl@I66afXBzFD0@S2yJHr8 z1lYEI!Je1jwxo10+?PIHI9=GY$c< z)H2EGLsvXq1NUM)^kyUA`;nD(3)^pQC>h#%d9pj>#ezhey8ASYR@(IDxF0rpREt8- z`5K+kV^3qSM>A{PQ45J4AXle!_+e$vHl0E(>;!uZAu;t_w25;moP9fCM$})#=_DX` z24m4Z7Gk%Q(PRlXGtm_sy3AgEp~W%jf4r8gw?X|SAVC4=Ju^IUc$Z*zG<)UB?#sm` z61hnlQx_6oALCk?Z~ej^qCYQlF#NXB4W~QBGdn=+%4hY&(uLAb3!LP<_S5)M_-71j ziM0q@c*OV?fnj6o=z-9@!YMSK7z2E$pwB%(!bHB#~2jEH)l13Mv1$=XljwG zEz1`4xVVI&bN191K(2`R$nqj2f~(=w72dibhz>?gvxOxRUPS|iJT;oVO+~&R&;ht$ zAg$6}4TifazhC6dv^-C?FHPo|G(b&BZw8)~)X-mM9Qr6F6H#OAP(vMH=l$IS_Zm#9 zRzgXqdp0WVc1Q=xD`Tklx`!-g%2jh$&^UFN;Jh}Z9m>ueNiIlZ$j+|4R_tkbwoif6y$H@pjFn87{ae7n-LM?k9A@?G@t zmHH*WaeqRZF?IbmC;qZ~KX>Bn<~r%L0h>^_i07DD;|0!@USVRZnT~bs{KhfIR%Fj} z6nhz5q;eB))pwSx)+}V%Y?%UCtbEV+)?Obiuetl7N5}b2y znqw8weumfF;`_ElVF97#vzY35xKrJE)W(=M%XQqW0r!c!NZl!>KL2j0G59ypPivQW z;Fa13nqZzOS*D~nTqU0F*P~b@V876MO(X%sql~iB9g_5IU!NgN+c7+OS2cdM&UF|_fQN8l%l9M*BM*qZ9 z_mZle`RH+@OWlXZqTNxY?OS`x{ZH1{)tR?q3x{ic&bdZ9^etv^upvYiV@$BqZMQtH zp?LSX*qrUxCkAn=)0ZU|1c_~PNq!3e&ljGSs%9v_X0)h72t&fHVWvwDkz1GRL4>NfG-ewAl0^hJN+{Yxw&s}49 zj~hd`4@eiR5z0H14qXg0=kP^be3oyAU<2Fo!rr?NSgRBnis*><}wF5XOcP`SA-+#+WFXUqENss{=!ec8X6r!-I%mn&Zr zDn&9k3~m@a5}r`f@`@ThF{oV_d3d(CqU9ShX$l5%iSkY??G?%<``IezEOH>@8ivm8xHydGcA38C75V|OjIWD7&j{inSq1yH>_GS{FYXD`EB<`$_Eh%_ zW@EYQVjy}#T4}v*OVLKmU=`KWv*{5XHq*>Ibx}ciUaQ)WjJj^R-#YifF23{@M$F2c z+ctDpwcF(}#%)S_=viXdJ4`I0ZBt5ZzaJ05PYhCdCaH9slP~65{Mi;r1q**W6Su>~ zY({^FA~?R+=opKSYAyA$NPtvFyM3*>M!yww*t~j-Je}q7BR4e;%(+;S(8}p|n0h5_ z{i%UjbJ@}>spJ_(`u$Jn>KZNh9WShUhn|r`ow=O8TS4Pn@2^}+gim%V?Mo;$ZGPKY zfIm%%PF4&R!#>zO9-St??}N`+^nssSDvMRcN@lW48xoX&U&^z5BIXOrbcoJhup98A zt}fPtdPi<>(PL0V2l}Q}n=_8v+RNVUX&e~xKQ`yNG>0-YVA0uX{n3+soGihWVkD6P zBvC!3W>Yd7EyI0Ps68T7kQ7;XKjrChtczUW!utN|c&i3B>lLnE*2 zp6+=4TS` ze3Aj_LRu`pq8-en80EaksE>aIVVt&}{kLXx07kFblI(MkjFmCnBw_vf2hIPu2W!FS zHn|iCe57^Y_la;nvQ&vC-ZNqj#Xw__>B5G9vUJ683MMo{toyp%kFT}==a66Pyhhmj z2&KN@t;Xqai>_AU9={ z{O@j}zZ68Yf!)|H%=om?HQ*cXZw9;dSOQ5WF=!ScZ}Es%!VJ~1iXf8-<}9{8H+Y4|wq+GY>ape9{ZWtO!AwLR=tN)^;mg5Be zwh`6?*bo_3%CR;$a-BB11gQJH{qNplzRr}X2F#BN92+YFLNOtrgu<}@8VquMltP91 zR-8%xNld-d05)I46hrkhaUk|U5jt8m8mGfvVL}bk)Y9w(H1AzzAU)vGZ+!duPb2u94jg6{r}z2YECotx zXx})EvRwcV#} zEmM&gII&42oc$Mj7_jtO1s?psc`lV=Ky#~-k=uZSfDlVnf;aR2o{Y%=?Mm=^!AP4L zSjkJ+d*q#eekf|50kdnW7&XoV6!c`kZ%xmLFZ+Aj{IBI)BpSr0z1&ZBU}>YwnXDls z+u6jPJ0?J`zOBU#oPz1)pax2n?3}=J>}<$WO#C8HD44=<#L}Rc^upN?mpQ!k)3p`+ zft5Y&AIclxP(}Q)q752D3M4O_munVz0+|YZ_%?ATvs?28 z9ApVVn;=D+xGrH=N&E+y)q0WAi)W zblj*;jn#;|9!7rad1WRkLLJ2swd!@0zj~pHSeSQUfh#bCrU2&~t3L0EE_qH*c z8=|rK!!reZ)AT1yDnBE=v?3e9d`Tk4BRMQk$w6-c7YRcpI~YH|nMjA`KF*+eM)1uI z?l@U&#K-|m44xf_WN|Bxei#0Poem=vibf$El`6W=3GV)>S^>V{;T<7V56@AYtp}BG zMrWKV;|h^_6IqHvz9INVKcL@XReVQ7DnR8`0i=fAyStru2udOqkU1bly^3kD7Ixc6 zQs4lF9{{_WSx1Q9$;HB+M(jT!h(hR%LGbfzLhi;2A-O_X4c~|n(^N3c!`D#934||CiB2SUk(r3;Fb+FNMOLKS zjFUzbzbKpH>{_|PTOx-pVz_GwpD#TW2Tnonoi#s$$@)S5Ra9;iMt z@I_{rZL_!Cv9Wz5NmW9K93IOQ!DrmyxaaL#HqqIf(JzxOkcl|6pf*iV-1$b4u zn*mFb9DKiF`c>kSk=wu$(SH-4`{yk^ReGHIa$V6XB%UMk>vfK!@x~V~dv-v~D&!RG z1X9pa@@x4h;`*)s{L%PAwZqz*7{dCJ#VkB0uE@mlb%0FD0jUP7+KyAq8(ZU9{$uL* z|Eq5nh>g?6$hp~t&l1q-TX^FQDzqV{ zkJlx14y?@bQ&C@2_bUzZBT#8d9Iou!UZ}8YDt*Xx3P91}1aVLautqn+i(LPdVDjK$ zuzQRciQNs)$>?a3anSB|k^)b>GyV|bu_@DD7|EXdZ8%9(6)$2`%W)jpORZYlXDMv$ zdH72+o)m@F`cF0zEO|Sw;opwJTc0Wcjtz$oFu<(EL~h))&KYBBZdX(-MG7llP@vuT zLKvb3p>me{ZpP|VG(hm4iA<%q!Fuu20kVdK`&0r*zMDL)Hz>_VRkqCXj3nK$GXnMu z9`-lAzi~N$mDqtXt&Vm()XC&%!=ylrU%WUp(tUyZ=@J6hF)67iFH+{Eb^CVtRxl-N zRI?u3H#U-#VBKJJ%Sr(Zk606_$ZW7>VnaE#TRp);W~c=bz$ZMe`9!xy-=BOUmGEYY zG}re&8QT14r`Nb$F}#5L8kmCS01^e#-@-vmga&;%h&2$=zP)D>Bci`1(f5rivT{UD ziiEC0DucM4ga4GoO|k*$8HYj{ye=<>Xz>{QpVp`Cqil&H~elXB6`~ zagFF8cvN*2=GhmgGjp;}S7bY0jN0#I!_5Oy7vzJfvQ|IbbM~VK8MygJ^5X4*SF-?d zL5>!T(tAR|OPft&9dHdW0KCJeYxd_jlFsP>|*-ge3|QAcWl)YsbanGQ^f zV*o2m0_K2LUTQXARmzP06GmFPQ2S0BH&n)@xzY7DnFB1l)+j zdEdsfQIH$9ldmd(=z;&1O7j>al{9GV2EvW3{mpAE6>F`Z4FePrxCcg$GU5fQMI!S# zMK!YBterq=8AP{aV;UlRcl*5K9ax^bm9t_+0IJ@uOoJ9yB&*vv=f5~$fs~ZbHwJV0 zXqI`WNdUXof!XJ?bvoj1G9;S)%b18?1AAKRJyVgJ37BX;Gm&!jUkAT5=83xU6C+t< z-jHHx%y|1K7)${HGvx~^wG$)NcU)xwe`2C*&VOVv@>3zgRDNX}A*1_L0EjE8BEuY~zlM8l(D?`eTC;rHGnnnXb~gn-S7Ze&*K z&sB2(r1%+K8;rzycNwGDuPvaTdwG;OBim#E0tjID-b9`*xk4wm+pAFTNI+Sn7((?V zA{)z;eE4AV%opVL@sbId^HNF{(AUHQ1fF&MweFwaQpq4ziG%e}2MBzi9wNd&i+p6c zDX6?m1R&0}7jK8u?+gYgR333{I4=U`{~S^&Vpr42wTn(q@>f5ELIK~1w9?IjN9Efgy5p!TnmxG#l^ZHb)6M$_121r&AP*DPO z&&Q8?N#;2YI^6=!*;K1DdEjFo*Fqt;e^CzwJr5V-NgmT5$Hz16>$Z9mPiXNbnN%*0 zKil&v!3Q2FBmj9LLyFu65Wni zRHQKlfMm?VS9P(!DR8d&qw}2+JMsg-$(3U!AFQnblI9u)**fR2;^%_>BUs%)KtRql zQd7#)h#p1=AQqYkvI>VnIY^#M4)MN^qAIB@F@#}}xd2)yyzBDlE0e+>l9L0E6>)#z2s7qoW0_x12DbVx(glnhkgl&*gnU?NvG7r`$Ap3M)V>J2Gq65C&5 z%fs-G9Dx4izr}NjVb*{!xIP=nWL%FCM44C{>c#P8DsTPKH*8wm=aEbuX7ZiBoE^Xm zz5(89)LUeuc6v+zf_{^Qf!Eb?TFJkZctOvj#dzM2rH|ty`O#`1 zbx;hEN^hize_EAIMyOtuvp&eEH!0jNRs^4UgF^&zB>RL=oK2sD&DEC$2%Sk)>DJM%uan^wAY&e>~&E>6P zX>fH_c>n=nfD4H2qlj}k>sBHyW_~v)m5ZSjfM@Q8|JM}$&(f!j$`*K%2jDWrfst57 zh9R|a|I9?0?b-PN@YuO)%!ulz<$sDPx);UMiI3C zv)GI77Cv}zV9Zrr?M6B_EKsi!!&F9-h?>K**K^Sr@eBgcOK za`RtuJOLd3f%zAs%`u}JEqlVUGRcs?@7o|oHIVgBJ@h48n(TUx{IUb5r2GYP7$z-|Odh&s^ zEi=VswCi_(jM)g@#L9~BGRMz~Xy~n4k}Vb>@cSkGSH4PpS+ns8e zquxK8PakjG8M(uJJ>p%A`DRia)KaRt{aFLY+3c;c9O~qD>_tGhYnJZjOSl$fqttD0 z&1~&)1)mL&FDWz(#G!*8TsH?WivPi8SR;?Ym2C7jqq-CD?0tTC5bUJ33VS%tU${a? za(Hn&3kNytY70HBY_SSat{o_Kqa{6FMopoeIE$Vo9CUtSl>}P*fZObLCC{I3vuPl= z;Kr?60J2Vgd)?aCR1SJVu=4PUNRx<(dEi|E^rQzliBHyNe)ug!Bi`8ouVjzRvUm0D1Hq(`vt4l*yIg zfw9ET>*OY3@1Cv1e$zBO;bCN0?+KtMy&zM5#nqJ{%teQx4;Y&#>GiGuVG4>#2Ik&Z zk^&}5LhNTXa*awM6(&LR6y#Oz%5^z(BWay_Whv zXgI}C<++55uy645Zg%`1I4rC5e&Sp{WIAO(k>aGMnuq|ZJPu&pP~J*t`lC_~yfcCM z`c@>&93PN3!QoyJ(4uwnfPkBW&t(( zq@2YdCGGfRL>Ra<{KeG0KL_K?9tsU%(UAV8mdmdB{lvrtrzLJYc|3QzDP)V5a`Zi;P zr3OL=pH%REanazpo>0W1>b#KwDZ~BIc@9yT$9FNG`RCl^%zJ$E!SA0SK8&Z2ts&-m z=qVgI<(G_iex23lilyN;2)5*m&fcO(yqPPm$pxNl$1fABs%UzSJTAsH)$uqRL!a0E zY-4%HJrXNsgY)M6^>afhhJU!c2q8PoKjp8Y{+hePw$6uBZQSWrI6Op4sm{C-5OZ zjXr29N57jm?{c^OPU2ZFGPNSh`?h#3CMHCIqyEfXi&-@)#&qV}UooL;7%J6*EUdbtS^q-G!1 zwIZ&RfjNkw#Z^)qk?{Zgz49wICP|Ky-R2rz$!fxA-A3*Hx(ZKYpU3i&h!n^S`$0bz z))QT>k_cK6{i4%8q0GQ~_i7fpPplXZTgD_)4*s0YpTyWOeQyp#`ynxN#KiW4+3zCH z=u^AS({9k0pYx5L`0Jr!;);r%S2Z*n31{5>z((8($YLyMg188KUXKgi;!%(~(lU!C z$2N-wm2tmax)XH7Q^gCB=w4U-d{09*5L4#wANfcXn%8n^+|-LTwY46E6)fXSuP2u3 z{iE1Kne-%sOTil{H%UY=$nH1^g!XEaEJnq2sNWo1+5nL}kiic6$?R`#LBqTwZWf*V zVIU1hY-$&7BLL_!jvsANKYHoYu3R+*y<1g#Ja9`fRG zdt}?+dJ&Km`QCoUa=fNq^KW1S(!i9T7*m*WGAtr^c@amv<>t{B;K3J6<(wvj_yn?mg4&~5jZlGyu?VD|D(dyZonG$i5z}|+OV}GG$J-=fa_UgB} zft3;%_9h{N*mAJDw#LEGit~Hl=|l+Qla~qFp47y5^hftby%RkGtXsuyRMuU3!~L}B zO70oc1i9V^B`hWS)cfs5mlDSA<+Q=RMK01XBRmC?oTKS5bp(GAs?|TRh)PS{9XmKA zY>5;LE|ss3-9V-Ad^b+JW5n_s;=FWZ_t9mEnc>(#lbzN z`}^DnVPVP(?cZh~`s7{FJd%UZO_LSKw>NJ~qev z6~saE07Qj3 zQE$bQ7<}vbUcyf&ZGd)C=9A=ywy0H)J>i?h{d^iSk0r17z&kAMxru?zNI5+Fceg}; zn+zeOH;GzZHQhJov@)2)ew@)~jddzvvJ^`ry3GCaM@Z&l>D#bPlB&^8>h~+_dZ*e% z9;_(=7;F9)brl95M1(QttGSyv`_sJX zg;SC1--on+1Gq7nRtdV)G0tzX+6-p5O}>O#G8uKo@AAApQ-4f^{7?WYydW9gOa=zq z;jSHRklKBt6-}mZoEE1zbS3?YyUwt^N+|g9MJw5FL!u(zD)BV63!okaF>G3B@x&cV z4&OrbEu8_S+a+L3cH83%V1K2|>x8G#??0%rae|*#1p&|{0qlS&VlF8Y4}LT@Kk$uu zWn=w9;O|4yDn___n_cjzm?+^1M$*w-Ov&82&+Myd>W`W_JB%f`X3Z`AjCfu3CjuVq z%2wP4N^zCxm?~m{F~UcLHZHeDrZ6HwjH0H2L6|TmzK=-tR|Fn z%qYmO7~-(goTdB(@7S#gZJkE&VyNr5cB{GYrd=;n2V}wXc{tty2YKhO3pT^%iM6Muo@f^exa5WRs&Helz z!AhN$rFS&#^c*!_w4O^phL_h^zh$f$l8A!Pee%Y*mH#u_-{XS)6%xnDU-mYMAs;qT z_ph&6Klut479w}fS2%u!-$~e330NYTZ!ja1s-fyGNp$FT?C!>MQneI{>|7-la}7y~ zrM1T{^MfV6eU@8Wn;Y`}$qg`@xDwlvuA|dw<>G}gP16%OGY|9a_vvnU`;JWQ>npi$ z`DuTxbrh!V4z<{~2WMrEh1Qww6tpG{z^%?hvAt2Hj+lzLjrjt~hA^*O|DO(6myZiQ ziJSdlCa&lm6}1mb!E)uR*oNJ-@sqdedW7`UYaUAO)OY z-VcnaFE8{tY$=28I*L|_-tTFfdy;>4VBOOBVou@BI7sEZ?qMs&G?z6EKxi0OyiNuR zD7A#NJ2St^-@wiLvb2vUx0lE^pR#~o=0e?_yYC!%H=&}=jNag~Q^NO3Uso^hdEHn1 zhzJW;9#_HH2tR76b0*J+1pVY2$6pXZhN9!oHv+kPswWy*=TP+?f_`MU2?;OVzOgP3 zYh<1r!KeLT7?Fg*>~#yrRxYImVPUI@OCz;ZVt%VTp`a_`x@_kcQj`mkivin5NtXom zF+G=!o92(1wKablF!*vCtr9dxbTc2&pG+5xXZyHLa^d|<%gaYeMjb~K_UNPL>^5eR*lu`NSYabY^$&|; zT|Gxds{i4>;vP18QVhP;Y4hRXeYU%O%1*30p+2O=FTa0@KcRl%*tv2s_LO%RB~6zq zUC~h$$xjMm5XC)CGLwx;X4O_HVc1h*ozu( z#hfbWF_GF8O3F|>4RtAej4D#$X! z6cgf#4&3VoIMyc?F;#SCJCq9COoj;^f|mppPdCVI+35wbXJ}n^Yj)YbxPIHDyR>YA z1ishpczjZ~?*gMynkwJHrjR(<@a@_g8KPbi^a|F})%cjXq-O_Lj?sqsl0fSHsrI|> zuruCeSm;k*uiz;EWJKDXBsf=ib<)K+ZkDAmiAu5iLT zVZ5qD)vn5>-spX)&igaEBKYMdmRifHYSEQL4ibU=H^9J`#CYnkKD$-NHnnJ*wmX?) z$fQ_?+rbQlk9yAwohJGLwHvuWyLQdHXo4kI_x+EUDsljPK4`vuI{o#FDK;;{QvJz| zUSSW7NgW}-g$MIqdymXwk{F<+Kll5Y%bme@RJFtK%g3XzcMG>9r`5H>1pDO517MuK zXVvzsB)RG`M;c_&+icyZq~PxiiO{f|eVH8G$5#B&y#AHs6ovtr5n2hLXOQgzT9emj zkE&|ur!)*(Xg9Z=-?~z`W3}DGb#T$oTUPG%8@p%i2xPlxmd?JDV_;ZHBjMQ0AzfLL z?*1j)``PfjFmLJiP9pk2g+6O-n698>dyJrlNjtH*L$PW^?T@es4@7UcNm|?if$D|CA)hYo z9tfX^9%4FoqU4WFFE3NDHtN_7JHH8RPA@R}&gk5OmJxbD?@w630|g!QK7M}AP_|Qj zt2LV}iQAq$p|pWSm$xZ|BdhzdgsFm#Jg-Il2*_=Bx+-ZM+n^8wIwJ0`8^uh&NQR_-wo&X&cIlk^Nv1y!P52vW z4|#NxD1!^}p9*DGDl1uM%7Lfu_GD{`tSHK#R-h!$`w(uZh##kAte5%`DA?q$=SQm` z!FHE|qzgMbc5s@@{I0*pTkHi-+ZUIp8A;D}&MJ#b5N|xoOZPb^wU!nNkT7=e>OgB| zF!4#EaQAZCr}xRKlD@bdrASLwml@qNTk!W-^U(55aYD%Ky|1SdMEeYb-*f0w_YxHv z_kheDH{F?`zO%B;cX`TujzrBxPQ6s&J?5V`Zx++(q*?<;`;w^;-A~cs1yz6^Eo^2E0{*2d} z`c=~7SM{AF&FWW_V2xkxN5h=hl=$~k#PKK70lH7X3RVlXq_nxi-}yDan0^m|@*T!w ziwD1keLg5|PjU)QgRR`M5}5w5sqONn%=d*)s~hXp1** zv=HspJ&}Rtcfxmz7$q`n3}b`c#4x{`(YKV{r8eetcm@DYdnU0UK!%NhnwfBRARo{-Q5I1k^{-Qiy zB8H_#2vX_9ERETIHdOw+yUOr)SWw1zYO}t-RmW?qt1e1mY40?J&cE^W^5<6A#D$l4 z-+6^D3n}mY(T1u{g&v*2kb4+ybxC?kU*w5K2b}IKC-GZG2{F{X)@}F_!DblcLZtLT)`!U8a!=20@ajoP zJc85~vbL03#OZbk>`mzcRfLeMg~T-EJktH=LjNj4>9U{nbN+0C5NrKb^6in1q-4km z@ix>IBl`S^T&PBW5$#5?vB28C*wXZThHHIGPA?QrO?P-osh4wSoBK}3sM*+1CE>&SBFh3q+G+bEj3omEPB~fI)I7i zK<0swR~84Iv2$429%Ff1b;9KxFL|QCS4u=GAvUdzc)e{y>K8X1HPRNZ%kT zAt27fPc{Kolx!%mKEe4AtjUzDPxQvMmt2VNh;RFBMz84->87RKfJcxp)cT>EXkOvW zn)H}^({tyB1?ga`d1Ba!TM@ph#2r58w=a&O3}a7@8b^Vb=LsKGY^8lrWcL>-`LY+r z65oM=$C}@9#X|W1wQ-$MO=i&+Vn7j4t;IZ-FZ^zvB874{x0;PEfyaxc-zUcXwWOw`ue7TyE&c>{#|Ix7D0A&+vdV2ot7H zXvmV+EdxCc(l|b#*Zb6~{3Sd=@0!Lh>6>QRzR(w)w|v=iy>U~sGuAtz_Rz4FShj$D zHGj=Ot}i2IgTs9sN{5xtA#N=}Wz9YA2jnh$oPa+n%c-NrSD;H(^lQ?Q9QR)pa0;*O z))CuAasw&LJ`I642#p)e!)EXuiR}h+v>Cm_PGKsIm7&FFZ^Fa8f@RXs0kT#kYQ%)& zeWo7C!thx_Ms{VTK=;>Lbs@BeB>nLNZ3Vihv*;W-F5%JH0izaq6!5wW);ta$w~_Hc zr`qxYm*{S<+yy&)`ME+JP0&Mrp!KDjje+l6q%8Yt`z+qa7iR>UQ)mauA$?_ipc&#y$cs2 zO^dX1U1if{Fnz3gJ+kIr{84?$>W(Ih?OG+MW2yvP;a;pY0M%3pc<_&q1%w*fdGt6}it& zoE#2W>AbJ27*_dQrQP9voJ@%sN6r8tZ8i>{eJxT5%G5ggD5ZZ;@9%ePs=Ak}FNGws zO;z)3^%j(_%2b}{slzqnn<#?GLF=g(>u_(jI-bzxljfW@p}tiOLCa|AY4sh2$le^j z3b)q55f`(s{*Tq5=FxTV zfZ+h;5PMjl!-OpN>03SbJsFJWr0*{cr^kO8(2`lxvJc_RGj3z3B^g%^y zA9d2cBgOp1O551X0(0DBC1wjK)O+~J<3moA-57+RO6gG_n#Rd>4QxI*N2vYD-ZoU+ z9xw?H*V~Lg?2-dFg|+p5Y}>lA$^+(U$vW zdeUx(@xi7+hRW+_wp%k6>*UrXw{lwXs&oWyTw%BV{Pp6J>t#{YhlNFj&FM~utax8^ z>9iA#&mtZk$)5Oha2aEb!7&ut%cYMFM=5%W^27{sVX~3Bf_F=xx8tfa649$`bJGwz^xGU7IZ-&ichpI;r0|r}a8X-DA0hT?uf7;u zXkhsfqSjZI20ixe!YK9y81C=+JcLqsy2K8}Bon)1y;1R45V#L2WG*J`+UF;Rd z3(q1ugA_rAxN0tJD3WbwMNJP`i`t(7@3qwt z(6SJ5^I$o6g~7!X6%sP^5e-4(_VbgHP3S z>$FEX|AI9LEaRSp7g`)}>cq4pAvfdq>2{`Zam2Fa#vhlSfHD^3Nh|5Qj!Ev&(Xg-I zqUIkoHm2TV>&AH5uzi*)Phj5fycxvtE~r8uEaCh3nk%hDMt%#nL%5_+{gs=%`uD>` z;>Hcrb)xh}ue(J*as%dTGR&<679aQ|+eH~0Sl7AHcK=?4VsY-rF({$!%iEtF&=e|- z_wK4!UdS|Q&2@cPR5#gL3R2sT`?jR$b61?#Y~ORdZd>Q2mT1d0Y1VMff`ZW(>emfx zNPQxKQ3aH{yrK_$cwEdcX>Z0KEY(^1S_LvGAbY^v`Piy)H%FiT{w!CTvA?$%6l46? z>dsZLPChd$uBO?4aKM|M@KMUpwV44;p_T5CR+4D)^|D@x6uC)`Nr}W{X}B0{A*+yhf-8)?__5H?=0E}4v$4|+dffD|n zvFQG=6i%iWRpSz_f0r~z6c}IpKKVAl`5J+XnJ6TmTb$1wB$#Z}Y~psPy&NZA>H{^7)Uv%#*%+GL8L>(a8aL8qrCXU_Q(zZW0w zWfa*P#66ag`Yh+~ZZX$P+hqBuvq4BMHQtHnuYD6K3n_at1h}Du)6%cPyph@Mt6MQ5 zZo>zO9a|*XVb5y>oE5!&{k1jx&h@@kVtt#(yU#pqQ-=GAG9yTy?-TN@+D(%Yn5FxU za>!iw^A0}0vRk}gl{ya3OO?~};%O!u#8FZ&wI>4gVPg+0V_GMD#2N@0`*&ELK$EQ` z1W>E0Wa+sXGMp+Qv~3~u2*cfYgl#2XxJ}CQ;k+7pCAv{n@OT31YCY%0V&@Ix8O69X4 zc>ZNb)778i4a{9-4~z`-*pxk23OP2Tm#EY7U%J1tO<$oAjeV8z_qn}`y$1Du@V;b{ z@Yv)PUsm`2NO)*)_%ZC?;jaW|flNKB(!p1@(5Gz&%8;JIj*-Db2IG$PU6<%7ExH?` zFD{MgD+45WG(3(0>t6`ej(;qG(E+Jn4)ko9Vmj6krP+bCsL-c%JC~w5+O{IPW@@^j zEV$6JA;Op~2jZ_LKfxXfMIf_;&-#3bm9i4F#@rFYy{mCtigoj1zPAAk{mqa=Y`KM# zj^V(+Tt!_Tpsa@^C7qFkbX<*o{@FXIELKVONGcX~?oEV&l0#-xQ(+&^XdVA5Nfo*z z_BjidEI;Pv?mqb}_KJDQX(hNdlq~UrcUi7k0C|nrHIux0*`?d?u|P;5Fq!uBhc>gI<1PIZUD&MzF+8jo#U*M;)3r^uG!QcA+N=Ub6~)Pv;CDYv@9=*G|GG9UCL}paCo`?-ZDrD5F>!8B>eJcZWYS-N8j(e^eih3y zj>u~gwHKrxd?4)qu<7&zWqB9gVZP^Fk?kUMZ=$HAn)FpM$j_Qe#WjR-Ev}`YMS1G9 z=f}4eQOYE_@u{z7@EU0=_ufy%yEFUv)gC%{WN@*?vJMpy)+82aNo#7URTZZsatcT! zjZvGH95rrPG-O=n4H@{=)^AdbvPLsl@_ri6zA=piP%1~&P>N3Iilv+^ELTbUCggcn zcZtlC$C_*aWiATz`0DF4+XZ%ty}zv9Lw78D!Qco+YDigDvZYRDe1HceKeSPmY}6bj zI_E$J+yPn7YJELW3w&(R&O)&u5Nh7!bSBJ}MAzYISe&_eJ9R3SV(=f)g7$Jq?zg{y z`;|gqJ*0g6xv@iA5+Jr*XgK?sqQviB?VulncCxm#6#FOGBQ49RJzDou6%aP~Ej?sz z``m0a)vs43ekpzSWBf9Tj2C~`2Zaz|t+2s5o{Y#!BrCMn{AL&9=lb~EDL_8mIMQ>N z06EgcpQ!O(nn&IL2eRRC-_pa(!r?wQT^s13cLkCSf%Cui?<{0Kf+zI#3I6uf5*7lmnc&D|(2V4=pafWeit6A?%^?7@f_5kSKny`on2FVs0+*8_Vrj zr8RJb-5l1XzLMZv?cYPy)y=da>h#T}a;M_vDfv-Fnb7Ts>}g-lFwNQc->`NEVajw$ zH4kBOF=B5Bg(|p}h;acKGqy)Z+Ok5qh0g(qyZ++H5P{egxwTp(k$p+fUks-HJOQiJ zN&niE_9V4$J60iO6iNCrWy)Zpe7wFWfgI?lA(bBWUgK=bKlBc5@iPzSu%{6N(WRw| zW{lf$N{Y*x*y1g4J zs3zABhMn}IPRsaD`hX1bH-Zhnlv}ssu7z|}>jhy)?4GArc5v#(eDzu=Gw%V@7fOc# z+@ue1lYSKT!!eTk*Dir@gOqBCPo^mSv=|Ftn;#AJ4h<)N2-(|uNo`L7kp1Xrsdm!F zpO!L0?uBTgU5#os!=VKh7qM&57cQt@t>&#YGnr6)bge-s{e5cn2S#I%6U@)6nFqt34 zvFCu44=N|S|3(f+AAyWb(IbF>S&FkjNs}cO6@I#7XZDR`h#xD`4@PuAWL1EugW_zt z|Mb)?V6C+BGet553dmbYE@KC)6A$$MYTQyMn+b1ZSlpT>nly&Y3I~Kv^COUSVF&&Mk~@r&OkJ!_M{Xivk>IUa*H!yH z0#r~r)#WHm?KEQCpMY`UpD@RA*X=yFHpubLF=p`2g;FTX5tu?nZ2kl$#tR4mOvc7r zi;d+an-*;4m{*a@&}ff2ZPM3=8UOentnLLC7iBvYn+&Hs&$L)1Nx+jhQ6>;jj_9KJ4hD0bgv a+C7vutK5HN`(d04cxkBWs1)Bqg#Hh&^Ma=U literal 0 HcmV?d00001 diff --git a/deploy/crate-datasource/dist/img/crate-datasource-error.png b/deploy/crate-datasource/dist/img/crate-datasource-error.png new file mode 100755 index 0000000000000000000000000000000000000000..40f9a8bdd5f5a82f6bf12a84c771feafacc2203b GIT binary patch literal 106287 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�l}J$%ju#cZre=GCjKu<0H&U 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 literal 0 HcmV?d00001 diff --git a/deploy/crate-datasource/dist/img/crate-datasource-graph.png b/deploy/crate-datasource/dist/img/crate-datasource-graph.png new file mode 100755 index 0000000000000000000000000000000000000000..6d7b735265988a98a3580d6c134f34da2e4f23a3 GIT binary patch literal 52270 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

C?^}sz-b7y;npB{>> zU~ntq@7~?i^_RnrH~74gxMeJ<(t7<@VVf|6IFYI=&f{X+vp z!;Yn}DFw1~$ZL6YH;}RT9kCMK^UdjT9jwyyvZuh>Z*~uuziJ+wbxc8UT2C#-5mBKN zdGuu(q(S&;6*84JGC}U4oz+w}YX{abkQ8evWkI#~;?^E`6xwv32MCo%+@Sj@`hMvX z(=6ngP%&FV8Wv2kgXhl_LhS>^FEn?*i~o^)h^P${a+l=hY`nBn6qzG&~t&S4B(5<%hJ0r9RwE z?zO6G^m;`%QcG^-qL3p7wz?S4gs-&A`e&U8$1yc&R7v?N2%Td?q zrg72lI)I`Av4|Mu)pjkv5fz4b;S=m5tY&4CzIc_QR3v4(cBzruv(IhJVJ6@SSoBRa zd~jk{YpAkC*y~j6ic4rsY}C!*C$E)k=92S7ViEM zz9j6v>jazSnJ=6a7E*FBQ<$HVHvO`0(TdTX)14;Cws!Wmy56c|wRoA~@^rRLmG4*- z(kl3lgSuzhAW_n7R8j?3)e=oUZZ0_~WW4jPQ_X()Q1v3IeCmB;(%Z%J%)!N3;3Xrf z3@mhaKwNZ5D`AX4=)UE)@IR>apKm~xOwii<4{=1W+v;*g_0bDzYu#_;){m70%4_1l zzQejB$qq0$JNKIIm$Ma9dq{CSH~RS-hRh)V&4sZp%{H{kL$n=P$@k#a)|KY&2Bpqw zeobvLd-N8g#-gHaif&lzL9^dzii@g;66}|xMu9astrXl=+=*##AMakV%l)A&tmlWSd=OlWh@4=%TV*0K-+aCn<+6$O#mn5(%yALPm9$q?Ox6JxZ;O3u{4?Y_^^s)8sG|OAy<3=() zm9bP1+UIC84}KW7>~d-gS^8&1DV$}wd5h^m>UD|cE^E>TCp2o|Jy&a-c5)-3yO~x; zsg)DjqyMV7#orFi12+8d3JhQ|jV#bec-Bm`P6ld4`H9By(C?kja1J-$_U|$xGaB-h zg8`8p$odusbvt7FNRa&4y8x5Z6T4*sezD|06BOD^DHMgR{@}v;%1_y)_XI`YaJ%O$ zcuM2K78k>;gtlZVxyj{HZMYoEv%msUZ67Ht^F@1@D!6Xl_k~&nJrlJ9GJVG(g^VG= z8Gx`B@l*t#4gzxy-RE0&kqtlEuGl~|Cj~Z895UI7bt|2uMyn<|E?pSr^jDgLswo0x^t4@}<+| zUaPd!L9VSae#1nJSQY-32cI-phPHf0BhH+o1P53E#+P7pSWIVUgI1 zSQzMyU*&~HFIn5nKY-pokOQ7BlXw}Srq7!b5w-wr0^2#u?%jxg-{N~R>$x4uF2#Xk z$1;vEq%6i&tz`}j>#X&c2Qm|8-vx|$gzi?**4@|I+LEZhnJK+}Uj;+TiA

>t@$ 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 O00f?{elF{r5}E+-TJlE# literal 0 HcmV?d00001 diff --git a/deploy/crate-datasource/dist/img/crate_logo.png b/deploy/crate-datasource/dist/img/crate_logo.png new file mode 100755 index 0000000000000000000000000000000000000000..0a34a156cd1b83e0dc090aaba97e7d20f4edad88 GIT binary patch literal 19112 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 literal 0 HcmV?d00001 diff --git a/deploy/crate-datasource/dist/module.d.ts b/deploy/crate-datasource/dist/module.d.ts new file mode 100755 index 0000000..c844c58 --- /dev/null +++ b/deploy/crate-datasource/dist/module.d.ts @@ -0,0 +1,10 @@ +import { CrateDatasource } from './datasource'; +import { CrateDatasourceQueryCtrl } from './query_ctrl'; +import { CrateConfigCtrl } from './config_ctrl'; +declare class CrateQueryOptionsCtrl { + static templateUrl: string; +} +declare class CrateAnnotationsQueryCtrl { + static templateUrl: string; +} +export { CrateDatasource as Datasource, CrateDatasourceQueryCtrl as QueryCtrl, CrateConfigCtrl as ConfigCtrl, CrateQueryOptionsCtrl as QueryOptionsCtrl, CrateAnnotationsQueryCtrl as AnnotationsQueryCtrl }; diff --git a/deploy/crate-datasource/dist/module.js b/deploy/crate-datasource/dist/module.js new file mode 100755 index 0000000..73c24dc --- /dev/null +++ b/deploy/crate-datasource/dist/module.js @@ -0,0 +1,36 @@ +System.register(['./datasource', './query_ctrl', './config_ctrl'], function(exports_1) { + var datasource_1, query_ctrl_1, config_ctrl_1; + var CrateQueryOptionsCtrl, CrateAnnotationsQueryCtrl; + return { + setters:[ + function (datasource_1_1) { + datasource_1 = datasource_1_1; + }, + function (query_ctrl_1_1) { + query_ctrl_1 = query_ctrl_1_1; + }, + function (config_ctrl_1_1) { + config_ctrl_1 = config_ctrl_1_1; + }], + execute: function() { + CrateQueryOptionsCtrl = (function () { + function CrateQueryOptionsCtrl() { + } + CrateQueryOptionsCtrl.templateUrl = 'partials/query.options.html'; + return CrateQueryOptionsCtrl; + })(); + CrateAnnotationsQueryCtrl = (function () { + function CrateAnnotationsQueryCtrl() { + } + CrateAnnotationsQueryCtrl.templateUrl = 'partials/annotations.editor.html'; + return CrateAnnotationsQueryCtrl; + })(); + exports_1("Datasource", datasource_1.CrateDatasource); + exports_1("QueryCtrl", query_ctrl_1.CrateDatasourceQueryCtrl); + exports_1("ConfigCtrl", config_ctrl_1.CrateConfigCtrl); + exports_1("QueryOptionsCtrl", CrateQueryOptionsCtrl); + exports_1("AnnotationsQueryCtrl", CrateAnnotationsQueryCtrl); + } + } +}); +//# sourceMappingURL=module.js.map \ No newline at end of file diff --git a/deploy/crate-datasource/dist/module.js.map b/deploy/crate-datasource/dist/module.js.map new file mode 100755 index 0000000..b98c4b4 --- /dev/null +++ b/deploy/crate-datasource/dist/module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"module.js","sourceRoot":"","sources":["module.ts"],"names":["CrateQueryOptionsCtrl","CrateQueryOptionsCtrl.constructor","CrateAnnotationsQueryCtrl","CrateAnnotationsQueryCtrl.constructor"],"mappings":";;;;;;;;;;;;;;;YAIA;gBAAAA;gBAEAC,CAACA;gBADQD,iCAAWA,GAAGA,6BAA6BA,CAACA;gBACrDA,4BAACA;YAADA,CAACA,AAFD,IAEC;YAED;gBAAAE;gBAEAC,CAACA;gBADQD,qCAAWA,GAAGA,kCAAkCA,CAACA;gBAC1DA,gCAACA;YAADA,CAACA,AAFD,IAEC;YAGoB,qDAAU;YACD,6DAAS;YAClB,sDAAU;YACJ,oDAAgB;YACZ,4DAAoB"} \ No newline at end of file diff --git a/deploy/crate-datasource/dist/module.ts b/deploy/crate-datasource/dist/module.ts new file mode 100755 index 0000000..b1b9b40 --- /dev/null +++ b/deploy/crate-datasource/dist/module.ts @@ -0,0 +1,19 @@ +import {CrateDatasource} from './datasource'; +import {CrateDatasourceQueryCtrl} from './query_ctrl'; +import {CrateConfigCtrl} from './config_ctrl'; + +class CrateQueryOptionsCtrl { + static templateUrl = 'partials/query.options.html'; +} + +class CrateAnnotationsQueryCtrl { + static templateUrl = 'partials/annotations.editor.html'; +} + +export { + CrateDatasource as Datasource, + CrateDatasourceQueryCtrl as QueryCtrl, + CrateConfigCtrl as ConfigCtrl, + CrateQueryOptionsCtrl as QueryOptionsCtrl, + CrateAnnotationsQueryCtrl as AnnotationsQueryCtrl, +}; diff --git a/deploy/crate-datasource/dist/partials/annotations.editor.html b/deploy/crate-datasource/dist/partials/annotations.editor.html new file mode 100755 index 0000000..81f3baf --- /dev/null +++ b/deploy/crate-datasource/dist/partials/annotations.editor.html @@ -0,0 +1,24 @@ + +
+
+ +
+
+ +
Field mappings If your query returns more than one field you need to specify the column names below. An annotation event is composed of a title, tags, and an additional text field.
+
+
+
+ Title + +
+
+ Text + +
+
+ Tags + +
+
+
diff --git a/deploy/crate-datasource/dist/partials/config.html b/deploy/crate-datasource/dist/partials/config.html new file mode 100755 index 0000000..60a7192 --- /dev/null +++ b/deploy/crate-datasource/dist/partials/config.html @@ -0,0 +1,50 @@ + + + +

Crate details

+ +
+
+
+ Schema + + +
+ +
+ Table + + +
+
+ + + + +
+ Time column + + +
+ +
+ Default grouping interval + +
+ +
diff --git a/deploy/crate-datasource/dist/partials/query.editor.html b/deploy/crate-datasource/dist/partials/query.editor.html new file mode 100755 index 0000000..f5d3c87 --- /dev/null +++ b/deploy/crate-datasource/dist/partials/query.editor.html @@ -0,0 +1,149 @@ + + + +
+ + +
+ + +
+ diff --git a/deploy/crate-datasource/dist/partials/query.options.html b/deploy/crate-datasource/dist/partials/query.options.html new file mode 100755 index 0000000..e69de29 diff --git a/deploy/crate-datasource/dist/plugin.json b/deploy/crate-datasource/dist/plugin.json new file mode 100755 index 0000000..7396d85 --- /dev/null +++ b/deploy/crate-datasource/dist/plugin.json @@ -0,0 +1,36 @@ +{ + "name": "Crate", + "id": "crate-datasource", + "type": "datasource", + + "partials": { + "config": "public/app/plugins/datasource/crate/partials/config.html" + }, + + "metrics": true, + "annotations": true, + "alerting": true, + + "info": { + "description": "Crate SQL Database datasource", + "author": { + "name": "Crate.IO", + "url": "https://crate.io" + }, + "logos": { + "small": "img/crate_logo.png", + "large": "img/crate_logo.png" + }, + "links": [ + {"name": "GitHub", "url": "https://github.com/raintank/crate-datasource"}, + {"name": "MIT License", "url": "https://github.com/raintank/crate-datasource/blob/master/LICENSE"} + ], + "version": "0.5.2", + "updated": "2018-03-12" + }, + + "dependencies": { + "grafanaVersion": "3.x.x", + "plugins": [] + } +} diff --git a/deploy/crate-datasource/dist/query_builder.d.ts b/deploy/crate-datasource/dist/query_builder.d.ts new file mode 100755 index 0000000..c2a8104 --- /dev/null +++ b/deploy/crate-datasource/dist/query_builder.d.ts @@ -0,0 +1,40 @@ +/// +export declare class CrateQueryBuilder { + private templateSrv; + schema: string; + table: string; + defaultTimeColumn: string; + defaultGroupInterval: string; + constructor(schema: string, table: string, defaultTimeColumn: string, defaultGroupInterval: string, templateSrv: any); + /** + * Builds Crate SQL query from given target object. + * @param {any} target Target object. + * @param {number} groupInterval Interval for grouping values. + * @param {string} defaultAgg Default aggregation for values. + * @return {string} SQL query. + */ + build(target: any, groupInterval?: number, adhocFilters?: any[], limit?: number, defaultAgg?: string): string; + buildAggQuery(target: any, groupInterval?: number, adhocFilters?: any[], limit?: number): string; + buildRawAggQuery(target: any, groupInterval?: number, adhocFilters?: any[], limit?: number): string; + renderAdhocFilters(filters: any): any; + /** + * Builds SQL query for getting available columns from table. + * @return {string} SQL query. + */ + getColumnsQuery(): string; + getNumericColumnsQuery(): string; + /** + * Builds SQL query for getting unique values for given column. + * @param {string} column Column name + * @param {number} limit Optional. Limit number returned values. + */ + getValuesQuery(column: string, limit?: number, timeRange?: any): string; + private renderMetricAggs(metricAggs, withAlias?); + private renderWhereClauses(whereClauses); + private containsVariable(str); +} +export declare function getSchemas(): string; +export declare function getTables(schema: any): string; +export declare function getEnabledAggs(metricAggs: any): any; +export declare function getRawAggs(metricAggs: any): any; +export declare function getNotRawAggs(metricAggs: any): any; diff --git a/deploy/crate-datasource/dist/query_builder.js b/deploy/crate-datasource/dist/query_builder.js new file mode 100755 index 0000000..101fb91 --- /dev/null +++ b/deploy/crate-datasource/dist/query_builder.js @@ -0,0 +1,396 @@ +/// +System.register(['lodash'], function(exports_1) { + var lodash_1; + var MAX_LIMIT, DEFAULT_LIMIT, CrateQueryBuilder; + function getSchemas() { + var query = "SELECT schema_name " + + "FROM information_schema.schemata " + + "WHERE schema_name NOT IN ('information_schema', 'blob', 'sys', 'pg_catalog') " + + "ORDER BY 1"; + return query; + } + exports_1("getSchemas", getSchemas); + function getTables(schema) { + var query = "SELECT table_name " + + "FROM information_schema.tables " + + "WHERE table_schema='" + schema + "' " + + "ORDER BY 1"; + return query; + } + exports_1("getTables", getTables); + function quoteColumn(column) { + if (isWithUpperCase(column)) { + return '\"' + column + '\"'; + } + else { + return column; + } + } + function quoteValue(value) { + value = value.trim(); + var match = value.match(/^'?([^']*)'?$/); + if (match[1]) { + value = match[1]; + } + else { + return value; + } + if (!isNaN(Number(value))) { + return value; + } + else { + return "'" + value + "'"; + } + } + function isWithUpperCase(str) { + return str.toLowerCase() !== str; + } + function aggregateMetrics(metricAggs, aggType) { + var aggs = lodash_1["default"].cloneDeep(metricAggs); + return lodash_1["default"].map(aggs, function (agg) { + if (agg.type === 'raw') { + agg.type = aggType; + return agg; + } + else { + return agg; + } + }); + } + function getEnabledAggs(metricAggs) { + return lodash_1["default"].filter(metricAggs, function (agg) { + return !agg.hide; + }); + } + exports_1("getEnabledAggs", getEnabledAggs); + function getRawAggs(metricAggs) { + return lodash_1["default"].filter(metricAggs, { type: 'raw' }); + } + exports_1("getRawAggs", getRawAggs); + function getNotRawAggs(metricAggs) { + return lodash_1["default"].filter(metricAggs, function (agg) { + return agg.type !== 'raw'; + }); + } + exports_1("getNotRawAggs", getNotRawAggs); + return { + setters:[ + function (lodash_1_1) { + lodash_1 = lodash_1_1; + }], + execute: function() { + // Maximum LIMIT value + MAX_LIMIT = 100000; + DEFAULT_LIMIT = 10000; + CrateQueryBuilder = (function () { + function CrateQueryBuilder(schema, table, defaultTimeColumn, defaultGroupInterval, templateSrv) { + this.templateSrv = templateSrv; + this.schema = schema; + this.table = table; + this.defaultTimeColumn = defaultTimeColumn; + this.defaultGroupInterval = defaultGroupInterval; + this.templateSrv = templateSrv; + } + /** + * Builds Crate SQL query from given target object. + * @param {any} target Target object. + * @param {number} groupInterval Interval for grouping values. + * @param {string} defaultAgg Default aggregation for values. + * @return {string} SQL query. + */ + CrateQueryBuilder.prototype.build = function (target, groupInterval, adhocFilters, limit, defaultAgg) { + if (groupInterval === void 0) { groupInterval = 0; } + if (adhocFilters === void 0) { adhocFilters = []; } + if (limit === void 0) { limit = DEFAULT_LIMIT; } + if (defaultAgg === void 0) { defaultAgg = 'avg'; } + var query; + var timeExp; + var timeColumn = quoteColumn(this.defaultTimeColumn); + var aggs = getEnabledAggs(target.metricAggs); + var rawAggs = getRawAggs(aggs); + if (!aggs.length) { + return null; + } + if (groupInterval) { + // Manually aggregate by time interval, ie "SELECT floor(ts/10)*10 as time ..." + timeExp = "floor(" + timeColumn + "/" + groupInterval + ")*" + groupInterval; + aggs = aggregateMetrics(aggs, 'avg'); + } + else { + timeExp = timeColumn; + } + // SELECT + var renderedAggs = this.renderMetricAggs(aggs); + query = "SELECT " + timeExp + " as time, " + renderedAggs; + // Add GROUP BY columns to SELECT statement. + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + query += (" FROM \"" + this.schema + "\".\"" + this.table + "\"") + + (" WHERE " + timeColumn + " >= ? AND " + timeColumn + " <= ?"); + // WHERE + if (target.whereClauses && target.whereClauses.length) { + query += " AND " + this.renderWhereClauses(target.whereClauses); + } + // Add ad-hoc filters + if (adhocFilters.length > 0) { + query += " AND " + this.renderAdhocFilters(adhocFilters); + } + // GROUP BY + query += " GROUP BY time"; + if (!groupInterval && rawAggs.length) { + query += ", " + this.renderMetricAggs(rawAggs, false); + } + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + // If GROUP BY specified, sort also by selected columns + query += " ORDER BY time"; + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + query += " ASC"; + return query; + }; + CrateQueryBuilder.prototype.buildAggQuery = function (target, groupInterval, adhocFilters, limit) { + if (groupInterval === void 0) { groupInterval = 0; } + if (adhocFilters === void 0) { adhocFilters = []; } + var query; + var timeExp; + var timeColumn = quoteColumn(this.defaultTimeColumn); + var aggs = getEnabledAggs(target.metricAggs); + aggs = getNotRawAggs(aggs); + if (!aggs.length) { + return null; + } + if (!groupInterval) { + groupInterval = 1; + } + if (typeof groupInterval === 'number') { + // Manually aggregate by time interval, ie "SELECT floor(ts/10)*10 as time ..." + timeExp = "floor(" + timeColumn + "/" + groupInterval + ")*" + groupInterval; + } + else { + // Use built-in date_trunc() function + timeExp = "date_trunc('" + groupInterval + "', " + timeColumn + ")"; + } + // SELECT + var renderedAggs = this.renderMetricAggs(aggs); + query = "SELECT " + timeExp + " as time, " + renderedAggs; + // Add GROUP BY columns to SELECT statement. + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + // FROM + query += " FROM \"" + this.schema + "\".\"" + this.table + "\""; + // WHERE + query += " WHERE " + timeColumn + " >= ? AND " + timeColumn + " <= ?"; + if (target.whereClauses && target.whereClauses.length) { + query += " AND " + this.renderWhereClauses(target.whereClauses); + } + // Add ad-hoc filters + if (adhocFilters.length > 0) { + query += " AND " + this.renderAdhocFilters(adhocFilters); + } + // GROUP BY + query += " GROUP BY time"; + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + // If GROUP BY specified, sort also by selected columns + query += " ORDER BY time"; + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + query += " ASC"; + if (limit && limit > DEFAULT_LIMIT) { + limit = Math.min(limit, MAX_LIMIT); + query += " LIMIT " + limit; + } + return query; + }; + CrateQueryBuilder.prototype.buildRawAggQuery = function (target, groupInterval, adhocFilters, limit) { + if (groupInterval === void 0) { groupInterval = 0; } + if (adhocFilters === void 0) { adhocFilters = []; } + var query; + var timeExp; + var timeColumn = quoteColumn(this.defaultTimeColumn); + var aggs = getEnabledAggs(target.metricAggs); + var rawAggs = getRawAggs(aggs); + if (!rawAggs.length) { + return null; + } + // SELECT + var renderedAggs = this.renderMetricAggs(rawAggs); + query = "SELECT " + timeColumn + " as time, " + renderedAggs; + // Add GROUP BY columns to SELECT statement. + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + query += (" FROM \"" + this.schema + "\".\"" + this.table + "\"") + + (" WHERE " + timeColumn + " >= ? AND " + timeColumn + " <= ?"); + // WHERE + if (target.whereClauses && target.whereClauses.length) { + query += " AND " + this.renderWhereClauses(target.whereClauses); + } + // Add ad-hoc filters + if (adhocFilters.length > 0) { + query += " AND " + this.renderAdhocFilters(adhocFilters); + } + // GROUP BY + query += " GROUP BY time"; + query += ", " + this.renderMetricAggs(rawAggs, false); + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + // If GROUP BY specified, sort also by selected columns + query += " ORDER BY time"; + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + query += " ASC"; + if (limit) { + limit = Math.min(limit, MAX_LIMIT); + query += " LIMIT " + limit; + } + return query; + }; + CrateQueryBuilder.prototype.renderAdhocFilters = function (filters) { + var conditions = lodash_1["default"].map(filters, function (tag, index) { + var filter_str = ""; + var condition = tag.condition || 'AND'; + var key = quoteColumn(tag.key); + var operator = tag.operator; + var value = quoteValue(tag.value); + if (index > 0) { + filter_str = condition + " "; + } + if (operator === '=~') { + operator = '~'; + } + filter_str += key + " " + operator + " " + value; + return filter_str; + }); + return conditions.join(' '); + }; + /** + * Builds SQL query for getting available columns from table. + * @return {string} SQL query. + */ + CrateQueryBuilder.prototype.getColumnsQuery = function () { + var query = "SELECT column_name " + + "FROM information_schema.columns " + + "WHERE table_schema = '" + this.schema + "' " + + "AND table_name = '" + this.table + "' " + + "ORDER BY 1"; + return query; + }; + CrateQueryBuilder.prototype.getNumericColumnsQuery = function () { + return "SELECT column_name " + + "FROM information_schema.columns " + + "WHERE table_schema = '" + this.schema + "' " + + "AND table_name = '" + this.table + "' " + + "AND data_type in ('integer', 'long', 'short', 'double', 'float', 'byte') " + + "ORDER BY 1"; + }; + /** + * Builds SQL query for getting unique values for given column. + * @param {string} column Column name + * @param {number} limit Optional. Limit number returned values. + */ + CrateQueryBuilder.prototype.getValuesQuery = function (column, limit, timeRange) { + var timeColumn = quoteColumn(this.defaultTimeColumn); + var query = ("SELECT DISTINCT " + column + " ") + + ("FROM \"" + this.schema + "\".\"" + this.table + "\""); + if (timeRange) { + var timeFrom = timeRange.from.valueOf(); + var timeTo = timeRange.to.valueOf(); + query += " WHERE " + timeColumn + " >= " + timeFrom + " AND " + timeColumn + " <= " + timeTo; + } + if (limit) { + query += " LIMIT " + limit; + } + return query; + }; + CrateQueryBuilder.prototype.renderMetricAggs = function (metricAggs, withAlias) { + if (withAlias === void 0) { withAlias = true; } + var enabledAggs = lodash_1["default"].filter(metricAggs, function (agg) { + return !agg.hide; + }); + var renderedAggs = lodash_1["default"].map(enabledAggs, function (agg) { + var alias = ''; + if (agg.alias && withAlias) { + alias = ' AS \"' + agg.alias + '\"'; + } + var column = quoteColumn(agg.column); + if (agg.type === 'count_distinct') { + return "count(distinct " + column + ")" + alias; + } + else if (agg.type === 'raw') { + return column + alias; + } + else { + return agg.type + "(" + column + ")" + alias; + } + }); + if (renderedAggs.length) { + return renderedAggs.join(', '); + } + else { + return ""; + } + }; + CrateQueryBuilder.prototype.renderWhereClauses = function (whereClauses) { + var _this = this; + var renderedClauses = lodash_1["default"].map(whereClauses, function (clauseObj, index) { + var rendered = ""; + if (index !== 0) { + rendered += clauseObj.condition + " "; + } + // Quote arguments as required by the operator and value type + var rendered_value; + var value = clauseObj.value; + if (clauseObj.operator.toLowerCase() === 'in') { + // Handle IN operator. Split comma-separated values. + // "42, 10, a" => 42, 10, 'a' + rendered_value = '(' + lodash_1["default"].map(value.split(','), function (v) { + v = v.trim(); + if (!isNaN(v) || _this.containsVariable(v)) { + return v; + } + else { + return "'" + v + "'"; + } + }).join(', ') + ')'; + } + else { + rendered_value = lodash_1["default"].map(value.split(','), function (v) { + v = v.trim(); + if (!isNaN(v) || _this.containsVariable(v)) { + return v; + } + else { + return "'" + v + "'"; + } + }).join(', '); + } + rendered += clauseObj.column + ' ' + clauseObj.operator + ' ' + rendered_value; + return rendered; + }); + return renderedClauses.join(' '); + }; + // Check for template variables + CrateQueryBuilder.prototype.containsVariable = function (str) { + var variables = lodash_1["default"].map(this.templateSrv.variables, 'name'); + return lodash_1["default"].some(variables, function (variable) { + var pattern = new RegExp('\\$' + variable); + return pattern.test(str); + }); + }; + return CrateQueryBuilder; + })(); + exports_1("CrateQueryBuilder", CrateQueryBuilder); + } + } +}); +//# sourceMappingURL=query_builder.js.map \ No newline at end of file diff --git a/deploy/crate-datasource/dist/query_builder.js.map b/deploy/crate-datasource/dist/query_builder.js.map new file mode 100755 index 0000000..d2bb5b4 --- /dev/null +++ b/deploy/crate-datasource/dist/query_builder.js.map @@ -0,0 +1 @@ +{"version":3,"file":"query_builder.js","sourceRoot":"","sources":["query_builder.ts"],"names":["getSchemas","getTables","quoteColumn","quoteValue","isWithUpperCase","aggregateMetrics","getEnabledAggs","getRawAggs","getNotRawAggs","CrateQueryBuilder","CrateQueryBuilder.constructor","CrateQueryBuilder.build","CrateQueryBuilder.buildAggQuery","CrateQueryBuilder.buildRawAggQuery","CrateQueryBuilder.renderAdhocFilters","CrateQueryBuilder.getColumnsQuery","CrateQueryBuilder.getNumericColumnsQuery","CrateQueryBuilder.getValuesQuery","CrateQueryBuilder.renderMetricAggs","CrateQueryBuilder.renderWhereClauses","CrateQueryBuilder.containsVariable"],"mappings":"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AACA,CAACA,KAAKA,KAAKA,CAACA,CAACA,CAACA,CAACA;4BAChBA,QAAQA,IAAIA,SAASA,CAACA,SAASA,GAAGA,GAAGA,CAACA;wBACxCA,CAACA;wBAEDA,6DAA6DA;wBAC7DA,IAAIA,cAAsBA,CAACA;wBAC3BA,IAAIA,KAAKA,GAAGA,SAASA,CAACA,KAAKA,CAACA;wBAC5BA,EAAEA,CAACA,CAACA,SAASA,CAACA,QAAQA,CAACA,WAAWA,EAAEA,KAAKA,IAAIA,CAACA,CAACA,CAACA;4BAC9CA,oDAAoDA;4BACpDA,6BAA6BA;4BAC7BA,cAAcA,GAAGA,GAAGA,GAAGA,mBAACA,CAACA,GAAGA,CAACA,KAAKA,CAACA,KAAKA,CAACA,GAAGA,CAACA,EAAEA,UAAAA,CAACA;gCAC9CA,CAACA,GAAGA,CAACA,CAACA,IAAIA,EAAEA,CAACA;gCACbA,EAAEA,CAACA,CAACA,CAACA,KAAKA,CAACA,CAACA,CAACA,IAAIA,KAAIA,CAACA,gBAAgBA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA;oCAC1CA,MAAMA,CAACA,CAACA,CAACA;gCACXA,CAACA;gCAACA,IAAIA,CAACA,CAACA;oCACNA,MAAMA,CAACA,GAAGA,GAAGA,CAACA,GAAGA,GAAGA,CAACA;gCACvBA,CAACA;4BACHA,CAACA,CAACA,CAACA,IAAIA,CAACA,IAAIA,CAACA,GAAGA,GAAGA,CAACA;wBACtBA,CAACA;wBAACA,IAAIA,CAACA,CAACA;4BACNA,cAAcA,GAAGA,mBAACA,CAACA,GAAGA,CAACA,KAAKA,CAACA,KAAKA,CAACA,GAAGA,CAACA,EAAEA,UAAAA,CAACA;gCACxCA,CAACA,GAAGA,CAACA,CAACA,IAAIA,EAAEA,CAACA;gCACbA,EAAEA,CAACA,CAACA,CAACA,KAAKA,CAACA,CAACA,CAACA,IAAIA,KAAIA,CAACA,gBAAgBA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA;oCAC1CA,MAAMA,CAACA,CAACA,CAACA;gCACXA,CAACA;gCAACA,IAAIA,CAACA,CAACA;oCACNA,MAAMA,CAACA,GAAGA,GAAGA,CAACA,GAAGA,GAAGA,CAACA;gCACvBA,CAACA;4BACHA,CAACA,CAACA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;wBAChBA,CAACA;wBACDA,QAAQA,IAAIA,SAASA,CAACA,MAAMA,GAAGA,GAAGA,GAAGA,SAASA,CAACA,QAAQA,GAAGA,GAAGA,GAAGA,cAAcA,CAACA;wBAC/EA,MAAMA,CAACA,QAAQA,CAACA;oBAClBA,CAACA,CAACA,CAACA;oBACHA,MAAMA,CAACA,eAAeA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA;gBACnCA,CAACA;gBAEDV,+BAA+BA;gBACvBA,4CAAgBA,GAAxBA,UAAyBA,GAAWA;oBAClCW,IAAIA,SAASA,GAAGA,mBAACA,CAACA,GAAGA,CAACA,IAAIA,CAACA,WAAWA,CAACA,SAASA,EAAEA,MAAMA,CAACA,CAACA;oBAC1DA,MAAMA,CAACA,mBAACA,CAACA,IAAIA,CAACA,SAASA,EAAEA,UAAAA,QAAQA;wBAC/BA,IAAIA,OAAOA,GAAGA,IAAIA,MAAMA,CAACA,KAAKA,GAAGA,QAAQA,CAACA,CAACA;wBAC3CA,MAAMA,CAACA,OAAOA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA;oBAC3BA,CAACA,CAACA,CAACA;gBACLA,CAACA;gBACHX,wBAACA;YAADA,CAACA,AAxVD,IAwVC;YAxVD,iDAwVC,CAAA"} \ No newline at end of file diff --git a/deploy/crate-datasource/dist/query_builder.ts b/deploy/crate-datasource/dist/query_builder.ts new file mode 100755 index 0000000..2aeda51 --- /dev/null +++ b/deploy/crate-datasource/dist/query_builder.ts @@ -0,0 +1,425 @@ +/// + +import _ from 'lodash'; + +// Maximum LIMIT value +let MAX_LIMIT = 100000; +let DEFAULT_LIMIT = 10000; + +export class CrateQueryBuilder { + schema: string; + table: string; + defaultTimeColumn: string; + defaultGroupInterval: string; + + constructor(schema: string, + table: string, + defaultTimeColumn: string, + defaultGroupInterval: string, + private templateSrv) { + this.schema = schema; + this.table = table; + this.defaultTimeColumn = defaultTimeColumn; + this.defaultGroupInterval = defaultGroupInterval; + this.templateSrv = templateSrv; + } + + /** + * Builds Crate SQL query from given target object. + * @param {any} target Target object. + * @param {number} groupInterval Interval for grouping values. + * @param {string} defaultAgg Default aggregation for values. + * @return {string} SQL query. + */ + build(target: any, groupInterval = 0, adhocFilters = [], limit = DEFAULT_LIMIT, defaultAgg='avg') { + let query: string; + let timeExp: string; + + let timeColumn = quoteColumn(this.defaultTimeColumn); + let aggs = getEnabledAggs(target.metricAggs); + let rawAggs = getRawAggs(aggs); + + if (!aggs.length) { return null; } + + if (groupInterval) { + // Manually aggregate by time interval, ie "SELECT floor(ts/10)*10 as time ..." + timeExp = `floor(${timeColumn}/${groupInterval})*${groupInterval}`; + aggs = aggregateMetrics(aggs, 'avg'); + } else { + timeExp = timeColumn; + } + + // SELECT + let renderedAggs = this.renderMetricAggs(aggs); + query = "SELECT " + timeExp + " as time, " + renderedAggs; + + // Add GROUP BY columns to SELECT statement. + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + query += ` FROM "${this.schema}"."${this.table}"` + + ` WHERE ${timeColumn} >= ? AND ${timeColumn} <= ?`; + + // WHERE + if (target.whereClauses && target.whereClauses.length) { + query += " AND " + this.renderWhereClauses(target.whereClauses); + } + + // Add ad-hoc filters + if (adhocFilters.length > 0) { + query += " AND " + this.renderAdhocFilters(adhocFilters); + } + + // GROUP BY + query += " GROUP BY time"; + if (!groupInterval && rawAggs.length) { + query += ", " + this.renderMetricAggs(rawAggs, false); + } + + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + + // If GROUP BY specified, sort also by selected columns + query += " ORDER BY time"; + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + query += " ASC"; + + return query; + } + + buildAggQuery(target: any, groupInterval = 0, adhocFilters = [], limit?: number) { + let query: string; + let timeExp: string; + + let timeColumn = quoteColumn(this.defaultTimeColumn); + let aggs = getEnabledAggs(target.metricAggs); + aggs = getNotRawAggs(aggs); + + if (!aggs.length) { return null; } + + if (!groupInterval) { + groupInterval = 1; + } + + if (typeof groupInterval === 'number') { + // Manually aggregate by time interval, ie "SELECT floor(ts/10)*10 as time ..." + timeExp = `floor(${timeColumn}/${groupInterval})*${groupInterval}`; + } else { + // Use built-in date_trunc() function + timeExp = `date_trunc('${groupInterval}', ${timeColumn})`; + } + + // SELECT + let renderedAggs = this.renderMetricAggs(aggs); + query = `SELECT ${timeExp} as time, ${renderedAggs}`; + + // Add GROUP BY columns to SELECT statement. + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + + // FROM + query += ` FROM "${this.schema}"."${this.table}"`; + + // WHERE + query += ` WHERE ${timeColumn} >= ? AND ${timeColumn} <= ?`; + if (target.whereClauses && target.whereClauses.length) { + query += " AND " + this.renderWhereClauses(target.whereClauses); + } + + // Add ad-hoc filters + if (adhocFilters.length > 0) { + query += " AND " + this.renderAdhocFilters(adhocFilters); + } + + // GROUP BY + query += " GROUP BY time"; + + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + + // If GROUP BY specified, sort also by selected columns + query += " ORDER BY time"; + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + query += " ASC"; + + if (limit && limit > DEFAULT_LIMIT) { + limit = Math.min(limit, MAX_LIMIT); + query += ` LIMIT ${limit}`; + } + + return query; + } + + buildRawAggQuery(target: any, groupInterval = 0, adhocFilters = [], limit?: number) { + let query: string; + let timeExp: string; + + let timeColumn = quoteColumn(this.defaultTimeColumn); + let aggs = getEnabledAggs(target.metricAggs); + let rawAggs = getRawAggs(aggs); + + if (!rawAggs.length) { return null; } + + // SELECT + let renderedAggs = this.renderMetricAggs(rawAggs); + query = "SELECT " + timeColumn + " as time, " + renderedAggs; + + // Add GROUP BY columns to SELECT statement. + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + query += ` FROM "${this.schema}"."${this.table}"` + + ` WHERE ${timeColumn} >= ? AND ${timeColumn} <= ?`; + + // WHERE + if (target.whereClauses && target.whereClauses.length) { + query += " AND " + this.renderWhereClauses(target.whereClauses); + } + + // Add ad-hoc filters + if (adhocFilters.length > 0) { + query += " AND " + this.renderAdhocFilters(adhocFilters); + } + + // GROUP BY + query += " GROUP BY time"; + query += ", " + this.renderMetricAggs(rawAggs, false); + + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + + // If GROUP BY specified, sort also by selected columns + query += " ORDER BY time"; + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + query += " ASC"; + + if (limit) { + limit = Math.min(limit, MAX_LIMIT); + query += ` LIMIT ${limit}`; + } + + return query; + } + + renderAdhocFilters(filters) { + let conditions = _.map(filters, (tag, index) => { + let filter_str = ""; + let condition = tag.condition || 'AND'; + let key = quoteColumn(tag.key); + let operator = tag.operator; + let value = quoteValue(tag.value); + + if (index > 0) { + filter_str = `${condition} `; + } + + if (operator === '=~') { + operator = '~'; + } + + filter_str += `${key} ${operator} ${value}` + return filter_str; + }); + return conditions.join(' '); + } + + /** + * Builds SQL query for getting available columns from table. + * @return {string} SQL query. + */ + getColumnsQuery() { + let query = "SELECT column_name " + + "FROM information_schema.columns " + + "WHERE table_schema = '" + this.schema + "' " + + "AND table_name = '" + this.table + "' " + + "ORDER BY 1"; + return query; + } + + getNumericColumnsQuery() { + return "SELECT column_name " + + "FROM information_schema.columns " + + "WHERE table_schema = '" + this.schema + "' " + + "AND table_name = '" + this.table + "' " + + "AND data_type in ('integer', 'long', 'short', 'double', 'float', 'byte') " + + "ORDER BY 1"; + } + + /** + * Builds SQL query for getting unique values for given column. + * @param {string} column Column name + * @param {number} limit Optional. Limit number returned values. + */ + getValuesQuery(column: string, limit?: number, timeRange?) { + let timeColumn = quoteColumn(this.defaultTimeColumn); + let query = `SELECT DISTINCT ${column} ` + + `FROM "${this.schema}"."${this.table}"`; + + if (timeRange) { + let timeFrom = timeRange.from.valueOf(); + let timeTo = timeRange.to.valueOf(); + query += ` WHERE ${timeColumn} >= ${timeFrom} AND ${timeColumn} <= ${timeTo}`; + } + + if (limit) { + query += ` LIMIT ${limit}`; + } + return query; + } + + private renderMetricAggs(metricAggs: any, withAlias=true): string { + let enabledAggs = _.filter(metricAggs, (agg) => { + return !agg.hide; + }); + + let renderedAggs = _.map(enabledAggs, (agg) => { + let alias = ''; + if (agg.alias && withAlias) { + alias = ' AS \"' + agg.alias + '\"'; + } + + let column = quoteColumn(agg.column); + if (agg.type === 'count_distinct') { + return "count(distinct " + column + ")" + alias; + } else if (agg.type === 'raw') { + return column + alias; + } else { + return agg.type + "(" + column + ")" + alias; + } + }); + + if (renderedAggs.length) { + return renderedAggs.join(', '); + } else { + return ""; + } + } + + private renderWhereClauses(whereClauses): string { + let renderedClauses = _.map(whereClauses, (clauseObj, index) => { + let rendered = ""; + if (index !== 0) { + rendered += clauseObj.condition + " "; + } + + // Quote arguments as required by the operator and value type + let rendered_value: string; + let value = clauseObj.value; + if (clauseObj.operator.toLowerCase() === 'in') { + // Handle IN operator. Split comma-separated values. + // "42, 10, a" => 42, 10, 'a' + rendered_value = '(' + _.map(value.split(','), v => { + v = v.trim(); + if (!isNaN(v) || this.containsVariable(v)) { + return v; + } else { + return "'" + v + "'"; + } + }).join(', ') + ')'; + } else { + rendered_value = _.map(value.split(','), v => { + v = v.trim(); + if (!isNaN(v) || this.containsVariable(v)) { + return v; + } else { + return "'" + v + "'"; + } + }).join(', '); + } + rendered += clauseObj.column + ' ' + clauseObj.operator + ' ' + rendered_value; + return rendered; + }); + return renderedClauses.join(' '); + } + + // Check for template variables + private containsVariable(str: string): boolean { + let variables = _.map(this.templateSrv.variables, 'name'); + return _.some(variables, variable => { + let pattern = new RegExp('\\$' + variable); + return pattern.test(str); + }); + } +} + +export function getSchemas() { + var query = "SELECT schema_name " + + "FROM information_schema.schemata " + + "WHERE schema_name NOT IN ('information_schema', 'blob', 'sys', 'pg_catalog') " + + "ORDER BY 1"; + return query; +} + +export function getTables(schema) { + var query = "SELECT table_name " + + "FROM information_schema.tables " + + "WHERE table_schema='" + schema + "' " + + "ORDER BY 1"; + return query; +} + +function quoteColumn(column: string): string { + if (isWithUpperCase(column)) { + return '\"' + column + '\"'; + } else { + return column; + } +} + +function quoteValue(value: string): string { + value = value.trim(); + let match = value.match(/^'?([^']*)'?$/); + if (match[1]) { + value = match[1]; + } else { + return value; + } + + if (!isNaN(Number(value))) { + return value; + } else { + return "'" + value + "'"; + } +} + +function isWithUpperCase(str: string): boolean { + return str.toLowerCase() !== str; +} + +function aggregateMetrics(metricAggs: any, aggType: string) { + let aggs = _.cloneDeep(metricAggs); + return _.map(aggs, agg => { + if (agg.type === 'raw') { + agg.type = aggType; + return agg; + } else { + return agg; + } + }); +} + +export function getEnabledAggs(metricAggs) { + return _.filter(metricAggs, (agg) => { + return !agg.hide; + }); +} + +export function getRawAggs(metricAggs) { + return _.filter(metricAggs, {type: 'raw'}); +} + +export function getNotRawAggs(metricAggs) { + return _.filter(metricAggs, agg => { + return agg.type !== 'raw'; + }); +} diff --git a/deploy/crate-datasource/dist/query_ctrl.d.ts b/deploy/crate-datasource/dist/query_ctrl.d.ts new file mode 100755 index 0000000..8f92cf0 --- /dev/null +++ b/deploy/crate-datasource/dist/query_ctrl.d.ts @@ -0,0 +1,48 @@ +/// +import { QueryCtrl } from './sdk/sdk'; +import { CrateQueryBuilder } from './query_builder'; +export declare class CrateDatasourceQueryCtrl extends QueryCtrl { + private $q; + private uiSegmentSrv; + private templateSrv; + static templateUrl: string; + crateQueryBuilder: CrateQueryBuilder; + groupBySegments: any; + whereSegments: any; + removeWhereSegment: any; + operators: any; + timeIntervals: any[]; + resultFormats: any[]; + constructor($scope: any, $injector: any, $q: any, uiSegmentSrv: any, templateSrv: any); + crateQuery(query: any, args?: any[]): any; + getCollapsedText(): string; + onChangeInternal(): void; + groupBySegmentChanged(segment: any, index: any): void; + onGroupByAliasChange(index: any): void; + onAggTypeChange(): void; + addMetricAgg(): void; + removeMetricAgg(index: any): void; + toggleShowMetric(agg: any): void; + toggleEditorMode(): void; + getColumns(allValue?: boolean, onlyNumeric?: boolean): any; + getGroupByColumns(): any; + getValues(column: any, limit?: number): any; + getColumnsOrValues(segment: any, index: any): any; + getMetricAggTypes(): ({ + text: string; + value: string; + allValue: boolean; + } | { + text: string; + value: string; + allValue: boolean; + anyDataType: boolean; + })[]; + getMetricAggDef(aggType: any): any; + whereSegmentUpdated(segment: any, index: any): void; + buildWhereSegments(whereClauses: any): void; + buildWhereClauses(): void; + fixSegments(segments: any): void; + transformToSegments(results: any, addTemplateVars?: boolean): any; + updateGroupByAliases(): void; +} diff --git a/deploy/crate-datasource/dist/query_ctrl.js b/deploy/crate-datasource/dist/query_ctrl.js new file mode 100755 index 0000000..8ed995f --- /dev/null +++ b/deploy/crate-datasource/dist/query_ctrl.js @@ -0,0 +1,313 @@ +/// +System.register(['angular', 'lodash', './sdk/sdk', './query_builder', './query_def'], function(exports_1) { + var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + var angular_1, lodash_1, sdk_1, query_builder_1, query_def_1; + var CrateDatasourceQueryCtrl; + return { + setters:[ + function (angular_1_1) { + angular_1 = angular_1_1; + }, + function (lodash_1_1) { + lodash_1 = lodash_1_1; + }, + function (sdk_1_1) { + sdk_1 = sdk_1_1; + }, + function (query_builder_1_1) { + query_builder_1 = query_builder_1_1; + }, + function (query_def_1_1) { + query_def_1 = query_def_1_1; + }], + execute: function() { + CrateDatasourceQueryCtrl = (function (_super) { + __extends(CrateDatasourceQueryCtrl, _super); + function CrateDatasourceQueryCtrl($scope, $injector, $q, uiSegmentSrv, templateSrv) { + _super.call(this, $scope, $injector); + this.$q = $q; + this.uiSegmentSrv = uiSegmentSrv; + this.templateSrv = templateSrv; + this.uiSegmentSrv = uiSegmentSrv; + this.templateSrv = templateSrv; + var ds = this.datasource; + this.crateQueryBuilder = new query_builder_1.CrateQueryBuilder(ds.schema, ds.table, ds.defaultTimeColumn, ds.defaultGroupInterval, templateSrv); + this.operators = ['<', '>', '<=', '>=', '=', '<>', '!=', 'in', 'like', '~', '!~']; + this.timeIntervals = [ + { name: 'Auto', value: 'auto' }, + { name: 'Auto (Grafana)', value: 'auto_gf' }, + { name: 'Second', value: 'second' }, + { name: 'Minute', value: 'minute' }, + { name: 'Hour', value: 'hour' }, + { name: 'Day', value: 'day' }, + { name: 'Week', value: 'week' }, + { name: 'Month', value: 'month' }, + { name: 'Quarter', value: 'quarter' }, + { name: 'Year', value: 'year' } + ]; + this.resultFormats = [ + { text: 'Time series', value: 'time_series' }, + { text: 'Table', value: 'table' }, + ]; + var target_defaults = { + metricAggs: [ + { type: 'avg', column: 'value' } + ], + groupByColumns: [], + groupByAliases: [], + whereClauses: [], + timeInterval: ds.defaultGroupInterval, + resultFormat: 'time_series' + }; + lodash_1["default"].defaults(this.target, target_defaults); + this.updateGroupByAliases(); + this.groupBySegments = lodash_1["default"].map(this.target.groupByColumns, this.uiSegmentSrv.newSegment); + // Build WHERE segments + this.whereSegments = []; + this.buildWhereSegments(this.target.whereClauses); + this.removeWhereSegment = uiSegmentSrv.newSegment({ fake: true, value: '-- remove --' }); + this.fixSegments(this.groupBySegments); + } + CrateDatasourceQueryCtrl.prototype.crateQuery = function (query, args) { + if (args === void 0) { args = []; } + return this.datasource._sql_query(query, args).then(function (response) { + return response.rows; + }); + }; + CrateDatasourceQueryCtrl.prototype.getCollapsedText = function () { + if (this.target.rawQuery) { + return this.target.query; + } + else { + return this.crateQueryBuilder.build(this.target); + } + }; + //////////////////// + // Event handlers // + //////////////////// + CrateDatasourceQueryCtrl.prototype.onChangeInternal = function () { + this.panelCtrl.refresh(); // Asks the panel to refresh data. + }; + CrateDatasourceQueryCtrl.prototype.groupBySegmentChanged = function (segment, index) { + var _this = this; + if (segment.type === 'plus-button') { + segment.type = undefined; + } + this.target.groupByColumns = lodash_1["default"].map(lodash_1["default"].filter(this.groupBySegments, function (segment) { + return (segment.type !== 'plus-button' && + segment.value !== _this.removeWhereSegment.value); + }), 'value'); + this.groupBySegments = lodash_1["default"].map(this.target.groupByColumns, this.uiSegmentSrv.newSegment); + this.groupBySegments.push(this.uiSegmentSrv.newPlusButton()); + if (segment.value === this.removeWhereSegment.value) { + this.target.groupByAliases.splice(index, 1); + } + this.updateGroupByAliases(); + this.onChangeInternal(); + }; + CrateDatasourceQueryCtrl.prototype.onGroupByAliasChange = function (index) { + this.updateGroupByAliases(); + this.onChangeInternal(); + }; + CrateDatasourceQueryCtrl.prototype.onAggTypeChange = function () { + this.onChangeInternal(); + }; + CrateDatasourceQueryCtrl.prototype.addMetricAgg = function () { + this.target.metricAggs.push({ type: 'avg', column: 'value' }); + this.onChangeInternal(); + }; + CrateDatasourceQueryCtrl.prototype.removeMetricAgg = function (index) { + this.target.metricAggs.splice(index, 1); + this.onChangeInternal(); + }; + CrateDatasourceQueryCtrl.prototype.toggleShowMetric = function (agg) { + agg.hide = !agg.hide; + this.onChangeInternal(); + }; + CrateDatasourceQueryCtrl.prototype.toggleEditorMode = function () { + this.target.rawQuery = !this.target.rawQuery; + }; + /////////////////////// + // Query suggestions // + /////////////////////// + CrateDatasourceQueryCtrl.prototype.getColumns = function (allValue, onlyNumeric) { + var query; + if (onlyNumeric) { + query = this.crateQueryBuilder.getNumericColumnsQuery(); + } + else { + query = this.crateQueryBuilder.getColumnsQuery(); + } + var self = this; + return this.crateQuery(query).then(function (rows) { + if (allValue) { + rows.splice(0, 0, '*'); + } + return self.transformToSegments(lodash_1["default"].flatten(rows), true); + }); + }; + CrateDatasourceQueryCtrl.prototype.getGroupByColumns = function () { + var _this = this; + return this.getColumns().then(function (columns) { + columns.splice(0, 0, angular_1["default"].copy(_this.removeWhereSegment)); + return columns; + }); + }; + CrateDatasourceQueryCtrl.prototype.getValues = function (column, limit) { + if (limit === void 0) { limit = 10; } + var self = this; + var time_range = this.panelCtrl.range; + return this.crateQuery(this.crateQueryBuilder.getValuesQuery(column, limit, time_range)) + .then(function (rows) { + return self.transformToSegments(lodash_1["default"].flatten(rows), true); + }); + }; + CrateDatasourceQueryCtrl.prototype.getColumnsOrValues = function (segment, index) { + var _this = this; + var self = this; + if (segment.type === 'condition') { + return this.$q.when([this.uiSegmentSrv.newSegment('AND'), this.uiSegmentSrv.newSegment('OR')]); + } + if (segment.type === 'operator') { + return this.$q.when(this.uiSegmentSrv.newOperators(this.operators)); + } + if (segment.type === 'key' || segment.type === 'plus-button') { + return this.getColumns().then(function (columns) { + columns.splice(0, 0, angular_1["default"].copy(_this.removeWhereSegment)); + return columns; + }); + } + else if (segment.type === 'value') { + return this.getValues(this.whereSegments[index - 2].value); + } + }; + CrateDatasourceQueryCtrl.prototype.getMetricAggTypes = function () { + return query_def_1["default"].getMetricAggTypes(); + }; + CrateDatasourceQueryCtrl.prototype.getMetricAggDef = function (aggType) { + return lodash_1["default"].find(this.getMetricAggTypes(), { value: aggType }); + }; + CrateDatasourceQueryCtrl.prototype.whereSegmentUpdated = function (segment, index) { + this.whereSegments[index] = segment; + if (segment.value === this.removeWhereSegment.value) { + this.whereSegments.splice(index, 3); + if (this.whereSegments.length === 0) { + this.whereSegments.push(this.uiSegmentSrv.newPlusButton()); + } + else if (this.whereSegments.length > 2) { + this.whereSegments.splice(Math.max(index - 1, 0), 1); + if (this.whereSegments[this.whereSegments.length - 1].type !== 'plus-button') { + this.whereSegments.push(this.uiSegmentSrv.newPlusButton()); + } + } + } + else { + if (segment.type === 'plus-button') { + if (index > 2) { + this.whereSegments.splice(index, 0, this.uiSegmentSrv.newCondition('AND')); + } + this.whereSegments.push(this.uiSegmentSrv.newOperator('=')); + this.whereSegments.push(this.uiSegmentSrv.newFake('select tag value', 'value', 'query-segment-value')); + segment.type = 'key'; + segment.cssClass = 'query-segment-key'; + } + if ((index + 1) === this.whereSegments.length) { + this.whereSegments.push(this.uiSegmentSrv.newPlusButton()); + } + } + this.buildWhereClauses(); + // Refresh only if all fields setted + if (lodash_1["default"].every(this.whereSegments, function (segment) { + return ((segment.value || segment.type === 'plus-button') && + !(segment.fake && segment.type !== 'plus-button')); + })) { + this.panelCtrl.refresh(); + } + }; + /////////////////////// + CrateDatasourceQueryCtrl.prototype.buildWhereSegments = function (whereClauses) { + var self = this; + lodash_1["default"].forEach(whereClauses, function (whereClause) { + if (whereClause.condition) { + self.whereSegments.push(self.uiSegmentSrv.newCondition(whereClause.condition)); + } + self.whereSegments.push(self.uiSegmentSrv.newKey(whereClause.column)); + self.whereSegments.push(self.uiSegmentSrv.newOperator(whereClause.operator)); + self.whereSegments.push(self.uiSegmentSrv.newKeyValue(whereClause.value)); + }); + this.fixSegments(this.whereSegments); + }; + CrateDatasourceQueryCtrl.prototype.buildWhereClauses = function () { + var i = 0; + var whereIndex = 0; + var segments = this.whereSegments; + var whereClauses = []; + while (segments.length > i && segments[i].type !== 'plus-button') { + if (whereClauses.length < whereIndex + 1) { + whereClauses.push({ condition: '', column: '', operator: '', value: '' }); + } + if (segments[i].type === 'condition') { + whereClauses[whereIndex].condition = segments[i].value; + } + else if (segments[i].type === 'key') { + whereClauses[whereIndex].column = segments[i].value; + } + else if (segments[i].type === 'operator') { + whereClauses[whereIndex].operator = segments[i].value; + } + else if (segments[i].type === 'value' || segments[i].type === 'template') { + whereClauses[whereIndex].value = segments[i].value; + whereIndex++; + } + i++; + } + this.target.whereClauses = whereClauses; + }; + CrateDatasourceQueryCtrl.prototype.fixSegments = function (segments) { + var count = segments.length; + var lastSegment = segments[Math.max(count - 1, 0)]; + if (!lastSegment || lastSegment.type !== 'plus-button') { + segments.push(this.uiSegmentSrv.newPlusButton()); + } + }; + CrateDatasourceQueryCtrl.prototype.transformToSegments = function (results, addTemplateVars) { + var _this = this; + var segments = lodash_1["default"].map(lodash_1["default"].flatten(results), function (value) { + return _this.uiSegmentSrv.newSegment({ + value: value.toString(), + expandable: false + }); + }); + if (addTemplateVars) { + for (var _i = 0, _a = this.templateSrv.variables; _i < _a.length; _i++) { + var variable = _a[_i]; + segments.unshift(this.uiSegmentSrv.newSegment({ type: 'template', value: '$' + variable.name, expandable: true })); + } + } + return segments; + }; + CrateDatasourceQueryCtrl.prototype.updateGroupByAliases = function () { + var _this = this; + var groupByAliases = new Array(this.target.groupByColumns.length); + this.target.groupByColumns.forEach(function (column, index) { + if (_this.target.groupByAliases[index]) { + groupByAliases[index] = _this.target.groupByAliases[index]; + } + else { + groupByAliases[index] = ""; + } + }); + this.target.groupByAliases = groupByAliases; + }; + CrateDatasourceQueryCtrl.templateUrl = 'partials/query.editor.html'; + return CrateDatasourceQueryCtrl; + })(sdk_1.QueryCtrl); + exports_1("CrateDatasourceQueryCtrl", CrateDatasourceQueryCtrl); + } + } +}); +//# sourceMappingURL=query_ctrl.js.map \ No newline at end of file diff --git a/deploy/crate-datasource/dist/query_ctrl.js.map b/deploy/crate-datasource/dist/query_ctrl.js.map new file mode 100755 index 0000000..d382c01 --- /dev/null +++ b/deploy/crate-datasource/dist/query_ctrl.js.map @@ -0,0 +1 @@ +{"version":3,"file":"query_ctrl.js","sourceRoot":"","sources":["query_ctrl.ts"],"names":["CrateDatasourceQueryCtrl","CrateDatasourceQueryCtrl.constructor","CrateDatasourceQueryCtrl.crateQuery","CrateDatasourceQueryCtrl.getCollapsedText","CrateDatasourceQueryCtrl.onChangeInternal","CrateDatasourceQueryCtrl.groupBySegmentChanged","CrateDatasourceQueryCtrl.onGroupByAliasChange","CrateDatasourceQueryCtrl.onAggTypeChange","CrateDatasourceQueryCtrl.addMetricAgg","CrateDatasourceQueryCtrl.removeMetricAgg","CrateDatasourceQueryCtrl.toggleShowMetric","CrateDatasourceQueryCtrl.toggleEditorMode","CrateDatasourceQueryCtrl.getColumns","CrateDatasourceQueryCtrl.getGroupByColumns","CrateDatasourceQueryCtrl.getValues","CrateDatasourceQueryCtrl.getColumnsOrValues","CrateDatasourceQueryCtrl.getMetricAggTypes","CrateDatasourceQueryCtrl.getMetricAggDef","CrateDatasourceQueryCtrl.whereSegmentUpdated","CrateDatasourceQueryCtrl.buildWhereSegments","CrateDatasourceQueryCtrl.buildWhereClauses","CrateDatasourceQueryCtrl.fixSegments","CrateDatasourceQueryCtrl.transformToSegments","CrateDatasourceQueryCtrl.updateGroupByAliases"],"mappings":"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"} \ No newline at end of file diff --git a/deploy/crate-datasource/dist/query_ctrl.ts b/deploy/crate-datasource/dist/query_ctrl.ts new file mode 100755 index 0000000..afed57c --- /dev/null +++ b/deploy/crate-datasource/dist/query_ctrl.ts @@ -0,0 +1,324 @@ +/// + +import angular from 'angular'; +import _ from 'lodash'; +import {QueryCtrl} from './sdk/sdk'; +import {CrateQueryBuilder} from './query_builder'; +import queryDef from './query_def'; + +export class CrateDatasourceQueryCtrl extends QueryCtrl { + static templateUrl = 'partials/query.editor.html'; + + crateQueryBuilder: CrateQueryBuilder; + groupBySegments: any; + whereSegments: any; + removeWhereSegment: any; + operators: any; + timeIntervals: any[]; + resultFormats: any[]; + + constructor($scope, $injector, private $q, private uiSegmentSrv, private templateSrv) { + super($scope, $injector); + + this.uiSegmentSrv = uiSegmentSrv; + this.templateSrv = templateSrv; + + let ds = this.datasource; + this.crateQueryBuilder = new CrateQueryBuilder(ds.schema, + ds.table, + ds.defaultTimeColumn, + ds.defaultGroupInterval, + templateSrv); + + this.operators = ['<', '>', '<=', '>=', '=', '<>', '!=', 'in', 'like', '~', '!~']; + + this.timeIntervals = [ + {name: 'Auto', value: 'auto'}, + {name: 'Auto (Grafana)', value: 'auto_gf'}, + {name: 'Second', value: 'second'}, + {name: 'Minute', value: 'minute'}, + {name: 'Hour', value: 'hour'}, + {name: 'Day', value: 'day'}, + {name: 'Week', value: 'week'}, + {name: 'Month', value: 'month'}, + {name: 'Quarter', value: 'quarter'}, + {name: 'Year', value: 'year'} + ]; + + this.resultFormats = [ + {text: 'Time series', value: 'time_series'}, + {text: 'Table', value: 'table'}, + ]; + + var target_defaults = { + metricAggs: [ + {type: 'avg', column: 'value'} + ], + groupByColumns: [], + groupByAliases: [], + whereClauses: [], + timeInterval: ds.defaultGroupInterval, + resultFormat: 'time_series' + }; + _.defaults(this.target, target_defaults); + + this.updateGroupByAliases(); + + this.groupBySegments = _.map(this.target.groupByColumns, this.uiSegmentSrv.newSegment); + + // Build WHERE segments + this.whereSegments = []; + this.buildWhereSegments(this.target.whereClauses); + + this.removeWhereSegment = uiSegmentSrv.newSegment({fake: true, value: '-- remove --'}); + this.fixSegments(this.groupBySegments); + } + + crateQuery(query, args = []) { + return this.datasource._sql_query(query, args).then(response => { + return response.rows; + }); + } + + getCollapsedText(): string { + if (this.target.rawQuery) { + return this.target.query; + } else { + return this.crateQueryBuilder.build(this.target); + } + } + + //////////////////// + // Event handlers // + //////////////////// + + onChangeInternal(): void { + this.panelCtrl.refresh(); // Asks the panel to refresh data. + } + + groupBySegmentChanged(segment, index): void { + if (segment.type === 'plus-button') { + segment.type = undefined; + } + this.target.groupByColumns = _.map(_.filter(this.groupBySegments, segment => { + return (segment.type !== 'plus-button' && + segment.value !== this.removeWhereSegment.value); + }), 'value'); + this.groupBySegments = _.map(this.target.groupByColumns, this.uiSegmentSrv.newSegment); + this.groupBySegments.push(this.uiSegmentSrv.newPlusButton()); + + if (segment.value === this.removeWhereSegment.value) { + this.target.groupByAliases.splice(index, 1); + } + this.updateGroupByAliases(); + + this.onChangeInternal(); + } + + onGroupByAliasChange(index) { + this.updateGroupByAliases(); + this.onChangeInternal(); + } + + onAggTypeChange(): void { + this.onChangeInternal(); + } + + addMetricAgg(): void { + this.target.metricAggs.push({ type: 'avg', column: 'value' }); + this.onChangeInternal(); + } + + removeMetricAgg(index): void { + this.target.metricAggs.splice(index, 1); + this.onChangeInternal(); + } + + toggleShowMetric(agg): void { + agg.hide = !agg.hide; + this.onChangeInternal(); + } + + toggleEditorMode(): void { + this.target.rawQuery = !this.target.rawQuery; + } + + /////////////////////// + // Query suggestions // + /////////////////////// + + getColumns(allValue?: boolean, onlyNumeric?: boolean) { + let query; + if (onlyNumeric) { + query = this.crateQueryBuilder.getNumericColumnsQuery(); + } else { + query = this.crateQueryBuilder.getColumnsQuery(); + } + let self = this; + return this.crateQuery(query).then(rows => { + if (allValue) { + rows.splice(0, 0, '*'); + } + return self.transformToSegments(_.flatten(rows), true); + }); + } + + getGroupByColumns() { + return this.getColumns().then(columns => { + columns.splice(0, 0, angular.copy(this.removeWhereSegment)); + return columns; + }); + } + + getValues(column, limit = 10) { + let self = this; + let time_range = this.panelCtrl.range; + return this.crateQuery(this.crateQueryBuilder.getValuesQuery(column, limit, time_range)) + .then(rows => { + return self.transformToSegments(_.flatten(rows), true); + }); + } + + getColumnsOrValues(segment, index) { + var self = this; + if (segment.type === 'condition') { + return this.$q.when([this.uiSegmentSrv.newSegment('AND'), this.uiSegmentSrv.newSegment('OR')]); + } + if (segment.type === 'operator') { + return this.$q.when(this.uiSegmentSrv.newOperators(this.operators)); + } + + if (segment.type === 'key' || segment.type === 'plus-button') { + return this.getColumns().then(columns => { + columns.splice(0, 0, angular.copy(this.removeWhereSegment)); + return columns; + }); + } else if (segment.type === 'value') { + return this.getValues(this.whereSegments[index - 2].value); + } + } + + getMetricAggTypes() { + return queryDef.getMetricAggTypes(); + } + + getMetricAggDef(aggType) { + return _.find(this.getMetricAggTypes(), { value: aggType }); + } + + whereSegmentUpdated(segment, index) { + this.whereSegments[index] = segment; + + if (segment.value === this.removeWhereSegment.value) { + this.whereSegments.splice(index, 3); + if (this.whereSegments.length === 0) { + this.whereSegments.push(this.uiSegmentSrv.newPlusButton()); + } else if (this.whereSegments.length > 2) { + this.whereSegments.splice(Math.max(index - 1, 0), 1); + if (this.whereSegments[this.whereSegments.length - 1].type !== 'plus-button') { + this.whereSegments.push(this.uiSegmentSrv.newPlusButton()); + } + } + } else { + if (segment.type === 'plus-button') { + if (index > 2) { + this.whereSegments.splice(index, 0, this.uiSegmentSrv.newCondition('AND')); + } + this.whereSegments.push(this.uiSegmentSrv.newOperator('=')); + this.whereSegments.push(this.uiSegmentSrv.newFake('select tag value', 'value', 'query-segment-value')); + segment.type = 'key'; + segment.cssClass = 'query-segment-key'; + } + if ((index + 1) === this.whereSegments.length) { + this.whereSegments.push(this.uiSegmentSrv.newPlusButton()); + } + } + + this.buildWhereClauses(); + + // Refresh only if all fields setted + if (_.every(this.whereSegments, segment => { + return ((segment.value || segment.type === 'plus-button') && + !(segment.fake && segment.type !== 'plus-button')); + })) { + this.panelCtrl.refresh(); + } + } + + /////////////////////// + + buildWhereSegments(whereClauses: any): void { + var self = this; + _.forEach(whereClauses, whereClause => { + if (whereClause.condition) { + self.whereSegments.push(self.uiSegmentSrv.newCondition(whereClause.condition)); + } + self.whereSegments.push(self.uiSegmentSrv.newKey(whereClause.column)); + self.whereSegments.push(self.uiSegmentSrv.newOperator(whereClause.operator)); + self.whereSegments.push(self.uiSegmentSrv.newKeyValue(whereClause.value)); + }); + this.fixSegments(this.whereSegments); + } + + buildWhereClauses() { + var i = 0; + var whereIndex = 0; + var segments = this.whereSegments; + var whereClauses = []; + while (segments.length > i && segments[i].type !== 'plus-button') { + if (whereClauses.length < whereIndex + 1) { + whereClauses.push({condition: '', column: '', operator: '', value: ''}); + } + if (segments[i].type === 'condition') { + whereClauses[whereIndex].condition = segments[i].value; + } else if (segments[i].type === 'key') { + whereClauses[whereIndex].column = segments[i].value; + } else if (segments[i].type === 'operator') { + whereClauses[whereIndex].operator = segments[i].value; + } else if (segments[i].type === 'value' || segments[i].type === 'template') { + whereClauses[whereIndex].value = segments[i].value; + whereIndex++; + } + i++; + } + this.target.whereClauses = whereClauses; + } + + fixSegments(segments) { + var count = segments.length; + var lastSegment = segments[Math.max(count-1, 0)]; + + if (!lastSegment || lastSegment.type !== 'plus-button') { + segments.push(this.uiSegmentSrv.newPlusButton()); + } + } + + transformToSegments(results, addTemplateVars?: boolean) { + var segments = _.map(_.flatten(results), value => { + return this.uiSegmentSrv.newSegment({ + value: value.toString(), + expandable: false + }); + }); + + if (addTemplateVars) { + for (let variable of this.templateSrv.variables) { + segments.unshift(this.uiSegmentSrv.newSegment({ type: 'template', value: '$' + variable.name, expandable: true })); + } + } + return segments; + } + + updateGroupByAliases() { + let groupByAliases = new Array(this.target.groupByColumns.length); + this.target.groupByColumns.forEach((column, index) => { + if (this.target.groupByAliases[index]) { + groupByAliases[index] = this.target.groupByAliases[index]; + } else { + groupByAliases[index] = ""; + } + }); + this.target.groupByAliases = groupByAliases; + } + +} diff --git a/deploy/crate-datasource/dist/query_def.d.ts b/deploy/crate-datasource/dist/query_def.d.ts new file mode 100755 index 0000000..d2563cd --- /dev/null +++ b/deploy/crate-datasource/dist/query_def.d.ts @@ -0,0 +1,13 @@ +/// +export default class QueryDef { + static getMetricAggTypes(): ({ + text: string; + value: string; + allValue: boolean; + } | { + text: string; + value: string; + allValue: boolean; + anyDataType: boolean; + })[]; +} diff --git a/deploy/crate-datasource/dist/query_def.js b/deploy/crate-datasource/dist/query_def.js new file mode 100755 index 0000000..ea24a07 --- /dev/null +++ b/deploy/crate-datasource/dist/query_def.js @@ -0,0 +1,32 @@ +/// +System.register([], function(exports_1) { + var _metricAggTypes, QueryDef; + return { + setters:[], + execute: function() { + _metricAggTypes = [ + { text: "Raw", value: "raw", allValue: false }, + { text: "Count", value: 'count', allValue: true, anyDataType: true }, + { text: "Distinct Count", value: 'count_distinct', allValue: false, anyDataType: true }, + { text: "Avg / Mean", value: 'avg', allValue: false }, + { text: "Min", value: 'min', allValue: false }, + { text: "Max", value: 'max', allValue: false }, + { text: "Sum", value: 'sum', allValue: false }, + { text: "Geometric Mean", value: 'geometric_mean', allValue: false }, + { text: "Variance", value: 'variance', allValue: false }, + { text: "Std Deviation", value: 'stddev', allValue: false }, + { text: "Arbitrary", value: "arbitrary", allValue: false } + ]; + QueryDef = (function () { + function QueryDef() { + } + QueryDef.getMetricAggTypes = function () { + return _metricAggTypes; + }; + return QueryDef; + })(); + exports_1("default", QueryDef); + } + } +}); +//# sourceMappingURL=query_def.js.map \ No newline at end of file diff --git a/deploy/crate-datasource/dist/query_def.js.map b/deploy/crate-datasource/dist/query_def.js.map new file mode 100755 index 0000000..b06e553 --- /dev/null +++ b/deploy/crate-datasource/dist/query_def.js.map @@ -0,0 +1 @@ +{"version":3,"file":"query_def.js","sourceRoot":"","sources":["query_def.ts"],"names":["QueryDef","QueryDef.constructor","QueryDef.getMetricAggTypes"],"mappings":"AAAA,8CAA8C;;QAI1C,eAAe;;;;YAAf,eAAe,GAAG;gBACpB,EAAC,IAAI,EAAE,KAAK,EAAa,KAAK,EAAE,KAAK,EAAa,QAAQ,EAAE,KAAK,EAAC;gBAClE,EAAC,IAAI,EAAE,OAAO,EAAW,KAAK,EAAE,OAAO,EAAW,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAC;gBACpF,EAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAC;gBACrF,EAAC,IAAI,EAAE,YAAY,EAAM,KAAK,EAAE,KAAK,EAAa,QAAQ,EAAE,KAAK,EAAC;gBAClE,EAAC,IAAI,EAAE,KAAK,EAAa,KAAK,EAAE,KAAK,EAAa,QAAQ,EAAE,KAAK,EAAC;gBAClE,EAAC,IAAI,EAAE,KAAK,EAAa,KAAK,EAAE,KAAK,EAAa,QAAQ,EAAE,KAAK,EAAC;gBAClE,EAAC,IAAI,EAAE,KAAK,EAAa,KAAK,EAAE,KAAK,EAAa,QAAQ,EAAE,KAAK,EAAC;gBAClE,EAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAC;gBAClE,EAAC,IAAI,EAAE,UAAU,EAAQ,KAAK,EAAE,UAAU,EAAQ,QAAQ,EAAE,KAAK,EAAC;gBAClE,EAAC,IAAI,EAAE,eAAe,EAAG,KAAK,EAAE,QAAQ,EAAU,QAAQ,EAAE,KAAK,EAAC;gBAClE,EAAC,IAAI,EAAE,WAAW,EAAO,KAAK,EAAE,WAAW,EAAO,QAAQ,EAAE,KAAK,EAAC;aACnE,CAAC;YAEF;gBAAAA;gBAKAC,CAACA;gBAHQD,0BAAiBA,GAAxBA;oBACEE,MAAMA,CAACA,eAAeA,CAACA;gBACzBA,CAACA;gBACHF,eAACA;YAADA,CAACA,AALD,IAKC;YALD,8BAKC,CAAA"} \ No newline at end of file diff --git a/deploy/crate-datasource/dist/query_def.ts b/deploy/crate-datasource/dist/query_def.ts new file mode 100755 index 0000000..9396ff2 --- /dev/null +++ b/deploy/crate-datasource/dist/query_def.ts @@ -0,0 +1,24 @@ +/// + +import _ from 'lodash'; + +let _metricAggTypes = [ + {text: "Raw", value: "raw", allValue: false}, + {text: "Count", value: 'count', allValue: true, anyDataType: true}, + {text: "Distinct Count", value: 'count_distinct', allValue: false, anyDataType: true}, + {text: "Avg / Mean", value: 'avg', allValue: false}, + {text: "Min", value: 'min', allValue: false}, + {text: "Max", value: 'max', allValue: false}, + {text: "Sum", value: 'sum', allValue: false}, + {text: "Geometric Mean", value: 'geometric_mean', allValue: false}, + {text: "Variance", value: 'variance', allValue: false}, + {text: "Std Deviation", value: 'stddev', allValue: false}, + {text: "Arbitrary", value: "arbitrary", allValue: false} +]; + +export default class QueryDef { + + static getMetricAggTypes() { + return _metricAggTypes; + } +} diff --git a/deploy/crate-datasource/dist/response_handler.d.ts b/deploy/crate-datasource/dist/response_handler.d.ts new file mode 100755 index 0000000..9ff9e54 --- /dev/null +++ b/deploy/crate-datasource/dist/response_handler.d.ts @@ -0,0 +1,2 @@ +/// +export default function handleResponse(target: any, result: any): any; diff --git a/deploy/crate-datasource/dist/response_handler.js b/deploy/crate-datasource/dist/response_handler.js new file mode 100755 index 0000000..27c7c8b --- /dev/null +++ b/deploy/crate-datasource/dist/response_handler.js @@ -0,0 +1,148 @@ +/// +System.register(['lodash'], function(exports_1) { + var lodash_1; + function handleResponse(target, result) { + if (target.resultFormat === 'table') { + return handleTableResponse(target, result); + } + if (target.rawQuery) { + return handleRawResponse(target, result); + } + else { + return handleBuildedResponse(target, result); + } + } + exports_1("default", handleResponse); + function handleTableResponse(target, result) { + return { + columns: lodash_1["default"].map(result.cols, function (col) { + return { text: col }; + }), + rows: result.rows, + type: 'table' + }; + } + function handleRawResponse(target, result) { + var columns = result.cols; + var timeColumnIndex = 0; + var valueColumnIndex = 1; + if (columns.length > 2) { + var groupedResponse = lodash_1["default"].groupBy(result.rows, function (row) { + // Assume row structure is + // [ts, value, ...group by columns] + return row.slice(2).join(' '); + }); + return lodash_1["default"].map(groupedResponse, function (rows, key) { + return { + target: key + ': ' + columns[valueColumnIndex], + datapoints: convertToGrafanaPoints(rows, timeColumnIndex, valueColumnIndex) + }; + }); + } + else { + return [{ + target: columns[valueColumnIndex], + datapoints: convertToGrafanaPoints(result.rows, timeColumnIndex, valueColumnIndex) + }]; + } + } + function handleBuildedResponse(target, result) { + var columns = result.cols; + var timeColumnIndex = 0; + var groupByColumnIndexes, selectColumnIndexes; + if (target.groupByColumns.length) { + groupByColumnIndexes = lodash_1["default"].map(target.groupByColumns, function (groupByCol) { + return lodash_1["default"].indexOf(columns, groupByCol); + }); + } + var enabledAggs = lodash_1["default"].filter(target.metricAggs, function (agg) { + return !agg.hide; + }); + if (enabledAggs.length) { + selectColumnIndexes = lodash_1["default"].map(enabledAggs, function (metricAgg, index) { + return index + 1; + }); + } + else { + return []; + } + if (groupByColumnIndexes && groupByColumnIndexes.length && !lodash_1["default"].some(groupByColumnIndexes, -1)) { + var groupedResponse = lodash_1["default"].groupBy(result.rows, function (row) { + // Construct groupBy key from Group By columns, for example: + // [metric, host] => 'metric host' + return lodash_1["default"].map(groupByColumnIndexes, function (columnIndex) { + return row[columnIndex]; + }).join(' '); + }); + return lodash_1["default"].flatten(lodash_1["default"].map(groupedResponse, function (rows, key) { + return lodash_1["default"].map(selectColumnIndexes, function (valueIndex) { + var datapoints = convertToGrafanaPoints(rows, timeColumnIndex, valueIndex); + // Build alias for Group By column values + var group_by_alias; + if (rows.length) { + group_by_alias = lodash_1["default"].map(groupByColumnIndexes, function (columnIndex, i) { + var first_row = rows[0]; + if (target.groupByAliases && target.groupByAliases[i]) { + var pattern = new RegExp(target.groupByAliases[i]); + var match = pattern.exec(first_row[columnIndex]); + if (match && match.length > 1) { + return match[1]; + } + else if (match) { + return match[0]; + } + else { + return first_row[columnIndex]; + } + } + else { + return first_row[columnIndex]; + } + }).join(' '); + } + else { + group_by_alias = key; + } + return { + target: group_by_alias + ': ' + columns[valueIndex], + datapoints: datapoints + }; + }); + })); + } + else { + return lodash_1["default"].map(selectColumnIndexes, function (valueIndex) { + var datapoints = convertToGrafanaPoints(result.rows, timeColumnIndex, valueIndex); + return { + target: columns[valueIndex], + datapoints: datapoints + }; + }); + } + } + function convertToGrafanaPoints(rows, timeColumnIndex, valueColumnIndex) { + return lodash_1["default"].map(rows, function (row) { + var ts = Number(row[timeColumnIndex]); + var val = row[valueColumnIndex]; + val = val !== null ? Number(val) : null; + return [val, ts]; + }); + } + function makeColName(aggType, column) { + if (aggType === 'count_distinct') { + return 'count(DISTINCT ' + column + ')'; + } + else { + return aggType + '(' + column + ')'; + } + } + return { + setters:[ + function (lodash_1_1) { + lodash_1 = lodash_1_1; + }], + execute: function() { + } + } +}); +//# sourceMappingURL=response_handler.js.map \ No newline at end of file diff --git a/deploy/crate-datasource/dist/response_handler.js.map b/deploy/crate-datasource/dist/response_handler.js.map new file mode 100755 index 0000000..a82311f --- /dev/null +++ b/deploy/crate-datasource/dist/response_handler.js.map @@ -0,0 +1 @@ +{"version":3,"file":"response_handler.js","sourceRoot":"","sources":["response_handler.ts"],"names":["handleResponse","handleTableResponse","handleRawResponse","handleBuildedResponse","convertToGrafanaPoints","makeColName"],"mappings":"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CAACA,cAAcA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA;gCACtDA,IAAIA,OAAOA,GAAGA,IAAIA,MAAMA,CAACA,MAAMA,CAACA,cAAcA,CAACA,CAACA,CAACA,CAACA,CAACA;gCACnDA,IAAIA,KAAKA,GAAGA,OAAOA,CAACA,IAAIA,CAACA,SAASA,CAACA,WAAWA,CAACA,CAACA,CAACA;gCACjDA,EAAEA,CAACA,CAACA,KAAKA,IAAIA,KAAKA,CAACA,MAAMA,GAAGA,CAACA,CAACA,CAACA,CAACA;oCAC9BA,MAAMA,CAACA,KAAKA,CAACA,CAACA,CAACA,CAACA;gCAClBA,CAACA;gCAACA,IAAIA,CAACA,EAAEA,CAACA,CAACA,KAAKA,CAACA,CAAAA,CAACA;oCAChBA,MAAMA,CAACA,KAAKA,CAACA,CAACA,CAACA,CAACA;gCAClBA,CAACA;gCAACA,IAAIA,CAACA,CAACA;oCACNA,MAAMA,CAACA,SAASA,CAACA,WAAWA,CAACA,CAACA;gCAChCA,CAACA;4BACHA,CAACA;4BAACA,IAAIA,CAACA,CAACA;gCACNA,MAAMA,CAACA,SAASA,CAACA,WAAWA,CAACA,CAACA;4BAChCA,CAACA;wBACHA,CAACA,CAACA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA;oBACfA,CAACA;oBAACA,IAAIA,CAACA,CAACA;wBACNA,cAAcA,GAAGA,GAAGA,CAACA;oBACvBA,CAACA;oBAEDA,MAAMA,CAACA;wBACLA,MAAMA,EAAEA,cAAcA,GAAGA,IAAIA,GAAGA,OAAOA,CAACA,UAAUA,CAACA;wBACnDA,UAAUA,EAAEA,UAAUA;qBACvBA,CAACA;gBACJA,CAACA,CAACA,CAACA;YACLA,CAACA,CAACA,CAACA,CAACA;QACNA,CAACA;QAACA,IAAIA,CAACA,CAACA;YACNA,MAAMA,CAACA,mBAACA,CAACA,GAAGA,CAACA,mBAAmBA,EAAEA,UAACA,UAAUA;gBAC3CA,IAAIA,UAAUA,GAAGA,sBAAsBA,CAACA,MAAMA,CAACA,IAAIA,EAAEA,eAAeA,EAAEA,UAAUA,CAACA,CAACA;gBAElFA,MAAMA,CAACA;oBACLA,MAAMA,EAAEA,OAAOA,CAACA,UAAUA,CAACA;oBAC3BA,UAAUA,EAAEA,UAAUA;iBACvBA,CAACA;YACJA,CAACA,CAACA,CAACA;QACLA,CAACA;IACHA,CAACA;IAED,gCAAgC,IAAI,EAAE,eAAe,EAAE,gBAAgB;QACrEC,MAAMA,CAACA,mBAACA,CAACA,GAAGA,CAACA,IAAIA,EAAEA,UAAAA,GAAGA;YACpBA,IAAIA,EAAEA,GAAGA,MAAMA,CAACA,GAAGA,CAACA,eAAeA,CAACA,CAACA,CAACA;YACtCA,IAAIA,GAAGA,GAAGA,GAAGA,CAACA,gBAAgBA,CAACA,CAACA;YAChCA,GAAGA,GAAGA,GAAGA,KAAKA,IAAIA,GAAGA,MAAMA,CAACA,GAAGA,CAACA,GAAGA,IAAIA,CAACA;YAExCA,MAAMA,CAACA,CAACA,GAAGA,EAAEA,EAAEA,CAACA,CAACA;QACnBA,CAACA,CAACA,CAACA;IACLA,CAACA;IAED,qBAAqB,OAAO,EAAE,MAAM;QAClCC,EAAEA,CAACA,CAACA,OAAOA,KAAKA,gBAAgBA,CAACA,CAACA,CAACA;YACjCA,MAAMA,CAACA,iBAAiBA,GAAGA,MAAMA,GAAGA,GAAGA,CAACA;QAC1CA,CAACA;QAACA,IAAIA,CAACA,CAACA;YACNA,MAAMA,CAACA,OAAOA,GAAGA,GAAGA,GAAGA,MAAMA,GAAGA,GAAGA,CAACA;QACtCA,CAACA;IACHA,CAACA"} \ No newline at end of file diff --git a/deploy/crate-datasource/dist/response_handler.ts b/deploy/crate-datasource/dist/response_handler.ts new file mode 100755 index 0000000..1a7fdaf --- /dev/null +++ b/deploy/crate-datasource/dist/response_handler.ts @@ -0,0 +1,146 @@ +/// + +import _ from 'lodash'; + +export default function handleResponse(target, result) { + if (target.resultFormat === 'table') { + return handleTableResponse(target, result); + } + + if (target.rawQuery) { + return handleRawResponse(target, result); + } else { + return handleBuildedResponse(target, result); + } +} + +function handleTableResponse(target, result) { + return { + columns: _.map(result.cols, col => { + return {text: col}; + }), + rows: result.rows, + type: 'table' + }; +} + +function handleRawResponse(target, result) { + let columns = result.cols; + let timeColumnIndex = 0; + let valueColumnIndex = 1; + + if (columns.length > 2) { + let groupedResponse = _.groupBy(result.rows, row => { + // Assume row structure is + // [ts, value, ...group by columns] + return row.slice(2).join(' '); + }); + + return _.map(groupedResponse, (rows, key) => { + return { + target: key + ': ' + columns[valueColumnIndex], + datapoints: convertToGrafanaPoints(rows, timeColumnIndex, valueColumnIndex) + }; + }); + } else { + return [{ + target: columns[valueColumnIndex], + datapoints: convertToGrafanaPoints(result.rows, timeColumnIndex, valueColumnIndex) + }]; + } +} + +function handleBuildedResponse(target, result) { + let columns = result.cols; + let timeColumnIndex = 0; + let groupByColumnIndexes: number[], selectColumnIndexes: number[]; + + if (target.groupByColumns.length) { + groupByColumnIndexes = _.map(target.groupByColumns, groupByCol => { + return _.indexOf(columns, groupByCol); + }); + } + + let enabledAggs = _.filter(target.metricAggs, (agg) => { + return !agg.hide; + }); + + if (enabledAggs.length) { + selectColumnIndexes = _.map(enabledAggs, (metricAgg, index) => { + return index + 1; + }); + } else { + return []; + } + + if (groupByColumnIndexes && groupByColumnIndexes.length && !_.some(groupByColumnIndexes, -1)) { + let groupedResponse = _.groupBy(result.rows, row => { + // Construct groupBy key from Group By columns, for example: + // [metric, host] => 'metric host' + return _.map(groupByColumnIndexes, columnIndex => { + return row[columnIndex]; + }).join(' '); + }); + + return _.flatten(_.map(groupedResponse, (rows, key) => { + return _.map(selectColumnIndexes, (valueIndex) => { + let datapoints = convertToGrafanaPoints(rows, timeColumnIndex, valueIndex); + + // Build alias for Group By column values + let group_by_alias: string; + if (rows.length) { + group_by_alias = _.map(groupByColumnIndexes, (columnIndex, i) => { + let first_row = rows[0]; + if (target.groupByAliases && target.groupByAliases[i]) { + let pattern = new RegExp(target.groupByAliases[i]); + let match = pattern.exec(first_row[columnIndex]); + if (match && match.length > 1) { + return match[1]; + } else if (match){ + return match[0]; + } else { + return first_row[columnIndex]; + } + } else { + return first_row[columnIndex]; + } + }).join(' '); + } else { + group_by_alias = key; + } + + return { + target: group_by_alias + ': ' + columns[valueIndex], + datapoints: datapoints + }; + }); + })); + } else { + return _.map(selectColumnIndexes, (valueIndex) => { + let datapoints = convertToGrafanaPoints(result.rows, timeColumnIndex, valueIndex); + + return { + target: columns[valueIndex], + datapoints: datapoints + }; + }); + } +} + +function convertToGrafanaPoints(rows, timeColumnIndex, valueColumnIndex) { + return _.map(rows, row => { + let ts = Number(row[timeColumnIndex]); + let val = row[valueColumnIndex]; + val = val !== null ? Number(val) : null; + + return [val, ts]; + }); +} + +function makeColName(aggType, column) { + if (aggType === 'count_distinct') { + return 'count(DISTINCT ' + column + ')'; + } else { + return aggType + '(' + column + ')'; + } +} diff --git a/deploy/crate-datasource/dist/sdk/query_ctrl.d.ts b/deploy/crate-datasource/dist/sdk/query_ctrl.d.ts new file mode 100755 index 0000000..fd36cf1 --- /dev/null +++ b/deploy/crate-datasource/dist/sdk/query_ctrl.d.ts @@ -0,0 +1,13 @@ +/// +export declare class QueryCtrl { + $scope: any; + private $injector; + target: any; + datasource: any; + panelCtrl: any; + panel: any; + hasRawMode: boolean; + error: string; + constructor($scope: any, $injector: any); + refresh(): void; +} diff --git a/deploy/crate-datasource/dist/sdk/query_ctrl.js b/deploy/crate-datasource/dist/sdk/query_ctrl.js new file mode 100755 index 0000000..a203fc2 --- /dev/null +++ b/deploy/crate-datasource/dist/sdk/query_ctrl.js @@ -0,0 +1,22 @@ +/// +System.register([], function(exports_1) { + var QueryCtrl; + return { + setters:[], + execute: function() { + QueryCtrl = (function () { + function QueryCtrl($scope, $injector) { + this.$scope = $scope; + this.$injector = $injector; + this.panel = this.panelCtrl.panel; + } + QueryCtrl.prototype.refresh = function () { + this.panelCtrl.refresh(); + }; + return QueryCtrl; + })(); + exports_1("QueryCtrl", QueryCtrl); + } + } +}); +//# sourceMappingURL=query_ctrl.js.map \ No newline at end of file diff --git a/deploy/crate-datasource/dist/sdk/query_ctrl.js.map b/deploy/crate-datasource/dist/sdk/query_ctrl.js.map new file mode 100755 index 0000000..8f5d09f --- /dev/null +++ b/deploy/crate-datasource/dist/sdk/query_ctrl.js.map @@ -0,0 +1 @@ +{"version":3,"file":"query_ctrl.js","sourceRoot":"","sources":["query_ctrl.ts"],"names":["QueryCtrl","QueryCtrl.constructor","QueryCtrl.refresh"],"mappings":"AAAA,iDAAiD;;;;;;YAKjD;gBAQEA,mBAAmBA,MAAMA,EAAUA,SAASA;oBAAzBC,WAAMA,GAANA,MAAMA,CAAAA;oBAAUA,cAASA,GAATA,SAASA,CAAAA;oBAC1CA,IAAIA,CAACA,KAAKA,GAAGA,IAAIA,CAACA,SAASA,CAACA,KAAKA,CAACA;gBACpCA,CAACA;gBAEDD,2BAAOA,GAAPA;oBACEE,IAAIA,CAACA,SAASA,CAACA,OAAOA,EAAEA,CAACA;gBAC3BA,CAACA;gBAEHF,gBAACA;YAADA,CAACA,AAhBD,IAgBC;YAhBD,iCAgBC,CAAA"} \ No newline at end of file diff --git a/deploy/crate-datasource/dist/sdk/query_ctrl.ts b/deploy/crate-datasource/dist/sdk/query_ctrl.ts new file mode 100755 index 0000000..67f4f93 --- /dev/null +++ b/deploy/crate-datasource/dist/sdk/query_ctrl.ts @@ -0,0 +1,23 @@ +/// + +import angular from 'angular'; +import _ from 'lodash'; + +export class QueryCtrl { + target: any; + datasource: any; + panelCtrl: any; + panel: any; + hasRawMode: boolean; + error: string; + + constructor(public $scope, private $injector) { + this.panel = this.panelCtrl.panel; + } + + refresh() { + this.panelCtrl.refresh(); + } + +} + diff --git a/deploy/crate-datasource/dist/sdk/sdk.d.ts b/deploy/crate-datasource/dist/sdk/sdk.d.ts new file mode 100755 index 0000000..33023c3 --- /dev/null +++ b/deploy/crate-datasource/dist/sdk/sdk.d.ts @@ -0,0 +1,3 @@ +import { QueryCtrl } from './query_ctrl'; +export declare function loadPluginCss(options: any): void; +export { QueryCtrl }; diff --git a/deploy/crate-datasource/dist/sdk/sdk.js b/deploy/crate-datasource/dist/sdk/sdk.js new file mode 100755 index 0000000..555a2a2 --- /dev/null +++ b/deploy/crate-datasource/dist/sdk/sdk.js @@ -0,0 +1,25 @@ +System.register(['./query_ctrl', 'app/core/config'], function(exports_1) { + var query_ctrl_1, config_1; + function loadPluginCss(options) { + if (config_1["default"].bootData.user.lightTheme) { + System.import(options.light + '!css'); + } + else { + System.import(options.dark + '!css'); + } + } + exports_1("loadPluginCss", loadPluginCss); + return { + setters:[ + function (query_ctrl_1_1) { + query_ctrl_1 = query_ctrl_1_1; + }, + function (config_1_1) { + config_1 = config_1_1; + }], + execute: function() { + exports_1("QueryCtrl", query_ctrl_1.QueryCtrl); + } + } +}); +//# sourceMappingURL=sdk.js.map \ No newline at end of file diff --git a/deploy/crate-datasource/dist/sdk/sdk.js.map b/deploy/crate-datasource/dist/sdk/sdk.js.map new file mode 100755 index 0000000..a608af4 --- /dev/null +++ b/deploy/crate-datasource/dist/sdk/sdk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sdk.js","sourceRoot":"","sources":["sdk.ts"],"names":["loadPluginCss"],"mappings":";;IAIA,uBAA8B,OAAO;QACnCA,EAAEA,CAACA,CAACA,mBAAMA,CAACA,QAAQA,CAACA,IAAIA,CAACA,UAAUA,CAACA,CAACA,CAACA;YACpCA,MAAMA,CAACA,MAAMA,CAACA,OAAOA,CAACA,KAAKA,GAAGA,MAAMA,CAACA,CAACA;QACxCA,CAACA;QAACA,IAAIA,CAACA,CAACA;YACNA,MAAMA,CAACA,MAAMA,CAACA,OAAOA,CAACA,IAAIA,GAAGA,MAAMA,CAACA,CAACA;QACvCA,CAACA;IACHA,CAACA;IAND,yCAMC,CAAA;;;;;;;;;;YAGC,8CAAS"} \ No newline at end of file diff --git a/deploy/crate-datasource/dist/sdk/sdk.ts b/deploy/crate-datasource/dist/sdk/sdk.ts new file mode 100755 index 0000000..37ed221 --- /dev/null +++ b/deploy/crate-datasource/dist/sdk/sdk.ts @@ -0,0 +1,15 @@ +import {QueryCtrl} from './query_ctrl'; + +import config from 'app/core/config'; + +export function loadPluginCss(options) { + if (config.bootData.user.lightTheme) { + System.import(options.light + '!css'); + } else { + System.import(options.dark + '!css'); + } +} + +export { + QueryCtrl +} diff --git a/deploy/crate-datasource/headers/common.d.ts b/deploy/crate-datasource/headers/common.d.ts new file mode 100755 index 0000000..2ef4ae5 --- /dev/null +++ b/deploy/crate-datasource/headers/common.d.ts @@ -0,0 +1,61 @@ +/// + +declare var System: any; + +// dummy modules +declare module 'app/core/config' { + var config: any; + export default config; +} + +declare module 'lodash' { + var lodash: any; + export default lodash; +} + +declare module 'moment' { + var moment: any; + export default moment; +} + +declare module 'angular' { + var angular: any; + export default angular; +} + +declare module 'jquery' { + var jquery: any; + export default jquery; +} + +declare module 'app/core/utils/kbn' { + var kbn: any; + export default kbn; +} + +// Hack for datemath module +declare module 'app/core/utils/datemath' { + export var parse: any; + export var isValid: any; + export var parseDateMath: any; +} + +declare module 'app/core/store' { + var store: any; + export default store; +} + +declare module 'tether' { + var config: any; + export default config; +} + +declare module 'tether-drop' { + var config: any; + export default config; +} + +declare module 'eventemitter3' { + var config: any; + export default config; +} diff --git a/deploy/crate-datasource/headers/es6-shim/es6-shim.d.ts b/deploy/crate-datasource/headers/es6-shim/es6-shim.d.ts new file mode 100755 index 0000000..265c19e --- /dev/null +++ b/deploy/crate-datasource/headers/es6-shim/es6-shim.d.ts @@ -0,0 +1,670 @@ +// Generated by typings +// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/7de6c3dd94feaeb21f20054b9f30d5dabc5efabd/es6-shim/es6-shim.d.ts +// Type definitions for es6-shim v0.31.2 +// Project: https://github.com/paulmillr/es6-shim +// Definitions by: Ron Buckton +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +declare type PropertyKey = string | number | symbol; + +interface IteratorResult { + done: boolean; + value?: T; +} + +interface IterableShim { + /** + * Shim for an ES6 iterable. Not intended for direct use by user code. + */ + "_es6-shim iterator_"(): Iterator; +} + +interface Iterator { + next(value?: any): IteratorResult; + return?(value?: any): IteratorResult; + throw?(e?: any): IteratorResult; +} + +interface IterableIteratorShim extends IterableShim, Iterator { + /** + * Shim for an ES6 iterable iterator. Not intended for direct use by user code. + */ + "_es6-shim iterator_"(): IterableIteratorShim; +} + +interface StringConstructor { + /** + * Return the String value whose elements are, in order, the elements in the List elements. + * If length is 0, the empty string is returned. + */ + fromCodePoint(...codePoints: number[]): string; + + /** + * String.raw is intended for use as a tag function of a Tagged Template String. When called + * as such the first argument will be a well formed template call site object and the rest + * parameter will contain the substitution values. + * @param template A well-formed template string call site representation. + * @param substitutions A set of substitution values. + */ + raw(template: TemplateStringsArray, ...substitutions: any[]): string; +} + +interface String { + /** + * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point + * value of the UTF-16 encoded code point starting at the string element at position pos in + * the String resulting from converting this object to a String. + * If there is no element at that position, the result is undefined. + * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos. + */ + codePointAt(pos: number): number; + + /** + * Returns true if searchString appears as a substring of the result of converting this + * object to a String, at one or more positions that are + * greater than or equal to position; otherwise, returns false. + * @param searchString search string + * @param position If position is undefined, 0 is assumed, so as to search all of the String. + */ + includes(searchString: string, position?: number): boolean; + + /** + * Returns true if the sequence of elements of searchString converted to a String is the + * same as the corresponding elements of this object (converted to a String) starting at + * endPosition – length(this). Otherwise returns false. + */ + endsWith(searchString: string, endPosition?: number): boolean; + + /** + * Returns a String value that is made from count copies appended together. If count is 0, + * T is the empty String is returned. + * @param count number of copies to append + */ + repeat(count: number): string; + + /** + * Returns true if the sequence of elements of searchString converted to a String is the + * same as the corresponding elements of this object (converted to a String) starting at + * position. Otherwise returns false. + */ + startsWith(searchString: string, position?: number): boolean; + + /** + * Returns an HTML anchor element and sets the name attribute to the text value + * @param name + */ + anchor(name: string): string; + + /** Returns a HTML element */ + big(): string; + + /** Returns a HTML element */ + blink(): string; + + /** Returns a HTML element */ + bold(): string; + + /** Returns a HTML element */ + fixed(): string + + /** Returns a HTML element and sets the color attribute value */ + fontcolor(color: string): string + + /** Returns a HTML element and sets the size attribute value */ + fontsize(size: number): string; + + /** Returns a HTML element and sets the size attribute value */ + fontsize(size: string): string; + + /** Returns an HTML element */ + italics(): string; + + /** Returns an HTML element and sets the href attribute value */ + link(url: string): string; + + /** Returns a HTML element */ + small(): string; + + /** Returns a HTML element */ + strike(): string; + + /** Returns a HTML element */ + sub(): string; + + /** Returns a HTML element */ + sup(): string; + + /** + * Shim for an ES6 iterable. Not intended for direct use by user code. + */ + "_es6-shim iterator_"(): IterableIteratorShim; +} + +interface ArrayConstructor { + /** + * Creates an array from an array-like object. + * @param arrayLike An array-like object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => U, thisArg?: any): Array; + + /** + * Creates an array from an iterable object. + * @param iterable An iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(iterable: IterableShim, mapfn: (v: T, k: number) => U, thisArg?: any): Array; + + /** + * Creates an array from an array-like object. + * @param arrayLike An array-like object to convert to an array. + */ + from(arrayLike: ArrayLike): Array; + + /** + * Creates an array from an iterable object. + * @param iterable An iterable object to convert to an array. + */ + from(iterable: IterableShim): Array; + + /** + * Returns a new array from a set of elements. + * @param items A set of elements to include in the new array object. + */ + of(...items: T[]): Array; +} + +interface Array { + /** + * Returns the value of the first element in the array where predicate is true, and undefined + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find + * immediately returns that element value. Otherwise, find returns undefined. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + find(predicate: (value: T, index: number, obj: Array) => boolean, thisArg?: any): T; + + /** + * Returns the index of the first element in the array where predicate is true, and undefined + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find + * immediately returns that element value. Otherwise, find returns undefined. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + findIndex(predicate: (value: T) => boolean, thisArg?: any): number; + + /** + * Returns the this object after filling the section identified by start and end with value + * @param value value to fill array section with + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as + * length+end. + */ + fill(value: T, start?: number, end?: number): T[]; + + /** + * Returns the this object after copying a section of the array identified by start and end + * to the same array starting at position target + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it + * is treated as length+end. + * @param end If not specified, length of the this object is used as its default value. + */ + copyWithin(target: number, start: number, end?: number): T[]; + + /** + * Returns an array of key, value pairs for every entry in the array + */ + entries(): IterableIteratorShim<[number, T]>; + + /** + * Returns an list of keys in the array + */ + keys(): IterableIteratorShim; + + /** + * Returns an list of values in the array + */ + values(): IterableIteratorShim; + + /** + * Shim for an ES6 iterable. Not intended for direct use by user code. + */ + "_es6-shim iterator_"(): IterableIteratorShim; +} + +interface NumberConstructor { + /** + * The value of Number.EPSILON is the difference between 1 and the smallest value greater than 1 + * that is representable as a Number value, which is approximately: + * 2.2204460492503130808472633361816 x 10‍−‍16. + */ + EPSILON: number; + + /** + * Returns true if passed value is finite. + * Unlike the global isFininte, Number.isFinite doesn't forcibly convert the parameter to a + * number. Only finite values of the type number, result in true. + * @param number A numeric value. + */ + isFinite(number: number): boolean; + + /** + * Returns true if the value passed is an integer, false otherwise. + * @param number A numeric value. + */ + isInteger(number: number): boolean; + + /** + * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a + * number). Unlike the global isNaN(), Number.isNaN() doesn't forcefully convert the parameter + * to a number. Only values of the type number, that are also NaN, result in true. + * @param number A numeric value. + */ + isNaN(number: number): boolean; + + /** + * Returns true if the value passed is a safe integer. + * @param number A numeric value. + */ + isSafeInteger(number: number): boolean; + + /** + * The value of the largest integer n such that n and n + 1 are both exactly representable as + * a Number value. + * The value of Number.MIN_SAFE_INTEGER is 9007199254740991 2^53 − 1. + */ + MAX_SAFE_INTEGER: number; + + /** + * The value of the smallest integer n such that n and n − 1 are both exactly representable as + * a Number value. + * The value of Number.MIN_SAFE_INTEGER is −9007199254740991 (−(2^53 − 1)). + */ + MIN_SAFE_INTEGER: number; + + /** + * Converts a string to a floating-point number. + * @param string A string that contains a floating-point number. + */ + parseFloat(string: string): number; + + /** + * Converts A string to an integer. + * @param s A string to convert into a number. + * @param radix A value between 2 and 36 that specifies the base of the number in numString. + * If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal. + * All other strings are considered decimal. + */ + parseInt(string: string, radix?: number): number; +} + +interface ObjectConstructor { + /** + * Copy the values of all of the enumerable own properties from one or more source objects to a + * target object. Returns the target object. + * @param target The target object to copy to. + * @param sources One or more source objects to copy properties from. + */ + assign(target: any, ...sources: any[]): any; + + /** + * Returns true if the values are the same value, false otherwise. + * @param value1 The first value. + * @param value2 The second value. + */ + is(value1: any, value2: any): boolean; + + /** + * Sets the prototype of a specified object o to object proto or null. Returns the object o. + * @param o The object to change its prototype. + * @param proto The value of the new prototype or null. + * @remarks Requires `__proto__` support. + */ + setPrototypeOf(o: any, proto: any): any; +} + +interface RegExp { + /** + * Returns a string indicating the flags of the regular expression in question. This field is read-only. + * The characters in this string are sequenced and concatenated in the following order: + * + * - "g" for global + * - "i" for ignoreCase + * - "m" for multiline + * - "u" for unicode + * - "y" for sticky + * + * If no flags are set, the value is the empty string. + */ + flags: string; +} + +interface Math { + /** + * Returns the number of leading zero bits in the 32-bit binary representation of a number. + * @param x A numeric expression. + */ + clz32(x: number): number; + + /** + * Returns the result of 32-bit multiplication of two numbers. + * @param x First number + * @param y Second number + */ + imul(x: number, y: number): number; + + /** + * Returns the sign of the x, indicating whether x is positive, negative or zero. + * @param x The numeric expression to test + */ + sign(x: number): number; + + /** + * Returns the base 10 logarithm of a number. + * @param x A numeric expression. + */ + log10(x: number): number; + + /** + * Returns the base 2 logarithm of a number. + * @param x A numeric expression. + */ + log2(x: number): number; + + /** + * Returns the natural logarithm of 1 + x. + * @param x A numeric expression. + */ + log1p(x: number): number; + + /** + * Returns the result of (e^x - 1) of x (e raised to the power of x, where e is the base of + * the natural logarithms). + * @param x A numeric expression. + */ + expm1(x: number): number; + + /** + * Returns the hyperbolic cosine of a number. + * @param x A numeric expression that contains an angle measured in radians. + */ + cosh(x: number): number; + + /** + * Returns the hyperbolic sine of a number. + * @param x A numeric expression that contains an angle measured in radians. + */ + sinh(x: number): number; + + /** + * Returns the hyperbolic tangent of a number. + * @param x A numeric expression that contains an angle measured in radians. + */ + tanh(x: number): number; + + /** + * Returns the inverse hyperbolic cosine of a number. + * @param x A numeric expression that contains an angle measured in radians. + */ + acosh(x: number): number; + + /** + * Returns the inverse hyperbolic sine of a number. + * @param x A numeric expression that contains an angle measured in radians. + */ + asinh(x: number): number; + + /** + * Returns the inverse hyperbolic tangent of a number. + * @param x A numeric expression that contains an angle measured in radians. + */ + atanh(x: number): number; + + /** + * Returns the square root of the sum of squares of its arguments. + * @param values Values to compute the square root for. + * If no arguments are passed, the result is +0. + * If there is only one argument, the result is the absolute value. + * If any argument is +Infinity or -Infinity, the result is +Infinity. + * If any argument is NaN, the result is NaN. + * If all arguments are either +0 or −0, the result is +0. + */ + hypot(...values: number[]): number; + + /** + * Returns the integral part of the a numeric expression, x, removing any fractional digits. + * If x is already an integer, the result is x. + * @param x A numeric expression. + */ + trunc(x: number): number; + + /** + * Returns the nearest single precision float representation of a number. + * @param x A numeric expression. + */ + fround(x: number): number; + + /** + * Returns an implementation-dependent approximation to the cube root of number. + * @param x A numeric expression. + */ + cbrt(x: number): number; +} + +interface PromiseLike { + /** + * Attaches callbacks for the resolution and/or rejection of the Promise. + * @param onfulfilled The callback to execute when the Promise is resolved. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of which ever callback is executed. + */ + then(onfulfilled?: (value: T) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): PromiseLike; + then(onfulfilled?: (value: T) => TResult | PromiseLike, onrejected?: (reason: any) => void): PromiseLike; +} + +/** + * Represents the completion of an asynchronous operation + */ +interface Promise { + /** + * Attaches callbacks for the resolution and/or rejection of the Promise. + * @param onfulfilled The callback to execute when the Promise is resolved. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of which ever callback is executed. + */ + then(onfulfilled?: (value: T) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise; + then(onfulfilled?: (value: T) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise; + + /** + * Attaches a callback for only the rejection of the Promise. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of the callback. + */ + catch(onrejected?: (reason: any) => T | PromiseLike): Promise; + catch(onrejected?: (reason: any) => void): Promise; +} + +interface PromiseConstructor { + /** + * A reference to the prototype. + */ + prototype: Promise; + + /** + * Creates a new Promise. + * @param executor A callback used to initialize the promise. This callback is passed two arguments: + * a resolve callback used resolve the promise with a value or the result of another promise, + * and a reject callback used to reject the promise with a provided reason or error. + */ + new (executor: (resolve: (value?: T | PromiseLike) => void, reject: (reason?: any) => void) => void): Promise; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ + all(values: IterableShim>): Promise; + + /** + * Creates a Promise that is resolved or rejected when any of the provided Promises are resolved + * or rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ + race(values: IterableShim>): Promise; + + /** + * Creates a new rejected promise for the provided reason. + * @param reason The reason the promise was rejected. + * @returns A new rejected Promise. + */ + reject(reason: any): Promise; + + /** + * Creates a new rejected promise for the provided reason. + * @param reason The reason the promise was rejected. + * @returns A new rejected Promise. + */ + reject(reason: any): Promise; + + /** + * Creates a new resolved promise for the provided value. + * @param value A promise. + * @returns A promise whose internal state matches the provided promise. + */ + resolve(value: T | PromiseLike): Promise; + + /** + * Creates a new resolved promise . + * @returns A resolved promise. + */ + resolve(): Promise; +} + +declare var Promise: PromiseConstructor; + +interface Map { + clear(): void; + delete(key: K): boolean; + forEach(callbackfn: (value: V, index: K, map: Map) => void, thisArg?: any): void; + get(key: K): V; + has(key: K): boolean; + set(key: K, value?: V): Map; + size: number; + entries(): IterableIteratorShim<[K, V]>; + keys(): IterableIteratorShim; + values(): IterableIteratorShim; +} + +interface MapConstructor { + new (): Map; + new (iterable: IterableShim<[K, V]>): Map; + prototype: Map; +} + +declare var Map: MapConstructor; + +interface Set { + add(value: T): Set; + clear(): void; + delete(value: T): boolean; + forEach(callbackfn: (value: T, index: T, set: Set) => void, thisArg?: any): void; + has(value: T): boolean; + size: number; + entries(): IterableIteratorShim<[T, T]>; + keys(): IterableIteratorShim; + values(): IterableIteratorShim; +} + +interface SetConstructor { + new (): Set; + new (iterable: IterableShim): Set; + prototype: Set; +} + +declare var Set: SetConstructor; + +interface WeakMap { + delete(key: K): boolean; + get(key: K): V; + has(key: K): boolean; + set(key: K, value?: V): WeakMap; +} + +interface WeakMapConstructor { + new (): WeakMap; + new (iterable: IterableShim<[K, V]>): WeakMap; + prototype: WeakMap; +} + +declare var WeakMap: WeakMapConstructor; + +interface WeakSet { + add(value: T): WeakSet; + delete(value: T): boolean; + has(value: T): boolean; +} + +interface WeakSetConstructor { + new (): WeakSet; + new (iterable: IterableShim): WeakSet; + prototype: WeakSet; +} + +declare var WeakSet: WeakSetConstructor; + +declare namespace Reflect { + function apply(target: Function, thisArgument: any, argumentsList: ArrayLike): any; + function construct(target: Function, argumentsList: ArrayLike): any; + function defineProperty(target: any, propertyKey: PropertyKey, attributes: PropertyDescriptor): boolean; + function deleteProperty(target: any, propertyKey: PropertyKey): boolean; + function enumerate(target: any): IterableIteratorShim; + function get(target: any, propertyKey: PropertyKey, receiver?: any): any; + function getOwnPropertyDescriptor(target: any, propertyKey: PropertyKey): PropertyDescriptor; + function getPrototypeOf(target: any): any; + function has(target: any, propertyKey: PropertyKey): boolean; + function isExtensible(target: any): boolean; + function ownKeys(target: any): Array; + function preventExtensions(target: any): boolean; + function set(target: any, propertyKey: PropertyKey, value: any, receiver?: any): boolean; + function setPrototypeOf(target: any, proto: any): boolean; +} + +declare module "es6-shim" { + var String: StringConstructor; + var Array: ArrayConstructor; + var Number: NumberConstructor; + var Math: Math; + var Object: ObjectConstructor; + var Map: MapConstructor; + var Set: SetConstructor; + var WeakMap: WeakMapConstructor; + var WeakSet: WeakSetConstructor; + var Promise: PromiseConstructor; + namespace Reflect { + function apply(target: Function, thisArgument: any, argumentsList: ArrayLike): any; + function construct(target: Function, argumentsList: ArrayLike): any; + function defineProperty(target: any, propertyKey: PropertyKey, attributes: PropertyDescriptor): boolean; + function deleteProperty(target: any, propertyKey: PropertyKey): boolean; + function enumerate(target: any): Iterator; + function get(target: any, propertyKey: PropertyKey, receiver?: any): any; + function getOwnPropertyDescriptor(target: any, propertyKey: PropertyKey): PropertyDescriptor; + function getPrototypeOf(target: any): any; + function has(target: any, propertyKey: PropertyKey): boolean; + function isExtensible(target: any): boolean; + function ownKeys(target: any): Array; + function preventExtensions(target: any): boolean; + function set(target: any, propertyKey: PropertyKey, value: any, receiver?: any): boolean; + function setPrototypeOf(target: any, proto: any): boolean; + } +} diff --git a/deploy/crate-datasource/headers/mocha/mocha.d.ts b/deploy/crate-datasource/headers/mocha/mocha.d.ts new file mode 100755 index 0000000..3f5d3e5 --- /dev/null +++ b/deploy/crate-datasource/headers/mocha/mocha.d.ts @@ -0,0 +1,147 @@ +// Type definitions for mocha 2.0.1 +// Project: http://mochajs.org/ +// Definitions by: Kazi Manzur Rashid , otiai10 , jt000 +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +interface Mocha { + // Setup mocha with the given setting options. + setup(options: MochaSetupOptions): Mocha; + + //Run tests and invoke `fn()` when complete. + run(callback?: () => void): void; + + // Set reporter as function + reporter(reporter: () => void): Mocha; + + // Set reporter, defaults to "dot" + reporter(reporter: string): Mocha; + + // Enable growl support. + growl(): Mocha +} + +interface MochaSetupOptions { + //milliseconds to wait before considering a test slow + slow?: number; + + // timeout in milliseconds + timeout?: number; + + // ui name "bdd", "tdd", "exports" etc + ui?: string; + + //array of accepted globals + globals?: any[]; + + // reporter instance (function or string), defaults to `mocha.reporters.Dot` + reporter?: any; + + // bail on the first test failure + bail?: boolean; + + // ignore global leaks + ignoreLeaks?: boolean; + + // grep string or regexp to filter tests with + grep?: any; +} + +interface MochaDone { + (error?: Error): void; +} + +declare var mocha: Mocha; + +declare var describe : { + (description: string, spec: () => void): void; + only(description: string, spec: () => void): void; + skip(description: string, spec: () => void): void; + timeout(ms: number): void; +} + +// alias for `describe` +declare var context : { + (contextTitle: string, spec: () => void): void; + only(contextTitle: string, spec: () => void): void; + skip(contextTitle: string, spec: () => void): void; + timeout(ms: number): void; +} + +declare var it: { + (expectation: string, assertion?: () => void): void; + (expectation: string, assertion?: (done: MochaDone) => void): void; + only(expectation: string, assertion?: () => void): void; + only(expectation: string, assertion?: (done: MochaDone) => void): void; + skip(expectation: string, assertion?: () => void): void; + skip(expectation: string, assertion?: (done: MochaDone) => void): void; + timeout(ms: number): void; +}; + +declare function before(action: () => void): void; + +declare function before(action: (done: MochaDone) => void): void; + +declare function setup(action: () => void): void; + +declare function setup(action: (done: MochaDone) => void): void; + +declare function after(action: () => void): void; + +declare function after(action: (done: MochaDone) => void): void; + +declare function teardown(action: () => void): void; + +declare function teardown(action: (done: MochaDone) => void): void; + +declare function beforeEach(action: () => void): void; + +declare function beforeEach(action: (done: MochaDone) => void): void; + +declare function suiteSetup(action: () => void): void; + +declare function suiteSetup(action: (done: MochaDone) => void): void; + +declare function afterEach(action: () => void): void; + +declare function afterEach(action: (done: MochaDone) => void): void; + +declare function suiteTeardown(action: () => void): void; + +declare function suiteTeardown(action: (done: MochaDone) => void): void; + +declare module "mocha" { + + class Mocha { + constructor(options?: { + grep?: RegExp; + ui?: string; + reporter?: string; + timeout?: number; + bail?: boolean; + }); + + bail(value?: boolean): Mocha; + addFile(file: string): Mocha; + reporter(value: string): Mocha; + ui(value: string): Mocha; + grep(value: string): Mocha; + grep(value: RegExp): Mocha; + invert(): Mocha; + ignoreLeaks(value: boolean): Mocha; + checkLeaks(): Mocha; + growl(): Mocha; + globals(value: string): Mocha; + globals(values: string[]): Mocha; + useColors(value: boolean): Mocha; + useInlineDiffs(value: boolean): Mocha; + timeout(value: number): Mocha; + slow(value: number): Mocha; + enableTimeouts(value: boolean): Mocha; + asyncOnly(value: boolean): Mocha; + noHighlighting(value: boolean): Mocha; + + run(onComplete?: (failures: number) => void): void; + } + + export = Mocha; +} diff --git a/deploy/crate-datasource/headers/zone/zone.d.ts b/deploy/crate-datasource/headers/zone/zone.d.ts new file mode 100755 index 0000000..7549079 --- /dev/null +++ b/deploy/crate-datasource/headers/zone/zone.d.ts @@ -0,0 +1,66 @@ +declare module Zone { + export class Stacktrace { + constructor(e: Error); + get(): string; + } +} + + +declare class Zone { + constructor(parentZone: Zone, data: any); + fork(locals: any): Zone; + bind(fn, skipEnqueue): void; + bindOnce(fn): any; + run(fn, applyTo?, applyWith?): void; + beforeTask(): void; + onZoneCreated(): void; + afterTask(): void; + enqueueTask(): void; + dequeueTask(): void; + + static patchSetClearFn(obj, fnNames): string; + static patchPrototype(obj, fnNames): any; + static bindArguments(args: any[]): any; + static bindArgumentsOnce(args: any[]): any; + static patchableFn(obj, fnNames): any + static patchProperty(obj, prop): void; + static patchProperties(obj, properties): void; + static patchEventTargetMethods(obj): void; + static patch(): void; + static canPatchViaPropertyDescriptor(): boolean; + static patchViaPropertyDescriptor(): void; + static patchViaCapturingAllTheEvents(): void; + static patchWebSocket(): void; + static patchClass(className: string): void; + static patchMutationObserverClass(className: string): void; + static patchDefineProperty(): void; + static patchRegisterElement(): void; + static eventNames: string; + static onEventNames: string; + static init(): void; + static exceptZone: { + boringZone: Zone; + interestingZone: Zone, + beforeTask: () => void; + afterTask: () => void; + fork: (ops: any) => Zone; + }; + static longStackTraceZone: { + getLongStacktrace(exception: any): string; + stackFramesFilter(line: string): boolean; + onError(exception): void; + fork(locals): Zone; + }; + static getStacktrace(): Zone.Stacktrace; + static countingZone: { + '+enqueueTask': () => void; + '-dequeueTask': () => void; + '+afterTask': () => void; + counter: () => void; + data: { + count: number; + flushed: boolean; + }; + onFlush: () => void; + }; +} diff --git a/deploy/crate-datasource/package.json b/deploy/crate-datasource/package.json new file mode 100755 index 0000000..3dc410b --- /dev/null +++ b/deploy/crate-datasource/package.json @@ -0,0 +1,48 @@ +{ + "name": "crate-datasource", + "private": true, + "version": "0.0.1", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/raintank/crate-datasource.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/raintank/crate-datasource/issues" + }, + "devDependencies": { + "babel": "~6.5.1", + "chai": "~3.5.0", + "grunt": "~0.4.5", + "grunt-babel": "~6.0.0", + "grunt-contrib-clean": "~0.6.0", + "grunt-contrib-copy": "~0.8.2", + "grunt-contrib-uglify": "~0.11.0", + "grunt-contrib-watch": "^0.6.1", + "grunt-execute": "~0.2.2", + "grunt-mocha-test": "~0.12.7", + "grunt-systemjs-builder": "^0.2.5", + "grunt-tslint": "^3.0.2", + "grunt-typescript": "^0.8.0", + "jsdom": "~3.1.2", + "load-grunt-tasks": "~3.2.0", + "prunk": "~1.2.1", + "q": "~1.4.1" + }, + "dependencies": { + "babel-plugin-transform-es2015-for-of": "^6.6.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.5.0", + "babel-preset-es2015": "^6.5.0", + "lodash": "~4.0.0", + "mocha": "^2.4.5", + "tslint": "^3.4.0", + "typescript": "^1.7.5" + }, + "homepage": "https://github.com/raintank/crate-datasource#readme" +} diff --git a/deploy/crate-datasource/src/config_ctrl.ts b/deploy/crate-datasource/src/config_ctrl.ts new file mode 100755 index 0000000..21b5221 --- /dev/null +++ b/deploy/crate-datasource/src/config_ctrl.ts @@ -0,0 +1,26 @@ +/// + +import angular from 'angular'; +import _ from 'lodash'; + +export class CrateConfigCtrl { + static templateUrl = 'partials/config.html'; + current: any; + + timeIntervals: any[] = [ + {name: 'Auto', value: 'auto'}, + {name: 'Auto (Grafana)', value: 'auto_gf'}, + {name: 'Second', value: 'second'}, + {name: 'Minute', value: 'minute'}, + {name: 'Hour', value: 'hour'}, + {name: 'Day', value: 'day'}, + {name: 'Week', value: 'week'}, + {name: 'Month', value: 'month'}, + {name: 'Quarter', value: 'quarter'}, + {name: 'Year', value: 'year'} + ]; + + constructor($scope) { + this.current.jsonData.timeInterval = this.current.jsonData.timeInterval || this.timeIntervals[1].value; + } +} diff --git a/deploy/crate-datasource/src/datasource.ts b/deploy/crate-datasource/src/datasource.ts new file mode 100755 index 0000000..ef777e4 --- /dev/null +++ b/deploy/crate-datasource/src/datasource.ts @@ -0,0 +1,425 @@ +/// + +import _ from 'lodash'; +import * as dateMath from 'app/core/utils/datemath'; +import moment from 'moment'; +import {CrateQueryBuilder, getEnabledAggs, getRawAggs, getNotRawAggs} from './query_builder'; +import handleResponse from './response_handler'; + +export class CrateDatasource { + type: string; + url: string; + name: string; + basicAuth: string; + withCredentials: boolean; + schema: string; + table: string; + defaultTimeColumn: string; + defaultGroupInterval: string; + checkQuerySource: boolean; + queryBuilder: CrateQueryBuilder; + CRATE_ROWS_LIMIT: number; + + + constructor(instanceSettings, + private $q, + private backendSrv, + private templateSrv, + private timeSrv) { + + this.type = instanceSettings.type; + this.url = instanceSettings.url; + this.name = instanceSettings.name; + this.basicAuth = instanceSettings.basicAuth; + this.withCredentials = instanceSettings.withCredentials; + this.schema = instanceSettings.jsonData.schema; + this.table = instanceSettings.jsonData.table; + this.defaultTimeColumn = instanceSettings.jsonData.timeColumn; + this.defaultGroupInterval = instanceSettings.jsonData.timeInterval; + this.checkQuerySource = instanceSettings.jsonData.checkQuerySource; + + this.$q = $q; + this.backendSrv = backendSrv; + this.templateSrv = templateSrv; + this.timeSrv = timeSrv; + + this.queryBuilder = new CrateQueryBuilder(this.schema, + this.table, + this.defaultTimeColumn, + this.defaultGroupInterval, + this.templateSrv); + + this.CRATE_ROWS_LIMIT = 10000; + } + + // Called once per panel (graph) + query(options) { + let timeFrom = Math.ceil(dateMath.parse(options.range.from)); + let timeTo = Math.ceil(dateMath.parse(options.range.to)); + let timeFilter = this.getTimeFilter(timeFrom, timeTo); + let scopedVars = this.setScopedVars(options.scopedVars); + + let queries = _.map(options.targets, target => { + if (target.hide || (target.rawQuery && !target.query)) { return []; } + + let query: string; + let rawAggQuery: string; + let queryTarget, rawAggTarget; + let getQuery: any; + let getRawAggQuery: any; + let getRawAggInterval: any; + let adhocFilters = this.templateSrv.getAdhocFilters(this.name); + + if (target.rawQuery) { + query = target.query; + } else { + let minInterval = Math.ceil((timeTo - timeFrom) / this.CRATE_ROWS_LIMIT); + let maxLimit = timeTo - timeFrom; + let interval; + + if (target.timeInterval === 'auto') { + interval = getMinCrateInterval(options.intervalMs); + } else if (target.timeInterval === 'auto_gf') { + // Use intervalMs for panel, provided by Grafana + interval = options.intervalMs; + } else { + interval = target.timeInterval; + } + + // Split target into two queries (with aggs and raw data) + query = this.queryBuilder.buildAggQuery(target, interval, adhocFilters); + queryTarget = _.cloneDeep(target); + queryTarget.metricAggs = getNotRawAggs(queryTarget.metricAggs); + + rawAggQuery = this.queryBuilder.buildRawAggQuery(target, 0, adhocFilters, maxLimit); + rawAggQuery = this.templateSrv.replace(rawAggQuery, scopedVars, formatCrateValue); + rawAggTarget = _.cloneDeep(target); + rawAggTarget.metricAggs = getRawAggs(rawAggTarget.metricAggs); + } + + query = this.templateSrv.replace(query, scopedVars, formatCrateValue); + + let queries = [ + {query: query, target: queryTarget}, + {query: rawAggQuery, target: rawAggTarget} + ]; + queries = _.filter(queries, q => { + return q.query; + }); + + return _.map(queries, q => { + return this._sql_query(q.query, [timeFrom, timeTo]) + .then(result => { + if (q.target) { + return handleResponse(q.target, result); + } else { + return handleResponse(target, result); + } + }); + }) + }); + return this.$q.all(_.flattenDepth(queries, 2)).then(result => { + return { + data: _.flatten(result) + }; + }); + } + + /** + * Required. + * Checks datasource and returns Crate cluster name and version or + * error details. + */ + testDatasource() { + return this._get() + .then(response => { + if (response.$$status === 200) { + return { + status: "success", + message: "Cluster: " + response.cluster_name + + ", version: " + response.version.number, + title: "Success" + }; + } + }) + .catch(error => { + let message = error.statusText ? error.statusText + ': ' : ''; + if (error.data && error.data.error) { + message += error.data.error; + } else if (error.data) { + message += error.data; + } else { + message = "Can't connect to Crate instance"; + } + return { + status: "error", + message: message, + title: "Error" + }; + }); + } + + metricFindQuery(query: string) { + if (!query) { + return this.$q.when([]); + } + + query = this.templateSrv.replace(query, null, formatCrateValue); + return this._sql_query(query).then(result => { + return _.map(_.flatten(result.rows), row => { + return { + text: row.toString(), + value: row + }; + }); + }); + } + + annotationQuery(options) { + if (!options.annotation.query) { + return this.$q.reject({ + message: 'Query missing in annotation definition', + }); + } + let timeFrom = Math.ceil(dateMath.parse(options.range.from)); + let timeTo = Math.ceil(dateMath.parse(options.range.to)); + var timeFilter = this.getTimeFilter(timeFrom, timeTo); + var query = options.annotation.query.replace('$timeFilter', timeFilter); + query = this.templateSrv.replace(query, null, 'regex'); + + let data = { + "stmt": query, + "args": [] + }; + + return this._post('_sql', data).then(data => { + if (!data || !data.rows || !data.rows[0]) { + throw { message: 'No results' }; + } + return this.transformAnnotationResponse(options, data); + }); + } + + transformAnnotationResponse(options, data){ + var list = []; + var titleCol = null; + var timeCol = null; + var tagsCol = []; + var textCol = null; + + _.each(data.cols, (column, index) => { + if (column === 'time') { + timeCol = index; + return; + } + if (column === 'sequence_number') { + return; + } + if (!titleCol) { + titleCol = index; + } + if (column === options.annotation.titleColumn) { + titleCol = index; + return; + } + if (_.includes((options.annotation.tagsColumn || '').replace(' ', '').split(','), column)) { + tagsCol.push(index); + return; + } + if (column === options.annotation.textColumn) { + textCol = index; + return; + } + }); + + + + _.each(data.rows, value => { + var data = { + annotation: options.annotation, + time: +new Date(value[timeCol]), + title: value[titleCol], + // Remove empty values, then split in different tags for comma separated values + tags: _.flatten( + tagsCol + .filter(function(t) { + return value[t]; + }) + .map(function(t) { + return value[t].split(','); + }) + ), + text: value[textCol], + }; + + list.push(data); + }); + + return list; + + } + + getTimeFilter(timeFrom, timeTo) { + return this.defaultTimeColumn + " >= '" + timeFrom + "' and " + this.defaultTimeColumn + " <= '" + timeTo + "'"; + } + + getTagKeys(options) { + let query = this.queryBuilder.getColumnsQuery(); + return this.metricFindQuery(query); + } + + getTagValues(options) { + let range = this.timeSrv.timeRange(); + let query = this.queryBuilder.getValuesQuery(options.key, this.CRATE_ROWS_LIMIT, range); + return this.metricFindQuery(query); + } + + setScopedVars(scopedVars) { + scopedVars.crate_schema = {text: this.schema, value: `"${this.schema}"`}; + scopedVars.crate_table = {text: this.table, value: `"${this.table}"`}; + + let crate_source = `"${this.schema}"."${this.table}"`; + scopedVars.crate_source = {text: crate_source, value: crate_source}; + + return scopedVars; + } + + /** + * Sends SQL query to Crate and returns result. + * @param {string} query SQL query string + * @param {any[]} args Optional query arguments + * @return + */ + _sql_query(query: string, args: any[] = []) { + let data = { + "stmt": query, + "args": args + }; + + if (this.checkQuerySource) { + // Checks schema and table and throw error if it different from configured in data source + this.checkSQLSource(query); + } + + return this._post('_sql', data); + } + + checkSQLSource(query) { + let source_pattern = /.*[Ff][Rr][Oo][Mm]\s"?([^\.\s\"]*)"?\.?"?([^\.\s\"]*)"?/; + let match = query.match(source_pattern); + let schema = match[1]; + let table = match[2]; + if (schema !== this.schema || table !== this.table) { + throw { message: `Schema and table should be ${this.schema}.${this.table}` }; + } + } + + _request(method: string, url: string, data?: any) { + let options = { + url: this.url + "/" + url, + method: method, + data: data, + headers: { + "Content-Type": "application/json" + } + }; + + if (this.basicAuth || this.withCredentials) { + options["withCredentials"] = true; + } + if (this.basicAuth) { + options.headers["Authorization"] = this.basicAuth; + } + + return this.backendSrv.datasourceRequest(options) + .then(response => { + response.data.$$status = response.status; + response.data.$$config = response.config; + return response.data; + }); + } + + _get(url = "") { + return this._request('GET', url); + } + + _post(url: string, data?: any) { + return this._request('POST', url, data); + } +} + +// Special value formatter for Crate. +function formatCrateValue(value) { + if (typeof value === 'string') { + return wrapWithQuotes(value); + } else { + return value.map(v => wrapWithQuotes(v)).join(', '); + } +} + +function wrapWithQuotes(value) { + if (!isNaN(value) || + value.indexOf("'") != -1 || + value.indexOf('"') != -1) { + return value; + } else { + return "'" + value + "'"; + } +} + +export function convertToCrateInterval(grafanaInterval) { + let crateIntervals = [ + {shorthand: 's', value: 'second'}, + {shorthand: 'm', value: 'minute'}, + {shorthand: 'h', value: 'hour'}, + {shorthand: 'd', value: 'day'}, + {shorthand: 'w', value: 'week'}, + {shorthand: 'M', value: 'month'}, + {shorthand: 'y', value: 'year'} + ]; + let intervalRegex = /([\d]*)([smhdwMy])/; + let parsedInterval = intervalRegex.exec(grafanaInterval); + let value = Number(parsedInterval[1]); + let unit = parsedInterval[2]; + let crateInterval = _.find(crateIntervals, {'shorthand': unit}); + return crateInterval ? crateInterval.value : undefined; +} + +function crateToMsInterval(crateInterval: string) { + let intervals_s = { + 'year': 60 * 60 * 24 * 30 * 12, + 'quarter': 60 * 60 * 24 * 30 * 3, + 'month': 60 * 60 * 24 * 30, + 'week': 60 * 60 * 24 * 7, + 'day': 60 * 60 * 24, + 'hour': 60 * 60, + 'minute': 60, + 'second': 1 + }; + + if (intervals_s[crateInterval]) { + return intervals_s[crateInterval] * 1000; // Return ms + } else { + return undefined; + } +} + +function getMinCrateInterval(ms) { + let seconds = ms / 1000; + if (seconds > 60 * 60 * 24 * 30 * 3) + return 'year'; + else if (seconds > 60 * 60 * 24 * 30) // TODO: check defenition of month interval + return 'quarter'; + else if (seconds > 60 * 60 * 24 * 7) + return 'month'; + else if (seconds > 60 * 60 * 24) + return 'week'; + else if (seconds > 60 * 60) + return 'day'; + else if (seconds > 60) + return 'hour'; + else if (seconds > 1) + return 'second'; + else + return 'second'; +} diff --git a/deploy/crate-datasource/src/img/crate-datasource-add-src.png b/deploy/crate-datasource/src/img/crate-datasource-add-src.png new file mode 100755 index 0000000000000000000000000000000000000000..0d2c4e42ad9dfd7410d7223a1a27dc09eaef31a7 GIT binary patch literal 221538 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 a+C7vutK5HN`(d04cxkBWs1)Bqg#Hh&^Ma=U literal 0 HcmV?d00001 diff --git a/deploy/crate-datasource/src/img/crate-datasource-error.png b/deploy/crate-datasource/src/img/crate-datasource-error.png new file mode 100755 index 0000000000000000000000000000000000000000..40f9a8bdd5f5a82f6bf12a84c771feafacc2203b GIT binary patch literal 106287 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�l}J$%ju#cZre=GCjKu<0H&U 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 literal 0 HcmV?d00001 diff --git a/deploy/crate-datasource/src/img/crate-datasource-graph.png b/deploy/crate-datasource/src/img/crate-datasource-graph.png new file mode 100755 index 0000000000000000000000000000000000000000..6d7b735265988a98a3580d6c134f34da2e4f23a3 GIT binary patch literal 52270 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

C?^}sz-b7y;npB{>> zU~ntq@7~?i^_RnrH~74gxMeJ<(t7<@VVf|6IFYI=&f{X+vp z!;Yn}DFw1~$ZL6YH;}RT9kCMK^UdjT9jwyyvZuh>Z*~uuziJ+wbxc8UT2C#-5mBKN zdGuu(q(S&;6*84JGC}U4oz+w}YX{abkQ8evWkI#~;?^E`6xwv32MCo%+@Sj@`hMvX z(=6ngP%&FV8Wv2kgXhl_LhS>^FEn?*i~o^)h^P${a+l=hY`nBn6qzG&~t&S4B(5<%hJ0r9RwE z?zO6G^m;`%QcG^-qL3p7wz?S4gs-&A`e&U8$1yc&R7v?N2%Td?q zrg72lI)I`Av4|Mu)pjkv5fz4b;S=m5tY&4CzIc_QR3v4(cBzruv(IhJVJ6@SSoBRa zd~jk{YpAkC*y~j6ic4rsY}C!*C$E)k=92S7ViEM zz9j6v>jazSnJ=6a7E*FBQ<$HVHvO`0(TdTX)14;Cws!Wmy56c|wRoA~@^rRLmG4*- z(kl3lgSuzhAW_n7R8j?3)e=oUZZ0_~WW4jPQ_X()Q1v3IeCmB;(%Z%J%)!N3;3Xrf z3@mhaKwNZ5D`AX4=)UE)@IR>apKm~xOwii<4{=1W+v;*g_0bDzYu#_;){m70%4_1l zzQejB$qq0$JNKIIm$Ma9dq{CSH~RS-hRh)V&4sZp%{H{kL$n=P$@k#a)|KY&2Bpqw zeobvLd-N8g#-gHaif&lzL9^dzii@g;66}|xMu9astrXl=+=*##AMakV%l)A&tmlWSd=OlWh@4=%TV*0K-+aCn<+6$O#mn5(%yALPm9$q?Ox6JxZ;O3u{4?Y_^^s)8sG|OAy<3=() zm9bP1+UIC84}KW7>~d-gS^8&1DV$}wd5h^m>UD|cE^E>TCp2o|Jy&a-c5)-3yO~x; zsg)DjqyMV7#orFi12+8d3JhQ|jV#bec-Bm`P6ld4`H9By(C?kja1J-$_U|$xGaB-h zg8`8p$odusbvt7FNRa&4y8x5Z6T4*sezD|06BOD^DHMgR{@}v;%1_y)_XI`YaJ%O$ zcuM2K78k>;gtlZVxyj{HZMYoEv%msUZ67Ht^F@1@D!6Xl_k~&nJrlJ9GJVG(g^VG= z8Gx`B@l*t#4gzxy-RE0&kqtlEuGl~|Cj~Z895UI7bt|2uMyn<|E?pSr^jDgLswo0x^t4@}<+| zUaPd!L9VSae#1nJSQY-32cI-phPHf0BhH+o1P53E#+P7pSWIVUgI1 zSQzMyU*&~HFIn5nKY-pokOQ7BlXw}Srq7!b5w-wr0^2#u?%jxg-{N~R>$x4uF2#Xk z$1;vEq%6i&tz`}j>#X&c2Qm|8-vx|$gzi?**4@|I+LEZhnJK+}Uj;+TiA

>t@$ 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 O00f?{elF{r5}E+-TJlE# literal 0 HcmV?d00001 diff --git a/deploy/crate-datasource/src/img/crate_logo.png b/deploy/crate-datasource/src/img/crate_logo.png new file mode 100755 index 0000000000000000000000000000000000000000..0a34a156cd1b83e0dc090aaba97e7d20f4edad88 GIT binary patch literal 19112 zcmV(&K;gfMP)qsFDsIjqH+5~Fy3IT zrYatvqTH44|K4kwA47kOM=g}y^4>M#TfU8)r9&wtt->X(W+JKDlGsry3?nrTo~jHD zoB!EH2nSnR=0?rv-bJ4I&qG}93N568UvRjtSlp|-r#htPNnJzb`WG;>ny@?!74KTU zHF(2B3_zn#r{Te2SgJ02r0=7y=cpohp%C11W#ci>S?nbEol9udmV@<+AwbmWFtj~p z=GDkT23=GsZCSM6M>R&=;y!bW!fxe z6uPwhiB5w$(&`4WdGy<$AL)Izm9prqkRdEIAD!c?f{^B1NbPXM(2`(aHhV_OV#r+T z6WYr}$#$@V%>|Jt9~u=tC{1Vuwt96NKp=Fnq8L9L?ke3aMO9+?Qpd3UtxNzfaE)uC zkfp{dT1bMk3Vzy*Y;wnITKh@_F?XYOcZC&MDogusb2`eznTr*)BnJaWrBv2rLlNE@ z4bp~xqO^H*E_EzG<2QMSS5Rg_kyj@;h`-fNRjR{6@~ruXi4{N8j9paHQ0G9!Dv{VE z_GJZfH>aCwb!u4>WO4!VtC2OPD-b-)oxlZOgVT}L!Mewcjwu*YQbCh+D`Kqzkzvxt zpj6hFo?)fNNFg5WB1jO~A$j#~nkO-;wL+_nRAddk#NumGxw$)p+y<{vls^-tg~r)~#K3q`V(Q0m z{7(4W*$9oh&{s5sLofxEHG>JZXmgqh$V$|9*TD5tK%I!I%QjRSB+u@(8pD(B)g)3Y zfI7>r&@+CeTkPBY(W!`a=GyySM7B;Fxq!GlI29Q+hTjl4-ClDH*oBN_P5 zRxqLnU!dZ_`{sV; z5md%BXjpz$8lywACOpp#Ss&hz4vJkGvmugAuJb42;(f(JjX}jtg5}7()&zvn`D9rE zYY!g_&6uoG5w1{`c=_s_>*|_Yo0SX7F155pde!pL!JUD6RsEN$h*DKQu_x*B@FKK4 z4tDApU7A&xOS&g(-l`9#b*kN{c+&3Ai)mU%YOM-&x=nR-qt(e&!;2pj6arI`6W;gV zycK{Om0^N^N30@!V+99_8})#M=H5Y#u8I#>$y%9Sbee-&g<(%R5vkn{KW$Jw!Ki1e z8n%Xd6Z|$nUH_E6qT!AWg9TpDOw^tS8FCmsn3^F-GYTGpt)*ti zH4P1wCj-F9z<5b#`DqD-1NuV$w0P^N-|Siy;LR>bY-g;omFO5SXnRQq{7cqRrB1E% zWX*j*#(zfnYgd?HVU-IN44~#FruqF>ilM2n%0^e!&!SeM3*rgaQM}U6FM*uq&JJ1D zNG&VG1eU|Ir&_QO6dro7mKPE9b+oTiJvxY~nt8uigRB{3O|Wb zn_NSwPi^brMB_w1c2hdGK%42(6lpjRIB~qnvL^M%m6DGM3<0Yud0UJDD&PtPCGDqK zb1UJw<7WXdt;Ed5JSCyE9m+x2b}_cX5~!0z%7q6ss%%8O4)ujX2q*)_!TiH=JkA7Z zLVle}BKO2{=_&s*gQ>Dw&89S+vzijRoHRYW|Nhsy0{YncBe03*{9)T?-h;VMfBgN< z8aPl{G^su^8^LVZ>!%-o8~h!ax$~V*xfKaI{qW7I_c*KCzSR3W$QSG;?)$NP!jE8{ zobQbsdFjiik0x#B)1u>8{VmK`?E54q=5{AxTWNXC?A(BL=jvDg;2$sfZ`s_ILEB=@ z)Xs3&;b)2UW&-z+*WcvstH=3|zJGtbf3HE^v4>JayM1TXU2tcmPk;D*C=iKjIS}|6 zvN|3yqXgL$(IoOmJ@`gi5*Ytc8W$wTlHd8CXOpgiaa;Oj$8bz~f>zalUjd&A^OR66eL$Pbw^-#tH}QOiU$sV(RFi5L5MZ z{(&#K&(;)ZGsNigzXL}+0;Ielb(u6mg=CH6-t%lIEJ;!LQCo>nV3i=+Xe>kLG|*Uv zDce=qid#UD3=j;SU4`bZLPmvsg227R^;zxUpPHI65M-&oi)&0i#Xp$(xwNO|cyd(= zSt+i}Qd~))Ci?*dtL9;Ycb%N0mSLryjHQDo%gFJP4;QvnRMVXIP9BGHu+&L!yPh<@ z3gJp=v)pMSHQ-Alobr_^lYssk69M;Vp#fCQ;16^X09qdlZNAxSe30AXoDP|2@O9ZU$A`EViP4^&hwB*X4 z?S0+{$i@{sOh6ydbTr8idr%~_p-sDPSEay=Nvgs7puS1_5t6TIgZLQUjD&C{Ae z+&p?a2L^x!m1+SCp4<&jl{+TD^Ks4!)-h?n6n_PdBLBb@9oF6zi5$(FnsCsi%IJU= zF)V~K3$wOILqT+v&Ta_^!({`0^Q0SWz;qKwCofz(v^mz*$4ZPbF6ZLh3AGzQ6#=+H82FV#7Zh?DD+4i)8g24RUS_@_j{IW+X4M!V-N=idHmN#Tia9$j% zgXdCU1(AZB&Bbn(3VwLs22@_n+XGrryNX7#Wca5h!$?@E{}f6wZ0wcGXs4^J0&H8_ z=yqY$6ey<;gMvrHI6c}%_*RV4v}tuQEySwo1_a%iNnKZt5gdFgADHCQ4X&Ii4ZwP? zFdup`%x@r*j@TAoQ{CvR=ANp z+*YjlScnx6dISG@quT=jLy|MO(f-Zl4){#%!K{9xn_lV!X|pz#09Q_3|G5d$u@6IO zil9%gnOlSAi@|AQnUQB!~GyMTC&=P{vhqnpME zaw*ag>t*@KL+KQ~DLB!AILl!`oSgZY99BhpKS8))G}uX%RmW>gU8k1_UB3>3goWzG zL6~E$0H@^2&Jq>cmBj)y#nG;2E*=EG(0n9d8R&c_WzOrO1QRe$9Yl%kH#U1a2Io_b;3F=VpQ>8~D0pM17J zi>Zmq25lNuDBbQy42qpJ>Wk0Jum)DZLRM{>ve&Css@@09c|xlYBzgoRsY$7TfP=N_ z=G{4c{v5U{-6lxd}s6zHBm&wO?;#8rLS_FI$|CXKo*VdOUIS>_$RIAi()V zrE4LLT9X#@1YB+t1)<;nJ@RJ54L~aIzxyGm$xROXWo5EAUB#>1#J8lmi1uv$2vJKaj@cjAy`yXn&Y+;z-G<<8auKieNL`8G* zobrt5>((axtX#awK-53>^-86l^z{dVb@pztf31-=HlEHL8M@C z5s1<+KbdD0{N1`*R$w@hZAcEfGxM!lTC2CK3zQ7xAxJ|od&7>MtQ}3)t0(1=zcQcN#BoqK@)-nk+(zf|X6KN3k6!pm?bHDx6@&BCDGvfpjznAN;0TBXEBwA!@vRO&Ch z)Y@`P5e^knQ483)(k&`RcZpHXBNzvtf;UDjj0_C*48|$iQC4n&2TS&C>_N&Z-WuRS zQYK&uV+|_8?N&c)-ZIiQ_JV{ld?bUsB_RNKF^Dh4Bx;2(pf;vi z-5M`>Jt*|r>-dloU_rC0WSY@RE~Wc>PP$p3+_hF=QV4TFe4RKux17>EQHD6sw{`WSp|l{_K>^SZ>|W6t^tx8h?WQErFiV@hP{QX?T!`dEH$i5(8A{^H7(lX z3iq>hw9s)HJck`xfeGTX_bERwsYCmv1~qG9*{%=+HZ7YII~<*qmJoqTF}|dep0-4v zu)SPdR7Q0fSO$s*nzU@M;3M;c;ybo^k0a1b%gV&UXwJ{}TuU7-_fa-Ir&(Wql*nY_ zF_QI*;u&)v$YVc~Sybexjfc-h3X8WcE=-x?atk)1p4Lf|$mb+9YtZOW;dq582<2#wEZYNYTT(dhRm0lf@h>O%qh z@vq|0tVQLf;RsZC7VXXU?DiIKL$!rCm@cZ+_Ur@nnAalz9x}D2^iO!K)_&I4nid|$ z1U-g{T&M1|tPd((%64Gq2s@Sp%8jP7LxKqEi|HFHM@8Q%?&?+$M53mNc4fo~Ec$Mh zd{agpOPdFlV9>hU8`+_S3fQ0yQ)u_;XRJNb9K#dy`LI;(&l*8pOyx;Y1OAn%MMflC zFbL8HEKaWR80AKz?pI^~)=3YVSS`s>NxE7Nt^vU{34#xdh>&#JA>a{($rkR|M*+oU z_dJ$0NpK&br8>|-fS*1eQuG`NY9LD`iLm$D875Oi7XNZdhap-Cx?ly49f zG99xT1uEp(7nW;DNkF(=F`kZhVNtn(FkZP;pn`;~nqbojRn;k*cxFSl)4|tNJ?or%6mYkhrfr zHmmQ_Gx_rky2x3tHQV+5la04887jg4aRt?J9ldXYqS#K;+EBBV75dNr?886#<~_&W z{1P5T!u+}bNnx$%9WXKtTAudh_HT=y%~(jBQrG-p0i zwzc8BBln`!j}~bC5daR(PE$db+#cqKjZP!j`_?68{rKZ}c(8B`ODM-Vy77foFeS|g zty=+{s9is{`0m}3#$6C=`?Q^V2$J?s zfB5jP|Ka(=e|J+pYOVWFEe7tjD$qx_I_tY$6JZSqg6yMr$;gJBC|FwbpD|6Whc0k-@8k ziKojK@T7$RA16hW2mP~3-%A&*KQ(f~dnbEb3nh~7sHwpchSXxEKZq{O@yVMoUzXkO z#6Y`Z4+y^$#Ho);mLRMJ5+xIKmn2HRJe}=TYO(pgpfXTzAe-mqF&x6PJl6|1esl&Y))3bN2FdQ8+k zcTo_BvBWUI+Eq?-FHzB0Z2H+}fF*PfRW1>c5C3H&F>y@oG44J;MTA2YiqgiZ6n`ai z;V*)KO?FOMg|vkH+Ip!eq&FkuP))hx=(W^y;(ct8P+;@xS(0D681ya@uW(wY+`9!N3tJBe6UY1>alLoBTAX-4O`GP8TS4N#HcAellzQiqC@*s>{4 z58$DglsUV6QaM&DdKdvIyp_KOE;>D3{Y=HWP#KoO*iiqLPZZ{^WI>0Xyqdzm)zAV4 zXK6)36gVP{?nOL!_s@kD$iZe~y~&Em&0BMbCTd#H=D&=>sZx|ea?&2Sr06Ii=c|(e zSE}(m5LsijWdC|f^^2B>1!33}U$$nF7LK%HIM@yU3F?hoh|q#!3~o(?)kq*~BioWU zVpV4$DP6hj!SSPw*o@DYW);m~7)A|H{An~bfRJn2c>QN~@BJ%I>z5*Sz}0^4bd zhd}^Wn9x_m`D@prZ5cp~o9d9H{>S;wTE(hz+!(hm2H=S^&r!Bp@E&VaB;fQ{9aRKV zElo*}GW@`5{mhQqb#o<)#>DKnF`Lm+v3oVGjc5{H>k3%*3xk*H6eCP1MDb#~)h__0_WY-`(x=Nl&!Vj=L3duk+=UVW1(=mysU=VmZysFG6Ww`h8bdGHOMEMaa72lQ8ie_!W8aVAh*tZJ z2^s}GrCqCM6x`!Nb0i6-!9-}d`HEYc60IH!|C8yjRkqm`?_Q1Nvj2Tym=d3$wUfJm z^_ENO+tra|m718W-ARsV4t?G%7;0JHRSUi6$+PUozgll8e&ukuvJDndAR)YyapPAe zRdRCDU9G3TREu(eLZEG-Uq%Xbn`S66vOvAROkmYZW3Lc{o_e1t$PvP9vU;jC-?yKv z*I`r?;{>0^>b@&nA&#zs?-buA08WM!j|V>^DnuP2sIw)grsLKc3}8d$MHmX~#8@GS zG`JJRYP?r28DX)$I9g?)Ns<$jeo$-8IIYw9rCyZ4CvnsRw9@rteP4cv<+T{KC2jNg zVSn<32wJ-z2X{V%EbB!~aj~xO=+!vcc(@6Opu+ZF3?ocxHaGJlt@GA=G)`)hc6IH6(kxbbXy-kYCK+E{{zJUc-`cqNV`WVIvkIBOy|My?#L=%Q+MYX5V z(C1G-eE)+5p+K&l-wQQNx80%cej?tAh9cR~l5OxZhx;SF*}WX+Cqoa6@O`6ShN_Q$ zK7JIfIuUX+cmPJ6@Y|=K9Ju%YZp+R3_fdn){S@by#|zKCAImAelX}BlsX3zY=U(1@ z^XPWY5jl40ascc3gbEZ7(({QZia{R<`tH z56dA^w8~jCifRS;iUAFt1FP~<^bO(=JZBUss0^uI#Y9|>1(lD@|B9PVoB*`nMuM*2 zGU-goVQ`l(>KDn)=gic4o$+pi2YzISK4QG;DqEg+{Ui7%RHA|sV;wNo^>uJSWNRbY zech_3r|AsDVufk}+`%)OYamU7BADxP2*mvEz>Ss#(Swj%1V>`=hVy!M!GGa>tuzpmknfFpbZ0KwVLEOYCUPfI& zI1z|x0ALU>EcyZGwQpt9SbXN&jxD3e^>@F-3^`KZ1I=oP_LAS(j-R76)7fyY5DqR1 z@u#Jp6)4{<%t`|`WNBbwRHHc&0dyf7KWtKYRCBAkl#~EFXJ;G}bel`dTaLKA^5C}T zYdtBFs(Ha@E`8vgtQm!LV{KF1;akErhWZyMsVhG7GTfG}oTE{qFtbfaw$;BX8D=Q^ z6^T83m~jp3Dn1VjILAYQtYP5FfC)IM-Hj!Ct%5}CBH-Z8NK=&-SBcufCs%p`VpZD0 zsx{Dc_evYiV3+L@NC}puZ+CvSf>DFfHirxu(-Zhn$skY~s0^OBEXv_gSu&wJC+lhg z!4rpnQ2(n?uXGe6r%t78bR`(@7Y0T(Ro{1DwKZX&iYk#>TgO(masgQ-+UqT2G2a}5 zFENW_^DSeSuH@NDuwPQgQXINa;9)G!@a&@yirHu3Wj8^-8911l;l!a*zk@=hH{(Rp z>SG6n&49lm>&DR%98c!dvdjVOU^lqhSR*7GS=c|<3wB}vDDim98RF*5t?ngV;VOfF zZ^A+=#jJ1Cp*x1KMoC#gzUVyhDE$n#BNegu8deQ2NhljDlz68Ct{^x!K@=>-XZ%on z){F@?T*27~@KDv}1ytC(O=0QI(4-qh6L`_G(E?|>Xor6wYUVShP1LsBu=bfYI3@v4Z^FD8VR8@`rc=VK&H%2+S_oPOw}!5Qca##rLaB32DvUfg$s9m14Z3xsbKG`Nv*#=z@sku+G@_Yx66 z6*P4Ktrg95+BBj-+ztRk7I*+kv*#8@k%0+(cr9ukf(8^+hD^-$Sd};t5QIrnW!}4H zp=Y3Q3C|F<=;<7119-NAgSvksa%;-c3h}51YCQqT9k{kx`B3E;{?y*7!KiLo?MSF^ zva2ozTL-WW>oIim#-Noh+CjyriwwnN+eBCoi2%4V=7eP7WMl+}ObPFDR+2zjs`U*jitpKIgIe($T<_`yk|DHA301O@~5leSD*r5%hi4jY* zxpAxQdI(kS=k46{PKzs7CF_OcjbU0b9Z^05*HAx}>LV- z#(m=QP@06ontegdPQde)K4Vops9LA6FKW7nTs+R-tyQn*4)9u&?{W(AWb}F@eP6Rm zi{|3tRjDl9+i};%cAopFw)O~FhT>In-T>Y3GqgcGY+?`Ld;)qIoC$t#K5GUs1+Zi< zj99_G(Ta_aQ2jbrNzG^gk++kA!P%IlciW2%E(#E}4G-$J5yykTg5#n-Yh{64j1!?Y zR*u_u3Ltjt`8cI?*bf@@lTLNU45MfR?HOl?IBhm)ozfEuGEnAOA;Ng6f@Un5v8lxQ zps@r-Mt);ixG7D!Rs~i1%$P~8Ac0lSP^k4pJ^2vbP-qgp>ok=WsDz1lpGJk_T(7$M z5C8lhJuSpvqJ01SUA#p3cYprfb9eDC|I>eyh&vUu!eLE)AG5lK9v{AOz1*PbkBH@W zUwyP?tv??cW_`8_fMEz)R$fsFwAjc;leEkivUS(;seVs1yq!5)% zHB%Ka=??s(bc1jX-ukqXd+h{KN}@aFxAGbb!9^6xCQRuBiwze!(Ej1A{wD4#^{joe z%2nTN;5gsl>XjECAV-}DkMpASP@fZ!p2gj>%vJxm?9s|>5?a5wvPo0#MJX-zR$fmj z(>uwZ9AZ@@Q@Rb6a@`kbaz6ewgG)Ktm(qxqsP=@;y_Hu}a9I85BJ`o?$ja&5I-ydY zAw90%a$}`qUilEIn+NB^SU1Ynwu)n2tcP(A7y$t=FQ&9t1F%#ZICm#%YG+5 z^$$^XNjH=-PejG)8jwoO-j*cnTY0s`%;xYMe)m~neh3rmpv69 zYP^+KRVZ6j9vus$C^Iv-KIf9Owr~uqdlSZ}@PnO6nEwD&%W&?kyuPyZW_uwV%?NC~ zXvuqDN*EqsN%_E)6F4XM94(-)*WB8n4Ix@(p z8qWv!L==;)zEKsotG=Pt>nu4$K4dwd@dlA$;Urz5Kr#Zaht8c3Q!qr~4jFjRC*KL+ z_vO>7svJ(~8(6*WGL2NG9gSX)QSR6mLaDUHV(0PEvkC3>600Y}pDmHqY(L)8g&iOC)NGOM_= zgP)CV5v3iz4v83+cO(f3fGR^eKlD5{Ml?ZBbjI3eUdh^uXrS+{f1++BZ z(Y)WyY3EuYKEbTgQ~}hvCj0MaG(d8le?zF(Uifv_c>Z4eRW7j*tegFjqhjd`zY|sN&g*#`)0S)$w2b=ihqk zroI8|{EpX|J-vC$x1I6)^yBYjXB%|y!8&plv0mD>y`~@BK7Gu~D)9B5HN$jL_jj#b z6?NaSqqp_e!i4WVsg?8mzyD`{@9!$!ziau6|Nb|B@jw11sPfYquX)m-Ef3%nU-jr@ zf0fjeIPfZkQ!@H)VTK#&v45_+?)QEEeEa-4JKZDVxA^D;4Q5WNZqb$8l=dg;W44Dw zV8P;caw{QaesqMcoDFt1$1j0s631#r&lC`TgOGGBg;JJzZARMH4^}wt?DdZ@jb*b4kP3zGIc)4bR#d zeZ~UAV_NkD39Zb))*(_q#$fH!C}a@RcaDxh$u?6)+uy@EPyg&Tz>f9+ z+*8oE8GsG@b4$&QpamLZEMuxZz2BR6+U3Ubn%{Er^k=Y%Dc1btNrhqeN(M+YHFnBYSVa8M?Xsu*DNwwVHVq11|f6x_KDGF1Vj<j0I6VIS!6zkiiAyoqCix&%84GilvciV+gBlMHdq<&v2Zva< z-BIi?(ENN>3yK;B3m>OBoqrFyR=`u!AqH=wrA9Y9wV*<62_&ARm;E>@dI~Eje*CiAHfUMM6;KiE10EURjqDx6T6)3 zjexiI0}u?)D#8aaR^N$iZd#*2(XZW89f;3XwF1a8iYJt#hthOra#Z+h6e2JBF+p)q zm@hni0{w_I>^BO-V=Q*f7U`%~2NG!_F$zn{S3J%8ijVjuNs)kP0Z+zNlYyzTAa47I zLUtr)`#8F+zcpm5dHwp93BJk+73aU;Z^FLScFH$+E?nsIl}#GH`A!?k01`2IK=;Dz zyamD_F^;|guB0>-2-hA>FovAsr|_r;&DIzWZfoA_qS*PKcM=fxMBK7gV$T^g07E_J z6yKgyc5@b677?Gqr6LOv2n6Wq9)=>~`b%X=g6^ULL7uSiBiA|f~50pgNuCPSe(wuA5?GCC`)21KDC(e~NSN!&@ z{2;sKcj`v>+f(*0Q-;K#qsHYezyzi=Por)igs>cfGIB%FY>q2#Wa^}Nn>vaUf*)fd zQ-=T`ioY;+#Mt3cDQM8G$Au=X?%7+FK%tsgyI+IEt{%fFKiQqa3lyTa5+$VWbTkkc zP+{aHv?!n3Y7D%2RRgnB6p1xl2T-s$uZ48bmP0DQG-WN`U!52{b0F(gY|j5U!ATVs z3^p~urbY(!fPz4xQW}6;?V1v1Pdofys+{|?uP&<0!H0rJ6HDaSrVpq)PR7bzLY@sl#2~^8k`APFA4KBINIFjxlbA45Co26-yS4FT zCu|FWS9q;UDKdB&jY2xF3d3<)s0qwhoI#6+P@-k$GIKZnB|&(paL)L|v5f-R>^rAJ z;YKt3KxWEX&15(x92SRPZtnp_B{_z?h|+qFK;~V0D+PxXhTn=A@qAIq0@BC%fxF=R zUPhwypQzZCkw8&5aP&|PW)LMPL-u(GGRJne{|#V^rb#9~*z~$~u*1xFd(ORP76NpY z`tDA?s8r&v^LwB^AOnHhf>zSJGqznKi=GY%EU#9gn@P;a#s}!jT9`-;qF)ZTazc7x z+RZPZ`^xc7Jdt8-d&d>%igCg(A#GK=wO}C3b#NRGebe z<5<(`{c$%BhIXf)fBfB<9aYA(lal*q0QGi`pq+t|u2g&&#^Djx{yL!sWky?Xd_Pt- zdVtbF#FC+URu3Alh8bWckF=dZtyDPvn#f9@T~||V z8fLoJ*cIAvrwKcf;?5!3+othyzED=*2FqW|`2{^eycUtgVWj9#=*o2@CtMYtqe8Q* z<>ShCA_5`}WS+F$TGuddtpg`H$pB&OzX{rB&G1`HB6FfzG*7Wwv=tc_X;PruMvQ^i z+C-$KAan(1O`D2#UGorEdQV|LRYqTRqJE}s*5slJQOom}j792MnAHktn<`s; z_&6Ax>U0zrwKz^f<5s{?C7lZ&O3mgEk0Q+Xa%tfvYYMnI?F4HvpWWA?^(2!rA`q`V zTJgs^o8v&b5+=u`-DsRK?jC&5R@v!uQO{a3Hc;BfXs&s6MAN*Y2|6G#>liDrxTKmQ z4wm6bnc9!dRnZdozuGygNP=sLd=irGCl6~a^eBPyM%V_9{lsut<)|^10U%3SX8{8% z&s`NK_`-frwl8x6tT4VSz%2@NDhEBA?~4(to<>N5!)Ybklj%NeSz-8eu1An**o(Lv z`sl8AHy~CR^Civq*AgC=({aW}p+<&aUWhko5gZM}_TLA~bgA8+!WBw48$J)#5O>x! z=1|i;S=NT%A$iOH77eh?nQ_oSO`G=+uVB3E3tb0sR7{uENJrf`&%j5TCezm^JS8f_ z3>%{=4yTKM&>}C(XC}<0uikHcvE@q?M^A9dA{q1;?@?LjaYU2_s}La-zn@Wo+mGT3 zSQ%7sM#g7^WovLYeRp3=zBV3~gp&m44mQG8#xb+n&Be&p5ubYj`wj~x3`0LC+te&5 zxFr4gip@*%#zSkAEby4jiP!y8++c_=V?Su=e~s~jGC>*nC1Ro8Yh>Wiy%=3ZhoHp? z${Ciy{; zO@s@)#m}hT_PrtIT|$Ln^X%GM!P%v9Q|iQEKL%9^VsZBs+^$YZNjD(Dm7loEQNoaU zPX>xGn)y<=XZxAAjARYs5|6Z$7qHhF>Wm-1c!{KQookhc3@uq`R#=h(rQ|@e!%7QR zZjS#VXg$Tnl62LeJhbtAIgaOr5b%7^3}46n1VQFZS#i~%BHG%p{qC&E2*4amJeYA6 zRtN)C=+ygtp&07|^995r)v2Y&?roGX2-8~8;to>|@P;5g*mdQ9!0?L8s}vZtlTWTT zEP$ObiH(3nMK>6qS4G*O+h}45YnE4PitqlyILIPs)@nj?@SO2Ky|jGyq+p$tLM=X z*4AHia}|8$R@-y8uF3@K-M4}ZAeiyNFyK(|Nyc2yIj>x~gXb?J1gOUxdE(+t79y~8 z-5ROYdp-~I5sc-jb2_-oWt<5NMiFj@^;P zq9Fv>h|-b@Q6?RTa7AkCer4E?mbVYOPO zw$J^Szx}vrMlx`3?E+WzNv*|)N!5)UQ69dA5DL+qazC1MWWRouK;o zt+FJ2`~2zl`SW5_RYU%^H&{6r_;>5s$_;Mu+#mNp-?nGE_mi*DT)Q8RZ@$Tq)AS^% zOeMjqcg6Y;^ZR?{^V_QT6FF`cqu_qf_8XOW_nBR(QYn@YrEso@Ko4p&bQrDtzqmUEZ%wNFDMjM|Mcj&J8vPo%I%9coQ|T~21Np2zU)ER z3xB$)(cS#X%h|>uxAWBT?qN4}oYijXpFP#}W#u*GONZ`veEN9%^po>vz@LFwB^KWv z58nU!hqFQRS<%{}XSa~m(gC@v+vfh;Z{6^AYyx&ps9>^bJIHfCvFL_w9?%FKS}CK0 z+GD8oT_tgVs%CMrEvaU6mhMtx4@h5f>uVTQ9+;oAy4Vnc(!EwVs=!30Q={{A zuT-8I40iBlLL+sGVMq+_FK;K?z-gOj^7bOq*)uD**XfvFP#@aL2YntqA; zQqVb96@@c#yRn*9R{)QyMkuC0o=B$CXvxLWsg?yw)Cpnv#Ek~tUjv}Jr`>CX*s%i8 zgM(J2bP-Uj5SZ!uR3~(hO0YtG@GxnmxeqOkFIRFuo*(0}EL%B zn5-#ly4k%`O3_l_sI}zEfQ^{<#nT1|W-A`(W>0X4&1xG0S3W$5#JQX{gOe>#v^YGytA72waR%l2@uTJEQZ`rm2FgtD~Y4u~ujS6=1T@q)gUJ@vYE+ zrkCdp`b4L2lXNsP8%*T8OFKa-@hFtCMnfhv)C$~oN`yk*MVBts5kQ^9i3 z=(3V`DGX>qSqkmwS_%TZAVgaVjvT?do==9E8E>Wz%X4q25i7tHRXOWp)b@a3NmA@4 z$kPN;sCs5i;?X8L!GoaJY}g)BTw5GunhMbom@+AY^7W$doFDaxaIQo{DK)XG@O~_M z4IEou^cIjX0LHo-qU>fdY<><)@uY7i5n#fI(k~1n8>$p`EU1v?Ao{&h1SgDnQDM3( zuPbv(rk3K!cV)v;?r44@lv`GApMJLcyJ2_OBbxz4uby8~omx}9S+8T(_PiGot=)Vw z+};dOB+G|7I#YG_SatHiy8}N+2D%zCu-zfK4Bc6yFB;NbZQ@5NruU;O!=#|oGctyy zh)E*(ril}EY&gyc;`3|gJhW1Y&@rOQYL=7;*s(VDW@cp5910X}!pM(=mzHcE0|^7E zHX1d0?e3I*M~48_0V!NhF%rn5Qt0dG{Y&_B!TAg@nDYxE75tzJpWE`ZtmGn z$FSXsSo5&M5h$#S6m>#z@}yhCwnK#BBPcchgGw;zYX_}E*+*geYyHLkw4fpY{u72m zd`m{Sc_AhUr$ax`Vph@nUlb_r`9-sI6B;=AF>ZNG=)0Rq>AN z6tY)CHOFbcwE=D&qMB;&26XEQe8I$6k(9U^k=MWjII_voYOiMW$ccVUL4uNt)SXM% z%B2$Nx51oGEVU+w=-8gV*w_y$%;ZpdXB~Q@pH2M+jo|(bn}~KXcrmMKEkmtGrnK-U z5uIcuWA7aBbAar)jvx{cU+mB(xRt750`iFM#xX8GY>7K|8Y?lmea+1y zot`=tP0m+y!(cFF=AJ=)J(&bitP5A1y6$QapI2i*kIgMOB18}c36{1#4CHs!UaFOiL#^{O|^pRTi<(#x6qd(MW`FVl!d+KCtn2 z!X&I>0|rUqiJe5uNNl=X_|4IYOWl`(T8CdcR3m|Iy{C*|(C*EAqExM)e_Xg#bIOfw z3S}B5_ErfiD75Q1_hz(v0%tvis5bxQC2F`jiFBkP^>~>b=17qv)i$)FY8FaPv#tr3 z3wpXB>yHAG;6{wCB|%CD0vB!}-aSy3=-Oq5imlF+jAQ>m$Ut}Y&7b}K&?et_M?J+f z(QaE|V-oHbu$-Rl(Cwu7UU`4oI_jUTtj}`5$|Jd?Ao=4@kClAN$eA>Rgx5c6bt2h~f{a!2X`TXPGZmA#J`t~;b^(oAf zF!wL4#;C>>9ss|?+R2XG^phLJP+?3tS^+RfyY=n@^U#-V=w2$mW^+e^!GQP1>Li(u z!HB$u5$Jo3va;)138C@;9s^u2H%tIf@^=`NxC*7w)}qk>+^$2&R$Q$O&VeMZil>@# zU|l2nC1!;&6E>-7z#wnnh&$Gi0q8y&S%XnCZ&=1f$*Nf<#asE98+(wYa7A?c7H-+- zxuY!+lbmVm#Ul)*->h+xv}RJFe+p0C)CgK!GC?C7AyTrt;O**8#)c>)uRF5#o1iBY z8lx!1aYu`X`Ieb4=~!#7cB#XUw4}k+CzE|5lWo{!+J0$_B$Q8WVe#11R0R=qVE|I& zoKAAyqGc3;VBAUsJR0P95rNiu1CW4=Jkf?!O{*$GI87Nv$19ZvI)Ckt8>(SWC+ zFo+U6n^1c<2SWq0Mm)8qs=;rDEJ{G3Lgq_C(AqwpEY6p5#L5#EtMrWC z)*=n92@i#r>`N%+jY=$ry-dKKl{a-o3A9sZt);#V&hpr>El^dBtlN}NJ6gcQaDX;wh7_N{DTDm?IT?=t!wcQZ)n=$WlbVxKId5w3wr zG;P&EInRoOkev0zvl-J`SERBClz#7t(o&R@KeSkcSs zPXk!BmIl@&l7*LAv;W1_G*y_Cpw7}wvk`O~>~Hb^@UH4f!wH^NKMZB-QYRWpP9$s$2Rh{m{}mk`=Yvv&sr$=KTKa9u zs@SYmVMc|LIPAw(+)GG(@|(>SrnB(r&z{F_Ne1& zpO%Ko*Peh?;I_~Rj^>GP#RWCPiGmzCKk)o|FonU*VnLOH{V>xy(wJ1!WVb+b@4_aQ zX&_)cI))BQAqc)Y3-OK2DgOL?O0X1 z!>n%IQ6vMN{eG+HRejfjcV3_4FZ}f7>zs9 zOoq_?EJOkrAlCZL)v7jo5Wss-h{8+4JNH$65^ zAy7l&BW_NLAnqB*W)#8!UP|ZFqkkMM; zd4yd<`SpsPh_)_ImV?=}^U+%%c?Q@ku*{6t?~M9ptin}B&rdq3aBdWtala3rfB##5 z^Vt1yAKNAd9K}TLd`H~z;Ts7vSl%=~?3t`@8qd!3v5RzC>fag-13Q){)%YK<*#~j#Lcj2Md2Klq-+L&;{;v9kBo!TnkfQPt-#hR#gK6fFTqv@ZAL@uL;K4dwGE1wb|+S?UiuEE5cOYL@W{4Is|Q9}2!MO8L3MxtXsOo9@mBvy^Iz@bG(` zuCjqq*a7rlJ<`jxwCx1cu766(l!nTYJLMys74SPul;r>_OU&r~ z>Tu9jFw-w1?*#(imiLutIS*m)gHGL zBLO~~7CS0^%oV$xZfA?#Djnxg$h5$91%9Xv1|VwDH6jv zXE@DYU$)x3MkdyI3)allSlg{_;{y?o)4*}y`SiK?woBRCh!m^?UU2h)2&4$yILx%Dl`MN5sG|&3A$|I}7W~nns;fK}(0( zEo*~gtZcPzZ4e?kl<}Y}D)2JCK%u6d(S&fP+Bnz(3~kV?hSqLOC-c|HguP`kpz9sM z>V#b&d(+qpzafH)H+RdpzfF9kFD&ngpk%ydlOG5PyAq`2JdN$9nOAAOm=j%!Ct)Q0 z(Q+tSpu1qq6#%cA5JFm`L@)Q-5cEn^X3H6GO6hf^hsr?!8D7{V;*)?6EA4ngV+wGf zQXr@m;XW|9yq`K2R%yF`YrjkSq;t4B@ZkOCvg2^(I zs_>KxDZQVCjz=#k z;9bR2FV-O4P$ka#<|3)u-1Rr!R$%m>s;}@MqrP;+ zHt1OlYR=r(CbnC?!6H6b<=<-ophPy?XjPtKN;qj}b)zHt32|KqlXVlqBVAXM!H(q< z*muyO_hStu&=mqeZN9uTO1X8-p*5+58sE5et0+Np$CXm0EW=b|F2=}#j(F0;IOS$I zfx&t&!#y;HFT|=!d5_0a1cnB0dJ^b!&Z~s)SFyvr9Q_o-18ThIYOj1KIbUeEubXvG z>$ho&t_ZNN)m)Jct?h=;=2Q~i6#XMRS=CEN6=y75A^5~0w9rc3m_r#1=32SSrmbuc zzs6?L9^%M9OyX|Q!i}sKZyePv*aTn-7!$Lw^86L4#0v|jd|ut2L>Ie&WB~^i|ov`E-upFG6V$KfYd0NLF57VdCQ5 zZfbpe+{8=Fp&jm||cIBUbkl*AFm*fYj z3flB6wyf&GPgc0JRVx(OVQ-u@hSr!*9I00000NkvXXu0mjf2|4bC literal 0 HcmV?d00001 diff --git a/deploy/crate-datasource/src/module.ts b/deploy/crate-datasource/src/module.ts new file mode 100755 index 0000000..b1b9b40 --- /dev/null +++ b/deploy/crate-datasource/src/module.ts @@ -0,0 +1,19 @@ +import {CrateDatasource} from './datasource'; +import {CrateDatasourceQueryCtrl} from './query_ctrl'; +import {CrateConfigCtrl} from './config_ctrl'; + +class CrateQueryOptionsCtrl { + static templateUrl = 'partials/query.options.html'; +} + +class CrateAnnotationsQueryCtrl { + static templateUrl = 'partials/annotations.editor.html'; +} + +export { + CrateDatasource as Datasource, + CrateDatasourceQueryCtrl as QueryCtrl, + CrateConfigCtrl as ConfigCtrl, + CrateQueryOptionsCtrl as QueryOptionsCtrl, + CrateAnnotationsQueryCtrl as AnnotationsQueryCtrl, +}; diff --git a/deploy/crate-datasource/src/partials/annotations.editor.html b/deploy/crate-datasource/src/partials/annotations.editor.html new file mode 100755 index 0000000..81f3baf --- /dev/null +++ b/deploy/crate-datasource/src/partials/annotations.editor.html @@ -0,0 +1,24 @@ + +
+
+ +
+
+ +
Field mappings If your query returns more than one field you need to specify the column names below. An annotation event is composed of a title, tags, and an additional text field.
+
+
+
+ Title + +
+
+ Text + +
+
+ Tags + +
+
+
diff --git a/deploy/crate-datasource/src/partials/config.html b/deploy/crate-datasource/src/partials/config.html new file mode 100755 index 0000000..60a7192 --- /dev/null +++ b/deploy/crate-datasource/src/partials/config.html @@ -0,0 +1,50 @@ + + + +

Crate details

+ +
+
+
+ Schema + + +
+ +
+ Table + + +
+
+ + + + +
+ Time column + + +
+ +
+ Default grouping interval + +
+ +
diff --git a/deploy/crate-datasource/src/partials/query.editor.html b/deploy/crate-datasource/src/partials/query.editor.html new file mode 100755 index 0000000..f5d3c87 --- /dev/null +++ b/deploy/crate-datasource/src/partials/query.editor.html @@ -0,0 +1,149 @@ + + + +
+ + +
+ + +
+ diff --git a/deploy/crate-datasource/src/partials/query.options.html b/deploy/crate-datasource/src/partials/query.options.html new file mode 100755 index 0000000..e69de29 diff --git a/deploy/crate-datasource/src/plugin.json b/deploy/crate-datasource/src/plugin.json new file mode 100755 index 0000000..7396d85 --- /dev/null +++ b/deploy/crate-datasource/src/plugin.json @@ -0,0 +1,36 @@ +{ + "name": "Crate", + "id": "crate-datasource", + "type": "datasource", + + "partials": { + "config": "public/app/plugins/datasource/crate/partials/config.html" + }, + + "metrics": true, + "annotations": true, + "alerting": true, + + "info": { + "description": "Crate SQL Database datasource", + "author": { + "name": "Crate.IO", + "url": "https://crate.io" + }, + "logos": { + "small": "img/crate_logo.png", + "large": "img/crate_logo.png" + }, + "links": [ + {"name": "GitHub", "url": "https://github.com/raintank/crate-datasource"}, + {"name": "MIT License", "url": "https://github.com/raintank/crate-datasource/blob/master/LICENSE"} + ], + "version": "0.5.2", + "updated": "2018-03-12" + }, + + "dependencies": { + "grafanaVersion": "3.x.x", + "plugins": [] + } +} diff --git a/deploy/crate-datasource/src/query_builder.ts b/deploy/crate-datasource/src/query_builder.ts new file mode 100755 index 0000000..2aeda51 --- /dev/null +++ b/deploy/crate-datasource/src/query_builder.ts @@ -0,0 +1,425 @@ +/// + +import _ from 'lodash'; + +// Maximum LIMIT value +let MAX_LIMIT = 100000; +let DEFAULT_LIMIT = 10000; + +export class CrateQueryBuilder { + schema: string; + table: string; + defaultTimeColumn: string; + defaultGroupInterval: string; + + constructor(schema: string, + table: string, + defaultTimeColumn: string, + defaultGroupInterval: string, + private templateSrv) { + this.schema = schema; + this.table = table; + this.defaultTimeColumn = defaultTimeColumn; + this.defaultGroupInterval = defaultGroupInterval; + this.templateSrv = templateSrv; + } + + /** + * Builds Crate SQL query from given target object. + * @param {any} target Target object. + * @param {number} groupInterval Interval for grouping values. + * @param {string} defaultAgg Default aggregation for values. + * @return {string} SQL query. + */ + build(target: any, groupInterval = 0, adhocFilters = [], limit = DEFAULT_LIMIT, defaultAgg='avg') { + let query: string; + let timeExp: string; + + let timeColumn = quoteColumn(this.defaultTimeColumn); + let aggs = getEnabledAggs(target.metricAggs); + let rawAggs = getRawAggs(aggs); + + if (!aggs.length) { return null; } + + if (groupInterval) { + // Manually aggregate by time interval, ie "SELECT floor(ts/10)*10 as time ..." + timeExp = `floor(${timeColumn}/${groupInterval})*${groupInterval}`; + aggs = aggregateMetrics(aggs, 'avg'); + } else { + timeExp = timeColumn; + } + + // SELECT + let renderedAggs = this.renderMetricAggs(aggs); + query = "SELECT " + timeExp + " as time, " + renderedAggs; + + // Add GROUP BY columns to SELECT statement. + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + query += ` FROM "${this.schema}"."${this.table}"` + + ` WHERE ${timeColumn} >= ? AND ${timeColumn} <= ?`; + + // WHERE + if (target.whereClauses && target.whereClauses.length) { + query += " AND " + this.renderWhereClauses(target.whereClauses); + } + + // Add ad-hoc filters + if (adhocFilters.length > 0) { + query += " AND " + this.renderAdhocFilters(adhocFilters); + } + + // GROUP BY + query += " GROUP BY time"; + if (!groupInterval && rawAggs.length) { + query += ", " + this.renderMetricAggs(rawAggs, false); + } + + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + + // If GROUP BY specified, sort also by selected columns + query += " ORDER BY time"; + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + query += " ASC"; + + return query; + } + + buildAggQuery(target: any, groupInterval = 0, adhocFilters = [], limit?: number) { + let query: string; + let timeExp: string; + + let timeColumn = quoteColumn(this.defaultTimeColumn); + let aggs = getEnabledAggs(target.metricAggs); + aggs = getNotRawAggs(aggs); + + if (!aggs.length) { return null; } + + if (!groupInterval) { + groupInterval = 1; + } + + if (typeof groupInterval === 'number') { + // Manually aggregate by time interval, ie "SELECT floor(ts/10)*10 as time ..." + timeExp = `floor(${timeColumn}/${groupInterval})*${groupInterval}`; + } else { + // Use built-in date_trunc() function + timeExp = `date_trunc('${groupInterval}', ${timeColumn})`; + } + + // SELECT + let renderedAggs = this.renderMetricAggs(aggs); + query = `SELECT ${timeExp} as time, ${renderedAggs}`; + + // Add GROUP BY columns to SELECT statement. + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + + // FROM + query += ` FROM "${this.schema}"."${this.table}"`; + + // WHERE + query += ` WHERE ${timeColumn} >= ? AND ${timeColumn} <= ?`; + if (target.whereClauses && target.whereClauses.length) { + query += " AND " + this.renderWhereClauses(target.whereClauses); + } + + // Add ad-hoc filters + if (adhocFilters.length > 0) { + query += " AND " + this.renderAdhocFilters(adhocFilters); + } + + // GROUP BY + query += " GROUP BY time"; + + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + + // If GROUP BY specified, sort also by selected columns + query += " ORDER BY time"; + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + query += " ASC"; + + if (limit && limit > DEFAULT_LIMIT) { + limit = Math.min(limit, MAX_LIMIT); + query += ` LIMIT ${limit}`; + } + + return query; + } + + buildRawAggQuery(target: any, groupInterval = 0, adhocFilters = [], limit?: number) { + let query: string; + let timeExp: string; + + let timeColumn = quoteColumn(this.defaultTimeColumn); + let aggs = getEnabledAggs(target.metricAggs); + let rawAggs = getRawAggs(aggs); + + if (!rawAggs.length) { return null; } + + // SELECT + let renderedAggs = this.renderMetricAggs(rawAggs); + query = "SELECT " + timeColumn + " as time, " + renderedAggs; + + // Add GROUP BY columns to SELECT statement. + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + query += ` FROM "${this.schema}"."${this.table}"` + + ` WHERE ${timeColumn} >= ? AND ${timeColumn} <= ?`; + + // WHERE + if (target.whereClauses && target.whereClauses.length) { + query += " AND " + this.renderWhereClauses(target.whereClauses); + } + + // Add ad-hoc filters + if (adhocFilters.length > 0) { + query += " AND " + this.renderAdhocFilters(adhocFilters); + } + + // GROUP BY + query += " GROUP BY time"; + query += ", " + this.renderMetricAggs(rawAggs, false); + + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + + // If GROUP BY specified, sort also by selected columns + query += " ORDER BY time"; + if (target.groupByColumns && target.groupByColumns.length) { + query += ", " + target.groupByColumns.join(', '); + } + query += " ASC"; + + if (limit) { + limit = Math.min(limit, MAX_LIMIT); + query += ` LIMIT ${limit}`; + } + + return query; + } + + renderAdhocFilters(filters) { + let conditions = _.map(filters, (tag, index) => { + let filter_str = ""; + let condition = tag.condition || 'AND'; + let key = quoteColumn(tag.key); + let operator = tag.operator; + let value = quoteValue(tag.value); + + if (index > 0) { + filter_str = `${condition} `; + } + + if (operator === '=~') { + operator = '~'; + } + + filter_str += `${key} ${operator} ${value}` + return filter_str; + }); + return conditions.join(' '); + } + + /** + * Builds SQL query for getting available columns from table. + * @return {string} SQL query. + */ + getColumnsQuery() { + let query = "SELECT column_name " + + "FROM information_schema.columns " + + "WHERE table_schema = '" + this.schema + "' " + + "AND table_name = '" + this.table + "' " + + "ORDER BY 1"; + return query; + } + + getNumericColumnsQuery() { + return "SELECT column_name " + + "FROM information_schema.columns " + + "WHERE table_schema = '" + this.schema + "' " + + "AND table_name = '" + this.table + "' " + + "AND data_type in ('integer', 'long', 'short', 'double', 'float', 'byte') " + + "ORDER BY 1"; + } + + /** + * Builds SQL query for getting unique values for given column. + * @param {string} column Column name + * @param {number} limit Optional. Limit number returned values. + */ + getValuesQuery(column: string, limit?: number, timeRange?) { + let timeColumn = quoteColumn(this.defaultTimeColumn); + let query = `SELECT DISTINCT ${column} ` + + `FROM "${this.schema}"."${this.table}"`; + + if (timeRange) { + let timeFrom = timeRange.from.valueOf(); + let timeTo = timeRange.to.valueOf(); + query += ` WHERE ${timeColumn} >= ${timeFrom} AND ${timeColumn} <= ${timeTo}`; + } + + if (limit) { + query += ` LIMIT ${limit}`; + } + return query; + } + + private renderMetricAggs(metricAggs: any, withAlias=true): string { + let enabledAggs = _.filter(metricAggs, (agg) => { + return !agg.hide; + }); + + let renderedAggs = _.map(enabledAggs, (agg) => { + let alias = ''; + if (agg.alias && withAlias) { + alias = ' AS \"' + agg.alias + '\"'; + } + + let column = quoteColumn(agg.column); + if (agg.type === 'count_distinct') { + return "count(distinct " + column + ")" + alias; + } else if (agg.type === 'raw') { + return column + alias; + } else { + return agg.type + "(" + column + ")" + alias; + } + }); + + if (renderedAggs.length) { + return renderedAggs.join(', '); + } else { + return ""; + } + } + + private renderWhereClauses(whereClauses): string { + let renderedClauses = _.map(whereClauses, (clauseObj, index) => { + let rendered = ""; + if (index !== 0) { + rendered += clauseObj.condition + " "; + } + + // Quote arguments as required by the operator and value type + let rendered_value: string; + let value = clauseObj.value; + if (clauseObj.operator.toLowerCase() === 'in') { + // Handle IN operator. Split comma-separated values. + // "42, 10, a" => 42, 10, 'a' + rendered_value = '(' + _.map(value.split(','), v => { + v = v.trim(); + if (!isNaN(v) || this.containsVariable(v)) { + return v; + } else { + return "'" + v + "'"; + } + }).join(', ') + ')'; + } else { + rendered_value = _.map(value.split(','), v => { + v = v.trim(); + if (!isNaN(v) || this.containsVariable(v)) { + return v; + } else { + return "'" + v + "'"; + } + }).join(', '); + } + rendered += clauseObj.column + ' ' + clauseObj.operator + ' ' + rendered_value; + return rendered; + }); + return renderedClauses.join(' '); + } + + // Check for template variables + private containsVariable(str: string): boolean { + let variables = _.map(this.templateSrv.variables, 'name'); + return _.some(variables, variable => { + let pattern = new RegExp('\\$' + variable); + return pattern.test(str); + }); + } +} + +export function getSchemas() { + var query = "SELECT schema_name " + + "FROM information_schema.schemata " + + "WHERE schema_name NOT IN ('information_schema', 'blob', 'sys', 'pg_catalog') " + + "ORDER BY 1"; + return query; +} + +export function getTables(schema) { + var query = "SELECT table_name " + + "FROM information_schema.tables " + + "WHERE table_schema='" + schema + "' " + + "ORDER BY 1"; + return query; +} + +function quoteColumn(column: string): string { + if (isWithUpperCase(column)) { + return '\"' + column + '\"'; + } else { + return column; + } +} + +function quoteValue(value: string): string { + value = value.trim(); + let match = value.match(/^'?([^']*)'?$/); + if (match[1]) { + value = match[1]; + } else { + return value; + } + + if (!isNaN(Number(value))) { + return value; + } else { + return "'" + value + "'"; + } +} + +function isWithUpperCase(str: string): boolean { + return str.toLowerCase() !== str; +} + +function aggregateMetrics(metricAggs: any, aggType: string) { + let aggs = _.cloneDeep(metricAggs); + return _.map(aggs, agg => { + if (agg.type === 'raw') { + agg.type = aggType; + return agg; + } else { + return agg; + } + }); +} + +export function getEnabledAggs(metricAggs) { + return _.filter(metricAggs, (agg) => { + return !agg.hide; + }); +} + +export function getRawAggs(metricAggs) { + return _.filter(metricAggs, {type: 'raw'}); +} + +export function getNotRawAggs(metricAggs) { + return _.filter(metricAggs, agg => { + return agg.type !== 'raw'; + }); +} diff --git a/deploy/crate-datasource/src/query_ctrl.ts b/deploy/crate-datasource/src/query_ctrl.ts new file mode 100755 index 0000000..afed57c --- /dev/null +++ b/deploy/crate-datasource/src/query_ctrl.ts @@ -0,0 +1,324 @@ +/// + +import angular from 'angular'; +import _ from 'lodash'; +import {QueryCtrl} from './sdk/sdk'; +import {CrateQueryBuilder} from './query_builder'; +import queryDef from './query_def'; + +export class CrateDatasourceQueryCtrl extends QueryCtrl { + static templateUrl = 'partials/query.editor.html'; + + crateQueryBuilder: CrateQueryBuilder; + groupBySegments: any; + whereSegments: any; + removeWhereSegment: any; + operators: any; + timeIntervals: any[]; + resultFormats: any[]; + + constructor($scope, $injector, private $q, private uiSegmentSrv, private templateSrv) { + super($scope, $injector); + + this.uiSegmentSrv = uiSegmentSrv; + this.templateSrv = templateSrv; + + let ds = this.datasource; + this.crateQueryBuilder = new CrateQueryBuilder(ds.schema, + ds.table, + ds.defaultTimeColumn, + ds.defaultGroupInterval, + templateSrv); + + this.operators = ['<', '>', '<=', '>=', '=', '<>', '!=', 'in', 'like', '~', '!~']; + + this.timeIntervals = [ + {name: 'Auto', value: 'auto'}, + {name: 'Auto (Grafana)', value: 'auto_gf'}, + {name: 'Second', value: 'second'}, + {name: 'Minute', value: 'minute'}, + {name: 'Hour', value: 'hour'}, + {name: 'Day', value: 'day'}, + {name: 'Week', value: 'week'}, + {name: 'Month', value: 'month'}, + {name: 'Quarter', value: 'quarter'}, + {name: 'Year', value: 'year'} + ]; + + this.resultFormats = [ + {text: 'Time series', value: 'time_series'}, + {text: 'Table', value: 'table'}, + ]; + + var target_defaults = { + metricAggs: [ + {type: 'avg', column: 'value'} + ], + groupByColumns: [], + groupByAliases: [], + whereClauses: [], + timeInterval: ds.defaultGroupInterval, + resultFormat: 'time_series' + }; + _.defaults(this.target, target_defaults); + + this.updateGroupByAliases(); + + this.groupBySegments = _.map(this.target.groupByColumns, this.uiSegmentSrv.newSegment); + + // Build WHERE segments + this.whereSegments = []; + this.buildWhereSegments(this.target.whereClauses); + + this.removeWhereSegment = uiSegmentSrv.newSegment({fake: true, value: '-- remove --'}); + this.fixSegments(this.groupBySegments); + } + + crateQuery(query, args = []) { + return this.datasource._sql_query(query, args).then(response => { + return response.rows; + }); + } + + getCollapsedText(): string { + if (this.target.rawQuery) { + return this.target.query; + } else { + return this.crateQueryBuilder.build(this.target); + } + } + + //////////////////// + // Event handlers // + //////////////////// + + onChangeInternal(): void { + this.panelCtrl.refresh(); // Asks the panel to refresh data. + } + + groupBySegmentChanged(segment, index): void { + if (segment.type === 'plus-button') { + segment.type = undefined; + } + this.target.groupByColumns = _.map(_.filter(this.groupBySegments, segment => { + return (segment.type !== 'plus-button' && + segment.value !== this.removeWhereSegment.value); + }), 'value'); + this.groupBySegments = _.map(this.target.groupByColumns, this.uiSegmentSrv.newSegment); + this.groupBySegments.push(this.uiSegmentSrv.newPlusButton()); + + if (segment.value === this.removeWhereSegment.value) { + this.target.groupByAliases.splice(index, 1); + } + this.updateGroupByAliases(); + + this.onChangeInternal(); + } + + onGroupByAliasChange(index) { + this.updateGroupByAliases(); + this.onChangeInternal(); + } + + onAggTypeChange(): void { + this.onChangeInternal(); + } + + addMetricAgg(): void { + this.target.metricAggs.push({ type: 'avg', column: 'value' }); + this.onChangeInternal(); + } + + removeMetricAgg(index): void { + this.target.metricAggs.splice(index, 1); + this.onChangeInternal(); + } + + toggleShowMetric(agg): void { + agg.hide = !agg.hide; + this.onChangeInternal(); + } + + toggleEditorMode(): void { + this.target.rawQuery = !this.target.rawQuery; + } + + /////////////////////// + // Query suggestions // + /////////////////////// + + getColumns(allValue?: boolean, onlyNumeric?: boolean) { + let query; + if (onlyNumeric) { + query = this.crateQueryBuilder.getNumericColumnsQuery(); + } else { + query = this.crateQueryBuilder.getColumnsQuery(); + } + let self = this; + return this.crateQuery(query).then(rows => { + if (allValue) { + rows.splice(0, 0, '*'); + } + return self.transformToSegments(_.flatten(rows), true); + }); + } + + getGroupByColumns() { + return this.getColumns().then(columns => { + columns.splice(0, 0, angular.copy(this.removeWhereSegment)); + return columns; + }); + } + + getValues(column, limit = 10) { + let self = this; + let time_range = this.panelCtrl.range; + return this.crateQuery(this.crateQueryBuilder.getValuesQuery(column, limit, time_range)) + .then(rows => { + return self.transformToSegments(_.flatten(rows), true); + }); + } + + getColumnsOrValues(segment, index) { + var self = this; + if (segment.type === 'condition') { + return this.$q.when([this.uiSegmentSrv.newSegment('AND'), this.uiSegmentSrv.newSegment('OR')]); + } + if (segment.type === 'operator') { + return this.$q.when(this.uiSegmentSrv.newOperators(this.operators)); + } + + if (segment.type === 'key' || segment.type === 'plus-button') { + return this.getColumns().then(columns => { + columns.splice(0, 0, angular.copy(this.removeWhereSegment)); + return columns; + }); + } else if (segment.type === 'value') { + return this.getValues(this.whereSegments[index - 2].value); + } + } + + getMetricAggTypes() { + return queryDef.getMetricAggTypes(); + } + + getMetricAggDef(aggType) { + return _.find(this.getMetricAggTypes(), { value: aggType }); + } + + whereSegmentUpdated(segment, index) { + this.whereSegments[index] = segment; + + if (segment.value === this.removeWhereSegment.value) { + this.whereSegments.splice(index, 3); + if (this.whereSegments.length === 0) { + this.whereSegments.push(this.uiSegmentSrv.newPlusButton()); + } else if (this.whereSegments.length > 2) { + this.whereSegments.splice(Math.max(index - 1, 0), 1); + if (this.whereSegments[this.whereSegments.length - 1].type !== 'plus-button') { + this.whereSegments.push(this.uiSegmentSrv.newPlusButton()); + } + } + } else { + if (segment.type === 'plus-button') { + if (index > 2) { + this.whereSegments.splice(index, 0, this.uiSegmentSrv.newCondition('AND')); + } + this.whereSegments.push(this.uiSegmentSrv.newOperator('=')); + this.whereSegments.push(this.uiSegmentSrv.newFake('select tag value', 'value', 'query-segment-value')); + segment.type = 'key'; + segment.cssClass = 'query-segment-key'; + } + if ((index + 1) === this.whereSegments.length) { + this.whereSegments.push(this.uiSegmentSrv.newPlusButton()); + } + } + + this.buildWhereClauses(); + + // Refresh only if all fields setted + if (_.every(this.whereSegments, segment => { + return ((segment.value || segment.type === 'plus-button') && + !(segment.fake && segment.type !== 'plus-button')); + })) { + this.panelCtrl.refresh(); + } + } + + /////////////////////// + + buildWhereSegments(whereClauses: any): void { + var self = this; + _.forEach(whereClauses, whereClause => { + if (whereClause.condition) { + self.whereSegments.push(self.uiSegmentSrv.newCondition(whereClause.condition)); + } + self.whereSegments.push(self.uiSegmentSrv.newKey(whereClause.column)); + self.whereSegments.push(self.uiSegmentSrv.newOperator(whereClause.operator)); + self.whereSegments.push(self.uiSegmentSrv.newKeyValue(whereClause.value)); + }); + this.fixSegments(this.whereSegments); + } + + buildWhereClauses() { + var i = 0; + var whereIndex = 0; + var segments = this.whereSegments; + var whereClauses = []; + while (segments.length > i && segments[i].type !== 'plus-button') { + if (whereClauses.length < whereIndex + 1) { + whereClauses.push({condition: '', column: '', operator: '', value: ''}); + } + if (segments[i].type === 'condition') { + whereClauses[whereIndex].condition = segments[i].value; + } else if (segments[i].type === 'key') { + whereClauses[whereIndex].column = segments[i].value; + } else if (segments[i].type === 'operator') { + whereClauses[whereIndex].operator = segments[i].value; + } else if (segments[i].type === 'value' || segments[i].type === 'template') { + whereClauses[whereIndex].value = segments[i].value; + whereIndex++; + } + i++; + } + this.target.whereClauses = whereClauses; + } + + fixSegments(segments) { + var count = segments.length; + var lastSegment = segments[Math.max(count-1, 0)]; + + if (!lastSegment || lastSegment.type !== 'plus-button') { + segments.push(this.uiSegmentSrv.newPlusButton()); + } + } + + transformToSegments(results, addTemplateVars?: boolean) { + var segments = _.map(_.flatten(results), value => { + return this.uiSegmentSrv.newSegment({ + value: value.toString(), + expandable: false + }); + }); + + if (addTemplateVars) { + for (let variable of this.templateSrv.variables) { + segments.unshift(this.uiSegmentSrv.newSegment({ type: 'template', value: '$' + variable.name, expandable: true })); + } + } + return segments; + } + + updateGroupByAliases() { + let groupByAliases = new Array(this.target.groupByColumns.length); + this.target.groupByColumns.forEach((column, index) => { + if (this.target.groupByAliases[index]) { + groupByAliases[index] = this.target.groupByAliases[index]; + } else { + groupByAliases[index] = ""; + } + }); + this.target.groupByAliases = groupByAliases; + } + +} diff --git a/deploy/crate-datasource/src/query_def.ts b/deploy/crate-datasource/src/query_def.ts new file mode 100755 index 0000000..9396ff2 --- /dev/null +++ b/deploy/crate-datasource/src/query_def.ts @@ -0,0 +1,24 @@ +/// + +import _ from 'lodash'; + +let _metricAggTypes = [ + {text: "Raw", value: "raw", allValue: false}, + {text: "Count", value: 'count', allValue: true, anyDataType: true}, + {text: "Distinct Count", value: 'count_distinct', allValue: false, anyDataType: true}, + {text: "Avg / Mean", value: 'avg', allValue: false}, + {text: "Min", value: 'min', allValue: false}, + {text: "Max", value: 'max', allValue: false}, + {text: "Sum", value: 'sum', allValue: false}, + {text: "Geometric Mean", value: 'geometric_mean', allValue: false}, + {text: "Variance", value: 'variance', allValue: false}, + {text: "Std Deviation", value: 'stddev', allValue: false}, + {text: "Arbitrary", value: "arbitrary", allValue: false} +]; + +export default class QueryDef { + + static getMetricAggTypes() { + return _metricAggTypes; + } +} diff --git a/deploy/crate-datasource/src/response_handler.ts b/deploy/crate-datasource/src/response_handler.ts new file mode 100755 index 0000000..1a7fdaf --- /dev/null +++ b/deploy/crate-datasource/src/response_handler.ts @@ -0,0 +1,146 @@ +/// + +import _ from 'lodash'; + +export default function handleResponse(target, result) { + if (target.resultFormat === 'table') { + return handleTableResponse(target, result); + } + + if (target.rawQuery) { + return handleRawResponse(target, result); + } else { + return handleBuildedResponse(target, result); + } +} + +function handleTableResponse(target, result) { + return { + columns: _.map(result.cols, col => { + return {text: col}; + }), + rows: result.rows, + type: 'table' + }; +} + +function handleRawResponse(target, result) { + let columns = result.cols; + let timeColumnIndex = 0; + let valueColumnIndex = 1; + + if (columns.length > 2) { + let groupedResponse = _.groupBy(result.rows, row => { + // Assume row structure is + // [ts, value, ...group by columns] + return row.slice(2).join(' '); + }); + + return _.map(groupedResponse, (rows, key) => { + return { + target: key + ': ' + columns[valueColumnIndex], + datapoints: convertToGrafanaPoints(rows, timeColumnIndex, valueColumnIndex) + }; + }); + } else { + return [{ + target: columns[valueColumnIndex], + datapoints: convertToGrafanaPoints(result.rows, timeColumnIndex, valueColumnIndex) + }]; + } +} + +function handleBuildedResponse(target, result) { + let columns = result.cols; + let timeColumnIndex = 0; + let groupByColumnIndexes: number[], selectColumnIndexes: number[]; + + if (target.groupByColumns.length) { + groupByColumnIndexes = _.map(target.groupByColumns, groupByCol => { + return _.indexOf(columns, groupByCol); + }); + } + + let enabledAggs = _.filter(target.metricAggs, (agg) => { + return !agg.hide; + }); + + if (enabledAggs.length) { + selectColumnIndexes = _.map(enabledAggs, (metricAgg, index) => { + return index + 1; + }); + } else { + return []; + } + + if (groupByColumnIndexes && groupByColumnIndexes.length && !_.some(groupByColumnIndexes, -1)) { + let groupedResponse = _.groupBy(result.rows, row => { + // Construct groupBy key from Group By columns, for example: + // [metric, host] => 'metric host' + return _.map(groupByColumnIndexes, columnIndex => { + return row[columnIndex]; + }).join(' '); + }); + + return _.flatten(_.map(groupedResponse, (rows, key) => { + return _.map(selectColumnIndexes, (valueIndex) => { + let datapoints = convertToGrafanaPoints(rows, timeColumnIndex, valueIndex); + + // Build alias for Group By column values + let group_by_alias: string; + if (rows.length) { + group_by_alias = _.map(groupByColumnIndexes, (columnIndex, i) => { + let first_row = rows[0]; + if (target.groupByAliases && target.groupByAliases[i]) { + let pattern = new RegExp(target.groupByAliases[i]); + let match = pattern.exec(first_row[columnIndex]); + if (match && match.length > 1) { + return match[1]; + } else if (match){ + return match[0]; + } else { + return first_row[columnIndex]; + } + } else { + return first_row[columnIndex]; + } + }).join(' '); + } else { + group_by_alias = key; + } + + return { + target: group_by_alias + ': ' + columns[valueIndex], + datapoints: datapoints + }; + }); + })); + } else { + return _.map(selectColumnIndexes, (valueIndex) => { + let datapoints = convertToGrafanaPoints(result.rows, timeColumnIndex, valueIndex); + + return { + target: columns[valueIndex], + datapoints: datapoints + }; + }); + } +} + +function convertToGrafanaPoints(rows, timeColumnIndex, valueColumnIndex) { + return _.map(rows, row => { + let ts = Number(row[timeColumnIndex]); + let val = row[valueColumnIndex]; + val = val !== null ? Number(val) : null; + + return [val, ts]; + }); +} + +function makeColName(aggType, column) { + if (aggType === 'count_distinct') { + return 'count(DISTINCT ' + column + ')'; + } else { + return aggType + '(' + column + ')'; + } +} diff --git a/deploy/crate-datasource/src/sdk/query_ctrl.ts b/deploy/crate-datasource/src/sdk/query_ctrl.ts new file mode 100755 index 0000000..67f4f93 --- /dev/null +++ b/deploy/crate-datasource/src/sdk/query_ctrl.ts @@ -0,0 +1,23 @@ +/// + +import angular from 'angular'; +import _ from 'lodash'; + +export class QueryCtrl { + target: any; + datasource: any; + panelCtrl: any; + panel: any; + hasRawMode: boolean; + error: string; + + constructor(public $scope, private $injector) { + this.panel = this.panelCtrl.panel; + } + + refresh() { + this.panelCtrl.refresh(); + } + +} + diff --git a/deploy/crate-datasource/src/sdk/sdk.ts b/deploy/crate-datasource/src/sdk/sdk.ts new file mode 100755 index 0000000..37ed221 --- /dev/null +++ b/deploy/crate-datasource/src/sdk/sdk.ts @@ -0,0 +1,15 @@ +import {QueryCtrl} from './query_ctrl'; + +import config from 'app/core/config'; + +export function loadPluginCss(options) { + if (config.bootData.user.lightTheme) { + System.import(options.light + '!css'); + } else { + System.import(options.dark + '!css'); + } +} + +export { + QueryCtrl +} diff --git a/deploy/crate-datasource/src/spec/datasource_specs.js b/deploy/crate-datasource/src/spec/datasource_specs.js new file mode 100755 index 0000000..f1c3d3c --- /dev/null +++ b/deploy/crate-datasource/src/spec/datasource_specs.js @@ -0,0 +1,142 @@ +//import {describe, beforeEach, it, sinon, expect} from '../utils/test_common'; +import {Datasource} from '../module'; +import {convertToCrateInterval} from '../datasource'; +import Q from "q"; + +describe('CrateDatasource', function() { + var ctx = {}; + + describe('When testing datasource', function() { + + beforeEach(function() { + ctx.$q = Q; + ctx.backendSrv = {}; + ctx.templateSrv = {}; + ctx.instanceSettings = { + url: "http://crate.io:4200", + jsonData: { + schema: 'stats', + table: 'nodes', + defaultTimeColumn: 'ts', + defaultGroupInterval: 'minute' + } + }; + ctx.ds = new Datasource(ctx.instanceSettings, ctx.$q, ctx.backendSrv, ctx.templateSrv); + }); + + it('should return Crate cluster name and version if test ok', function(done) { + ctx.backendSrv.datasourceRequest = function(options) { + return ctx.$q.when({ + status: 200, + data: { + "ok" : true, + "status" : 200, + "name" : "Negasonic Teenage Warhead", + "cluster_name" : "Crate Test Cluster", + "version" : { + "number" : "0.54.8", + "build_hash" : "c3a7dc4caecfe4fef2992148c8b78347d8c30b2e", + "build_timestamp" : "2016-04-08T12:26:00Z", + "build_snapshot" : false, + "es_version" : "1.7.5", + "lucene_version" : "4.10.4" + } + } + }); + }; + + ctx.ds.testDatasource().then(function(result) { + expect(result).to.have.property('status'); + expect(result).to.have.property('title'); + expect(result).to.have.property('message'); + expect(result.status).to.equal('success'); + expect(result.title).to.equal('Success'); + expect(result.message).to.equal('Cluster: Crate Test Cluster, version: 0.54.8'); + done(); + }); + }); + + it('should return Crate error if host and port was set properly but url is wrong', function(done) { + ctx.backendSrv.datasourceRequest = function(options) { + var deferred = ctx.$q.defer(); + deferred.reject({ + status: 400, + statusText: "Bad Request", + data: "No handler found for uri [/wrong] and method [GET]" + }); + return deferred.promise; + }; + + ctx.ds.testDatasource().then(function(result) { + expect(result).to.have.property('status'); + expect(result).to.have.property('title'); + expect(result).to.have.property('message'); + expect(result.status).to.equal('error'); + expect(result.title).to.equal('Error'); + expect(result.message).to.equal('Bad Request: No handler found for uri [/wrong] and method [GET]'); + done(); + }); + }); + + it('should return http error if url is unreachable', function(done) { + ctx.backendSrv.datasourceRequest = function(options) { + var deferred = ctx.$q.defer(); + deferred.reject({ + status: 500, + statusText: "Internal Server Error", + data: { + error: "Internal Server Error", + message: "Internal Server Error" + } + }); + return deferred.promise; + }; + + ctx.ds.testDatasource().then(function(result) { + expect(result).to.have.property('status'); + expect(result).to.have.property('title'); + expect(result).to.have.property('message'); + expect(result.status).to.equal('error'); + expect(result.title).to.equal('Error'); + expect(result.message).to.equal('Internal Server Error: Internal Server Error'); + done(); + }); + }); + }); + + describe('When converting to Crate interval', function() { + + beforeEach(function() { + }); + + it('should return proper interval for date_trunc() function', function(done) { + var test_map = [ + ['10s', 'second'], + ['20s', 'second'], + ['30s', 'second'], + ['40s', 'second'], + ['50s', 'second'], + ['59s', 'second'], + + ['1m', 'minute'], + ['1h', 'hour'], + ['1d', 'day'], + ['1w', 'week'], + ['1M', 'month'], + ['1y', 'year'] + ]; + + var test_intervals = test_map.map(function(value) { + return value[0]; + }); + var expected_result = test_map.map(function(value) { + return value[1]; + }); + var result = test_intervals.map(convertToCrateInterval); + + expect(result).to.deep.equal(expected_result); + done(); + }); + }); + +}); diff --git a/deploy/crate-datasource/src/spec/query_builder_specs.js b/deploy/crate-datasource/src/spec/query_builder_specs.js new file mode 100755 index 0000000..842f017 --- /dev/null +++ b/deploy/crate-datasource/src/spec/query_builder_specs.js @@ -0,0 +1,374 @@ +//import {describe, beforeEach, it, sinon, expect} from '../utils/test_common'; +import {CrateQueryBuilder} from '../query_builder'; + +describe('CrateQueryBuilder', function() { + var ctx = {}; + + beforeEach(function() { + ctx.templateSrv = { + containsVariable: (str, variable) => {return true;}, + variables: [] + }; + ctx.limit = 100; + ctx.adhocFilters = []; + ctx.queryBuilder = new CrateQueryBuilder('stats', 'nodes', 'ts', 'minute', ctx.templateSrv); + }); + + describe('When building query', function() { + + beforeEach(function() { + ctx.target = { + metricAggs: [ + {type: 'avg', column: 'load'} + ], + whereClauses: [ + {condition: 'AND', column: 'hostname', operator: '=', value: 'backend01'} + ], + groupByColumns: [], + timeInterval: 'auto' + }; + + ctx.interval = 'second'; + }); + + it('should build proper Crate SQL query', function(done) { + var expected_query = "SELECT date_trunc('second', ts) as time, " + + "avg(load) " + + "FROM \"stats\".\"nodes\" " + + "WHERE ts >= ? AND ts <= ? " + + "AND hostname = 'backend01' " + + "GROUP BY time " + + "ORDER BY time ASC"; + + var query = ctx.queryBuilder.buildAggQuery(ctx.target, ctx.interval); + expect(query).to.equal(expected_query); + done(); + }); + + it('should build proper WHERE clause', function(done) { + ctx.target.whereClauses = [ + {condition: 'AND', column: 'hostname', operator: '=', value: 'backend01'}, + {condition: 'OR', column: 'hostname', operator: '=', value: 'frontend01'} + ]; + + var expected_query = "SELECT date_trunc('second', ts) as time, " + + "avg(load) " + + "FROM \"stats\".\"nodes\" " + + "WHERE ts >= ? AND ts <= ? " + + "AND hostname = 'backend01' " + + "OR hostname = 'frontend01' " + + "GROUP BY time " + + "ORDER BY time ASC"; + + var query = ctx.queryBuilder.buildAggQuery(ctx.target, ctx.interval); + expect(query).to.equal(expected_query); + + // Raw agg query + ctx.target.metricAggs = [ + {type: 'raw', column: 'load'} + ]; + + expected_query = "SELECT ts as time, " + + "load " + + "FROM \"stats\".\"nodes\" " + + "WHERE ts >= ? AND ts <= ? " + + "AND hostname = 'backend01' " + + "OR hostname = 'frontend01' " + + "GROUP BY time, load " + + "ORDER BY time ASC"; + + query = ctx.queryBuilder.buildRawAggQuery(ctx.target, ctx.interval); + expect(query).to.equal(expected_query); + done(); + }); + + it('should handle WHERE ... IN ... properly', function(done) { + ctx.target.whereClauses = [ + {condition: 'AND', column: 'id', operator: 'IN', value: 'a, 42'} + ]; + var expected_query = "SELECT date_trunc('second', ts) as time, " + + "avg(load) " + + "FROM \"stats\".\"nodes\" " + + "WHERE ts >= ? AND ts <= ? " + + "AND id IN ('a', 42) " + + "GROUP BY time " + + "ORDER BY time ASC"; + + var query = ctx.queryBuilder.buildAggQuery(ctx.target, ctx.interval); + expect(query).to.equal(expected_query); + done(); + }); + + it('should handle WHERE IN properly if template variables has been used', function(done) { + ctx.templateSrv.variables = [{name: 'id'}]; + + ctx.target.whereClauses = [ + {condition: 'AND', column: 'id', operator: 'IN', value: '$id'} + ]; + + var expected_query = "SELECT date_trunc('second', ts) as time, " + + "avg(load) " + + "FROM \"stats\".\"nodes\" " + + "WHERE ts >= ? AND ts <= ? " + + "AND id IN ($id) " + + "GROUP BY time " + + "ORDER BY time ASC"; + + var query = ctx.queryBuilder.buildAggQuery(ctx.target, ctx.interval); + expect(query).to.equal(expected_query); + done(); + }); + + it('should add GROUP BY columns to SELECT and ORDER BY expressions', function(done) { + ctx.target = { + metricAggs: [ + {type: 'avg', column: 'load'} + ], + whereClauses: [], + groupByColumns: ['hostname'], + }; + + var expected_query = "SELECT date_trunc('second', ts) as time, " + + "avg(load), hostname " + + "FROM \"stats\".\"nodes\" " + + "WHERE ts >= ? AND ts <= ? " + + "GROUP BY time, hostname " + + "ORDER BY time, hostname ASC"; + + var query = ctx.queryBuilder.buildAggQuery(ctx.target, ctx.interval); + expect(query).to.equal(expected_query); + + // Raw agg query + ctx.target.metricAggs = [ + {type: 'raw', column: 'load'} + ]; + + expected_query = "SELECT ts as time, " + + "load, hostname " + + "FROM \"stats\".\"nodes\" " + + "WHERE ts >= ? AND ts <= ? " + + "GROUP BY time, load, hostname " + + "ORDER BY time, hostname ASC"; + + query = ctx.queryBuilder.buildRawAggQuery(ctx.target, ctx.interval); + expect(query).to.equal(expected_query); + done(); + }); + + it('should add AS clause to SELECT if alias has been specified', function(done) { + ctx.target = { + metricAggs: [ + {type: 'avg', column: 'load[\'1\']', alias: 'load'} + ], + whereClauses: [], + groupByColumns: [], + }; + + var expected_query = "SELECT date_trunc('second', ts) as time, " + + "avg(load[\'1\']) AS \"load\" " + + "FROM \"stats\".\"nodes\" " + + "WHERE ts >= ? AND ts <= ? " + + "GROUP BY time " + + "ORDER BY time ASC"; + + var query = ctx.queryBuilder.buildAggQuery(ctx.target, ctx.interval); + expect(query).to.equal(expected_query); + done(); + }); + + it('should add limit to query if it passed', function(done) { + var expected_query = "SELECT date_trunc('second', ts) as time, " + + "avg(load) " + + "FROM \"stats\".\"nodes\" " + + "WHERE ts >= ? AND ts <= ? " + + "AND hostname = 'backend01' " + + "GROUP BY time " + + "ORDER BY time ASC"; + + var query = ctx.queryBuilder.buildAggQuery(ctx.target, ctx.interval, ctx.adhocFilters, ctx.limit); + expect(query).to.equal(expected_query); + done(); + }); + + it('should quote column names with capital letters', function(done) { + var queryBuilder = new CrateQueryBuilder('stats', 'nodes', 'tsCamelCase', 'minute', ctx.templateSrv); + ctx.target = { + metricAggs: [ + {type: 'sum', column: 'intValue'} + ], + whereClauses: [], + groupByColumns: [], + }; + + var expected_query = "SELECT date_trunc('second', \"tsCamelCase\") as time, " + + "sum(\"intValue\") " + + "FROM \"stats\".\"nodes\" " + + "WHERE \"tsCamelCase\" >= ? AND \"tsCamelCase\" <= ? " + + "GROUP BY time " + + "ORDER BY time ASC"; + + var query = queryBuilder.buildAggQuery(ctx.target, ctx.interval); + expect(query).to.equal(expected_query); + done(); + }); + + it('should add ad-hoc filters if it set', function(done) { + ctx.target.whereClauses = []; + ctx.adhocFilters = [ + {key: 'region', operator: '=', value: 'west'}, + {key: 'load', operator: '>', value: '2'} + ]; + + var expected_query = "SELECT date_trunc('second', ts) as time, " + + "avg(load) " + + "FROM \"stats\".\"nodes\" " + + "WHERE ts >= ? AND ts <= ? " + + "AND region = 'west' " + + "AND load > 2 " + + "GROUP BY time " + + "ORDER BY time ASC"; + + var query = ctx.queryBuilder.buildAggQuery(ctx.target, ctx.interval, ctx.adhocFilters); + expect(query).to.equal(expected_query); + done(); + }); + }); + + describe('When building raw query', function() { + beforeEach(function() { + ctx.target = { + metricAggs: [ + {type: 'raw', column: 'load'} + ], + whereClauses: [ + {condition: 'AND', column: 'hostname', operator: '=', value: 'backend01'} + ], + groupByColumns: [], + timeInterval: 'auto' + }; + }); + + it('should build proper SQL query', function(done) { + ctx.target = { + metricAggs: [ + {type: 'raw', column: 'load'} + ], + whereClauses: [], + groupByColumns: [], + }; + + var expected_query = "SELECT ts as time, " + + "load " + + "FROM \"stats\".\"nodes\" " + + "WHERE ts >= ? AND ts <= ? " + + "GROUP BY time, load " + + "ORDER BY time ASC LIMIT 100"; + + var query = ctx.queryBuilder.buildRawAggQuery(ctx.target, ctx.interval, ctx.adhocFilters, ctx.limit); + expect(query).to.equal(expected_query); + done(); + }); + }); + + describe('When Group By time Interval set', function () { + beforeEach(function () { + ctx.target = { + metricAggs: [ + { type: 'avg', column: 'load' } + ], + groupByColumns: [], + timeInterval: 'auto' + }; + }); + + it('should use date_trunc if set to "second"', function (done) { + ctx.interval = 'second'; + + var expected_query = "SELECT date_trunc('second', ts) as time, " + + "avg(load) " + + "FROM \"stats\".\"nodes\" " + + "WHERE ts >= ? AND ts <= ? " + + "GROUP BY time " + + "ORDER BY time ASC"; + + var query = ctx.queryBuilder.buildAggQuery(ctx.target, ctx.interval, ctx.adhocFilters, ctx.limit); + expect(query).to.equal(expected_query); + done(); + }); + + it('should use date_trunc if set to "minute"', function (done) { + ctx.interval = 'minute'; + + var expected_query = "SELECT date_trunc('minute', ts) as time, " + + "avg(load) " + + "FROM \"stats\".\"nodes\" " + + "WHERE ts >= ? AND ts <= ? " + + "GROUP BY time " + + "ORDER BY time ASC"; + + var query = ctx.queryBuilder.buildAggQuery(ctx.target, ctx.interval, ctx.adhocFilters, ctx.limit); + expect(query).to.equal(expected_query); + done(); + }); + + it('should use floor() if set to "auto_gf"', function (done) { + ctx.interval = 60; + + var expected_query = "SELECT floor(ts/60)*60 as time, " + + "avg(load) " + + "FROM \"stats\".\"nodes\" " + + "WHERE ts >= ? AND ts <= ? " + + "GROUP BY time " + + "ORDER BY time ASC"; + + var query = ctx.queryBuilder.buildAggQuery(ctx.target, ctx.interval, ctx.adhocFilters, ctx.limit); + expect(query).to.equal(expected_query); + done(); + }); + }); + + describe('When building columns query', function() { + + it('should build proper Crate SQL query', function(done) { + var expected_query = "SELECT column_name " + + "FROM information_schema.columns " + + "WHERE table_schema = 'stats' " + + "AND table_name = 'nodes' " + + "ORDER BY 1"; + var query = ctx.queryBuilder.getColumnsQuery(); + expect(query).to.equal(expected_query); + done(); + }); + }); + + describe('When building values query', function() { + + it('should build proper Crate SQL query', function(done) { + var expected_query = "SELECT DISTINCT load " + + "FROM \"stats\".\"nodes\""; + var query = ctx.queryBuilder.getValuesQuery('load'); + expect(query).to.equal(expected_query); + done(); + }); + + it('should add time range to query if it passed', function(done) { + var expected_query = "SELECT DISTINCT load " + + "FROM \"stats\".\"nodes\" " + + "WHERE ts >= 123 AND ts <= 456 " + + "LIMIT 10"; + + var timeRange = {from: 123, to: 456}; + var query = ctx.queryBuilder.getValuesQuery('load', 10, timeRange); + expect(query).to.equal(expected_query); + done(); + }); + + it('should add limit to query if it passed', function(done) { + var expected_query = "SELECT DISTINCT load " + + "FROM \"stats\".\"nodes\" LIMIT 10"; + var query = ctx.queryBuilder.getValuesQuery('load', 10); + expect(query).to.equal(expected_query); + done(); + }); + }); +}); diff --git a/deploy/crate-datasource/src/spec/response_handler_specs.js b/deploy/crate-datasource/src/spec/response_handler_specs.js new file mode 100755 index 0000000..e27be5c --- /dev/null +++ b/deploy/crate-datasource/src/spec/response_handler_specs.js @@ -0,0 +1,270 @@ +//import {describe, beforeEach, it, sinon, expect} from '../utils/test_common'; +import handleResponse from '../response_handler'; + +describe('Response Handler', function() { + var ctx = {}; + + describe('When handling Crate response', function() { + + beforeEach(function() { + ctx.target = {}; + ctx.crateResponse = {}; + }); + + it('should convert timeseries data to grafana format', function(done) { + ctx.target = { + "groupByColumns": [], + "metricAggs": [ + {"column": "value", "type": "avg"} + ], + "whereClauses": [] + }; + + ctx.crateResponse = { + "cols": ["time","avg(value)"], + "duration": 16, + "rowcount":5, + "rows":[ + [1466640780000,1.2562332153320312], + [1466640840000,1.1889413595199585], + [1466640900000,1.3127131064732869], + [1466640960000,1.3972599903742473], + [1466641020000,1.27950386206309] + ] + }; + + var result = handleResponse(ctx.target, ctx.crateResponse); + expect(result[0].datapoints).to.deep.equal([ + [1.2562332153320312,1466640780000], + [1.1889413595199585,1466640840000], + [1.3127131064732869,1466640900000], + [1.3972599903742473,1466640960000], + [1.27950386206309,1466641020000] + ]); + done(); + }); + + // TODO: find better default metric name + it('should set metric name if no group by columns selected', function(done) { + ctx.target = { + "groupByColumns": [], + "metricAggs": [ + {"column": "value", "type": "avg"} + ], + "whereClauses": [] + }; + + ctx.crateResponse = { + "cols": ["time","avg(value)"], + "duration": 16, + "rowcount":5, + "rows":[ + [1466640780000,1.2562332153320312], + [1466640840000,1.1889413595199585], + [1466640900000,1.3127131064732869], + [1466640960000,1.3972599903742473], + [1466641020000,1.27950386206309] + ] + }; + + var result = handleResponse(ctx.target, ctx.crateResponse); + var series = result[0]; + expect(series).to.have.property('target'); + expect(series).to.have.property('datapoints'); + //expect(series.target).to.equal(""); + done(); + }); + + it('should group response by selected columns', function(done) { + ctx.target = { + "groupByColumns": ["host"], + "groupByAliases": [], + "metricAggs": [ + {"column": "value", "type": "avg"} + ], + "whereClauses": [] + }; + + ctx.crateResponse = { + "cols": ["time","avg(value)","host"], + "duration": 16, + "rowcount":10, + "rows":[ + [1466640780000,1.2562332153320312,"backend01"], + [1466640840000,1.1889413595199585,"backend01"], + [1466640900000,1.3127131064732869,"backend01"], + [1466640960000,1.3972599903742473,"backend01"], + [1466641020000,1.27950386206309,"backend01"], + [1466641080000,1.3942841291427612,"backend02"], + [1466641140000,1.245995541413625,"backend02"], + [1466641200000,1.3355928659439087,"backend02"], + [1466641260000,1.2358959714571636,"backend02"], + [1466641320000,1.4172419905662537,"backend02"] + ] + }; + + var result = handleResponse(ctx.target, ctx.crateResponse); + expect(result.length).to.equal(2); + expect(result[0]).to.have.property('target'); + expect(result[0]).to.have.property('datapoints'); + expect(result[0].target).to.equal('backend01: avg(value)'); + expect(result[1]).to.have.property('target'); + expect(result[1]).to.have.property('datapoints'); + expect(result[1].target).to.equal('backend02: avg(value)'); + done(); + }); + + it('should transform to set of series for all group by columns', function(done) { + ctx.target = { + "groupByColumns": ["host", "metric"], + "groupByAliases": [], + "metricAggs": [ + {"column": "value", "type": "avg"} + ], + "whereClauses": [] + }; + + ctx.crateResponse = { + "cols": ["time","avg(value)","host", "metric"], + "duration": 16, + "rowcount":10, + "rows":[ + [1466640780000,1.2562332153320312,"backend01", "load1"], + [1466640840000,1.1889413595199585,"backend01", "load1"], + + [1466640900000,1.3127131064732869,"backend01", "load5"], + [1466640960000,1.3972599903742473,"backend01", "load5"], + [1466641020000,1.27950386206309, "backend01", "load5"], + + [1466641080000,1.3942841291427612,"backend02", "load1"], + [1466641140000,1.245995541413625, "backend02", "load1"], + + [1466641200000,1.3355928659439087,"backend02", "load5"], + [1466641260000,1.2358959714571636,"backend02", "load5"], + [1466641320000,1.4172419905662537,"backend02", "load5"] + ] + }; + + var result = handleResponse(ctx.target, ctx.crateResponse); + expect(result.length).to.equal(4); + expect(result[0].datapoints).to.deep.equal([ + [1.2562332153320312,1466640780000], + [1.1889413595199585,1466640840000] + ]); + expect(result[0].target).to.equal('backend01 load1: avg(value)'); + done(); + }); + + it('should handle multiple select values', function(done) { + ctx.target = { + "groupByColumns": [], + "metricAggs": [ + {"column": "load1", "type": "avg"}, + {"column": "load15", "type": "avg"} + ], + "whereClauses": [] + }; + + ctx.crateResponse = { + "cols": ["time","avg(load1)","avg(load15)"], + "duration": 16, + "rowcount":5, + "rows":[ + [1466640780000,1.2562332153320312,1.12], + [1466640840000,1.1889413595199585,1.01], + [1466640900000,1.3127131064732869,1.21], + [1466640960000,1.3972599903742473,1.28], + [1466641020000,1.27950386206309,1.16] + ] + }; + + var result = handleResponse(ctx.target, ctx.crateResponse); + expect(result).to.deep.equal([ + { + target: 'avg(load1)', + datapoints: [ + [1.2562332153320312,1466640780000], + [1.1889413595199585,1466640840000], + [1.3127131064732869,1466640900000], + [1.3972599903742473,1466640960000], + [1.27950386206309,1466641020000] + ] + }, + { + target: 'avg(load15)', + datapoints: [ + [1.12,1466640780000], + [1.01,1466640840000], + [1.21,1466640900000], + [1.28,1466640960000], + [1.16,1466641020000] + ] + } + ]); + done(); + }); + + }); + + describe('When handling raw response', function() { + + beforeEach(function() { + ctx.target = {}; + ctx.crateResponse = {}; + }); + + it('should handle GROUP BY columns', function(done) { + ctx.target = { + "rawQuery": true, + "query": "SELECT ts as time, load, hostname " + + "FROM stats.nodes WHERE ts >= ? AND ts <= ? " + + "GROUP BY time, load, hostname " + + "ORDER BY time ASC" + }; + + ctx.crateResponse = { + "cols": ["time", "load", "hostname"], + "duration": 16, + "rowcount":5, + "rows":[ + [1466640780000,1.2562332153320312, "host01"], + [1466640780000,1.2562332153320312, "host02"], + [1466640840000,1.1889413595199585, "host01"], + [1466640840000,1.1889413595199585, "host02"], + [1466640900000,1.3127131064732869, "host01"], + [1466640900000,1.3127131064732869, "host02"], + [1466640960000,1.3972599903742473, "host01"], + [1466640960000,1.3972599903742473, "host02"], + [1466641020000,1.27950386206309, "host01"], + [1466641020000,1.27950386206309, "host02"] + ] + }; + + var result = handleResponse(ctx.target, ctx.crateResponse); + expect(result).to.deep.equal([ + { + target: 'host01: load', + datapoints: [ + [1.2562332153320312,1466640780000], + [1.1889413595199585,1466640840000], + [1.3127131064732869,1466640900000], + [1.3972599903742473,1466640960000], + [1.27950386206309,1466641020000] + ] + }, + { + target: 'host02: load', + datapoints: [ + [1.2562332153320312,1466640780000], + [1.1889413595199585,1466640840000], + [1.3127131064732869,1466640900000], + [1.3972599903742473,1466640960000], + [1.27950386206309,1466641020000] + ] + } + ]); + done(); + }); + }); + +}); diff --git a/deploy/crate-datasource/src/spec/test-main.js b/deploy/crate-datasource/src/spec/test-main.js new file mode 100755 index 0000000..70fcee1 --- /dev/null +++ b/deploy/crate-datasource/src/spec/test-main.js @@ -0,0 +1,56 @@ +import prunk from 'prunk'; +import {jsdom} from 'jsdom'; +import chai from 'chai'; +import _ from 'lodash'; + +// Mock angular module +var angularMocks = { + module: function() { + return { + directive: function() { } + }; + } +}; + +var datemathMock = { + parse: function() { } +}; + +var configMock = { + bootData: { + user: { + lightTheme: false + } + } +}; + +// Mock lodash for using with CommonJS in tests. +// Because typescript compiler generates code like this: +// lodash["default"].map() - it uses default export. +var lodashMock = { + default: _ +}; + +// Mock Grafana modules that are not available outside of the core project +// Required for loading module.js +prunk.mock('./css/query-editor.css!', 'no css, dude.'); +prunk.mock('app/plugins/sdk', { + QueryCtrl: null +}); +prunk.mock('app/core/utils/datemath', datemathMock); +prunk.mock('app/core/config', configMock); +prunk.mock('angular', angularMocks); +prunk.mock('jquery', 'module not found'); +prunk.mock('lodash', lodashMock); + +// Setup jsdom +// Required for loading angularjs +global.document = jsdom(''); +global.window = global.document.parentWindow; +global.navigator = window.navigator = {}; +global.Node = window.Node; + +// Setup Chai +chai.should(); +global.assert = chai.assert; +global.expect = chai.expect; diff --git a/deploy/crate-datasource/tsconfig.json b/deploy/crate-datasource/tsconfig.json new file mode 100755 index 0000000..f74d811 --- /dev/null +++ b/deploy/crate-datasource/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "sourceMap": true, + "declaration": true, + "outDir": "dist", + "noImplicitAny": false, + "target": "es3", + "rootDir": "src/", + "sourceRoot": "src/", + "module": "system", + "noEmitOnError": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true + }, + "files": [ + "src/**/*.ts" + ] +} diff --git a/deploy/crate-datasource/tsd.json b/deploy/crate-datasource/tsd.json new file mode 100755 index 0000000..d384b2f --- /dev/null +++ b/deploy/crate-datasource/tsd.json @@ -0,0 +1,33 @@ +{ + "version": "v4", + "repo": "angular/DefinitelyTyped", + "ref": "master", + "path": "headers", + "bundle": "headers/common.d.ts", + "installed": { + "es6-promise/es6-promise.d.ts": { + "commit": "31e7317c9a0793857109236ef7c7f223305a8aa9" + }, + "mocha/mocha.d.ts": { + "commit": "055b3172e8eb374a75826710c4d08677872620d3" + }, + "zone/zone.d.ts": { + "commit": "055b3172e8eb374a75826710c4d08677872620d3" + }, + "rx/rx.d.ts": { + "commit": "31e7317c9a0793857109236ef7c7f223305a8aa9" + }, + "rx/rx-lite.d.ts": { + "commit": "31e7317c9a0793857109236ef7c7f223305a8aa9" + }, + "angular2/angular2.d.ts": { + "commit": "31e7317c9a0793857109236ef7c7f223305a8aa9" + }, + "es6-shim/es6-shim.d.ts": { + "commit": "31e7317c9a0793857109236ef7c7f223305a8aa9" + }, + "jquery/jquery.d.ts": { + "commit": "31e7317c9a0793857109236ef7c7f223305a8aa9" + } + } +} diff --git a/deploy/crate-datasource/tslint.json b/deploy/crate-datasource/tslint.json new file mode 100755 index 0000000..15e36cf --- /dev/null +++ b/deploy/crate-datasource/tslint.json @@ -0,0 +1,61 @@ +{ + "rules": { + "class-name": true, + "comment-format": [false, "check-space"], + "curly": true, + "eofline": true, + "forin": false, + "indent": [true, "spaces"], + "label-position": true, + "label-undefined": true, + "max-line-length": [true, 140], + "member-access": false, + "no-arg": true, + "no-bitwise": true, + "no-console": [true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-construct": true, + "no-debugger": true, + "no-duplicate-key": true, + "no-duplicate-variable": true, + "no-empty": false, + "no-eval": true, + "no-inferrable-types": true, + "no-shadowed-variable": false, + "no-string-literal": false, + "no-switch-case-fall-through": false, + "no-trailing-whitespace": true, + "no-unused-expression": false, + "no-unused-variable": false, + "no-unreachable": true, + "no-use-before-declare": true, + "no-var-keyword": false, + "object-literal-sort-keys": false, + "one-line": [true, + "check-open-brace", + "check-catch", + "check-else" + ], + "radix": false, + "semicolon": true, + "triple-equals": [true, "allow-null-check"], + "typedef-whitespace": [true, { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + }], + "variable-name": [true, "ban-keywords"], + "whitespace": [true, + "check-branch", + "check-decl", + "check-type" + ] + } +} diff --git a/deploy/cratedata/data/nodes/0/_state/global-3.st b/deploy/cratedata/data/nodes/0/_state/global-8.st similarity index 65% rename from deploy/cratedata/data/nodes/0/_state/global-3.st rename to deploy/cratedata/data/nodes/0/_state/global-8.st index 4048246e420be0ad877f0c40b135fa03dafe9260..4731abcbc6fae9f72d1c757c5601c616e4963380 100644 GIT binary patch delta 17 YcmX@kbew5|7UPAD+7gT`iCI-@05;DBf&c&j delta 17 ZcmX@kbew5|7UQvv+7gT`TNdca0RT6-1+4%8 diff --git a/deploy/cratedata/data/nodes/0/_state/node-2.st b/deploy/cratedata/data/nodes/0/_state/node-7.st similarity index 100% rename from deploy/cratedata/data/nodes/0/_state/node-2.st rename to deploy/cratedata/data/nodes/0/_state/node-7.st diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/_state/state-2.st b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/_state/state-7.st similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/_state/state-2.st rename to deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/_state/state-7.st diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_4.cfe b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_4.cfe new file mode 100644 index 0000000000000000000000000000000000000000..6f8b96f2f7b21547828a622a339e7697d068a9ca GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1YX(e7XNx{?>STN!!(iq^KLV6 zvFN2_=7OYvKo3GOoMq8VODTbJenV(R5ujimR3#HXM3B`Lq&*YDVGn`o@Zyh$IKkW? z-as#7%Q6rR~#JB~w%>pH1Jn?PM5aUjXs`Eg?oMqw3{l1dSYs8pcV%ASN(;@xz; zPFhtU3pjvKPe?`d07(3vkhpLN7oRHS(nBvuAobJ(96;fMDlXy8?!I_z?F(jZ-46KE#5?`h>4Lc04we zULSCy(tD!e?&EO#c`bgTJrxVfXWQSr6s#eO8we~?<6?Bhp9c)?)0x?ItGu>sGqwx~v^LKx z6{I=2vqtzHO{pc7i^+3K%fJ?;viyi=UH3lGA}ZSf#K^rM;==%9^u9~XFX)?}K;>}T zSEBbXy_b5--55fg_7UY9Qwh2B2&jU}R<-jjVCNPpoIrAKYcs;EXFnMWL_S0f-o>V4 zQPjYLlZ2Ym#)?{8BIJ;^CTfYxK`IcqmKdk-coHpA`zY;CQTdQRe_ddU7oNZwi9FN984M6)HdN z8(9~O9q1)8qL)=cPzgFVe7)`Dp(F~58X`v(=YX#rl@I#!56~*~2gZqv=w6SG1(nt}(FcWb_C8*nd$ zAf-yrU63v+k!Vk>H{SQusi*rBr;}$=1A}MNL(iN$KRoiRXzlNzJKu9_$@bK(8D$5o z9G1DyVchLLy4n8_FB??8(D_h;_t--+=p!Bh_EnAKEWOkZDqzxu-`@cr2S zd;ZXzrIw*DdRqgH4SRzLbClEae(Mg+5tw6|G2Xi5C@t{O8RIj?k<1z0Udmi3(10KS zP67kCyP%0OR*K#AfTBA$@MNc`I$SBH4Y ztmG*+$3-b7wsJ2&+H(O60qnv~p}U{vvY|tSL}b>4JqUfz4c#yd{LOmef^>`*hcFcq vxpBCdpXbDqahwfuTx4RvI6)E+mSOueim#LSDvHi)Z^sXxdVIR-{KxtStC4c% literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_5.cfe b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_5.cfe new file mode 100644 index 0000000000000000000000000000000000000000..24de1fb9bc2a9f31e319994ff71d9c11a7a67a70 GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1YX(e7XNx{?>STN!!(iq^IkD< zvFN4c<$|PuKo3H(y0Yk{WM)D+V0}Qg7f@wN2~=<|gk}`tkB8W1ZV+#vmr@2biS0Z@ zp2ZqXJ_RDq%>|(uCd1@SLHbKF3!w6Iq4N7cE`b`#6AcwSi=rtdKN%vF1pWk!QRM@<|1R!w>Ub$N`PXFQ5i69QXe41_17^L&X39 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_5.cfs b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_5.cfs new file mode 100644 index 0000000000000000000000000000000000000000..f8284a2b0aa7f9351877b356af52b830118d59c5 GIT binary patch literal 4055 zcmd5ZpqikA~5V{9`9>F!M@|Iq2u}Jiy603*sR6bQ+v5kgq-zq!IZV1P+3J=0+ z*%g+6W2IU4I=&1J2u9VMvyia9Lr`^mtUK+deiYqobDs>cAE-B5Vq)!MziM3h_*&& ze!TttFVgz8yThCGc5XjM!yC4HDHfSYOG=9Ud#o~CunJGiu^SO;?7~n zmGT$!`J$@6q^e3@g{jUahPkN;WrF;Ue$TrDV?{-b_3eOR`l!6j`k)AorCSaxcA%H2h+ftMhGNvV;qzTP4=vF!h#(zR zoC7{Of)D!RbzBwt1LH(R^!9x;z1FWQVP!eg{K$KMwaMj}k>zC)@~R=8PWc3~0J zk~EQc#9y%P)4d}UHzS17MwDE%yEIdk$vhZfw#OuML3KrrIKq+Buk#Z^jqg2@Fx>&9Z zwqD@g_!o<+;P02KwgJBoV6SkW4=9K*c0qVXl#(eqo#}bv)amS*Cwu$)2L{g$4L@~m zWc2*g!PNbvk9@{g>+LSQW>g$l<*>S+!{r(R@N`4l2^ROmU+-jjaYwOC;a3};@BPm<_$3Voq{I(NTL@x4T)p>RaQxeL GYw3S{2zdAa literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_5.si b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/_5.si new file mode 100644 index 0000000000000000000000000000000000000000..b7f2bcb5f99ecaa7ccadfa7c58875589aa11fd1c GIT binary patch literal 384 zcmX|7%Sr<=6m6Ah?P!&1!KE(UG)(HG)2<5Y6e3LlE7#aqlf@?RL^mQSRb5735<#s=^!-GK{6HWpzB6o~%-RG$&n7W+2z5af8`_JI#vHth+ zWx29hMSHQ^8dzL(H-vHql;`)`V?4uPMtCCR{*}aWMvl*goC=9G6?|tYOJzU>f;RAm zunqSXG&9Dz;x-X5bmJDD?q>52SBet=2)wdT0LysfV3xG}`rIvZt|=p{ht+ksO(`jn z%a}N6maCC#+{=$@K7btno3N4D?k7}NY>3jBO{=g4VStd2P{(g?mWBw#sahPwF-Xzk t(PDnci?om==~0p;swX7F8ZeO%_biNVhS7BxUKHL>9zN~(Y;BF7YX7{ka+v@C literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/segments_6 b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/index/segments_6 deleted file mode 100644 index a523389237bc679cdc9bca4a946ca2f6e2aa207b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 509 zcmcD&o+HjtoSL4SnpaZHz`(%%|3v=vi$%)+H>${pv8C3(V>DxDWMBu%fPg3vvw$#A zj49rrJ*It@N6>{XSxbv)Sw}QIIDATzQ}a^I4gNy`NDqt+qd{Uo&4y^214+?rgr+%& z6wStHnnQ`#%r20VpPZNzpPZ4JoL!KgnODMSER&m95nq~DoS2pxpIBOwAD@{LUy_-d zT3nKtTfn4i$XimBm{**WpB`UYnwcV&9#oO&U9M{sk`(M|;AIfu>gj2eT+Wk`SzMA| zR0&bzT9M>r>S~Y^Txt|*5mKDwUgTz45-1EeC>yJ!2X>BLh271_ZQ$m<@!1 zVodP{?J@1MJc2HC$y!=W%Q~Xz!QoSyoSK(vZtx!pKzd+o7!48wYBogE97u|0BQ(uH zq-Zuq(;P~QW)rmVxlM{@Q#8%5h}X<6kdvRBm=m9zk(!)cke``X!e}a!n^+NFnpd2d zmKvW}T9O~1nG#=;nVVW%l9*e-q-)4qQk0lioRgm(Us{@(B9}lX- z5aH_SX_Q>flaX0ml3!E_QR7;XL6lxJtoaA2QW?B*`3^ynp7`;V_C7Jno zOom46#g%!L?_>#(kRG=!CRFD>+a7kuvYJ6s1N@|6Y zm7$rTp_#dnv5Aq1i7`+rHMbzOD6yop2<U&j4;lW(v@R(xN=8y!7Hs-JBFFh-p?K csl_EgrlC?T&;t;_$nYNuU?MOH$5Q7O09GC#VSM2^gNkrZg;`x5CzkEva z#bthWW2?v(%|%&>bX34ftt7$P=mqA4C;m+ zQ8#MbX1Hy^sb=tNaWv{0GHnXj(3qca9!YsDCF9bqpl+d4xbB>TPsePh*2bbT=#B^` uc*uAtqLfc#$zmzT&iU}4ri;IK1>`&Gak^G`~oV+uqyuYMgTlk2)_UT diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-2.tlog b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-2.tlog deleted file mode 100644 index 5d65ef09a1758d6f05bb99f909af0452e479da69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 739 zcmcD&o+HjtQk0lioRgoL?_>#(kRG=!CRFD>+a7kuvYJ6s1N@|6Y zm7$rTp_zrbnE?m@rBZVXQi~ExN{fIxjP-ybP%|=9fF_g{QBG?5NDeE)6&q0mi`3AE(kC-mt|ZB o(jb2V;}|7AlTAXhXzfpP1Bf@#OW*$k03=B2>i_@% diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-3.ckp b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-3.ckp deleted file mode 100644 index 0ea9c39f1077ab72337bf65f421aa2038f8325f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 ucmcD&o+HkjoL#`cz`z8=AfOGQz$Ej3Gys)jhSH1&G$y}*sefMla615%YG$y}*sh_&;Pz3;$=@;k# literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-5.tlog b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-7.tlog similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-5.tlog rename to deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-7.tlog diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-8.ckp b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-8.ckp new file mode 100644 index 0000000000000000000000000000000000000000..4cd58476a25e6de2c42f4beb66ec40693080cd37 GIT binary patch literal 80 ucmcD&o+HkjoL#`cz`z8=AfOGQz$C|iGys)jhSF>YG$y}*srOZ0egOcJdlypx literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-8.tlog b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-8.tlog new file mode 100644 index 0000000000000000000000000000000000000000..117319d8a07b62f516568dd2c8cc9c74cf3fde18 GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgoYG$y}*sb6YhUI+k`02b~5 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-9.tlog b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/0/translog/translog-9.tlog new file mode 100644 index 0000000000000000000000000000000000000000..117319d8a07b62f516568dd2c8cc9c74cf3fde18 GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgo|!{Gf_cYl9d4h*bZn+egS1O{8=4$4*+o{2af;% delta 35 hcmWFtm>|!{I#EGfl9>Sl7!PPnegS1O{F>OY2>@@O2V(#L diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/_state/state-2.st b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/_state/state-7.st similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/_state/state-2.st rename to deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/_state/state-7.st diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_2.cfe b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_2.cfe new file mode 100644 index 0000000000000000000000000000000000000000..6dcdda6bb4d6b88dd2fa067eb19fc00a8d4933ac GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1YX(e7XNx{?>STN!!(iq^KLS5 z@yA1yn;XO%=%tjUfK&m29)x0;&!U%>QUc|ih0u(OK*79RDCZr7W_4xJOUcZHaM+C@ zG=mpNdj(Xm7AhD5v(pr8XMQqN{vuR94@JHt6KWHOJw%>~5hf3HGgO|-0V2<04RQ%o jkgpnQ=vkO1u%#uL1rTw552*aU0~(WGK-moa0n!Bk?)O2a literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_2.cfs b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_2.cfs new file mode 100644 index 0000000000000000000000000000000000000000..0c33b470bc0ea2794c4c01aa314dfd4334024e56 GIT binary patch literal 4118 zcmd5<&2Jk;6rb5$J8OrM5+`kfla?BRI5f%nBQf>G5LOX^w2Da7O5ww->~UCX?>f8d zxK)K@i6as{fGTkT1Q!l~K{WY!yI)2OJLqaoT}x%%yw|2!-%elq>&*2wOs_fU~? zk9ypBMK#NpwOW(dVeE0>EGc6dC6k^~(o>oIYC2oUDTQ2iI-Ad}WuhwC)XPLoHZ7xI ztlRojty1u4g;ioZbeL|A&Ro%Khg{SQZJpGK;moL{Zq95y_t68UCu>XZ|L!pLCcu~# z$FxXgK_|6}y+EaXE%831+HEW#LAZw>sd#98KB2bo{LeSO|1C1}<}c$v;v1=|-qI{m zvWdksZD`IrsX{7Hqty8nRZe%Vmz?VjLb+6uMcZd7+0pByq#G4-EmcU*rPKM@-1E6C z^#ENW^#-vtr)g1%xoKqz{gu!S+tCb%B7`}vj?fOlaTqc$)v~1drPS0w=wCb8OU3EJd93RGJ zH>*|s8dlH%b>&9MFfl@S5Bv;(?_H}P^t=+v2k=-vQEFIvU9;#Z5UVa6$u7(YvuTxy zNPP!JAS9PIiDm1iAsx-G!~5@IM8Fa#Acgt9=ZHd`*u|Gu!r;Kyp*X;R2D$eTJ=U7W zJ5O`~p$NEC2(_`tSD}313oH+EPhCEmJ*1fLaJ>>c*6to;?)Jl6{8($s2hkV*yL6ca z(J=_3%cgEPejvO^Lei#)ivt_-XWij=WBgr)Gznp|H(xEXWI=<={)9ziGQy}pf9R&b zYxl;`%Snbg4ww+AuUI+_g*37TMS4F?&nhKFc9O%AlM|C?&hon@zIynKn^5L!X8G!>MaU`*x3;R69lDL!n^3rIm{c-YM;GD%E!$W; z*PEy@7T!YQg??3p$1>y>9NugyxU%pTv!PXsyBkF;_Iz2GL-YcCYBp>80gkIR<_`M;I zz)+)yWoy*m3O1mb*KKQl&$_<00wdV^Iwu%AEG?5hD1cA+^A@*RUoC+Vv}AD|niO?Nuc~w|;kGPeSb?6#xr`^_MSvg)Z>5dAo=Q}xgtWCqYx*912{S7D(cpip zE0t&Fa#_Zm=uU)?zz@oV;=;-*qHhX|;(hk9;(ld!h|-+^V&rZRaVLNn-FAujC2jKq VIF`@(qxj*Q)($`a;@R6@{}0wqlLY_( literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_2.si b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_2.si new file mode 100644 index 0000000000000000000000000000000000000000..78b9efb44b3780bf2ac469794a5704cd27b67691 GIT binary patch literal 384 zcmcD&o+B>oQ<|KbmuhYhoSL4SnpfhPmzK`}1YX(e7XNx{?>STN!!(iq^KOE~*nyZ4 z!~hX+4v5dl#gt#n>XVsQTEU%_SeB?)mYSE6UnJyTl$e~8s^FYoRFGekSdy8a#{-ov zDh6^m4fQPa4B`zf4EZ6#xj>Cz87?DJJ)p2|lA$qQ4%me-8CG*WLp=lb{9?VtqT~$L z#M~4!6A`fPqSCyQ%-mF%LSDGxAXC_i^Gl18Q(4n;N{chNfV!a;37Y5`TIv}Z8S3VM zT%Vm;!U-~@xFj*RfY;E>(9qn}#KOeH%)*?RHQq?CIFk)XCa0xBsA5KWNcfo=1efF& wrKY%Lrskv+yX6<s=BK1`Ik^Uh#0Lksy1FnN(3t!J6nr3%H|5Sn0Hxq`6aWAK literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_3.cfe b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_3.cfe new file mode 100644 index 0000000000000000000000000000000000000000..18210769277cd910cb8d419085241e5039ca93da GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1YX(e7XNx{?>STN!!(iq^IkG= zvFN3xRDh&_Ko3GOgz(2h%rG~IH_%HdOM!|vLFvgbc~h`_elkRyQ4}hlhaz8+nG2O~ zhSGOo@=)`k^2`Ykc@}G+qw=7F?6V<)tgbA2DVdoN4$lJ!&EN%cehGxbs|BGM1!2a6 lomY}s01@Z2hHBaeG6`xt-%qIE*#jDrUqIOm)3VgR0|2^+Lizvz literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_3.cfs b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/_3.cfs new file mode 100644 index 0000000000000000000000000000000000000000..2bc5c934bb1dbe7913bd5025d884fc80a6445258 GIT binary patch literal 4054 zcmd57%Q6rR~#+iRQRlAkuANlT3oAdzJ4#I@{;ky%9q5-B1UMdim@dB*b{!6hl$Gq6 zdGp@)-n^N4Z(ixQ=Gl?Ob`2RQC%s_mEwgQ?vf?NJe=jwD{N~|5rG+o2cQ;4&zWN)K zF!v1?)eB^#B|npQ({%4>@iWIMQ< zl}BeTV?)uBVkoOfM}{*aBi)=~O}fAJ{Sq;0oGx?Ov>nY@wJ%$mgDh+yF}#0?zF9e` zDsfL-j|KYngv^85u>+l%6z*NC>Ea?`9eDi%T& zWa+l7)f}vaAE1UvoeQ?ng*e2@4&*PU^zwwf4$Hr6{Pahp@#X^vxwil&_j%1Dr+lY+ zqp4s|dXuxEJLAqr0OWRf2w}he{&5^~w*AQ*VI)YGMZnhd;=drHoYfN_Pr~hj|Nt=kGE6UYA86sL`WZYt&ao6~z4U6~86Tz_n6Fy4Kej!T3>G zness?INiDiqimp+l#yE5WCVqvV?*Y9ZUB{}f-FMhsMa~^qf_uR{`h^W6}JP|Ng1iN zA5cMZMcL5t!|&ijH!pY*{*vUT*#)C++C-#3FMuRp)l`7AKs9G;@Tp+3k8=y9Ol?tJ>&l)iANiuEU7}?mPwG&(}fdc`1~S!b9;?wPk6#VqLG| z?5cCeqJ=ENY+E%%;w1GD0Ah6wS+-^xINTh=+Q3jrfoZ0FwAcq&aveuD4M1L|dA0G#ynn1HU+NNQ}@uJ<5ZbbdcUc zmg2N6g!9^Q=n&$*!!qAg{E=wj`LMuO-V4Wi4YW;nJNs>l;8 zFqHDJ6uTK@{BF+VL$fd|9>Mq-4p3Q7l0 zX=(%9+^?L{@4_C3EUmudK5d74>lRu99#**U^D7nX{3zu49TM{0!m>*gZUqn{n?c0w z0AlpEOUy4SYah`}`!#zozWaFl*U*CzR(X=@RqT)>gA21gBF>jzmhnJ<9Z`fGLdP>5 zw*jQS$$Apr`#MO%o9O_r#S$u(5Vr2&B-Mv6Ktd%yTtaR3Y{h$9f9|l0yZPoQ<|KbmuhYhoSL4SnpfhPmzK`}1YX(e7XNx{?>STN!!(iq^In3)*nyZ4 z!~hX+4v5dl#gt#n>XVsQTEU%_SeB?)mYSE6UnJyTl$e~8s^FYoRFGekSdy8a#{-ov zDh6^m4fQPa4B`zf4EZ6#xj>Cz87?DJJ)p2|lA$qQ4%me-8CG*WLp=lb{9?VtqT~$L z#M~4!6A`fPqSCyQ%-mF%LSDGxAXC_i^Gl18Q(4n;N{chNfV!a;37Y5`TIv}Z8S3VM zT%Vm;!U-~@xFj*RfY;E>(9qn})WpQn!oZA~HQrdSIFk)XCZ`ocs8mLINcfo=1efF& wrKY%Lrskv+yX6<s=BK1`Ik^Uh#0Lksy1FnN(3t!J6nr4ymsN5G0J!&aYXATM literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/segments_4 b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/segments_4 deleted file mode 100644 index f74b05b28b51931c0f400fa462b945b7bcbaccbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 387 zcmcD&o+HjtoSL4SnpaZHz`(%%|3v=vi$%)+H>${pv8C3(XEb4FWMBu%fB-KLGl4Kr zj49rrJ*It@N6>{XSxbv)Sw}QIIebc!Q}a^I4gNy`NDqt+qd{Uo&4y^2Lx|VRE|8O- zoR|}zoRONGU67xdSHfs0lbcu(Uz%5(n3fu!SXz=FpP3S0l9`)YT#}euz@%%)TT+ym zSDcfd9$#9TnIcwJ5NzOSXp$Zr?p>l=YHFEnW>Asg$di#-T#{c@2~ktxookwykzE;N zmYZYdpW+zelkMSIE(|v)9q84f#FEVXJYX0VSLP)H?G!61D{(3e&khJI3=S>!NX<5g hEDNm+_IJGc7FQ3uyfX3t(;6MNp$`2-<1psISn&bcg diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/segments_d b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/index/segments_d new file mode 100644 index 0000000000000000000000000000000000000000..0f38e1dd938362e3e707719683784352a2a008f8 GIT binary patch literal 510 zcmcD&o+HjtoSL4SnpaZHz`(%nmA!89uebJ|Gxa`96Zt>yEn^BhBLh271_YFWm<5D^ zVodP{?J@1MJc2HC$y!=W%Q~Xz$>CF)oSK(vZtx!pKzd+o7!48wYBogE972j_BQ#gu zBt^3^n&y|pYi1Y7$xlwqiBHZ*P0lXJ&&(@fG?vLttcWkoD^5&HjZZ8s$&b%Wi7&~_ zO)V}-%q?KjHRLTRO3W+H$xn|jEzL|3D=P>#@H8|@4-WS((JeK#%r-Nq$Z+Jz$Sf|& zFRFy7De=xVP0Yxy3^L2jG4oGx4DreK@GKXG8L?_>#(kRG=!CRFD>+a7kuvYJ6s1N@|6Y zm7$rTp_#d{kpTz*rBZVXQi~ExN{fIxO!a^wP%|=9fF_g{{){B&+y2=3Yz=V(!vCrKaHs5PezzO I6BrA^0M}EWLjV8( diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-10.ckp b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-10.ckp new file mode 100644 index 0000000000000000000000000000000000000000..39bc92c6753575c603c98f73bd5028330986321c GIT binary patch literal 80 vcmcD&o+HkjoL#`cz`z8=K)`4KBEU=r1}-SgjDu!9pfULcRF2`;waXm<6v+sI literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-10.tlog b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-10.tlog new file mode 100644 index 0000000000000000000000000000000000000000..c8ce4a0d65ec2f5f90410b2456a0ba4ca8300eb6 GIT binary patch literal 304 zcmYLEO-sW-5Z%;+0k5J5Z+kZF?lx&iE}|5%6c5@;!An?^X}XwfLUz&*r2oJ_p#$&4VdIlU28p55;i?OW79q;k?nM+Q%wuIft}+`Gow=$6|?y*`tA7qIi}n7rQ^7V1Mg@- zr|IL(^6J5qiOK8hI~G12KxeTu$_g^6a@Z2iV#bnjbQXnS64?_}4QPR_wvKp6d$Cjog+luy zpaJtK^MfR1A&)4J!l5-T{=;N$Wvy0R6-N4H&ih!Nf|!{JyAhil9>SlSPy7SegS1OOn|!{GEqTXl92%d7!PPnegS1O9NX1#1psdx2X_Df diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/_state/state-2.st b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/_state/state-7.st similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/_state/state-2.st rename to deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/_state/state-7.st diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_3.cfe b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_3.cfe new file mode 100644 index 0000000000000000000000000000000000000000..db2c6a8e0e7c03df2cca4acb4b9f6aa745c4225a GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1YX(e7XNx{?>STN!!(iq^X@Tl zvFN3xRDh&_Ko3GOgz(2h%rG~IH_%HdOM!|vLFvgbc~h`_elkRyQ4}hlhaz8+nG2O~ zhSGOo@=)`k^2`Ykc@}G+qw=7F?6V<)tgbA2DVdoN4$lJ!&EN%cehGxbs|BGM1!2a6 komY}s01@Z2hHBaeG6`xt-%qIE*#jDrUqIOmjR~?@0IfknIRF3v literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_3.cfs b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/_3.cfs new file mode 100644 index 0000000000000000000000000000000000000000..2c84d99beff7ea98416c4b16a696bb3d0bbc281d GIT binary patch literal 4054 zcmd5LdQpCyGUbqv36J4 zUD*jCpf<-G3x-^phTKbfY02lQ+M3LBPrPho!wBm_r_BS(45A z2Wqp8>?jjblv9yLic+zVmkRk}xmK8}Oix#evlHd%cdi!WGFsE>NX~d|rG{(=cZ>4S zJN^Skb5i;zJNi&aU60RG0f*%=r=LQJtNd`OT(!t$UTi? znaBl1P7rtFZ=2oR`yYPtBXg9P(|s8^Y9r#3F((`YLa^h1E`Ik95;7g~wBxt4%s3(J zg8{fH4v9+Z_C zAC!XAty^W3^|g{RQY)K`pb&O!$b8QYppsOOMTi~LI){983O?+QKc`x8+jpImky?9) z3X&_zhK>uR-=4d9!He)SlAC51jAhd%BEh@>(!8QI0M4`Yu5)9H$Z~~f{+c%}U3Dgw z-A1IDBZ|##FE491pac?%jjk((iA{DLP84wC6nr;dhoP6HNInV=#p6oL(sb3jso?CY zbBCgZEW&JCbwuJM^$-A}vW6^MGYuSW4q^NDbv})8a5umRQN9ms zQKS=l_{vfg9QAc14rKso{36mEyc0KDD1M|ZO*xv56wSadP8p-8x@c;KV|$^BJi$Uk zDG#fO>*D>MI^{DZdx9XHrC~Ez`}pO`-qNSjfgIqtpWwE<=e;}nExeW68zXX+Txgk+ zdppP6Ps}BwDe%`hOzvKWT%|BmD3nVjX=WCeLU^ish;x#WWc`iA2vHT34qn$9 ztKiXY<&?V(dmQrj?bCVUkZf<=LQBB?3KxEUsfL{&hdjSYLcUvAc8S8{5Mpd2jQA{s z7=P*#%a_!(yEM~&#U6}nZ%ti{JQz`xC#hb=4mmQoFxw&G{MoQ<|KbmuhYhoSL4SnpfhPmzK`}1YX(e7XNx{?>STN!!(iq^X`Gf*nyZ4 z!~hX+4v5dl#gt#n>XVsQTEU%_SeB?)mYSE6UnJyTl$e~8s^FYoRFGekSdy8a#{-ov zDh6^m4fQPa4B`zf4EZ6#xj>Cz87?DJJ)p2|lA$qQ4%me-8CG*WLp=lb{9?VtqT~$L z#M~4!6A`fPqSCyQ%-mF%LSDGxAXC_i^Gl18Q(4n;N{chNfV!a;37Y5`TIv}Z8S3VM zT%Vm;!U-~@xFj*RfY;E>(9qn})WF=p#N3FPHQrdSIFk)XCZ`ocs8mLINcfo=1efF& wrKY%Lrskv+yX6<s=BK1`Ik^Uh#0Lksy1FnN(3t!J6nr4i@Wq820H@${AOHXW literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/segments_4 b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/index/segments_4 deleted file mode 100644 index 513d55b58604039c9c636d4648587178a5f6d926..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmcD&o+HjtoSL4SnpaZHz`(%%|3v=vi$%)+H>${pv8C33U^HQ8WMBu%fB-)bGlMWt zj49rrJ*It@N6>{XSxbv)Sw}RzIDATzQ}a^I4gNy`NDqt+qd{Uo&4y^2{YlYmgr+%| zc+KnrIr+(nIq}IEsma*|`I&hoj7BoKi52msdBurosqu-WCHe80De)zlxv9k^iMa(# zx`wYIl-C!{yyoxu2IDyE|KXx8JWc;`9+lwHA(pf zi4{JT=|R3`K_z9y#olHmq4|NraD&o;;Z&4Zl9`_e4B+C*ykwxAVg=4F-uc;iL4huX nhVicE`Ofh!iRS5CAlDVA7RKl0Ga4PxnEV19fy1!EFBBLh271_b1Rm<5D^ zVodP{?J@1MJc2HC$y!=W%Q~Xz#o<$$oSK(vZtx!pKzd+o7!48wYBogE>`#hjBQ(vy zq-Zuq^Wr_?HM0xkTQ#3yH@CTADqXXceK8q4G+R>YU)6(^>p#wV7Rm6R11dz+Pn<_8MH4N3>e{XX@spSV2s)3P~+4 z0WuAhYJnbr07i!YPyiEwNz8bDqX)gppP*C>0*t%VMDqcak?QRL diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-2.tlog b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-10.tlog similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-2.tlog rename to deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-10.tlog diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-3.ckp b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-3.ckp deleted file mode 100644 index da6fe828535e2447744c281d7354b91719089c29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$Ej3Gys)@sbxH%G5G~deZp0(F94II7qkEX diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-5.ckp b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-5.ckp new file mode 100644 index 0000000000000000000000000000000000000000..3d85718e5e3feaa09900377ca7d890fc726c8d79 GIT binary patch literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$EK`Gys)@sbx8!G5G~dz4-#ReE^bp7XbhO literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-3.tlog b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-5.tlog similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-3.tlog rename to deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-5.tlog diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-6.ckp b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-6.ckp new file mode 100644 index 0000000000000000000000000000000000000000..0befdaafff878ede92a7e3e316dada34382ec211 GIT binary patch literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$Dv$Gys)@sbxK&G5G~d{ozSV;{lbQ7r_7k literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-4.tlog b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-6.tlog similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-4.tlog rename to deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-6.tlog diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-7.ckp b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-7.ckp new file mode 100644 index 0000000000000000000000000000000000000000..9f28189d45868fc54f018f3e3b0f9ebf73778c54 GIT binary patch literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$E*BGys)@sbxK&G5G~dy>_eVKLC>m7fb*E literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-7.tlog b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/2/translog/translog-7.tlog new file mode 100644 index 0000000000000000000000000000000000000000..b3d195bc77a95b87d36e3d8117bb151cd83a7cb5 GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgoS5KijBJb>tZ&$i93Y1if=NGb{~^(R>DC2X2WTu3${JFOP+IXw9wK7?l< zM@L$8V3^_inU6X9DvvyDm9b@AIF8eyKAhw-Pt%~h)3e#6n2r}Vjvk10-HvyVj<4po zm&@}TTS}YN7xlf6`x)eFRpN*H!gBqjT1YIkYrTX<;Uf!Kf37UTR2fx31qS;OR5d$h zv})WWxM_e?5&T*RMqNRoO$N^_txtCk$H=WoT@SX2h-hVTXN u`n)S-%um7~2*s#J#>Ib_&i|!{HBmual9>SlSPy7SegS1O)PL9`1^{n%2Iv3) delta 35 hcmWFtm>|!{GEqTXl8FHV7!PPnegS1OOjWoX003;Y26O-b diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/_state/state-2.st b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/_state/state-7.st similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/_state/state-2.st rename to deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/_state/state-7.st diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_1.cfe b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_1.cfe new file mode 100644 index 0000000000000000000000000000000000000000..4f1d1ce224f2aa9b9806860754e1f34088f425e9 GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1YX(e7XNx{?>STN!!(iq^KLP4 z@yElI#~bLSiqC=2OpGvja|4k6vJ|NJT&TMFEP5$0P0Th> z!LuxSX(<&D4htt#Fa#)=2Q{8079z;%3euhl;cza3s`LVBFM$fafzXVKXbypz#LWwl iXR(IKn}Qr#l34%|=l6in4EqjfOnw1nGtB%@A_@TT6G4Lj literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_1.cfs b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_1.cfs new file mode 100644 index 0000000000000000000000000000000000000000..b9d2f87ad48fa3f28293f4a67400dc8a8c332c38 GIT binary patch literal 4118 zcmd5l9lAS{ z%*hNQcjxnWwT*aRL#*4ZLeSY`pbX+EX>~+dvrau@!5S; zpwxpvyTDn6l)hq|GB!If42uDVR7oJuGpy=Cx&qifz);#T?mHW zg}sHv(VmO5DYc1b?_T}pe&ozMComS4kT^5cu#7x4SkKfdd6lf{Ws)xv+o8j(N757Z zmc3b~fBdXwJLI%xXctJG7|ys#>ZZ3jIWVD2WHU-OGm$H1C-cX$`KjY$%GC6EcRzx# z@Ib^Eck0qPk7MDMMCrOI*KIF~g*y?-?`!UN5iC4mtHBlouO_gt9;G~?hJ|jhBcbgv z9{>-3nmNgivfn$(oI(TaEv?odc35=!F_2SAN~oj>-#)dQOB%uUjq~dLy!1+esW;%M zH?1s~y5ZP!rd8LRFbxq#NN%~dBD}%a#o0GhI+t)umND!=PklMzap0z!TKFo6!`o>g zucsUp$|0?-A=F7NVYbRX8erEkZ_Hmee|?c@GXmFU(J?JjnbS$FV$abKo;NDwGNPQF z7Y7Mc97cI&*)@U3Jo?AVOANCY9OR^XO= z>iSp)UBk%iMzyM6#tMp+Y_d`^Os453_#pt_467jYoDxb0@L1kgTDJ7MW?d=KG*}mQ zMG7;*Y*=L?Qs03QG?+@O#IkkMkakCEZ&hz<7NHKbShic%oQn|wOQ3)h=KGE#3Uy)| zT}}yu17C;Y00BzUB&$30B(5xz=$_Uz;plZz(%Hp|Art|Z3ZXW3_$rhRe1YYpL+Z=K z(wv4xmH!zSY745`=sBk-DuI8T=7nO>fT;>3lk{@=3p%=I$q@QpqG* zKTMamE<-w>oz7-+Q^#hq$7wZ0x3+>fou3|4GU)F<{~#$sSP@l6>w;dP1bofbL^n4J zw)DHW%|Q>Bj(*1+I+-7s%9hlK~sIAR#v)E>Cl)px^#BByKX`j{$tppTEh`Bw$=(;_;m?^6S#PU$WGbW@1q0w0e}86NTq#OJAn|iy#|cz zt>&}zd&S1LEOqp?|EogL{Is7{ac;3lp`%z7AF%4t{mb53lx_tqM(zYHJ_%TiuDgr5 YQ`+i>V96J}_TPUrdYhlWf6qGiALYN4GXMYp literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_1.si b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_1.si new file mode 100644 index 0000000000000000000000000000000000000000..d5bf2dfc58a2d07dc986e4c2e1517fc27b95d2f9 GIT binary patch literal 384 zcmX|7%SyvQ6m68WG+IS1xYVVa4!JdL(p5oiAyQC?`!Xg|8=ILaGn3+f2!b0o?)?V; zLJ-^wBDi*=GwI{PJkB|D&RlNyE!*E4ywY%5@}<*adO4^o!jZQSA+Ml-?^E_N>jjx%z2%EgomtWwT47qXBVQ~?FZ z9YO%xbDC;np*YPJ(sbh*j<>R+!=+;T2#{Oh5@8XKZA_E4S1;TmXDX#+`LMPMHz{Sw za}g7Jl;v{lX!qiy9S=bVK@%F8>3))`stJ(_(`gOb0DjBsKoEHC_3{uy vI+)L|qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1YX(e7XNx{?>STN!!(iq^X@Qk z@yA1yn;XO%=%tjUfK&m29)x0;!lIX!QUc{1g3ydYK*79RDCY`4@JHt6KWHODny>~0Zbn1W~e+DD@2~f8srkF kAfE%&(6ca2U`tCf3n1eByioal2Q((XfU+4*9zLlI0I}3UJpcdz literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_2.cfs b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_2.cfs new file mode 100644 index 0000000000000000000000000000000000000000..bde2613b2bbd464dbfd6e40066f41dd88058e2ac GIT binary patch literal 4059 zcmd5Uy|(GKch}xEhahO%P0}_r2$i}Nsx1~o zrtMjTh=&gz;)8HtK`r<$_*xMAAP2q(cQ1-)pM4QeALQ_*&g|~jOp@L9rG*Y8GxN>& z{k}gt`+eWe{JeIdZ=qHqCYe-TvW%)#Gs~*xYKV@PSHJoCzdvW@KOcL1zwhA7-_Q)@ zPWjwW4b3J+huF-#s^-3v zE~G;(NSmd2rVE*=OeQ}$F+Dv&-KIyxs1jRq zYc`db98*TozrDKYxSHuwgs5m4=o!7diuM{&O23aWACV{K#UU1v9zP;eiWiG{vtl_c zU~O^e6pMNp2^bv&Ll{~jwkNb?Ij(Nra^@`C(A=?#H^~s`C^n~7spy+nK^-)9w~MBQ z5yFSy!vKDGdBV{1N+ch^WBFXMYU_q()36iU5Kcu4bHb|GB_h(;ffESH#dTskx@AhI zqqV2~^2G!!fdNuf>{}jDWDuM9@=6pO#5xiO7*Hqo0>sa>rOC!S*?~|DLMlZ1*b=Kq zK8OXDJGpmTJ{=uWA_%x%PMqm*cd~E?c`bRSE#;Hw&8vExCD8#$qDz);xogV8%o>*IgJL|X6cyp>h;U7c#XICgvh%5PPj_{n@9FJJ^Z z#49MXYgTD>#U^BhrdvnVODzO*N8Z$70?&Zc2l8=iPLND%c{Qi#~gD z1ZJA&vc80$0m3BwlRENeDp95q(%uej*<0`>%&6=~)BOFWO8wo!!y4o6ZLV`rpN}ha z;@t8IqVE(I#eMcI;(aPNh|+EdF}58>d=x^AKk$h81#SHvJeD2)QKa`j{*>Q;-~UD7 Ee;x;VH~;_u literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_2.si b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_2.si new file mode 100644 index 0000000000000000000000000000000000000000..eff0adbab273957f353c3e304b4b8a88fb2b071e GIT binary patch literal 384 zcmcD&o+B>oQ<|KbmuhYhoSL4SnpfhPmzK`}1YX(e7XNx{?>STN!!(iq^X`De*nyZ4 z!~hX+4v5dl#gt#n>XVsQTEU%_SeB?)mYSE6UnJyTl$e~8s^FYoRFGekSdy8a#{-ov zDh6^m4fQPa4B`zf4EZ6#xj>Cz87?DJJ)p2|lA$qQ4%me-8CG*WLp=lb{9?VtqT~$L z#M~4!6A`fPqSCyQ%-mF%LSDGxAXC_i^Gl18Q(4n;N{chNfV!a;37Y5`TIv}Z8S3VM zT%Vm;!U-~@xFj*RfY;E>(9qn}#M08#(8z?DHQq?CIFk)XCa0xBsA5KWNcfo=1efF& wrKY%Lrskv+yX6<s=BK1`Ik^Uh#0Lksy1FnN(3t!J6nr3Xeyc|=0H^_Tng9R* literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_3.cfe b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_3.cfe new file mode 100644 index 0000000000000000000000000000000000000000..ee4f71ada750949a719ec701f674e5c79fee98a5 GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1YX(e7XNx{?>STN!!(iq^X@Wm zvFN3xRDh&_Ko3GOgz(2h%rG~IH_%HdOM!|vLFp+lc~h`_elkRyQ4A`dhaz8+nG2O~ zfzl6P@=)`k^2|_sSge7L%7Y5B&xdGYb!E{@$;^asc%DFL1}~8FOCTIxsPh?xV8(-; kSCUx(k>_)OYT5@f32HpwKd9i@0~(WGK-mn_8g{M(0J|SUX#fBK literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_3.cfs b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_3.cfs new file mode 100644 index 0000000000000000000000000000000000000000..9b79624ade02f9ea80aebf9d00b46724f9d7fabc GIT binary patch literal 4059 zcmd57%Q6rR~1|5B1Bag)%dKaThj!p_=GV%e%N3adz=trQW9q9QOWdt4TKcir7} z(yBr-f*VvEK$Qpx5S)tyClq?fsS=kSdO<}{l^YkN!l4pe!p!bYJ+^lp4vCbN?3sD< z-uK?TnR#zs>F4I;#MyQg>1aWE(a>5(Td&EAtpNPJ)cE$BfB!74e42i6ePZW}-#`g- z&rt3)+b~gWSw+p7wX9h7ie5vPu@oE-;~=JjBL0C6xBbk=e-Lo;-FWqTkzgiV%)BHU z)mM~e8(Bdn#3*M)n#xMqOiIe6viWi*SDeokGljG?pSzF^$!J}zB6-wpi)CclxSPq! ziMjLGQglwym5WG2x;-Z&&6s0tYCLu3U1HNTUFWJ{*{XigI&Z2rGO>lk^8Ph?b}dL1 zi930Un-#=RI1-J;A3OB;$mrp*@rlHd$*JiljvkvieuCAO`|;T~iMFw&rcrH_O@zwG z)GS%8+E@!eL=BNT>Tjb1v5S=*$e$W%EG6U(xb)N2?|u=lz5WS=+#7(O9dMgVAMxDk zj#B=vbSHCxd*jTD0CM+u2w}eg{o^R)wgk*KV9@{}1i4KSb9y#u@0`7m=5n=R_E^9}O_k$qVy&s_n_&3^1?vAFsE(M?V#xHkSK#cZF z9op-*l#%LQ>rR2lZr%dmh5HP@+hq|5YG|+48uC<81z~S|!D~q~bgh(;uJtuWFuGS( z(ygN4hdm`tM%hp+DI>K~V*~}iV?*Y9ZUB{}f-Hi#SL;l8=oI{jH-3+5#qH2_Qbua+ z`&5uzQ8sjZ^x222PHJ$2{G#Nf+7-QSSVW{hHGnu@QELF_T6)*HnN?&uLNtXf8>Xh% z>AKTIXz~bRv)c8#dKpR}T(Qulif&+&9fuPI+;Iy2C};bj=cPbC3J)WPDlJph6!S_2 zCs>W!7cFEFM%%0+66L6e0Ekr9k!h)hj>FA9tPPCS)eXf&*nuW_lC%{2Es=wd0*nyk z`@Ss-bYc%*UJ8Pvz7E8p3?PmlMXHT=;z|pJ4z#5)Th&lSC9h5#5=FYFdwDS9Hqu(i zRP45ia9-OF9YWM|xLS)IXm`hnyH(w?72S>bB*ED)I#L z4W&FRg)c?Ege+3y?(HT)I!420fBoZ?EQ94wrvo{_akt?EdEmu6y#=o(2V+FCnDnhw zlFucX`-!<^lmmaCz~t^_NES1TnM{6RzECLOatKd#4{@@XPfIEAaNOHSj1W{sY2Zn< z)&Sex>M8jS?D0tY>(i6OBjdfb3#|ipD_;2JwKDd82=e?r67!wvvP%@Ue2C(vAMuV4 zF?7oz=FckYAJA0$6}z8LKmWsK;K>LoKS>E2>5wyni?baf&M%#j@j!r`NCb8W9nW-} z29Odb>q@u}Y(EKirUTp-OVqH0uzeqAsXlxG5-R!OD(ZUARv_!wx7o#=zWMt<{{g&$ Bc_RP- literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_3.si b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_3.si new file mode 100644 index 0000000000000000000000000000000000000000..34bc193cad059b40b496a71b4ab0ffb1885821b3 GIT binary patch literal 384 zcmcD&o+B>oQ<|KbmuhYhoSL4SnpfhPmzK`}1YX(e7XNx{?>STN!!(iq^X`Jg*nyZ4 z!~hX+4v5dl#gt#n>XVsQTEU%_SeB?)mYSE6UnJyTl$e~8s^FYoRFGekSdy8a#{-ov zDh6^m4fQPa4B`zf4EZ6#xj>Cz87?DJJ)p2|lA$qQ4%me-8CG*WLp=lb{9?VtqT~$L z#M~4!6A`fPqSCyQ%-mF%LSDGxAXC_i^Gl18Q(4n;N{chNfV!a;37Y5`TIv}Z8S3VM zT%Vm;!U-~@xFj*RfY;E>(9qn}#M08z$ik4BHQrdSIFk)XCZ`ocs8mLINcfo=1efF& wrKY%Lrskv+yX6<s=BK1`Ik^Uh#0Lksy1FnN(3t!J6nr4iyZlET0Ihv=7XSbN literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_4.cfe b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_4.cfe new file mode 100644 index 0000000000000000000000000000000000000000..c4aea4300a1cd0ba295272762b64a22ce1d94990 GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1YX(e7XNx{?>STN!!(iq^IkJ> zvFN2_=7OYvKo3GOoMq8VODTbJenV(RWuRalR3(!fM3B`Lq&*YDVNZtY@Zyh$IKkW? z-as#& krsP8%!#fiypNAq}0`oH;J4Bv|@qotU7f`hf^PNm%0OJ!ttN;K2 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_4.cfs b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_4.cfs new file mode 100644 index 0000000000000000000000000000000000000000..327cb83742ca753d49fa45d002d39b6b7a456cf5 GIT binary patch literal 4120 zcmd5<&1)M+6rb5$$+A?}sbf2KZ8?dWLl3pRvLlPA2L)FcoDXng)0C7}EYc|1#@bbO zS9U@OsOQj@QZTfKCQ#_9lor}ULk{twf&K+0NeMZYl!Ec0&{E>Q+1+Q2RV>DX4Z{zL31<$?abBhzW(>G{QMUa8*BYrU;Rn) zz&+$~&!`KgZaDUwX;n2RRDu!`Yj7+=lr1hU&z>#t32nq;w87~xX}}*eg;F}@Nzm0o z^33xf32&uAydEUVAfY^XMo2riLOGTHD3#XegV#U*1C+S!`8V%=%&i$k*B2erV&yrV zEtl;%%|?glju12&R3eh}h;9^UuQ{76tkT(EZ~pK&a`t^=_!oLJRnb>9ixq8Vt>`6I z)0``*Tx#+nV6yX?pT~FoG zGwF0TlgX$vC(|k{v1*N3np3wxB0JGX{vHHo-LM_aZ~$XUol1|Z>G7%TQhGX_~W|7L)3@+?FMJwsF*en z;f}y06TdZnUYrz+`!U|uU4ChRla z1|LK4f?0Y;TduP}^sE}nhwwDkQ>W0WWQ4)$P0&R(s>fSyYF@s=`zhQa_Zb!iZQFJlb|;s1F2|uSwC-@!uOm z+`PlH%Vz27lEv5(hlBtFWV7)38nAO~7EU0~ zx3p8jtZO?j3q(Fd1nOC+{ivd#jNWgV?VMzoTD+}M<$W5X9)P9934l!y@7D?bN(bOayt z=bxZf=sWs}jA-qrD9G!)m^vQytl#IUBZ=49_Ll^vz@1MCxGO`}$ia_%CW)B0^}Dx( zbd-UomUn@^Xz6f8h2+Go>5x*TW5=b}lt{EI)*Vm0)bn!hp;!72_YVvn85(|dWHdQ; zRMhs<&)+`g+WJ~kcR?>Xpk=qrJ%WC>+UREgU94QF{u2+to90J%#Q8sOKRNn85}KC8 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_4.si b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/_4.si new file mode 100644 index 0000000000000000000000000000000000000000..edcda1d08582bacaa4062d2e7d6bbc6e03c55077 GIT binary patch literal 384 zcmcD&o+B>oQ<|KbmuhYhoSL4SnpfhPmzK`}1YX(e7XNx{?>STN!!(iq^In6**nyZ4 z!~hX+4v5dl#gt#n>XVsQTEU%_SeB?)mYSE6UnJyTl$e~8s^FYoRFGekSdy8a#{-ov zDh6^m4fQPa4B`zf4EZ6#xj>Cz87?DJJ)p2|lA$qQ4%me-8CG*WLp=lb{9?VtqT~$L z#M~4!6A`fPqSCyQ%-mF%LSDGxAXC_i^Gl18Q(4n;N{chNfV!a;37Y5`TIv}Z8S3VM zT%Vm;!U-~@xFj*RfY;E>(9qn})YQP-z`~rFE#5>gIV}}J6|(|)#hHxqknl4#2rkJl wN=${pv8C33WHe!CWMBu%fB-iTGlDQs zj49rrJ*It@N6>{XSxbv)Sw}PjIDATzQ}a^I4gNy`NDqt+qd{T}>;gIY$%#4f$r-81 z*#-HTc_oYnGP#Kr@uhjiiD{|viKQj^@tG;{C7HRY#U+Wk1x&hzyd_16dBr*T>G7qd znJHq0o-UrjN7kk)@d) zk)C<3fx>Wu(t)lmN-W9D&jWh1xH2ypXs1}DnR!`mR(WNRaiO=Lt9iahn6q!1BNxbZ Z#i@nydHIY62Q((X0Q&<-^tstT2LKp*cwYbj diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/segments_d b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/index/segments_d new file mode 100644 index 0000000000000000000000000000000000000000..62db3c0d3e0467d64ef2665008f73a2599b9af48 GIT binary patch literal 571 zcmcD&o+HjtoSL4SnpaZHz`(%nmA!89uebJ|Gxa`96Zt>yBV!6XBLh271_V@rm=%P9 zVodP{?J@1MJc2HC$y!=W%Q~VNz~NJxoSK(vZtx!pKzd+o7!48wYBof(=oTrOjnFjT zAw{z>n&!KtXf{F9{F->p>;gIY$%#4f$r-81*#-HTc_oY{GP#Kr@uhjiiD{|viKQj^ z@tG;{C7HRY#U+Wk1x&hzyd_16dBr*T>G7qdnJHq0o-UrjN7kk)@d)k)C<3fx>Wu(t$Bllvt9PpT}fq$X;BT zmkhL2EGpfgEZoU4B-pexz&td>%_t%xCB%^nWW5DXP-PvMcg#+B?Q?!L4Z@lX7({(%3X zPiq}`FwDFenCopd=#vHGs=D+%ugiDzl0?aD{WwkIk;}t*=^Fi9r|f)o`-d=1=Zb-oi9RD#_P&-&2yVOj(armjvs?e z+%3wh+|-E??ah+X{!qY%_qF|Y-^oU9xrV}kew8J3+&&RTW@~ON+;YV$Xh7Ln3QbGS z2tsLx!VVpvDutZ|X)7Bjq!RE(7>y}Sq9_XDISp_HO$VCWUZW$K?idtHWh_?~Z-hZe z{eb#mvZCiKqHG>d(fIHmCI!lRt(dBe^lQQPv1|p#BBbO4f3Ppt`5kK{4#w$yeO?TI D0#IP% literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-2.tlog b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-11.tlog similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-2.tlog rename to deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-11.tlog diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-2.ckp b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-2.ckp deleted file mode 100644 index d9106c6d0be99028a3f1edc854232a7fe66857a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$DXuG=L-rVlp1knEV1J7V}SQ5&)A*7jyss diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-3.ckp b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-3.ckp deleted file mode 100644 index bbb1351238ab9581ce360c5a530aebd1773b3fb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$Ej3G=L-rVlp1knEV1Jw&mq6V*r(17wG^1 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-5.ckp b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-5.ckp new file mode 100644 index 0000000000000000000000000000000000000000..b5665ca36b003431e18345096d5f3149243572f8 GIT binary patch literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$EK`G=L-rVzM02nEV1J_IS>;N&uC`7xDlA literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-3.tlog b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-5.tlog similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-3.tlog rename to deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-5.tlog diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-6.ckp b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-6.ckp new file mode 100644 index 0000000000000000000000000000000000000000..722a8712424f7e6bce9fa8bfbd400bbcb7c2dbb7 GIT binary patch literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$Dv$G=L-rVzM64nEV1JCce&e1^|+37We=F literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-4.tlog b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-6.tlog similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-4.tlog rename to deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-6.tlog diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-7.ckp b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-7.ckp new file mode 100644 index 0000000000000000000000000000000000000000..7843e30ff1709302fbb68aa795dd21a20913bebc GIT binary patch literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$E*BG=L-rVzM64nEV1J_J8M6O8}PL7ySSL literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-7.tlog b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-7.tlog new file mode 100644 index 0000000000000000000000000000000000000000..40c68f6d287a9a30612cc7eec4ac98dc7ffc868d GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgoE}p^V5zc`gM#afy;pxQ%xmo#v01=Z6-v9sr literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-8.ckp b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-8.ckp new file mode 100644 index 0000000000000000000000000000000000000000..cb6662b6dccb0bbe61074b3eef596f3b221866cf GIT binary patch literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$C|iG=L-rVzM64nEV1JrfzazA^?)D7Zd;h literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-8.tlog b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-8.tlog new file mode 100644 index 0000000000000000000000000000000000000000..40c68f6d287a9a30612cc7eec4ac98dc7ffc868d GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgoE}p^V5zc`gM#afy;pxQ%xmo#v01=Z6-v9sr literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-9.ckp b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-9.ckp new file mode 100644 index 0000000000000000000000000000000000000000..4939fcb1dec6182645155269b6f1381f2a94fd7f GIT binary patch literal 80 zcmcD&o+HkjoL#`cz`z8=K)~z)BEU=r22Lo=2&G}-Fq-v%#^e`JIfkD%<}U^S8*vD> literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-9.tlog b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog-9.tlog new file mode 100644 index 0000000000000000000000000000000000000000..275ef1fef8397116fafeeab7a22d1101083b37c4 GIT binary patch literal 840 zcmciAyH3L}6b9h53}k@`!N5c|B$~##Hd&CMpk`nw^nzF_t2qsZ#0jxWsSvyfZ^8@% zPrzgF2;eA`O9ntfa3o7d_W5n;lQ$ou6`5z4vM329NvevqeC9X(gUR7`yQQ(At6DKkDC3xNafhzysHUNs?sSmhnaHymst6vvKSlyEHqNL=Lq=**;1$n$9bjCv zNVyUQMOCEd*LvG18u@7*Rs~2k2RZe7A3*>iV+L~jhaj$LIC=@h`WD3Skg1Ab8Ki`u vf2ELrlDy=_#`WDyLHn$5($l;DqTp(#QBrVzqTs3`_#1_}0zr}=)@~**{FVR~ literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog.ckp b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/3/translog/translog.ckp index a3bf659ad2f090fa68360ff71df88751ca8b8292..faecbf20c68ee56aa0c83f359355ce6c5a4b19a0 100644 GIT binary patch delta 35 hcmWFtm>|!{JyAhil7#^RSPy7SegS1OY%dM?0|0L-2O$6e delta 35 fcmWFtm>|!{GEqTXk^u@B4`@t&0pmEzI8O%vYEA{w diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/_state/state-11.st b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/_state/state-11.st deleted file mode 100644 index 1eb87602a82f9e5485a15f480b9779c57c412fb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 811 zcmcD&o+Hj$T#{Il%D}+D2*OsHT&%zPa!X3`%k%V7OHxwHGLut(wUwn76=&w>U7J{x zUs{rxmmZ&2nj2r7kyw;ce4+(xfOCF9YF>MBY6(cX_}9$Lyp+@my~NUz{P@(0g2cR( z_@dN;oXq6JVizOb#GIT-5CzFasfi^(ljBo>j_@%wGc+_aH!?OcHa9n(4p9NLDJium zK0gg^fP=wQbSa2a9893578K=|Wu~O2#OEdEruw1zrW2yMv@|m%)FR9&)X6u~FDNh9 z(kGxItjxf`EGuvdL#CYNNE zr9#8R3FyJ!?YW5s1)#wA@t38~#m$EyXX4$w!wNjD_m5tWDY2h5WzQ)SMgBQgr8qg} zYzv%KKL76g%vn|GHFjq{CboJopYvQ0uc#;7C$oTkrEw#({iFq&?5lb|r=+fEak}W` zb)&^uc}*h!-`nppzuzkL6I8ZaSby&)yy0dm&=dE8bttKSF(6b={(JbG!pBN-I)*qP(+9iz3V%fBydc`+&ye7eLp7 J!OP@hp#Y_nTB!g4 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/_state/state-33.st b/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/_state/state-33.st new file mode 100644 index 0000000000000000000000000000000000000000..6509637ad3b5e3765c0293aeb7e5146a4f921df1 GIT binary patch literal 821 zcmcD&o+Hj$T#{Il%D}+D2*OsHT&%zPa!X3`%k%V7OHxwHGLut(wUwn76=&w>sqC0o zlwVqsnU@})SDG7NoRL_RQhcHXY=U!sL26!macT)jy7<@3%)FG;3cbYAlKlA8ih{(v zl=!05f}G6c#9|jC-Nc-nNe~6eMX8A;K%?VRfUfW{G&3|bGdD6eF*Y|ho(@p~v?(dI zC_X<8Zh(WqRCFnbQyfg7rWO?Cmu04;ro`tZ=BE0gd8ZSixwJGhCDbC!Db&d~(=RA5 z*U~4TBCO27z$`0p3Pc6e*Lq+#rlz==85kOvSXwTG$d(snmZa*HCuWw!r{x#LCnlF< zmZd_�luZ-|e}H1qGnM`0{9L z6k4xZ_r7oMT8@M7WajIi`*@Peme+!{F|W0*(_&LQ-x41d-W?NJd}po<@w@01&(T_? zt(hSDZR&;}$|d^k?T3qRn{`QiK7MkNXKzgD)}q((Ico3IcqaE6Eba|jsbQP2qH0&{-z86{c=7-G70tYJiI3|I zy_KIebh;m(ma6}mHhuje+k^+gVntI=otbCUwXVK@bE@a%8E5YC8?>}A&FcK%(U__i8+~x#i_-=e)kj(XouW-|nlE7@U6tC1GOONt=)6(*v z4Msp+9m;H0Es7Il>h($ literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/_state/state-2.st b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/_state/state-7.st similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/_state/state-2.st rename to deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/_state/state-7.st diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/index/segments_2 b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/index/segments_2 deleted file mode 100644 index 49c8aa9a5713189117838c65595b37ef0633b925..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264 zcmcD&o+HjtoSL4SnpaZHz`(%%|3v=vi$%)+H>${pv8C33Vl-lBWMBu%fB-9m0xA>8 z$xlwqiBHZ*P0lXJ&&(@f(lwOHO{|D7%_~k!ON~z~Ey<71Oo=ba%uOvWNz5$(%JY^K zCFT|98WyO*YTRu!7&I`U*>7MJ7~RYKJG82cv$COevh z9y8ElMoO%+F&qW-qSHO9t90mgimK?volH7-;EjVwT}s hy45K+aBLh271_bya6i}H! zPJVJ?PJD7kYI1f#er8??ldhpmZem4zX zC^4@%CqF&Dv@|nC45%clB*Y~uII_|_-@P=&v#QWE*O4b9v$!O`s1l;a$Jjq9Fxk;0 zBsVw9DJ0j_&&1z5HBcCCP5v7(URqLgCYz~JIwlbp!V iEcd|Ryqt0_kn4(53*+XdemFD^Gr750Og{HZV031>cKmY&$ literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-8.tlog b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog-8.tlog new file mode 100644 index 0000000000000000000000000000000000000000..00b057da145fd188ad332e31bef428d2e578ebb7 GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgoXdemFD^Gr750Og{HZV031>cKmY&$ literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/0/translog/translog.ckp index c4f3324f72e4f23ed2825d623fdf88d95aa9cfec..18163d1a3aea7cad130e2b2ee23568f0e00dc641 100644 GIT binary patch delta 36 icmWFtm>|!{F;P)W>i>TR2w*v&G5H0Q%`hjrwH^SXu?U+0 delta 35 hcmWFtm>|!{JW)|x@*e{PFdopD`~u2mm>;ch7XXD%2af;% diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/_state/state-2.st b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/_state/state-7.st similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/_state/state-2.st rename to deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/_state/state-7.st diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_0.cfe b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_0.cfe deleted file mode 100644 index 9d3aa4fbf8a3c60d89ac2af5aff8ccf8e06b68cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1nn{Hvpj+>bjey;Ov^f=>CC{z zqL-4H36cT=JqX3%${!CiBi=wSB|jM|4mJYF&O?ze$;^eyKZMYXk74rW1|a=qDG+g{ zBT#j#S@hCUDj*!@e5hau$R$vdm=8k*OJF9Mf=nvOEP#l!m_y~Sf=nuba9DYug1=#! kpw>eTWn+hGehbu;2NmS{0@WORKx6U?r~wS8XU-G`0ApA|+W-In diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_0.cfs b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_0.cfs deleted file mode 100644 index b7c65d9ce1ba04164c32d9c805518bb61dede46f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4183 zcmd5;-D@0G6umuCBjw?#E9Cj=i*Y`TL=hBrml4 z>e^$u8OO4HZ_05ihJS`9SWue(_Sw&W12ky)+59Ge^rOoe$MY@wE$?;L^0`}Z%AmE~ zZx*#nId=3Z_OzNxXS9}V>l1DJ+B^1lc6Ik0=>P7})RDU{M!da*){u?-cVL((b6)>1eRC}$YE50V(dX~yoR#iuyBEtG9$ z1eG|laWY6cA+%jC@vqmXe}ZE5)QdHq6HDlVu~6k+(jpEQ(|E3wn-p*nvFnXI7T`k| z%nd2~XF(pMAqSNzM$-<jCxr!2l;dQ*nypN1L=4|My& zB#a6vnGiqnJC!lJ3_1pwv70g}0|2Adgd=EMV6L2awIIeSt!WyqfmpO!@Gl%w`hx89 z&PH1|7+jUK;&>zal&LiTANypGQ!v|^x?tyP1S#!zOQrJxBQio;rp(qPjrwE zVFBqAv${t9NDb?-we&ZK^~M?;AnASN%V8b2`5^f$ItEUWOgpI!>-FLssHO@#lpXItkVzcKy;v~> z)FUnVBaE}5;CR?~hy80|4;|`|d`*&uLsUdU=OmR(axADO$8sTJIVpie!(C%(4OK6M zeOK695yURBpd!X{Su#u|$AW5dEcU;Q1+bvm^)9LboUGV(tP3h)EGuXwdM!B?RFh*_ z{f}Z<4Jl}0e?_9SV=SnMv3x8Us{d%m$p|e<90dAmxB>~JCCWzQQ+jSb9jH!#9y zVf_U>G9NsIHM~EP)V%8aytPboBvbPEyCvHZl%sQt9YOHu854&-o=en2c&fFP7G0}i zxGN>`u&%%bSPwvikZ9c$!((`XAe^dO=8DK2!i!x}TH>x}IkqVJ|KYVyzD-BM30$b+ z5vn2$HK_tkL5?P;vPo||mjs6yPfRK*klrTRjjLX~kM}U^=44B+;mn?c(%3dX`=Fx`plJ^Kgjcs9<)FB8+L9;m;e9( diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_1.cfe b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_1.cfe new file mode 100644 index 0000000000000000000000000000000000000000..9e6d6ce99d3d989e3d44739b18caa53704eee763 GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1YX(e7XNx{?>STN!!(iq^KLM3 z@yElI#~bLSiqC=2OtLU}a|4k6vJ|NJPN=#gEP5$0P0Y1W z!4ej|w3G@6hxsE^Fa#)=2Q{9>6(Y#S1=5}g;c)pwRl0(-mp}!lKxjsBG>1S<;$97r jXWa>tHw8JgB(ne_E(mon!U_`U=HgI7Z- literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_1.cfs b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_1.cfs new file mode 100644 index 0000000000000000000000000000000000000000..ba9490d4e3ec2d23a3a49a92ff843bbf6866b9a0 GIT binary patch literal 4704 zcmd5=O>Epm6rLIHkFz07nxE#UNh$6jM1-(ZB7sO%q7ot&+7ierAdzI{t|wrUwHJFf zB+y7(P*tQ}phyv1+5q>0_>;JxUJxRO3iSf&p-3QFE}$ad!hta3_4CfAc2bE}${aGD zH}8G(zBfPbWka8k=@Ex3sqHY47Ol z+S}c;@9vBDzVoZV5Uo(0F~n-khZpSpeAb~fOPzu{X66~6RW^GjEhDVBJvnakhmZeLKmSUkF<4dzjC ziSjIoFuAH=j6_>iV0|+Qk;<0IE+0)NkXm(NeG<;Ay*Q7DvV5ukjqIv7e=KH zlXaE58Ac>bCbkP9e7}4+&b;~VDY4CMm2DnM^TRi#FO;Yob#ndlF_g}wM>$;J^jp;( z7!woV@tPF;jF|8vuqJKjF(LP2mlm6!4Tepokqx7w$sB(F_nW^2hmHz|!SsY}TFf1{ zor2DyXdujeFY{%2!yCd}IsD`pAH;B3RdHF!`ApgC5RWoGD6biRyz7E6>VfMq$!v!j z<0f4&+;QDy8F3T^!sZKt2wxeaVd20jB4d6xdoUp|n}LUima*n+S9oy~P`#2f4FR{| zH_|gf9nT0ZYb6E)b6zM^@HI-!EzQlDOE`^^IhVeivuxpM0KN~vgCi1#K9r8s19+@9 z=TS)(_Uj)H@TN8*42YOis-dX@RRw1d5_4Yu^4@F#NzyS=9-*#5vY z)E(_~is{D}XwK3Lv~EW`y6I5x)NfW&e`-g&EoXugHy-#gGNT=(5hW$YBQnU>D;Iwj zAl>lnZ%$EuYP>l^mCKkQLdxXtuJ9VD^E!S_lMk^r+=NbwS56y#UQ^K@@qSHILfTBf zR((r)P+}K)zh8rztrwjQYP!czvJsX0wMwzqi+ziAvr!=|CVh>HFWb|ds0YRNRB zKO6crzqr$8R`?>p+0=%$>0i*;v^Fq(9Zk?_O5Y%{z6IF)S4mJ57XcRu= zp66gB)B`PfQhcX;!6CnI_4}v&UUZ;?M#_@Z{{%&F=ov{R70m_IWG+*Im!lF$@VPCQ zdS7+Q?}5up0mL?3KoPjiONPm4E}$lJv2PO>+jpVG?_ZZ(+Hzk&5xBe|8OEczfSSzZ z^#9}{utYmu>4Nk0wm%l#mRvv)xSW*?)o3oDCUaT6OvUvS<49PZMmlH!&;K@rye3=BoFEI-`c9}m7N z9`2Uf-!b4Ht?houP{t>-96Es&3S*Z-gz?od;k6K9;!21xc{xO=u6x3v cBl_YQyoNsq-s>{gkG?wji9G(|gW1Xd00=DKssI20 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_1.si b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/_1.si new file mode 100644 index 0000000000000000000000000000000000000000..d767cd3e857fed89c3786ea211a17334ea03d71b GIT binary patch literal 384 zcmX|7%Sr<=6m8XM>1Y+T;8K@v8s@gs&bTV5EmR5$2qzj=oz7)=OIgxtH7I8MpYnUG^4v8IA=Eo7+-C;D^bTCVrer4vC8P}AN<-_tS+@=(i z$Ye~ML7J(dYut;Ec6|gV2x?GGZTBOpOEyGl%*JJC0t5{|^!-}hTQBqh#RD}zh+~kV v`NR4A8eXJ@BuR&oG*KNP8PpkK@Ow9iOd@*XhGQo)vRn literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/segments_4 b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/segments_4 deleted file mode 100644 index 338681e38a5d7b5bd31d23945633cd0088f92534..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmcD&o+HjtoSL4SnpaZHz`(%%|3v=vi$%)+H>${pv8C33W;9`EWMBu%fB-iTGlDQs zj49rrJ*It@N6>{XSxbv)Sw}RTIebc!Q}a^I4gNy`NDqt+qd{T}>;gIY$%#4f$r-81 z*#-HTc_oYnGP#Kr@uhjiiD{|viKQj^@tG;{C7HRY#U+Wk1x&hzyd_16dBr*T>G7qd znJHo+9&S$lF1g;py8ao7mhoBXfhlR3fjk+R#U=Sgl@K+#74i9Ig-&L{m4)u5zW#1S zhIy_<>B4Y>(t)lmN-W9D&jWh1xH2ypXs1}Fdv-vwQ@D9ZQDM51fn`vLOJrtPIv2=w Z#i@nydHIY62Q((X0Q&<-m|BPL0081~ca#7C diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/segments_b b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/index/segments_b new file mode 100644 index 0000000000000000000000000000000000000000..7dab39a8bac89da146554d1f3e46308a39b95784 GIT binary patch literal 327 zcmcD&o+HjtoSL4SnpaZHz`(%nmA!89uebJ|Gxa`96Zt>yA!8CdBLh271_We*mtsi%as0Dj{leE8_Fb3Z2Y?D+}FAef`~v4D(!z(uLs$r2}1C zlvt9PpT}fqz+POLmkhL2EHK;DsLZ@7G$_N!DX*y5(6ur$J;IR-;%x6voDFdLs;FrrDpxuc+$AgeQE=w+7_8L$iC&lRcP Mx|&P#_&I#h5illXNB{r; diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-2.tlog b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-10.tlog similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-2.tlog rename to deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-10.tlog diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-2.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-2.ckp deleted file mode 100644 index d9106c6d0be99028a3f1edc854232a7fe66857a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$DXuG=L-rVlp1knEV1J7V}SQ5&)A*7jyss diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-3.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-3.ckp deleted file mode 100644 index bbb1351238ab9581ce360c5a530aebd1773b3fb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$Ej3G=L-rVlp1knEV1Jw&mq6V*r(17wG^1 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-5.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-5.ckp new file mode 100644 index 0000000000000000000000000000000000000000..b5665ca36b003431e18345096d5f3149243572f8 GIT binary patch literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$EK`G=L-rVzM02nEV1J_IS>;N&uC`7xDlA literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-3.tlog b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-5.tlog similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-3.tlog rename to deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-5.tlog diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-6.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-6.ckp new file mode 100644 index 0000000000000000000000000000000000000000..722a8712424f7e6bce9fa8bfbd400bbcb7c2dbb7 GIT binary patch literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$Dv$G=L-rVzM64nEV1JCce&e1^|+37We=F literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-4.tlog b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-6.tlog similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-4.tlog rename to deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-6.tlog diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-7.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-7.ckp new file mode 100644 index 0000000000000000000000000000000000000000..7843e30ff1709302fbb68aa795dd21a20913bebc GIT binary patch literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$E*BG=L-rVzM64nEV1J_J8M6O8}PL7ySSL literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-7.tlog b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-7.tlog new file mode 100644 index 0000000000000000000000000000000000000000..4d52c890ce86d5b4b9e5c0a9c66d7166712aaa23 GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgoHZchF#x!%FL{uzmu@mcACDQTI301KTAX#fBK literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-8.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-8.ckp new file mode 100644 index 0000000000000000000000000000000000000000..cb6662b6dccb0bbe61074b3eef596f3b221866cf GIT binary patch literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$C|iG=L-rVzM64nEV1JrfzazA^?)D7Zd;h literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-8.tlog b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-8.tlog new file mode 100644 index 0000000000000000000000000000000000000000..4d52c890ce86d5b4b9e5c0a9c66d7166712aaa23 GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgoHZchF#x!%FL{uzmu@mcACDQTI301KTAX#fBK literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-9.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-9.ckp new file mode 100644 index 0000000000000000000000000000000000000000..4328812c662da534bbaf640c353e4d3e19c87ee6 GIT binary patch literal 80 wcmcD&o+HkjoL#`cz`z8=K)@IaBEU=r22Lmq literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-9.tlog b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog-9.tlog new file mode 100644 index 0000000000000000000000000000000000000000..4539bfa3229247ee043ad094f6314172e1c16b8e GIT binary patch literal 349 zcmY*V!AiqG5Z&Zr?tQJEh`pZ_cegkB(A-Z3`7>TsFN?97>#-0~8YjnKn3r!B zQXp3Js-Fms6wR@%`77E2S=PL%kl8hm9WZZJ1lc3>SwcZ;hN%SBhAM3pt^4LLk}yQ3 z!Wa56GAnY(t=p6Qff62CGb7iH1#PW5G9UlzXxlJa?s^^XC_o9LNq%{8b`H~>UkGP4 iRTjN&24%RlgtR literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/1/translog/translog.ckp index a3bf659ad2f090fa68360ff71df88751ca8b8292..973f8e261a27447c6f703c2d9560a1c8d521ae53 100644 GIT binary patch delta 35 hcmWFtm>|!{HBmual92%dSPy7SegS1OtUjZ25dd!^2N?hW delta 35 fcmWFtm>|!{GEqTXk^u@B4`@t&0pmEzI8O%vYEA{w diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/_state/state-2.st b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/_state/state-7.st similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/_state/state-2.st rename to deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/_state/state-7.st diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/index/segments_2 b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/index/segments_2 deleted file mode 100644 index 98772285441beee6ef6bfd8f5992c70145917df5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264 zcmcD&o+HjtoSL4SnpaZHz`(%%|3v=vi$%)+H>${pv8C33VKicAWMBu%fB-9m0xA>8 z$xlwqiBHZ*P0lXJ&&(@f(lwOHO{|D7%_~k!ON~z~Ey<71Oo=ba%uOvWNz5$(%JY^K zCFT|9A4N6bVOD#$)$;{7VG-fZZ%u5E^DW;q5Qk?DOX&z)?=40;d i=aTGE;^-B~1#(?+YGHg{KF}=(G$y}*d8V@eUmyU)PgW-Y diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/index/segments_7 b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/index/segments_7 new file mode 100644 index 0000000000000000000000000000000000000000..520b912c6b469d380a3c0fa97a6a5ab85a80d59b GIT binary patch literal 264 zcmcD&o+HjtoSL4SnpaZHz`(%nmA!89uebJ|Gxa`96Zt>y9HTiqBLh271_bya6i}H! zPJVJ?PJD7kYI1f#er8??ldhpmZem4zX zC^4@%CqF&Dv@|nCEIrW7C^0XpFvuV`KP5fb(A*<1BchxqBeS?9zo-(TCeJX+(%IKD zImj} ill*dzqAbgFE|BYrQw!ts@_}wSpfULc%riyo+XMjBX;)tW literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-1.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-1.ckp deleted file mode 100644 index 93bf2ab854a2bfb314f2fa5364d23b66f37b6e20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$D{;?BE|%4dVfg$uD5)r?9f$0|0a;9?}2+ diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-2.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-2.ckp deleted file mode 100644 index ca4feaab9f663bcd4b43830a5042f520e86038ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$DXu?BE|%4dVfg$uD5)%Y8P~004EUA4C8E diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-4.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-4.ckp new file mode 100644 index 0000000000000000000000000000000000000000..e060a1d7926e698839806c5836193556be0f1108 GIT binary patch literal 80 scmcD&o+HkjoL#`cz`z8=AfOGQz$D9m9000@`GCgc7cljQ|5@z;0C?XZ5dZ)H literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-1.tlog b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-4.tlog similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-1.tlog rename to deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-4.tlog diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-5.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-5.ckp new file mode 100644 index 0000000000000000000000000000000000000000..5f876f54f83c747c33157301aa1bd56b500c69e4 GIT binary patch literal 80 scmcD&o+HkjoL#`cz`z8=AfOGQz$EK`9000@<$%WI7clky9mlT#0CyoD&Hw-a literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-2.tlog b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-5.tlog similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-2.tlog rename to deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-5.tlog diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-6.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-6.ckp new file mode 100644 index 0000000000000000000000000000000000000000..7cdc29690e22104b811098896c1dc3c766726bd7 GIT binary patch literal 80 scmcD&o+HkjoL#`cz`z8=AfOGQz$Dv$9000@<$%WI7cli}4i=OF0C;5|umAu6 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-3.tlog b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-6.tlog similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-3.tlog rename to deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-6.tlog diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-7.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-7.ckp new file mode 100644 index 0000000000000000000000000000000000000000..6b43d2f4a71e9d6847bb5c7a07f17d003c040f23 GIT binary patch literal 80 scmcD&o+HkjoL#`cz`z8=AfOGQz$E*B9000@<$%WI7cliM*B)F40C;vFF8}}l literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-7.tlog b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/2/translog/translog-7.tlog new file mode 100644 index 0000000000000000000000000000000000000000..58276e17a56ffe845afe73e7e0e6f83157bbf6cd GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgo|!{F;P)W>i>TR2w*v&G5H0Q%`hjrwH^SXu?U+0 delta 35 hcmWFtm>|!{JW)|x@*e{PFdopD`~u2mm>;ch7XXD%2af;% diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/_state/state-2.st b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/_state/state-7.st similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/_state/state-2.st rename to deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/_state/state-7.st diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/index/segments_2 b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/index/segments_2 deleted file mode 100644 index c40b18a850d379b11ff14edd531b4d962d720f3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264 zcmcD&o+HjtoSL4SnpaZHz`(%%|3v=vi$%)+H>${pv8C33Wi(=EWMBu%fB-9m0xA>8 z$xlwqiBHZ*P0lXJ&&(@f(lwOHO{|D7%_~k!ON~z~Ey<71Oo=ba%uOvWNz5$(%JY^K zCFT|9$7-g29XBcQ!nVwVS iYLXb0XA+ps1#(?+YGHg{KF}=(G$y}*c}84bg$n>DQdMgJ diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/index/segments_7 b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/index/segments_7 new file mode 100644 index 0000000000000000000000000000000000000000..57e3971f42a30eefec223c10ca56d97ab2396cb4 GIT binary patch literal 264 zcmcD&o+HjtoSL4SnpaZHz`(%nmA!89uebJ|Gxa`96Zt>yJfk@~BLh271_bya6i}H! zPJVJ?PJD7kYI1f#er8??ldhpmZem4zX zC^4@%CqF&Dv@|nCtTegUwKTsXCnVm##3ZOZ&?2bPEXQj5HzVB?_F;N;3o i52G^gh@y~kE|BYrQw!ts@_}wSpfULc%rnAj(t7|E1y_Cm literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-1.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-1.ckp deleted file mode 100644 index 93bf2ab854a2bfb314f2fa5364d23b66f37b6e20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$D{;?BE|%4dVfg$uD5)r?9f$0|0a;9?}2+ diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-2.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-2.ckp deleted file mode 100644 index ca4feaab9f663bcd4b43830a5042f520e86038ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 tcmcD&o+HkjoL#`cz`z8=AfOGQz$DXu?BE|%4dVfg$uD5)%Y8P~004EUA4C8E diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-4.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-4.ckp new file mode 100644 index 0000000000000000000000000000000000000000..e060a1d7926e698839806c5836193556be0f1108 GIT binary patch literal 80 scmcD&o+HkjoL#`cz`z8=AfOGQz$D9m9000@`GCgc7cljQ|5@z;0C?XZ5dZ)H literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-1.tlog b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-4.tlog similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-1.tlog rename to deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-4.tlog diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-5.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-5.ckp new file mode 100644 index 0000000000000000000000000000000000000000..5f876f54f83c747c33157301aa1bd56b500c69e4 GIT binary patch literal 80 scmcD&o+HkjoL#`cz`z8=AfOGQz$EK`9000@<$%WI7clky9mlT#0CyoD&Hw-a literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-2.tlog b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-5.tlog similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-2.tlog rename to deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-5.tlog diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-6.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-6.ckp new file mode 100644 index 0000000000000000000000000000000000000000..7cdc29690e22104b811098896c1dc3c766726bd7 GIT binary patch literal 80 scmcD&o+HkjoL#`cz`z8=AfOGQz$Dv$9000@<$%WI7cli}4i=OF0C;5|umAu6 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-3.tlog b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-6.tlog similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-3.tlog rename to deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-6.tlog diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-7.ckp b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-7.ckp new file mode 100644 index 0000000000000000000000000000000000000000..6b43d2f4a71e9d6847bb5c7a07f17d003c040f23 GIT binary patch literal 80 scmcD&o+HkjoL#`cz`z8=AfOGQz$E*B9000@<$%WI7cliM*B)F40C;vFF8}}l literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-7.tlog b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/3/translog/translog-7.tlog new file mode 100644 index 0000000000000000000000000000000000000000..0f10f24d12d1878854285b62044c7abdac852d43 GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgo|!{F;P)W>i>TR2w*v&G5H0Q%`hjrwH^SXu?U+0 delta 35 hcmWFtm>|!{JW)|x@*e{PFdopD`~u2mm>;ch7XXD%2af;% diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/_state/state-12.st b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/_state/state-12.st deleted file mode 100644 index 141d3387d3c0395c2912e52c2d55b6b334dba03b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 806 zcmcD&o+Hj$T#{Il%D}+D2*OsHT&%zPa#P|{ON!%jQ%e$45=#<)wUwn76=&w>-I!RE zUs{rxmmZ&2nj2r7kyw;ce4+(xfOCF9YF>MBY6(cX_}9$Lyp+@my~NUz{P@(0g2cR( z_@dN;oXq6JVizOb#GIT-5CzFasfi^(ljDK*r1}_|85)|I8yTAz8<-hRho}JBl$2T& zpPvRdz`njV#Gpqrjp9+>SM zm75b573Q2=>FPKIq5|q^J+K>7Q{2o93=K>yEf+#$%ZoBgQuWFcGfU#r@{8gVlS?wo zQlVku1oYtV_T0pR0#IQ5_{-Ai;^xCJCD1ePumR5>?(=p_xVdh`Yce%XoaweggL}$(n$jDKx zJo6|=Ev35g;oA=-6>oq0De@LJJ#b*Z=>_3_sfvb21Z)Q;UE7?kOnB z%uOt+j4w$o$}RqJ3Q zWqf6*Nm}~P2E!krSr*^gIt4{~7n``|CRv#JCY1*M{Qdj)0gcHofUX4t``HTn E0hgCoG5`Po diff --git a/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/_state/state-39.st b/deploy/cratedata/data/nodes/0/indices/gZc0-gawQkCZmlVZVCcyEA/_state/state-39.st new file mode 100644 index 0000000000000000000000000000000000000000..b2076cae879462e3b9c1f305b20b360931dbf4c1 GIT binary patch literal 818 zcmcD&o+Hj$T#{Il%D}+D2*OsHT&%zPa#P|{ON!%jQ%e$45=#<)wUwn76=&w>sW7%o zEXpq}$;?ZS&nwN1FV09TN+~|k0ye@qzaTZQy*RZ5BwhS#W@cVWYK2~6X-R&3YDGa} zUP^pXYC%qBa$>QIk#1s6&LoI}0BuT2 zEsD=igB##rFcn=2;uHrHsHp`-`DK|YsVVV!iMgqMX#VMhXf7?yObJboN;c3X083bEYIu6BPq{X*TNv4t`D>R-#ER#VEen2YPp#kR~U#ZfAsxpwe7cD zapIk$Inhe7pYGJ$Jzmn-)2&?lulYriSkLS5pPSE?{hl2iztWt2MLaO2{r}I*@Uty3 zCo{1)wfNWXo`Ryx+{B{F_>$D3+~OY>fZ!)ED&vbQ^OEC%VVR!{P9(*@8jOF0X8M&o z8hbid2I&^M`n!c%##e@#q^19CF#HjkW#JuCkZe#DnQfc7N-@kt! Q(3t!J=vpv%bK&KG0N`_4@c;k- literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/_state/state-1.st b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/_state/state-1.st new file mode 100644 index 0000000000000000000000000000000000000000..688ccebf64ce15509e8888e64b859f004eccf23c GIT binary patch literal 125 zcmcD&o+Hj$T#{Il%D}+D2*OsHT&%y^3W_pw6N@U9J2UfAQY+$1OEXhKi_=pBeVvnX zL$VU{+|0`ptIYjUP0D)`b8_;N6H7Al^Wrm8el-FWmStCjqQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1TvcU9`?@Jy_wTrv;F59-FpmN zEP5%KnII`3(1TD6e*Ez;GvW>OQu33b;x$mZ4Mn~rGZ!Mx$ONHT&%xx)4M6(KQXt}N z7oh6;SoG3TDj*z=I0(%U0&)q|B#uo`m69-%OhG1 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/_0.cfs b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/_0.cfs new file mode 100644 index 0000000000000000000000000000000000000000..d776b615c799373a654bcd5fe1fa3136dc367801 GIT binary patch literal 8942 zcmd5>du$ZP8K0TGJD+{F&rfUT?*1jcoyJmOK z#EodJwjzCqR7n(7LRHeDmi|+@tbeHnfYdJ#~<@u9V5kztjbYwNGr@}MKwDtnG%AuZp+2L9sBN? z)Af6|yzudl`!1p#K;3Oo$HY-hQB7l)rWYjhak&bI3lG)*9XEd!x4(hk+WgADs92i* zaN%WxO6%deM>WG#)M?`>T`^^SSj$kVN&pRLs?WyzDH~1Qxn*A-UZS5VM zYr497*50#j{k``g?EJB#_|>~74pJ0tgLy6U?6@w=^gt}R*!G& zuws5u*7K5@1?B^S-?P7{E14WrCf&Q+Mie<1&SfEtO&bS5|ni zZGcIATvDZJxge`1bW91;p`2;X7^#7Qj4p#kX61}lC}^tDuj$hRGsVfglF4cXNl^!2 z(Aq$-UmO6&+`z{K7fDeRisB&`d=I+mPu5fV4b@p$+{^MJteCCa5_ zxs)lFvgMLoE=`q7(-w-Pg(8`=P$Y9qIuvHR2u*lN+H%n9aCYBPEA=i&?mbN-`$`kg zJ4k1s^K;-3TA_DbHq2f{?X{eO&I`CRc0cUrb~b^aKa*>+*9S^;)W3W#ZAPYEX}b4y zgv4O7PYm^iV&lPhN(`r>;(pc`?h_N^VmuXzq{8BU%03Hfnp-isD8RtV{#`C0LXNwj zXIWSGVDgR|2d(Phkh#NrQ64zhS;Kt+x zsK*Yg!J(-UlcSA5eFsbA4p>^c$mOPWFq1{gk*S;d3Axe<2yVyKzyc@1t#NHf>i}DI z169e*NtVa^Ar%t{kB4&LCOl#H z(i_{pbB#{Mx@w-!Jawt#&(DKDxDaW0X{Pu3cDy76>^bFnJ}{*mmUKC7$oj03k!K_` z7f1z`hE{>C0V$i+Wy1)hp7){aEkh96oBA9O+rmenf~XJzzR!s0CJt2Y3utBpg4DcX z4x$eqv%-nMk*xuU`Q)@h*KZ&dj7EbYQH+H}NFYrs>KPf7EQ&2a4Mcm2IhR(l&{r8! z9z((f^pPiJ+hBkL!ai9wK8tRxz3sSg7K!HE%n)kKBXj^=VgYs<vYc^+6IiBK#a0sDlbk?6$M2hrCO@mO4pgo2yU50YXcl88pcNMa-USt1E$ z1ZXia{vLWW8H~oGViIf|djR=wA>ShtU|uAo^K;XhN(A?L`w>NiHKUdZ7HwxA9)IHN zbOo{7q3tB67tL&y>#6NDr)v^@%2H{GF8mPMOm}vB;`JnJbV1%IIEi3O-o{LMDSeBr zZBa4AY7etK%<>re#7GN`wyPv`e7) zo1DjL(_NpnbC0`(&5dE}1f^b&CL)ZuI`-d)b=7;5@1?WE~a=@;G>SpE-|)2!y4 zazbvcf7%$^oKaSiEGCKyGgRA{@IF@0*_73^B`4%46&s_+8KsSaX@jh$U-}pw z7v9L~`~;%ankYFTM+t9K<>b9vC_R=)%!Svn`jN7#Wl(ZLj`B;Kksf6B%f%1t|Mw>v z8ns!Milk~V)m5z(Y-lp`7t`sDFE)9PO6kxkt0WEY8 zr3;Gyw&R09$eW&(bpxK}!8KPxYunO0oEzT5H~?2Q+gD6cRUa;KF|(XqzvsNG8g;|MgFrom4&0CL=5FAz)@j44 zwnKgSk;AvDan@N+D{|wiM(JbLgclvTX;mX_<$vX}mnJ0(0qF`X1LAVQLzV1b)y63Q z-Pf`bQAcBXivEL;rgkt|S3-l2Zf5LpuWeOZx?NiO!U%Vc6>vQ4^1x#!yjgavYJ=DV Q$qjpbQzF>(e>l8+DgXcg literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/_0.si b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/_0.si new file mode 100644 index 0000000000000000000000000000000000000000..ea34c8a036f9e7c22cccd414bafb341cd81f3cd4 GIT binary patch literal 384 zcmcD&o+B>oQ<|KbmuhYhoSL4SnpfhPmzK`}1TvcU9`?@Jy_wTrv;F59-FqN0b|7X1 zF+c>I17tHXaxvu>v-)J_l~!=JhL(DUMuxgM zAlGMSmT-a$DK1IOE#NgYGc+_eH8QX;v9vH}W{Wq_OHNB=1yaSC5Kb|pJS6-~4T4MZ xi&9hEGE;L>irw;yauZARa`RJCxtv^sL*j!2TwPrl4rok%0SZ14Xy`An2LMptav}f# literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/_1.cfe b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/_1.cfe new file mode 100644 index 0000000000000000000000000000000000000000..d8c97ee0396f86a92d446e3db114565faae35c67 GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1YX(e7XNx{?>STN!!(iq^A0g^ z@yElI#~bLSiqC=2tao7Y<^~}BWhoGGwh9Q%7|EiS0@K8P z5h}>QqL-EeRlxxjWC#HY=0T0;RE4PIJ_FL83E_x*gwPDWAnhd(j;I}kW`=tN>JX?& n5*`qF&On$$O+gMV$t-|~E6#+_j9U+AOnw1jGcZ_8u5JPV(~v^& literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/_1.cfs b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/_1.cfs new file mode 100644 index 0000000000000000000000000000000000000000..cfc5c873a5c73943048dc3f30e469576f14806cc GIT binary patch literal 9054 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 X06nzeZ`&75dv4*ry?yhIx4r)Z27#+3 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/_1.si b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/_1.si new file mode 100644 index 0000000000000000000000000000000000000000..684741e643e270eb6517e0cce54fca279ef1c41c GIT binary patch literal 384 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 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/_2.si b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/_2.si new file mode 100644 index 0000000000000000000000000000000000000000..291621ef71a517992cb23a1d1778afd109b85330 GIT binary patch literal 384 zcmcD&o+B>oQ<|KbmuhYhoSL4SnpfhPmzK`}1YX(e7XNx{?>STN!!(iq^NxYU*nyZ4 z!~hX+4v5dl#gt#n>XVsQTEU%_SeB?)mYSE6UnJyTl$e~8s^FYoRFGekSdy8a#{-ov zDh6^m4fQPa4B`zf4EZ6#xj>Cz87?DJJ)p2|lA$qQ4%me-8CG*WLp=lb{9?VtqT~$L z#M~4!6A`fPqSCyQ%-mF%LSDGxAXC_i^Gl18Q(4n;N{chNfV!a;37Y5`TIv}Z8S3VM zT%Vm;!U-~@xFj*RfY;E>(9qn}*woy_+|-bnHQq?CIFk)XCa0xBsA5KWNcfo=1efF& wrKY%Lrskv+yX6<s=BK1`Ik^Uh#0Lksy1FnN(3t!J6nr4CHRse90E$0!C;$Ke literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/segments_5 b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/segments_5 new file mode 100644 index 0000000000000000000000000000000000000000..5126560d26fba98553af228ded638c664104c999 GIT binary patch literal 448 zcmcD&o+HjtoSL4SnpaZHz`(%nmA!89uebJ|Gxa`96Zt>yDx)boBLh271_T6wm>GnD zVodP{GMe`u_RiV8nbTjh{pT9pdmKKc$*Fm%<_7Z*$7SZ zG2%6|3*_V{C+5T_XQU=)7vyK=l`tC1Ndm*f{!Lev;~ z2N}9X=$eK^WLB9~_+^y^r~A8?3&Rac2ZmEoVo7Fx9-|3+ab;dI&`vR@fU4xMAkX5! pAaCPfpAu*DC`WUzaxReTic<^Y^YR&u4`@t&0S-YR5qfa`A^-x!!lM8H literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/write.lock b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/index/write.lock new file mode 100644 index 0000000..e69de29 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/translog/translog-1.ckp b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/translog/translog-1.ckp new file mode 100644 index 0000000000000000000000000000000000000000..3745089dcc4dc95c1ed2af64510091c3d7e43e29 GIT binary patch literal 80 vcmcD&o+HkjoL#`cz`z8=K*0JCNI=;Pj9?)I0pr8z0~(WGz@&Zk1789FIKKzt literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/translog/translog-1.tlog b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/translog/translog-1.tlog new file mode 100644 index 0000000000000000000000000000000000000000..0f5fca0fc554fc4db620d2e5f6805c19f6ee4046 GIT binary patch literal 1505 zcmc(f-)_?|6vn#&Vh@1ew#s$eIEnMexj|c}X%|J?SV3shRJn=US|oO4JMFq@5*OTa z%~Jp`18>1Az{#3y(-1Hu1ePkb@yU12XaBxF{gOS|Fp3JD$!V+AT8Gc$?fx>GA2{w| z&_}y+Z@1h^`-4r`JYC;-Gasyl$oLMkZR4^7+q@(WI{7;Duts`@nmLQbS%SjHsT^>r&jFvzT+YkcnB5<%Tgr_ zs%OR&I<{@Yw6Q@CCIp!gPhqcAA{JB4yIC6VO(utz!_;^#xhdnPO4soKBjwNVbi40y`4%psmCae{zQ%|H+DHjw>|6HdYW?yo+wE8r;(1ya# z*m99Wy2$Oi!O#g~(}gsm%*RZ@+4rgwH`J8S&XNTa)&=0UT5GLu z^=h6p8*kpe|J-Wb3xK`N-COJ}!u^K5uMhqWdjrl=CT4PS#b4!jh2~xGbCKtu@E7>? zfZ9I*Fmoy{{ttH;MPV2a68R1xEBtWexef_Y1O`X9QT9IuO_Aqr!RWAASzXRS#N|McPAck@Em ANdN!< literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-2.ckp b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/translog/translog-2.ckp similarity index 100% rename from deploy/cratedata/data/nodes/0/indices/8VBUBMiNRnm9LPxVv006jQ/1/translog/translog-2.ckp rename to deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/translog/translog-2.ckp diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/translog/translog-2.tlog b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/translog/translog-2.tlog new file mode 100644 index 0000000000000000000000000000000000000000..74c88a60e6bbd8bec45ae21ad41ecdd1f1a132bf GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgoW#C( zXYiqX2Zh}D5MFrUg`P@(Obn5*AX+dm98UfJ=bSpf{_>al(>u{C8)~;2jYbFXyZhj1 zS6`jr{FEP|NAAg^=6-c_d~Yhv*-y-%=rI)Iy;~yWs z%$DYb@_HV$zcLHGRdJn_+3czE&y8I@R#vU_M%$Q8GF4Sxhme&o`@cu7vC;3~!s!bW zueGn0tspZ*uXViF=VuR^rE5GyRS0^FX}(uGb_-RTm^98BZx-w9he>wnT%DCmRR=xE zqS@%Vv6cQlD=}j^A{Yq-2Yf(vq2cN}#%(BPvr0uZ4N+C`@Ve1SZVHN%3>pBBxv3zx z@wT+9U=Hi5e6n1gzOJ?Fx9o1MowsnUhKbnlroqB%70s1ixXs4dFm--4+cuYwShIzNgtYz#@RX8MDJ30=W@yzp(4)<%+nDQDyD>Sgb8Ajz@ZnD z%&JY&Ol7ZC6UOcAQrY9#_+8`ftCD;u)W5M~VXt`MA4+>5;3`vpw6d$p&o-mRQXTbUNoSlBM0q0DlGi$g>Xk$i?k zNoh&Y89b@FQl?gywGLYsZL_)5J}Wt!rfrQXHZbwbZ8Zo2x$XI2^k;XvK!Q4*gI|CA z;%C74bHMoQo4;dx{g8asWBl9g{|4h@qbqIKZrPJeQ^PIg@8tL<=)y9_8^T(X#L)l4 zC`AQFk^+#JvUV{Al>jN0l)}#K8T}f*iEcA~2K|kV?MQtC{(m5nBFQmF9JFLdkDvk< zOd=sAlN~Nl2NjfvTyi4Xl}~922KYqEj+6ISn`j41iHHP3F+%J$C#feeqrf=XTfVQd Wf14lpp56eTTP;1KgU>$x{ncL_xhNn2 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/translog/translog-4.tlog b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/0/translog/translog-4.tlog new file mode 100644 index 0000000000000000000000000000000000000000..74c88a60e6bbd8bec45ae21ad41ecdd1f1a132bf GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgoqQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1TvcU9`?@Jy_wTrv;F59-P;UY zEP5%KnII`3(1TD6e*Ez;GvW>OQu33b;x$luGKzdjW-dgWksm_y<-z354M6(KQXt~| zwGf&~mPIcur2@hcoCTp7LO?Eonk4uRBFN|jGszTWQb}e3L|oVaD*pjwQVE13ssN!` puEI1yt%n*a`4uA1ITNTU4=SkK2NC2xb3kMA3kaKmA#-uO6#zneLX7|b literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/_0.cfs b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/_0.cfs new file mode 100644 index 0000000000000000000000000000000000000000..c15653b69fd5f9c7a02f6dae7fd0ad8453e2f9e2 GIT binary patch literal 12138 zcmdT~eQ+Dcb>H1v0HpW--evXiA3^nxH|x}Te&1f*REV~M5-Q3R@ozP06_o; z9PSPvsfooZGjij!u`}tUQ>StBN58Dm*r~rX<4$8+n!25ir;|=wr(?IaTX#BD`lVTdUZ*h0j;e((;TQlrRdwaY4-rL{4eY^Me5eL7Q>)UeJN~oGD@uP)&v0!P*F~w96 zq#d7o=bwJ#cmCx0_9LHr^hf6h-bM$3`Zk+d<|hgn%{0afrMzN3psv6{@%V;cC&4H1 zmcPQU-ubnEV`5nvICk(oCavEcd!k^N87*x*Sjw1cX{?Z7RP_KhxYW};*>gMDOMU)8 zTl=k*bJQrm}>&o;Da$F*5}XbNH77O7KJT@@NJ3Mhjct_{Yw! zmx3R8>Rny^!H;X|FL4-SKdc!>gzN8^tYpkZwUkq|B#2YEp#Qj4$|Po?k_@Pu#;jDq zDj8-;F${H2SQNVM%@s-+#cA0znV8Mwa_TaLRF$5#rTg$W#w3jbKfocYqz%K8Wd?G| z;UlTkqzO7RCzMha7IL^yR7=YKmL!&zF^U;e$xR!Un!K|m?V_c!Da;m1nhl4*WD&P_ zWBtG|$uzfb^N@q%0Yy{NYF^b$=$PZu!mMc)jp3o8L`emOm(@fepD$>}V4;*ADq1tS zOd?sxD;aGFG*}o45As96n2#h7mavSYIDwN`#VMS|vv>|?aUN^9h;>}T1~##U%eaE) z@d94#hc#)QghvSaDgPaO4wg1WQ}Z;nNYXT&r)iC*i!`m%bcv=-nzm@VOw$#bo~P*r znqK6rB}~e+9HwQFmL*!ArR6zV&eC$8mNi-~(y~s=C0d@})f}bUdiPI{_Qvd_G{Rvl z;0PA0+Kb^hp7H3A=})iM+%|XU#!_4hn9(o7QNSByWG{SyS-jtp1Qm?)!qGVj5zVSk4pQA zOywAr<5ZrZa)Qb!DyOMzanX+{QK>3WH9}RHsxhj@sX9Z|1XYt%g{~A;(^NI6YEspr zYMH7FR9)QRLD%paTN_+N#{L2hcbcA|v-`QZGd`N#PxJeUMzuMr!Lvwos`FG2Q(d5X zgz6&IC92C*k5XNw`YhGwsGg;Ip6VLai&O{t64ec=n^dn*eV*zIRA0Qk0dal9r?Hz} z#+>nOA7?&FiA61*T48Dl)QV6`q?SyrD79kLic@QbS_x_;sijgYMXfZoveYt2g;sc4 z3Db%|D-l`|X+@$HnO0)75~r1!o%NV&>ceYY0z?kI2Ip0lWRoPTl5C1((UEJ2nb&qAJqtU)dkV}UakW*{dZry!>x zTae3;E096N!U8cCIb)G$GtoFxi$RV`oEnaVfJhy>8mti*;))QQnBiY4Bld(U;Z5$+UL2*a1`bI#_IPgBcgLy5pie>CM zQvB~%{?po*%feWC;gOZxQ%#e1I1Q1bHeP z9p)p$5`Wxjj12Jdln|~q3ZBN;6dxTH#o-8loS_SR5m#Nk;ATwT0cGK3S9$pbapXw~ zJq=!SotNy#=XfxJQje~M!&hyQ*OuPY&+Xc<9NK2Bj?(I z?F}c_UG8??!h6W!dPjv%j6Gym7Qx_&@fGXAku3xV%M}f6AU5htsPnf4YDV}sqqhJLrZ_HO%Zx99$9dC#0l=af0_HI85H9Jz}b$4)n>FliP_ zYH~cI=90!ZT-5K=lIlD_!SzuIMBrA8(J;FlUuyTtyzj+t$V_I__{~Z-hd7Xi14}Se zHNnY7Fq6WK{K6QtP`uREhL`M4K6|0R4DJ%ryl*1O~Rllb2AJ#YW5 zg0-u?V%95(a1>v9=#67%q5G1eT|Eo^ASlZOF)1JnUqqcyJ`DK`WG^@1p!i}ZLKn}# zH;5xIU=JT%LO6pyk1vT=rtn|C`Rc=X$GuaXP!+*)BYm<-qyH<-8sBWv7my-viPz8@Rp{WK9S zwa@RPTkyZ)O4tgHJxPqMypCeQ`(G!?t-~^!^Xq=zZ~1GrGkLAas1IIk(s;a?B96aY zrHmd{%3sFc!Y|^##P8w{@R!K<$#wFZ+|yv@EaC5XcMSL9#ASwJ$4a}<*)@%ua0x;$ z$dAZ|_rHJs{0Db6I41o+_MZx+G8LtyP8({eoJpuf#heWdhZ@6Hp#vc$nJlS>5gI<# zfj-zc3L#pvv;f4OI3G|!_zuEvKgXkMT&Tep{6$ne3=zg$#vDUeM(l$<^o0YVnL;5K z8cr!WLp=~OGkJA7!;Y5Fa9ENAJ`(1mJR}ef5yONEV>WjJkDwp)fQtwyAkdaE7p5~w zpsf$+ok!di)B|h$_snGlVhFaWnxUX;+iyM^S4O%7ll3~h6P~|eTL@; z(U`=`5onR+2&+WmaUd0VxevO-2Kp=??L&Jb!Xb1>ip$af+8dPz&@m|xzwLX&N6_=(`yRQ{R#q}OWhSQ@#e%6>`5Cno8kVKOXUK=dR7?vd8)7be=nFXb z(c@eJ!p;3(_dU){ChV`{;~aVck*B%fmpOudh_+5Y!krGsd0B`Ek8rmI+Bx(d37+OU zzFYGNyq^ZoaH)IZv9NHOLlj|w%thsRED}4#{e)}uBu?O9g=@o?IYAbLKO)DXQPA_x zb9cnWJ~Re=@on6Q7>UOIlcYgRI2Qjy^6cS^ra}-JqR;0@+p{+=7w3q7w{#97;~$?R z2Vd&{t+;>6az5>MLC-T}$F#u1q8;$}2cIF^CaR(9KlcUq`4c5kmSE9i5PcmdbFw5w z3r>{YD!hy|Z`yPF+q&L3Vpekc1IPI866 z{CIp%c1(irWvA+?dE>#cRyb*E68mzq6t@dldxW~UW+I$Z*r8(u<7M<4S*2MLoW`GV z%7{}IJ;WQ__k&CB+l|sCbW!Rzx=@fh(*$p`CNZGgC^##AaA`(Q-h18;PRl4bEq-uX zR+_&nnazg@*w|bLF1zK7NEvNQ9qe-`7o0NXlXx_`XibdL9JlITT3VeN5GH>49R<59W$*x6`wX8K3U9nKM zGf|M18=d`uFgs1`zJ@2h$J4~H^)_D%50(AOXj`s@i{>7O)#vaXa_X#TxfU*=tFdtp zV^4FGjx+qV17z3?Qx}>Y4bWRm~+7a%2ZSZrR z!CInp30;)Wdl)-gqjX7EN4eh?iZ3|A?{VrMI(1gGMClT`C_nNr`kSNlP}r}Gx20Wn zICQRXXO|GiUaP&WP%aZXD2Zd(RmQeY3#H#ixhy>3)ZIPJsx48vgf7Z1TL24RUBB+V zZC*I?`g6=N+ic%9Wxg8ixlc`zO&Iz?tWpaOlV*fU0Fjf7D zPMdp+U5U)FQmM>5=1~Cdr24d00LaxNt15h#D||Ul*-UzrUy;rgkK4MYi=|9nDJ@LH zFMaZGR@{P7*d(e~R^~lb)dLTN+NR6!yB7GF4OrQ&7&B$GTps_T|W1=eouju!DYT*Sbd8 z;b;>=jcWJ0M!L!U<){+^%_M`jWE&7lA!e#>T-VB2{z<^5Tj3aWPN&#k;HH@#jLo-V zgbsF?IT75Rb*`6tyRH@D_2vKlw@+{J)*pT7h2Q%>Sqij1 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/_0.si b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/_0.si new file mode 100644 index 0000000000000000000000000000000000000000..c2f425ca629bd7419e848ab74d430e438ef270c2 GIT binary patch literal 384 zcmcD&o+B>oQ<|KbmuhYhoSL4SnpfhPmzK`}1TvcU9`?@Jy_wTrv;F59-P<5Bb|7X1 zF+c>I17tHZaxvu>v-)J_l~!=JhL(DUMuxgM zAlGMSmT-a$DK1IOE#NgYGc+_eH8QX;HZnD4W{Wq_OHNB=1yaSC5Kb|pJS6-~4T4MZ xi&9hEGE;L>irw;yauZARa`RJCxtv^sL*j!2TwPrl4rok%0SZ14F!d9B4**9gan=9; literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/_1.cfe b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/_1.cfe new file mode 100644 index 0000000000000000000000000000000000000000..94e54a0ef5151a5bc52bc33d634f04b98e45cbd7 GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1TvcU9`?@Jy_wTrv;F59-Mb82 z{P8g5@dkP+`N<$vK%fVq7}`+eOEPnz;#(jzYZ^@6+yJD%ECnLYCIz7xH?ruZz%;R+ zh6+lu=%uApKsX#vAT&b=P%sZ_Jf{UjkXsX^JrlwaNrbBO18FaT3a*FHOy|%X0yRmz l79!6n4U;zoIkY6R03xn1141+Q9?+Ql0>WlsSnCxP4*-gdLAL+^ literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/_1.cfs b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/_1.cfs new file mode 100644 index 0000000000000000000000000000000000000000..ba40c4ae23b1e44510ea5dd15977bc64fa4697ae GIT binary patch literal 8757 zcmd5>eQX;^6`z^)S7JL(?6__EMerfGgErncPFx#Mdrgz7qP<{giGZ2oh60mn1ihTmQ9 z3195}?_CEW5sMkQN`d z;n~?K6YORlk@P2lEjOj;O3heMWJ9(F!3cTx_qE9FZD!c7-zSSJo&Tpl)bd|-35AH z#_jVmBf{x^R4UhGqur;09kdxSFYW<}4`8lR9r)8~O}My0 zk_u?CY$#c>EU39!DMfjjcgHemJ*W5A0r-EP&>x4I6?Y!XHRlGNVq5l@bHT3t;B1&K z*d}|y#>69xJ-8kS;5zMrzPeQ*dIF`$ zCSZd$zJiy~3H(Yvdc8h_tJQewhfaP%Jow6qSMp2HePyOvU4njKFVR6^p{aylQ29lNU-wu2e9*;(Z&EFyp2kWc1SjcVEuzMTtiY+5(z8L=&n zi^qX*zN#w~NngxEgjb;!|PhhAhV{qSe1L$wWfXiZk`9Tn!2VGBWtn^ zh{vN!6}fj^8>4Y;>|2YdBb1+|;ZvU4!GH@+aO4}f z|MESd{PuyrS*gFRJUng=<=H)_HIlE_;U3{Zr29K_;_c73Kge5fdnQ9tnF8TEI68 znx+>ORf23;A~%V=!dWzJT~!a`08W}^OFV-i z6+21tkb)h!F-fLhXk63xlfl9C8;Hmxa)6}#?_hKhcTJLCIrDw*;BC1m>P`I{N1h`3+~Ig#EqET%;PeOk;MC*f(-H+UHdM^Qv3B=S`h zi5MiadDtLFY^Cn;=J!5`73khz>2ybmg>H;un+&`o%>uWjm6I15&O&JT2bV&t(0dgv zyq&e1uptl%3ys5@QE3Giy{1BWDZaOf-e{)S+ZS0q!s==Rfe^%{cG+F$Z!0wiaxG7; zbfHM&TIL|qSE?u(ha`g!k__XJWbi?fflHtOT6mjFr1PMRz3y}8@EYZX;-T1%bB|d# zgceyn$m;L0npPd>&VhXBa}LJ-wsUu`vBlspE0@6M+S7TiFR}qwpKBjOUSRd7Sbde% zwCXrl4&-xv+rj8@b4J>4`7;M{PTqD(@Vd{FLmM@f(Q!?q49bP`HU3LO#47XTK(6gy z9gIPDEt{dMuLj?aH<@s*<$I37I<5u>@}d9ZWbEj90JKwY4i5V2lwfVo2U=67l(@UK zn#Q&FdB-)SowRV_Ub~4tU^T5eT8jg@wLWw(#vYcI5ItIj3y<4P+{5U!>ZD}@$h5?8 z4{8*@yOzz+)jf~x4;*8n**SnSjiFZ2k^}kByBv(6&RTNl>RO7nQ2YfZ{4i^ubqv)S51I4YaHaq4%QQ5K-TNCq&(yE>Bfl^?H4UPDSP*W&354xm7#c*+ zITxb$steKgoEz~i7oz`;3o&@cg&2C%g&4lzLX0fA5M!rZi2avbi1BM~#E&du=Ablx o7N5tj<{9 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/_1.si b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/_1.si new file mode 100644 index 0000000000000000000000000000000000000000..d84ef6b860dd1f845320c2ea664a0701651b7bae GIT binary patch literal 384 zcmcD&o+B>oQ<|KbmuhYhoSL4SnpfhPmzK`}1TvcU9`?@Jy_wTrv;F59-Mb($b|7X1 zF+c>I17tHXaxvu>v-)J_l~!=JhL(DUMuxgM zAlGMSmT-a$DK1IOE#NgYGc+_eH8QX;H8e73W{Wq}OHM0>P^qjyUU4R)JS6-~4T4MZ xi&9hEGE;L>irw;yauZARa`RJCxtv^sL*j!2TwPrl4rok%0SZ14s5-Sh8~{#Xa;pFU literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/_2.cfe b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/_2.cfe new file mode 100644 index 0000000000000000000000000000000000000000..7709391aa876f77c3dcc47fa2c46aa60a9562b8e GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1YX(e7XNx{?>STN!!(iq^Nurc z@yA1yn;XO%=%tjUfK&m29)w~vWYJ4YDS>k0AvDttpkQ7ugu@~Zp}93#^inc2Asl`O z2+iON(p~`-?1c)3!0a>y+nJvXm4678&qI+f$%NV@;17{!)rHAJ-3*l%t%1mMa)Vp~ l6_jg-2r@FjG=VKG$t-|~%fsY*4`@t&0TE+hs4>381ON&PK$`#n literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/_2.cfs b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/_2.cfs new file mode 100644 index 0000000000000000000000000000000000000000..752fd7df4e81ca327fa464a8b6a4704478758689 GIT binary patch literal 8484 zcmd5>e{3699e?lqGjS3pw$nDWT~k-1L!{36cWnNMmXu0eQyMK{NG++k*ys3K`_8*N zrwe6L)FBWc{wZ1!{1KRjCV>EnRUNPi(G|2orTx3XkOrDig+Pc*R7L6^E8pk4cX>IV zovLyqKgoXYec$)T=Y8*c&)@I!^n2C4k-0`ul*KeZtJLaBLoOW`bOAwo>f+B|zW?v( zli!PNUW+`~cpFUv_o%_0<&P`HXM}1))Y`H4Q_cdPsOWlK%TG=gRZ-BTRk5hlYKpAI z6m?~?-dL_m#gbAJBzf}7qN+^BWBg=g^l3o`;`pMd>En_-ezu`X#mdveXUgRTT@^)r zUQjPe^2(Xeq&Ye*$ij+P6J>oeNDb;B9V=EUZlx~DN+iL@bI17PF@9>1&*oF9e3Cz# z2+c`iNt7!}S<_WP)5P)A+@Xdl=j9bmI#w;^?I!cpR3or(Nzwsr6;LjC4RB{~KJlG@ z5YLhJt7mRpAPze~-MgSGs#rQ9iPe&JLeO;6Z@9(H>+6_99QT6v?q_hYJo8}o5}x_v zAHV>SeiltL=K9@*jGwEzHJ{6xxWn;-~D$7r0rV^<{ zDwE4BO+;m(_IdPQWDCJV*n1YCZ{m+oQBl;ABnuE;(fqk{%joxfE;p6TT_71SE_3(irmj_1|?b31z86_Iz{yy~I8 zb-}|#97Ye!#vPm&)uzzAqUrF4Y9|!6Cg`zpv-8vUp&gsnD3_(@Fpqo?;m;Oi1tWwl z<&RP2*7@V4JL2>A=EqN+h`x_8HF zsP%~OaM(=&xZC;O_K4a#aT{NjZ>Ns>x~(3{fcBUtRm|+oqsrUUphqca^8hstTVGFO z-b*o?y?L~+`Fk35|JIL9KSCZF$6VXMvIS^cJ{o}7?={}jKu`Oj&-(cs=xLlj}iw%)0>brh(kS%bi|g+NTuMeyat@x4XKYf+|$nRQ)i6qM%FPVPEcEdt| z9A;+r7Vc?JhlSP@GO{ayhuvPtW+5vb?P-UwiE`$hmo`YEypJZz^NJ+vX0m%)Y*RzK z@pS)f98@De*p_woPyg=>QFf4K$M$ORBq_8YhiokuAw&^IdHA4LJS@PKqp$yo=p3Uu zX+Hi1Rf3Ec5@@G{-YnbGe1Yf24|7M{90J$v_!ePaKCgO43z ztqm>z`76!3VFq5$i;GZEE<#qV9hZtam~q+b2F47L+V709sbU9|>(~{xjs%Rk^T>7B zUN#%#F}7$oNI|o7H)cm2t^$meCwICKFxZZ?Tu)HNt>w9~vhoObBTdOqz0KhU*Wg_Z z{#iGCE_ldS$=m!+_>3;=H~VBC9f;Ow#TseWNVi4}YqV;O)~LD+C1ujqsA7#SSR*-t z9oiG;$s>J;<~rtl3uL(Nu>F?DAP1UvJ;wOcjyFEdwV@E^K5zj#D|V~_!rX=%R_sw^ zpL;QPpYX9^#g6@$d&>jsW{jDg4|5+AszaIr|e;Q<5t7V9L>yaD*53kwYh+0Zd5_(){TqpO=@12 zP@0Dh%s$7=2VKmSghhwn5nCe^xTrwGHo7%Um?Nq@Y0j$_2SQM{8EtxG1FRFVp^8a&|i=ly9(tJ4GIrzBuzso{=C! zRs+$>J=8OWtJZCe)iT;GZ;=CwG^(5)gg2X1oQ<|KbmuhYhoSL4SnpfhPmzK`}1YX(e7XNx{?>STN!!(iq^NxeW*nyZ4 z!~hX+4v5dl#gt#n>XVsQTEU%_SeB?)mYSE6UnJyTl$e~8s^FYoRFGekSdy8a#{-ov zDh6^m4fQPa4B`zf4EZ6#xj>Cz87?DJJ)p2|lA$qQ4%me-8CG*WLp=lb{9?VtqT~$L z#M~4!6A`fPqSCyQ%-mF%LSDGxAXC_i^Gl18Q(4n;N{chNfV!a;37Y5`TIv}Z8S3VM zT%Vm;!U-~@xFj*RfY;E>(9qn}*woy_($I{VHQq?CIFk)XCa0xBsA5KWNcfo=1efF& wrKY%Lrskv+yX6<s=BK1`Ik^Uh#0Lksy1FnN(3t!J6nr4iS5tQu0E=RCq5uE@ literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/segments_5 b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/index/segments_5 new file mode 100644 index 0000000000000000000000000000000000000000..d48269b946ab327c54b8ebe45a0a3ed5e5789410 GIT binary patch literal 448 zcmcD&o+HjtoSL4SnpaZHz`(%nmA!89uebJ|Gxa`96Zt>y3Zp4IBLh271_T6wm>GnD zVodP{GMe`u_RiV8nbTjh{pT9p+Z;Zn$*Fm%<_71XOiPVVEG@~8&rFFg$;?eHE=kNS zVA3_@Eh$ROE6&MJk1s9FOc5*2s`M}LjH(JMO)LwDcL_6%$S$o)=gG({F3B&dgs2HK zNpns02&o7%taNwF4e?LPGR`p%6owm=4h*NF#FEVXJVq1t;>x^apq*mjNoJ+Vf#F^u pX}X!AMwJ1%k-FJ=r1_nkb4Wn3~3>eLLKx6U?nB*jhzYhQ(YY0OC literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/translog/translog-1.tlog b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/translog/translog-1.tlog new file mode 100644 index 0000000000000000000000000000000000000000..04bfee0bb08c1ac1296252865435e158b020f323 GIT binary patch literal 3934 zcmc&%&2A$_5KgiSLaVPU19WN}!bM3L3;wC!fcGuBK`LcHQN z*aJr-E}Yw{mnw%--*;pCay|KQ1Cc=jZlhP#gm zc_&l@nMdZYw_iE~eJ)eg%T#)%`)VT1$O)XzflOcMc=(Bou2%ecql`@Yje`hxzBzX!}nPsYhDY=Zcm-J<%jg4`Xr@B9K zzG^zBNfJ51Kt`ErI!2FGPsgG9(g`qQ1i2V_2o~glsC@-nN5)LDpwkJZk?qXL(6pwx zvf*Ji3WrH`W&5U7Q7J>=IRglHApTG^5PwgOyE`~{L zQE7pwV?Y8k;*2CiSzNPN}YhSwneLvCWjk$ zl8J(Vz}#YOZv0)Y%2NIC?H}L&2poR{G;V#oK;viVsG{-LZ`}=zKZ=r6%aX?StOdcZ zr0@c3u|S--WDVBN5$I;x=CRHu+Q_Jv<;r%TdtpW#Aku=lB zXWgSl_s^eShd|lIt6f3YS%ct&6!`W$U}eoeK`S$46&0hX>-hyqpcw3nIe72sSV0Gb zR=)z_{E*-Pxd9{BBAl&<@XZS0`8SUqfKc@;!sA7RUkcT$I})mHf25;G)l$XQL^%MQ zyX$DvS}2FUk;?l6H{}d8!Y@{VKF%1l<$r^Frbqh|0Cp+?*;ifZ3Upi5q0Gay5Dd;Z zK)vYGltT}haf&ls$pz&;LWMAJMsX<@6mafVzLa_;K|oevV;O>Rw6vKvH%vv3*k{dH{dPQ zSI&#eL)=Uh#8Q-ch|w^!Trh^=#TSutvQvTY%^iVn zPpeSHqhwH`uR(9I!CU;T0^f(vcSbTDg4T9n5`?ioShCm`qgx$amNM7`SHE>ojEV4x uM}=^U{^n61BZ}-F@-CbFQq0Dz>{ZyjIri-#6<)s9n6)2PNPYSn`RO0hZ`4Kr literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/translog/translog-2.ckp b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/translog/translog-2.ckp new file mode 100644 index 0000000000000000000000000000000000000000..773b8621da22246b3f025fbb8e95183328eed593 GIT binary patch literal 80 ucmcD&o+HkjoL#`cz`z8=AfOGQz$DXuGys)jfzpfzG$y}*sn`F;8w&uEa~AOc literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/translog/translog-2.tlog b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/translog/translog-2.tlog new file mode 100644 index 0000000000000000000000000000000000000000..b872e886f2476f7cbe30d1e81e4a8fe13c241408 GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgo^BpAU=AO}jb;-DE1XiRnCr)e3dBioA*2nmTr5J6+lp;xV~! z=Ll~Aliid>TwtUqQRee+=9^4jd{NI2yye;{vlt8pdvHB-A2vtL+u8QCuTsuxnY0hWjPTQE<%d zO6tWsuK7aLLVGkqysE5l4&}GI$JeIS-frN)*^TsDVHMXED4n-L_?J69no3a#y)<)3 zaOcD@e!xvl$(8gSWY$_)F43nE^0F3%)Rp*%azbf{BZ3)*0JdpuDL}pSzHxaFc;Wm6 zj*Sqs37|q&kZrBb^}@-qs`8`x{Oqoy-c_!;`U>o7_a~{ef_u3ZrKxM9-Ne{M(6rYe ztW3?N4#1%a$OH!u#r&q}5Pz5G_+ZRSqYEhGt?9bDOeZuZI159TP!^GtjAAy4Sj=#m zq+uM!NtRrVkmhvyfNQI>_2CCRP; z2_r&75@ylW=s(-Imk|=N2s)$D4wYpThnU70rN3E(5pWS=mc+d*#RLq-G0j-7`bS$= zV7#B^u~D0a(YsBM+IbEun4=JrY>cBZPR}vR<2aA-3`Wh@Tq=I8glmk~ZG9~)?9HUx g7SDYPlR>5tz=OZ#J{}Ez_R+uC@9%qGe|-M-3yuf~sQ>@~ literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/translog/translog-4.tlog b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/1/translog/translog-4.tlog new file mode 100644 index 0000000000000000000000000000000000000000..b872e886f2476f7cbe30d1e81e4a8fe13c241408 GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgoqQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1TvcU9`?@Jy_wTrv;F59-CGP? zEP5%KnII`3(1TD6zWnhpGvW>OQu33b;?+<(4@JHtGZ!lU5<;^T!{p5kK>Ev4AmZ#X z5SlTCMK3L-0>a@q0HGN|KrVrr#3=$*$pACS6l79KW&uQ;3nsr6WKs!4kozQrX4(PM m1hpP&C|@H)o-+`rDGw?rehI4i%mIzbFCc6N2D?c!{{a9&ze1z{ literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_0.cfs b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_0.cfs new file mode 100644 index 0000000000000000000000000000000000000000..c816b6a64b0d44a2ff04fe03c3e93253670b090a GIT binary patch literal 9134 zcmd5>ZD?E989wLe!?I;Zwq(a~5@)G0)`eL1y}puVX&)wW7U-G}Gn~~K(jQ1EzOUSLI_>y(!EFb z9OX*BQsSV14qTmc-t&Gu=lgw+Wo47)T4|aY zkiScnjd0U*x@oD}l6llnEydWc7bsVw{T|Mp6UffT$S!{%*cIyT3HSDGiu4aeV}nDR zhqsJu-L`#n$5-6eNTyACzm@ z7Yl(+*-~{4WAY60Jr=oReKLC*52f|Z?|&5TD>>wm@ce1jI;$8ZSt~lENbs0#sD)*x zwmY`hD63jxpI$1#Kq*GzsIufV1@MAX`2HT-(6TU!YNAxk9$8$Rx1g`qoNSx~k!)E$ zlgq26Qm#^xt+S5EuKq?ghyHkUf{7iHHF-%XE1KoBEKM$3R>jOtOcV?SI<}$|^m19( z%yHdVnyA?Ml3FP0Wm(lGpga16I4(?7C69cB5f+Ik5pjx$X(FB^Vws4ih-hGmNCJ^W zB25x0Nu(5!mWgzNNE(qUI72c5$%rJAB$*V+ER)O$lF>+}g7YN5Nb*Z0Z%!zNrF!ijFIqPyH-o?rn`)sK zlNY+6xRHIe5#CLhTnT~xb(?Stmm|W-q?uXc_4rlWA%k7YE`dhC{~)QJA`Uc}Emh=KRKh<81R z!J8h$t`|Irp(`H5?sq(hJr_KPvDXM1h@$C;5iABz1WyHpVDHa}y}7=N!(P1^`M^Wp z*6SX`ZRe`Q^g(&$=lE6pHolDifp6oVlHZfRkiV1vKr2o7NA5*?BKl^6qS)SSBd~?L zejlu@VS)&`8o2$9b=U96<-oJ?MfJ37C^=IxR@8!0k*(!;Hoo39jE}|TV$o1cGoF1m zjBfYOLL6ZktHA8?Yk|wGdZc>=bSDt^@H^&E+F;I{w_@McwOHK!JVx6x;Q z9r->*pLI95%OC`ft)iJlbZ6Uxd%mkkuvROxs8>hm2k06L1#+OsGV}}Rt*58QQ&L*Y zWTrA0-SUqm)8k1onUs=ZI(2+3uF2&i2)&JNp$6CO4`>EFHv{5}QVF3;_ zI9R-kUOlL43PcVNGW-*x5Am&ts)6gLSuj>!?%h|(t z{0n@|k}Vq$#i^4Re-76jHhtl9^S5tlI{fbB}UG78tJdf9QUT{^L!uNveEkjdT6L0@xN?crVS;L@hnHs7cs%5QjL<>c3<;&06-AGjgP_xC94V_my()gZr)_xiwI&o7&Y^ zKH=QJ05kl$3qZ@haz@_QH(Y{#uf<2(>((!q$r^g;m+(5voqJOcRW-Z5@GjhcLb_vGXg>sN7<;sUx{R@||mMA$RNBKXO zU{||P@?FK1Gt`)$D%55xlr=_%67y|K1$*0tau3x8hY(jj#_Hd8^6GC(l$?>HoN);T z+l4aBP;uqGtp23SSWA?gk)u555)8EqWssrb%DY&7-es&MO3uhp(h#efs7v4u1f)-H zMyNv-bpnAYp&AQ6p)KkrHuqgbb&0nhubw7a27`c5vmj#}F^=X`v|}SC2z|xr(8dWn(o5e;1T#%v9?_ zQ|Y=sJb)G2iE2RMgR$f4A=1ySD253S`fw^f3aioeF;@T{1vmhIv$3!1UaI*Z*72o< zX6pD@HyuvSfHt$xZ=B^U_6v42=phc8MWjyj+SSpRhdE}Jvru_8)X}K@Gu8i=Hk$ANq-^SFqyzjvYW6Ut z79)>j8xX%AUbK|{jvkEK|B?fb!ZGU2Ez B4<7&k diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_1.cfe b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_1.cfe new file mode 100644 index 0000000000000000000000000000000000000000..021d94871cb0c24ee2ff6b986b2fbd152646c84c GIT binary patch literal 331 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 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_1.si b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_1.si new file mode 100644 index 0000000000000000000000000000000000000000..c31886374e0f7ff80d5514c6280b7326904c227e GIT binary patch literal 384 zcmcD&o+B>oQ<|KbmuhYhoSL4SnpfhPmzK`}1TvcU9`?@Jy_wTrv;F59-TNRhb|7X1 zF+c>I17tHXaxvu>v-)J_l~!=JhL(DUMuxgM zAlGMSmT-a$DK1IOE#NgYGc+_eH8QX;H8QbaW{Wq}OHM0>P^qjyUU4R)JS6-~4T4MZ xi&9hEGE;L>irw;yauZARa`RJCxtv^sL*j!2TwPrl4rok%0SZ14_qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1YX(e7XNx{?>STN!!(iq^A0m` z@yA1yn;XO%=%tjUfK&m29)w~%&!U%>QUc}th0rXjK*79R2!~AxLUU`f=%r+4LO6on z5Sqacq`d+vI1?%u0<+T;Y-fHlRQ@egeg%qrNhZ`Lp{Wpg>qjtosGFhke&rB(PGgWu mpn~D6AcBl`Fil`fOEL=};t?+(G&9cujmc0p1H(FT_g?_DSwwmO literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_2.cfs b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_2.cfs new file mode 100644 index 0000000000000000000000000000000000000000..78d77d5eb00d07ac1eb65d49cf06ac9a7f553c9c GIT binary patch literal 23556 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 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_3.cfe b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_3.cfe new file mode 100644 index 0000000000000000000000000000000000000000..e41a38b790879d1cc53a530f2fad5e7d1ff507b6 GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1YX(e7XNx{?>STN!!(iq^NuiZ zvFN3xRDh&_Ko3GOgz(2h%rG~IH_%HdOM!|vL1@N}FnLq3e10-SoXHrft_?-LBr_K( zzY{{UroiN(=0oK6_h-nG5H0A&A_l)+G;icYNkOH literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_3.cfs b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_3.cfs new file mode 100644 index 0000000000000000000000000000000000000000..25c46d2a599adfa30bdb197d48f04ec23ed44920 GIT binary patch literal 8752 zcmd5?Z)_Y#6`z^=8{eJJKKq*g#XUe&koeZ;KW85xCvof$NSa7CL4=0O`flx8a<_Zg z-E*3RN~aYIN+Nc zKKpm7oL+Cwf4xd|#vPq$X}6v`Bo`}++029vj?79sKtZZtS!FYmOy&$lw$ueBr}kKO$@5A{(X1p@(8VpZ6w~U@6_Vj( z!K;@QP47)f17q8z)b`ZK%s@IL4Q7U=!zn5g-BXnFvvRIrT83ZS$mn_n|jOEF;hz^aD0VS_d-WhK)02>GPf=MMzeb%er^&S+P6tfx2r z(E1GwyUV;j?KU@%qT|5+^yy;Xx&pEe?s$AYO}lT zwu&~^SFxuj2yNQYf(ibnZ)Y^S>+Zw}yz4ioue|H~?UBt|BsN z>WQ)*hQh3GPyL|B8poXK%7ZT7EBOB&`A5Z2X%z%^BQR5adm7`ut6q?UJ)d!jfAA~s znZJ)I3W9T+uV7pu70FYPj(g$vEg!w*{q{W-a7a4H=*T+$kaiGb4q~j}AjS%(90WWJ zL$ij|B09?MEZp%YRm@L$FgZ9&S!xWE*b3SPUX#|Aqc@NGRp3k{XeyFlK zW0>6VfO)kzt34n>&U>MzUC8+{dD90tG2q1KASP%1P|w1TkpLlYQ0_g%VVICx0AIx* z>?Gt&2wJ#@5cFa4Iv9jq0?>sO!Q=vrKfaHsybqD?2ze?Rg8-;3M_(5qAIHFgcJT%7 zU+M*1o9K#TaxD%pJGSgw4<>gg$2G)UnNG-)KZ|SZOVJOyg_T}-HSbp}Ip1W5AiSPI zDMokM<+M<{6Uv6UV_$wod3lVLy+9)#Hx+~-mI;-m_^xHv%BK`7ev#2ZM#}=MgFlZ~ z`O`AxKyKynDGIiXJOE<#vsZ_f1PS^mYM?WR+|!s+ zqJ7wG{G}g+> z8jx9uqk>?--O74s`^aPS1NSiHY#qR9p|O@$av*PdR1gfewvt2JTPZn8@fVo#1FU>b zXso4`9LTMFS`hTRTPYw|Yd~7AH6e!M%EPSuoI~w+qsO?R!frIgnd)6r)F-fn0$Eczp4D_P8P}9Q%$3&;Q{1$t zrKUKp9tR`YvZ0n_<75^-?n|%;u0ku+3B6+E6c6+rcLL%fyPy~*9Lhjwu12e|IrW5W zDA0k%f|^sxvQ_ZGE}9$QZPxd7L)5erSK!i8Gj+VLo9f{J^pKp-8;WW6Gdck$b(V3` zzow0jbEDzh3J%M5IxYm(w9V_e&5Z7Y^PZw=oeZvNt2->Uq-0fk1`Dg4kH;}-8d!A! z+7!nF5C{FvJPobsepm+wuP|7!;)d6>odGzSRy0$ItZ6GltT(NbWu?@uXs-<8n=UqOrkNTm)MqI+k!;qbO_z%e?%+gSI&U8; zvpvNw^pD4!EL-BqZHeVKcp@_}JUoz+q>(`hF3@K0kf9MVvp}u0b1jjP`c3>1v1bNI(#&e&NgS0Y$@t}sHzvuv(G>hPnnm#L@j^EHaCbj69tr^ccB1B#n)x2Bi^68XW#Ad248NU~C8& z!>N(f<0LYJy8B*5oFVa7go zVfJ2fVaBhyG4I&S^gemv9A3n);A{9MzKy?6E|8y*cc6}5_=vc!bOv90zv(K~?Eetx z2|W%}ZFO`c0+_1s?E1=XV0m#h7{sj7&nQiprN{<4T=2V!&!D6D#Zkx$%;Itx(gLD9 zAzpkH(gtUs`YNOi&Okkg7i`~9m1_6})i26Go6s(;fg7YWUxGCc;b4^=gWj#fQu~|( ZQcgkU4=bYdufKc$wAfMK`{C`&{{trdZ0rC4 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_3.si b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/_3.si new file mode 100644 index 0000000000000000000000000000000000000000..d6289f13ef295af4a8e468b7ee6adbbef89a4b41 GIT binary patch literal 384 zcmcD&o+B>oQ<|KbmuhYhoSL4SnpfhPmzK`}1YX(e7XNx{?>STN!!(iq^NxVT*nyZ4 z!~hX+4v@{n$iPnWQ$3)tZjzxfUk=!XFd0^JJwrVM_WWYK#G>R3 z*2LTtGZPW8?xNDXlFZyxm_lB-;UH7kit|g0l2cjJa!QLcxPZE$773c@8CvQY8X4;5 zfLx!QS;7f2q_`w8w}98s%+S!>)Y#PA)WFh|nKj;6uQ-zpNG7KhL#R|nc}Vz~8U&Z* x7p11SWv1q&6uadYsfPayhvMhr|a5xVpM99MG8j0u+28Fn{XDDFBMNbOrzb literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/segments_5 b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/index/segments_5 new file mode 100644 index 0000000000000000000000000000000000000000..991a4834064733ff3d93f102937a365dce70b719 GIT binary patch literal 509 zcmcD&o+HjtoSL4SnpaZHz`(%nmA!89uebJ|Gxa`96Zt>yI-@B&BLh271_XqGm<5D^ zVodP{GMe`u_RiV8nbTjh{pT9pTO2;6$*Fm%<_7$Rc+KnrIr+(nIq}IEsma*|`I&hojOH@Ai52msdBurosqu-WCHe80De)zl zxv9k^iMa(#x`w&u$|%9LLi|h~>foA-IM)=a2u6?b!orSG!2iYP&Sj!mg^w&A5qS#tt){r0r@S zf;%t3mB-)(xbXrUc>wr1ok^FftFj#E0ZWl0$Nv4kKl}UnIiLMnd~!cj+SP@h_j~vmcmE^hCd;REw)c3FuO8PI`NK7?-^Kry4t!=n4RiRxDE9+1h6L!1x$!=9zH{A0@0WnQAd}iiX@%H^p7dFHw&zs857RjqY za^iiFWT9%zAPKfKQ|oebmSmW7ECr#QB7`83Z>pJror@5bbv7R7I_OaybRLEmjfv4l z5O9z{1(0HDb6DF{E_3tR4vRc{a(a5S5!)7=mHKRYVvAzBEOfYlodukVt6$GCtBekI zWoEuCy{kvQnva*w2`tQgsjVBsLHIEqq48DXaK4NouBVIfq5NRIn?jmU`Ka)P9C0eJ zQmJakfQb>qj8TRKKOQ7bmoZ!vz0ghFKhS5xJy1P7jH>(N{>>-e<%(B0^S;Wh)4{-v zzPL=OIA?7ts*pGyTuw{D<#w8rb~@#R;7*vJ+iAu)-%gA4805Cq?^|c!w7~=MisQ9f z2X_VL$`XRG8X`JG=>+49stnWTa5{RWZJ|#JQ!jmRO?hIfBolNL?>^|zfcC^MjZ0nu z2$y50_h&o0neK=8e_F4A3JO&0e*JeU9__M&j*8#^BP#Z-$&Fk1Q@};nwdu21@Fg@i zLU9cQf+$7;IJgM}xYqEN)-Oo3`Q;11UQi|}E<-dXsMmo<|WzG c1j!ge3c5rW>^5b0i%A5JMp?-|UL{8EhJ^-!01oO5BLDyZ literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/translog/translog-3.ckp b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/translog/translog-3.ckp new file mode 100644 index 0000000000000000000000000000000000000000..797979eba005453b1b2d5de44ed53e9c47a7a3bd GIT binary patch literal 80 ycmcD&o+HkjoL#`cz`z8=K)`plIxr;wR>z&Txj|(?m{_xJ~V4bFKua|jPX2m-P z59z(@nc9(6?*6#;G}zJm(yBqJ?4C~5M7mLs1ikyx?rJl9PZ~K?V`W^h9LOxQsw{)# zssHnKQ5k0s;D-Lbc2AVerO9Ar>8w)jmR}#d|NGBBmFY<3%EG^7S*j(9pJiMvQkiR4 z=XqRNosNRT<-qB&8fcTLPlE(=PB4#9Oc6qmzNl=fVD-qkNtyI|nRK#SI+?kZCzYx* zbkk7}3P9tKcc3#^Tv?NtVX0U0ELq#x=^ypj?lW;RA4=<#ftzwT2U8x;pIRlI-cxBY z9v7zU7IxU1RNJsHE5=fr9&Ekn;VwE>(;ZCe6tk7;{IFf83p0Q+&K7lZn^BijE_g^q zbA`(+?9z}>io+Nm#kQ6MBgb{ly6KUu%B2n8^-^!?v@`bA>c^HAh0U~)PQg>$+-#~+ zj%Ztr2}HJ*n=nI&_%IS|8fKjN-UN?*IL5q@Di9Av8^(zG#SorW#3=Hq1rm|3 zh;ck^L=Y7FMi}u)ILKkzb||K+`Lq5wCXw%tBjy`qaYTK1cJEto$nAr>U*reF!gwia z1Ns6Cl7Ju_uOPaD;td=p2q%<2uC=@;buPDaRZa?Ls`0k6LBe>q)~l1Qf)fvl2?*>E zkZrCjoj=>F4J@|57v8$^`ZvJupyv0%48J+r@ce#xN&NQHk|mIBuEXQHZ1FYPb~~gbx(V0lPMVH=&h)>q$rY98?((F>6o|TnN%?9-tKs zH-h6(G}2}wLI@vWBRIp{M`KL=TE@Z_CKeL7v0cms^*KUJncooPo`w;N8uXwI*tpLv zLf>2*P5YSZ`Rs_16(Tlpm>`;PbSh%>e2883h<*2f{{o1~8nNA3#PF_1?5qC~GsEOk z5F@958!w2l`n~lJAtV1u$jJF1d&xug%4Zb=lX_4?hGrncXxl^f{ng9yp?7ncZOe4j zn$QdUih-kY=k=U@ZFN=dYXx5Og}F{nV@6xI8HcPkdj6|5(_iaa=Y1r2*ORhLeUt{< zbl4dBSr>J-S3EkGiMr;+xA^rBpM&_m1@S$aHBp#My!d{*B=N0kl_@hScKis$E?9rZ zhL5>{=g!01BWZ^)()GcN!tjyIMe2d*h)^UDqP!I&i*U>!$VqMP iy(Z^!E*-V~ciMb@?u%0@jDY8```5ivzxe3QH~s=BH0*Ey literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/translog/translog-4.tlog b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/translog/translog-4.tlog new file mode 100644 index 0000000000000000000000000000000000000000..170893f1ce93938fd1bba42e8dd12d56f315feac GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgoA5JMp?-|UL{8EhJ^-!01oO5BLDyZ literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/translog/translog.ckp b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/2/translog/translog.ckp new file mode 100644 index 0000000000000000000000000000000000000000..4eb9c1916efcf9f12d27db15ff4c37ce6df60df6 GIT binary patch literal 80 ucmcD&o+HkjoL#`cz`z8=AfOGQz$D9mGys)jhtiA(G$y}*sZZ>)zXJf1lNWIS literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/_state/state-1.st b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/_state/state-1.st new file mode 100644 index 0000000000000000000000000000000000000000..bcf12b981fd770489832d77577e7d7036da88ed0 GIT binary patch literal 125 zcmcD&o+Hj$T#{Il%D}+D2*OsHT&%y^3W_pw6N@U9J2UfAQY+$1OEXhKi_=pBeVvnX zL$VU{+|0`ptIYjUP0D)`b8_;N6H7Al^Wrm8el-FWmiUqQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1TvcU9`?@Jy_wTrv;F59-8&3i zEP5%KnII`3(1TD6e*Ez;GvW>OQu33b;x$lu1&Vx0W-dgWQ3XPq{e;Pz8-Vner9i|j zWFa(D3X5J^N(F>t)d-;(LO?Eonq+kqBFGpGGszTWQb}e3MBK&zLNna}nN$Md*mFQ= q)+U%HsP#}oUAiFhoY6o{c~C*$rw~DI%>x>fUqILl42QmN)dK+kSVP?a literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/_0.cfs b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/_0.cfs new file mode 100644 index 0000000000000000000000000000000000000000..88e4cf205f0c1c048268861db568934ec6f185a8 GIT binary patch literal 22814 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 YdC7vV5VxXy^Sz&b-W~3L`0_ve57I;2?f?J) literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/_0.si b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/_0.si new file mode 100644 index 0000000000000000000000000000000000000000..0baeb7ed6298384e4a1c51007865a0961c7faf84 GIT binary patch literal 384 zcmcD&o+B>oQ<|KbmuhYhoSL4SnpfhPmzK`}1TvcU9`?@Jy_wTrv;F59-8&#Lb|7X1 zF+c>I17x!>axvu>v-)J_l~!=JhL(DUMuxgM zAlGMSmT-a$DK1IOE#NgYGc+_eH8QX;wlFngW{Wq_OHNB=1yaSC5Kb|pJS6-~4T4MZ xi&9hEGE;L>irw;yauZARa`RJCxtv^sL*j!2TwPrl4rok%0SZ14$PwGD4FFAGalQZm literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/_1.cfe b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/_1.cfe new file mode 100644 index 0000000000000000000000000000000000000000..00336bddd52618fd755bf98b9308e0d061db2195 GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1YX(e7XNx{?>STN!!(iq^A0j_ z@yElI#~bLS%?&{M%TgfXT+I-gX)lXj3QQBP z14NLqfJHAYr2@j?+W?^%LV$vKP~-VoAcEXyK-x1Q9H|RXm3|=YB@m9Z9E4`gMso<% nB!y0hJm*H3yeY_`C7A^faV;wd&A9h~#^e_eHUoq43g^!NZaqXh literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/_1.cfs b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/_1.cfs new file mode 100644 index 0000000000000000000000000000000000000000..8978b3487d17fe9e2bd18a1639b8024d78a2721e GIT binary patch literal 11271 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 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/_2.cfe b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/_2.cfe new file mode 100644 index 0000000000000000000000000000000000000000..38d853a2d92b3d1829642e6d0431b199e5baa6dc GIT binary patch literal 331 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1YX(e7XNx{?>STN!!(iq^Nuob z@yA1yn;XO%=%tjUfK&m29)w~vWYJ4YDS>k0AvDuApkQ7ugu@~Vp}93#^inc2Asl`? z2+iON(p~`-?1l=4!0a>y+nJvXmA?;_&qI+f$%NV@;0uvwWrxW_-3*l%4S~pWa)Vp~ k6_kUznUMje32bReW&uR8JWRg#fX3t(PzNy7T5Wy@0N4{i!~g&Q literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/_2.cfs b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/_2.cfs new file mode 100644 index 0000000000000000000000000000000000000000..4ca8709c99ea486e62b6f07b5e362f0da30b03bc GIT binary patch literal 8444 zcmd5>Uu+{s8J}7Ii4!Mr;v{#MUayzmm4_(OVq9y`#N9x!pri7r(U;O3I z?)-cD)C&_gw+DB3eut)kd&uGz`8h5B4XId>jYjNUlrzT*>!w*YvXhf}U6xE`L(XfZ zlBOCHn!Yw!u3RW8`GQuG6m{~uvaU_WC-}+rp+_VYh$G9gVU8&3$k~dnwc{)tJ;hu*s5|_(&d~X>l;d5E=%TmEE}u$LToH16$-j+7_sb?FuL70 z3#)7Do50L~2QHX4`12tied>?Z`{E2LFKBtGsF)9<|D3jF8hd;!W-28)r>F(_u~;^q zN(p=-&Wk)0P^eY(ybN|+%K)}ubrf?mrxak+?c-;W?>+P`co+B}BxKc?N1q=3>@ib9 zyt!GPMcsLX&Z7?jw5e!n4iuTXwvBGycP>4VO2+v_dMY6#GD13?7)y#12{D=Blj)Q& zmEhwmV=+}KEumY;6@SNY0#JPmp&#H|D6eUHK~W_LuUPinx%24dxEL3cqQHw&$@Az> zX(5?O#8W~dky#o0JbFGJPl$=6kW4*^UQNfvsi{%BkJZdBRLr6lQ_IaAh4+<{mjlc;V5ANY<=0-;cDL)HxlP5;4I zjn*F!0S@~q0DmLjyOyY-6KnWHzL7fW>xOzL13F}%QxkS=A5_7%20cVU+sCJM)ONHr z=ED@TUE2ryW~i-EckTVubRra>am+OgELVUwBvC#>6XiusQB6D9JuNr5 zLHqG^=MCJe54>2DbtiV7xlWWFquH_hu6T-Evml48zbrzCB8;-|L01DTz-Q)O?5kY zIL=zT_2<{`R__fnusts>!+mlYvT9>a$(vxt=e{>EW{A{LZ;VwH`=H#yz5(Y*z?gd! z`9|HBW{W(`UfC^D#J;#&y)Sq?1Xv>v?e`pDv7M-UoS=&9FXz_C+C99CR3%URh{F}G z!uu-xB|m(=6ChuOVD($*uqrWR*HfLeanWg&oYp0$WjHO2>><#|DQEzYwlMDDVV<`doCUE7&cnJYn~X4hKSAv^~8=TYEKSq_#_YL#WqzkYI?U zY0Y!?{4d6X(Z7Dx9`w>cXpvUUb;veEAs({(-?M8{HJvMEq)4A+1P7YWm2i5vkJUi5 z_OxoQbit{CejDnK?V40g=SmsrT(=oPzgO^)@tXLhl2nk@5NOprqqcUc9J1GH`MF(_ zs_8r_BSm|S6>JsCh^>?=r>pa8));MjgbAXI6y+O~8S2jcA`dIyo_URDBuJChK(un7 zX-(k~wWhFI23zGVa$u1{l?SXYdfTo^)pSiMBlXsA7{O?(P!8Hksd9R{yvG=8ijp!? zl};Gn5XajS_b=g27gy zw9z=qZ6o*yW2`Ak%1BWTGlHR3p$u9|F;(7S_eU6GO;J)tigJ_+l2=(a75d5cnBQtPxs+$eT5H`hWZuT_F<~sJ#)>oBV!P zV&BQ7WrR==`+OgeKc}jHzV8wJJ6^;)9>loQ<|KbmuhYhoSL4SnpfhPmzK`}1YX(e7XNx{?>STN!!(iq^NxbV*nyZ4 z!~hX+4v5dl#gt#n>XVsQTEU%_SeB?)mYSE6UnJyTl$e~8s^FYoRFGekSdy8a#{-ov zDh6^m4fQPa4B`zf4EZ6#xj>Cz87?DJJ)p2|lA$qQ4%me-8CG*WLp=lb{9?VtqT~$L z#M~4!6A`fPqSCyQ%-mF%LSDGxAXC_i^Gl18Q(4n;N{chNfV!a;37Y5`TIv}Z8S3VM zT%Vm;!U-~@xFj*RfY;E>(9qn}*wozA$i#@5HQq?CIFk)XCa0xBsA5KWNcfo=1efF& wrKY%Lrskv+yX6<s=BK1`Ik^Uh#0Lksy1FnN(3t!J6nr2MB`G)o0E1g{SO5S3 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/segments_5 b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/segments_5 new file mode 100644 index 0000000000000000000000000000000000000000..59ad89111c9da932d175cc1278a9ee2d21c2c430 GIT binary patch literal 448 zcmcD&o+HjtoSL4SnpaZHz`(%nmA!89uebJ|Gxa`96Zt>y8lx#YBLh271_T6wm>GnD zVodP{GMe`u_RiV8nbTjh{pT9pI~+cx$*Fm%<_7Ndm*f{!Le#i< z_~rW=mxKmc6uM_+xuyo?n3bfI3&Rac2ZmEoVo7Fx9-|3+ab;dI&`z=JO6QF9AQPvc pLjQtDX9MTLkhJ7{M=p@-ic<^Y^YR%j4`@t&0S-YRvCQJL9RNPl!$AN5 literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/write.lock b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/index/write.lock new file mode 100644 index 0000000..e69de29 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/translog/translog-1.ckp b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/translog/translog-1.ckp new file mode 100644 index 0000000000000000000000000000000000000000..9525a313fd0e4ef92981875fbd17e3cd1868e08e GIT binary patch literal 80 ycmcD&o+HkjoL#`cz`z8=K)`DXBv`;q1_nkb4WpQ$3>eLLKx6U?m}JXw+4BGty9dPp literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/translog/translog-1.tlog b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/translog/translog-1.tlog new file mode 100644 index 0000000000000000000000000000000000000000..f36c09941bdee6ad821560320eb5a6eda8635029 GIT binary patch literal 3381 zcmdUx&2HO95Xa@DZE`M(<|^=PNweQvUJB={NRu|PEfj?fS6GW{i7-V9AkzIFj<-AqgJbR z3;(|S=5Q;0I+TnwANtcxHoX71A0Is~PveK1q`VW` z12aqA-=Dn-4w7S2*gdsi|xxGB0^9iLeLBV(0x8Dh89ncotu_XuNNCzvMP<)J$q z_b>n^j(!J8jE84M7G7;S={NP~wJjbTa$eDCx3THEXDaCup%8UMog*7fYvcr5b z$+NPX7o*;EwvPwnd}5NUho$E|(uE5#-O03au^6fHkL9`~&juLA6?v81ZrBw}NTHal zAGOX^mnq5^QJS3F_SS>UOe&vM(ql6#+kKyPyVt(#j(xQ1vkmjSh?C4Xi(hefw~opL zuqGOpK=;;bGY6pF43f{yTyUS86xy3L5sek7B8^poP_i)-VE!h@ zVh{xsi0%OEfbJ6=0f`vfse1XyB&pd?Z8^(ZT8mwE-PTqwe87^IMrHeHX{%5!q4 z6hz6oxw#Ah$T>Jta3Z`_6IN4(R<0VHxT5%Cb67~`eJH}XuLyn5&A`JNK1>5E_r9g_ z$?0&O$5PI#Lq6euI?Z#CI3OX-N?R%~W2@1ejy_ziQ!D_9FE5bG8pjz&# zXYKRR&Kr~ig`K*wAP0{&cc1=0I+X$=pf1sas#9@$!(LcxFVDh z+=;1fR+$yjsMb182w{q0W};c1Py)073W96lHG%+91goH+WV7t?5C|5?xzMVa_E)5} e`jp32D(r)bIFH!nQ~rAB+^)%Kt-XaGC;tH|pAFpr literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/translog/translog-2.ckp b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/translog/translog-2.ckp new file mode 100644 index 0000000000000000000000000000000000000000..7cdffdc327ee67032235b79dd5d73960210c4284 GIT binary patch literal 80 ucmcD&o+HkjoL#`cz`z8=AfOGQz$DXuGys)jhSH1&G$y}*spn5A6axT|r50NN literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/translog/translog-2.tlog b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/translog/translog-2.tlog new file mode 100644 index 0000000000000000000000000000000000000000..2f9f08cb226f4f12bf4ce2fa161bca832dc50bed GIT binary patch literal 43 wcmcD&o+HjtQk0lioRgosX-wjMxKTSPG<2gC7$kq01Y7v>;M1& literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/translog/translog-3.ckp b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/translog/translog-3.ckp new file mode 100644 index 0000000000000000000000000000000000000000..be866d9f2fff76baa84f5fa17a2db7afccc8cf7f GIT binary patch literal 80 zcmcD&o+HkjoL#`cz`z8=Kp?maNU(vK3=GUrngvR8qS1^8G$y}*iZPfN#(x6;qG75KgN;nw5iqpo?pv_u|YG#hq5@DJ`knwh!!)|H!YKUtpdKBB$ZM|mRh z*v;+D;ZJVFW9fk}PP40If4 zCeMTDS^e)_SEN4MgBKQetlu|TqSF{=<~}pV->K&Zcd~&^TeB`nAg0M$PfY(X-n{GS z#QHMIYLVIAX7IcjtUH$kk=252; zYp>h6*RgNy7p9EXhJeigRsbowHio%HmPTnmx2+_OKHk_^92HwFI2!2P?z&Bq?l94Q zAKpx0SJM1wj$UT8x7()Y1_PJoZI|^s!(tsK#%`c(+JTL59o$Bp!^D1XScaHPSH_3s zd+X9Jr16<6D_oOpP6bvfRMpdDqRlX4lwrZ2HiJ|T%5Y`To4Uvw5A|+q7OHM7lvOu6 zjgxo0&Q%^^&$%qNsrCj=bZwkcan7n#R3Y)SIUbgR%Y$J~s^O3mg6qNrJs4(;^Mhd# zK813t)z911z-|Krv35V>g9)_$ctcDpCawL z*rc0oqiV1Xc7gcaTe-Wbvp(E(i*QT9?H(N)A?JYo?n174L>f+$Af zC5>`Q3!LEdM)SYhUWTNATUAL8_O~XJ608K0lykU(YcwCjr-mCemf#|2*tAi7IvgT@ zym5|9?%4@S&&!YsrBqCD$yC*_nIxfLLSf1oc<^eP6k%x@a6L&O$t1kbptp~wNJWK$ z6AF>2SEMi(94Tnym8Uqfsv{m_!6kcr2afkt3oVzBh!~6LdG+|4wQ`c%KSPhdNsX-wjMxKTSPG<2gC7$kq01Y7v>;M1& literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/translog/translog.ckp b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/3/translog/translog.ckp new file mode 100644 index 0000000000000000000000000000000000000000..2cc5caccb101c00d8b276c98ed0e4fca4fe2ef03 GIT binary patch literal 80 ucmcD&o+HkjoL#`cz`z8=AfOGQz$D9mGys+3gwl)$G$y}*saIHa+zSAclNUq) literal 0 HcmV?d00001 diff --git a/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/_state/state-7.st b/deploy/cratedata/data/nodes/0/indices/sgeQMCbmTjanF7waz7Ne4w/_state/state-7.st new file mode 100644 index 0000000000000000000000000000000000000000..9cc0534f69ae2a4b07e0b392b953b31319d86c84 GIT binary patch literal 910 zcmcD&o+Hj$T#{Il%D}+D2*OsHT&%y^QY#X33vyC_wUwn76=&w>U6@#uUs{rxmmZ&2 znj2r7kyw;ce4+)c(K){$HLtxmwFD$x{A*@rUP@|(USerUetc?0L1JD?d{JsaPG)jq zv6F$W;UtK3a#3nx3DDg56rj~UhGvF_=B7pl7KRq)CetA*fc7M%7RBeM!L>UWOhuQ1 zIK;sOYHC4IepzNpYD#=wVs5G%)DN8yO{JxoDWS#bse!)ENx30eiFt13<%w11eyJwq zQy?m!UeyD;Ej7i>%)rpV#L{vhM7F#rvm{loJTbE*J}ti}J~6o@vn&-F5>AOZIltR; z6AKDJLGa@*TeFLs4?{_ium52Kp1=B*-w#Zma83HrDSHQvPeIdNmlQtPAsu|P{7-#pGd>q-wP?>hFAk(KAB(shrUrw(v5&7C@9fftWx zRU`%Qc?Q$^^;WvXWmEo=P__f+dF99 z`nXAdgLg!&;Dz=lGd3NCU+bnCSwTXl6quZyD9DR>_C1)1aCa+`4`f^*Z}D*peU znc-(!Voqjaacc3e-#rCInYoEYmGLF1MY+X4jsU?=V3LV1uFOl02gY4~GB`07|7tM) z5nAG7?r)Um?-LS~=oFDz9^n-gQt4Ozv%&C3Xpo~{c40uCcVLNgRk5>0j)j4jQ&!;5 z2BROL-mZq>r3Kl=!M?d}X}P(j6)vusMnEZpAE9O06(PC#dBwp&!P$jH6$ZK?Dc(Nm VKY#!JeL!RK3!rPkVCmP~69D(Nk!b(` literal 0 HcmV?d00001 diff --git a/deploy/cratedata/log/gc.log.0.current b/deploy/cratedata/log/gc.log.0.current index a1dbc05..79cf48e 100644 --- a/deploy/cratedata/log/gc.log.0.current +++ b/deploy/cratedata/log/gc.log.0.current @@ -1,792 +1,2100 @@ OpenJDK 64-Bit Server VM (25.181-b13) for linux-amd64 JRE (1.8.0_181-b13), built on Oct 23 2018 12:37:29 by "buildozer" with gcc 6.4.0 -Memory: 4k page, physical 8156056k(4063864k free), swap 1048572k(1009404k free) +Memory: 4k page, physical 8156056k(3321808k free), swap 1048572k(1008124k free) CommandLine flags: -XX:CMSInitiatingOccupancyFraction=75 -XX:+DisableExplicitGC -XX:GCLogFileSize=67108864 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/data -XX:InitialHeapSize=536870912 -XX:MaxHeapSize=536870912 -XX:MaxNewSize=178958336 -XX:MaxTenuringThreshold=6 -XX:NewSize=178958336 -XX:NumberOfGCLogFiles=16 -XX:OldPLABSize=16 -XX:OldSize=357912576 -XX:+PrintGC -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+UseGCLogFileRotation -XX:+UseParNewGC -2021-01-26T15:10:49.245+0000: 1.183: Total time for which application threads were stopped: 0.0003664 seconds, Stopping threads took: 0.0001880 seconds -2021-01-26T15:10:50.258+0000: 2.196: Total time for which application threads were stopped: 0.0122235 seconds, Stopping threads took: 0.0120086 seconds -2021-01-26T15:10:50.938+0000: 2.876: Total time for which application threads were stopped: 0.0002511 seconds, Stopping threads took: 0.0000579 seconds -2021-01-26T15:10:51.860+0000: 3.798: Total time for which application threads were stopped: 0.0001835 seconds, Stopping threads took: 0.0000169 seconds -2021-01-26T15:10:52.038+0000: 3.976: Total time for which application threads were stopped: 0.0032265 seconds, Stopping threads took: 0.0000640 seconds -2021-01-26T15:10:52.593+0000: 4.531: Total time for which application threads were stopped: 0.0237411 seconds, Stopping threads took: 0.0129674 seconds -2021-01-26T15:10:52.731+0000: 4.669: Total time for which application threads were stopped: 0.0005595 seconds, Stopping threads took: 0.0000672 seconds -2021-01-26T15:10:53.751+0000: 5.689: Total time for which application threads were stopped: 0.0154032 seconds, Stopping threads took: 0.0152718 seconds -2021-01-26T15:10:54.519+0000: 6.457: Total time for which application threads were stopped: 0.0003005 seconds, Stopping threads took: 0.0000159 seconds -2021-01-26T15:10:54.915+0000: 6.853: Total time for which application threads were stopped: 0.0003153 seconds, Stopping threads took: 0.0000219 seconds -2021-01-26T15:10:54.942+0000: 6.880: Total time for which application threads were stopped: 0.0003272 seconds, Stopping threads took: 0.0000431 seconds -2021-01-26T15:10:54.989+0000: 6.927: Total time for which application threads were stopped: 0.0002890 seconds, Stopping threads took: 0.0000942 seconds -2021-01-26T15:10:55.140+0000: 7.078: Total time for which application threads were stopped: 0.0004424 seconds, Stopping threads took: 0.0001182 seconds -2021-01-26T15:10:56.149+0000: 8.087: Total time for which application threads were stopped: 0.0081562 seconds, Stopping threads took: 0.0080244 seconds -2021-01-26T15:10:57.123+0000: 9.061: Total time for which application threads were stopped: 0.0004429 seconds, Stopping threads took: 0.0000232 seconds -2021-01-26T15:10:57.232+0000: 9.170: Total time for which application threads were stopped: 0.0045740 seconds, Stopping threads took: 0.0041877 seconds -2021-01-26T15:10:57.236+0000: 9.174: Total time for which application threads were stopped: 0.0000663 seconds, Stopping threads took: 0.0000316 seconds -2021-01-26T15:10:57.236+0000: 9.174: Total time for which application threads were stopped: 0.0000859 seconds, Stopping threads took: 0.0000633 seconds -2021-01-26T15:10:57.236+0000: 9.174: Total time for which application threads were stopped: 0.0000414 seconds, Stopping threads took: 0.0000226 seconds -2021-01-26T15:10:57.237+0000: 9.174: Total time for which application threads were stopped: 0.0000404 seconds, Stopping threads took: 0.0000223 seconds -2021-01-26T15:10:58.118+0000: 10.056: Total time for which application threads were stopped: 0.0001397 seconds, Stopping threads took: 0.0000201 seconds -2021-01-26T15:10:58.179+0000: 10.117: Total time for which application threads were stopped: 0.0001566 seconds, Stopping threads took: 0.0000635 seconds -2021-01-26T15:10:58.238+0000: 10.176: Total time for which application threads were stopped: 0.0002020 seconds, Stopping threads took: 0.0001123 seconds -2021-01-26T15:10:58.338+0000: 10.276: Total time for which application threads were stopped: 0.0000887 seconds, Stopping threads took: 0.0000199 seconds -2021-01-26T15:10:58.347+0000: 10.285: Total time for which application threads were stopped: 0.0004353 seconds, Stopping threads took: 0.0001207 seconds -2021-01-26T15:10:58.544+0000: 10.482: [GC (CMS Initial Mark) [1 CMS-initial-mark: 0K(349568K)] 134187K(506816K), 0.1070967 secs] [Times: user=0.06 sys=0.01, real=0.11 secs] -2021-01-26T15:10:58.653+0000: 10.591: Total time for which application threads were stopped: 0.1092331 seconds, Stopping threads took: 0.0000383 seconds -2021-01-26T15:10:58.653+0000: 10.591: [CMS-concurrent-mark-start] -2021-01-26T15:10:58.659+0000: 10.597: [CMS-concurrent-mark: 0.006/0.006 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] -2021-01-26T15:10:58.660+0000: 10.598: [CMS-concurrent-preclean-start] -2021-01-26T15:10:58.663+0000: 10.601: [CMS-concurrent-preclean: 0.003/0.003 secs] [Times: user=0.01 sys=0.00, real=0.00 secs] -2021-01-26T15:10:58.664+0000: 10.602: [CMS-concurrent-abortable-preclean-start] -2021-01-26T15:10:58.920+0000: 10.858: [GC (Allocation Failure) 2021-01-26T15:10:58.921+0000: 10.859: [ParNew2021-01-26T15:10:58.977+0000: 10.915: [CMS-concurrent-abortable-preclean: 0.004/0.312 secs] [Times: user=0.14 sys=0.02, real=0.31 secs] - +2021-01-27T13:16:32.398+0000: 1.117: Total time for which application threads were stopped: 0.0011163 seconds, Stopping threads took: 0.0009743 seconds +2021-01-27T13:16:33.458+0000: 2.177: Total time for which application threads were stopped: 0.0557464 seconds, Stopping threads took: 0.0556451 seconds +2021-01-27T13:16:33.889+0000: 2.607: Total time for which application threads were stopped: 0.0003613 seconds, Stopping threads took: 0.0001619 seconds +2021-01-27T13:16:34.173+0000: 2.891: Total time for which application threads were stopped: 0.0002418 seconds, Stopping threads took: 0.0000207 seconds +2021-01-27T13:16:34.619+0000: 3.338: Total time for which application threads were stopped: 0.0001574 seconds, Stopping threads took: 0.0000169 seconds +2021-01-27T13:16:34.774+0000: 3.493: Total time for which application threads were stopped: 0.0001492 seconds, Stopping threads took: 0.0000185 seconds +2021-01-27T13:16:35.431+0000: 4.149: Total time for which application threads were stopped: 0.0001824 seconds, Stopping threads took: 0.0000188 seconds +2021-01-27T13:16:35.729+0000: 4.448: Total time for which application threads were stopped: 0.0003533 seconds, Stopping threads took: 0.0002248 seconds +2021-01-27T13:16:36.454+0000: 5.173: Total time for which application threads were stopped: 0.0124561 seconds, Stopping threads took: 0.0117715 seconds +2021-01-27T13:16:36.826+0000: 5.544: Total time for which application threads were stopped: 0.0002343 seconds, Stopping threads took: 0.0000311 seconds +2021-01-27T13:16:36.847+0000: 5.566: Total time for which application threads were stopped: 0.0002163 seconds, Stopping threads took: 0.0000330 seconds +2021-01-27T13:16:36.912+0000: 5.631: Total time for which application threads were stopped: 0.0029150 seconds, Stopping threads took: 0.0001036 seconds +2021-01-27T13:16:37.144+0000: 5.863: Total time for which application threads were stopped: 0.0002699 seconds, Stopping threads took: 0.0000189 seconds +2021-01-27T13:16:38.158+0000: 6.876: Total time for which application threads were stopped: 0.0134777 seconds, Stopping threads took: 0.0134236 seconds +2021-01-27T13:16:39.179+0000: 7.897: Total time for which application threads were stopped: 0.0207362 seconds, Stopping threads took: 0.0206348 seconds +2021-01-27T13:16:39.761+0000: 8.479: Total time for which application threads were stopped: 0.0389596 seconds, Stopping threads took: 0.0385302 seconds +2021-01-27T13:16:39.829+0000: 8.547: Total time for which application threads were stopped: 0.0005893 seconds, Stopping threads took: 0.0002621 seconds +2021-01-27T13:16:39.852+0000: 8.571: Total time for which application threads were stopped: 0.0091599 seconds, Stopping threads took: 0.0061575 seconds +2021-01-27T13:16:39.861+0000: 8.579: Total time for which application threads were stopped: 0.0044566 seconds, Stopping threads took: 0.0041747 seconds +2021-01-27T13:16:39.870+0000: 8.589: Total time for which application threads were stopped: 0.0094399 seconds, Stopping threads took: 0.0065497 seconds +2021-01-27T13:16:39.889+0000: 8.608: Total time for which application threads were stopped: 0.0187791 seconds, Stopping threads took: 0.0186450 seconds +2021-01-27T13:16:40.592+0000: 9.310: Total time for which application threads were stopped: 0.0003332 seconds, Stopping threads took: 0.0001584 seconds +2021-01-27T13:16:40.627+0000: 9.345: Total time for which application threads were stopped: 0.0002770 seconds, Stopping threads took: 0.0001200 seconds +2021-01-27T13:16:40.678+0000: 9.396: Total time for which application threads were stopped: 0.0002837 seconds, Stopping threads took: 0.0001180 seconds +2021-01-27T13:16:40.745+0000: 9.463: Total time for which application threads were stopped: 0.0003568 seconds, Stopping threads took: 0.0001225 seconds +2021-01-27T13:16:40.764+0000: 9.482: Total time for which application threads were stopped: 0.0005201 seconds, Stopping threads took: 0.0001260 seconds +2021-01-27T13:16:41.200+0000: 9.919: [GC (Allocation Failure) 2021-01-27T13:16:41.201+0000: 9.920: [ParNew Desired survivor size 8945664 bytes, new threshold 1 (max 6) -- age 1: 16310576 bytes, 16310576 total -: 139776K->15980K(157248K), 0.0743589 secs] 139776K->15980K(506816K), 0.0777526 secs] [Times: user=0.04 sys=0.01, real=0.08 secs] -2021-01-26T15:10:59.000+0000: 10.938: Total time for which application threads were stopped: 0.0793805 seconds, Stopping threads took: 0.0001476 seconds -2021-01-26T15:10:59.016+0000: 10.954: [GC (CMS Final Remark) [YG occupancy: 18691 K (157248 K)]2021-01-26T15:10:59.017+0000: 10.955: [Rescan (parallel) , 0.0142217 secs]2021-01-26T15:10:59.032+0000: 10.970: [weak refs processing, 0.0004599 secs]2021-01-26T15:10:59.033+0000: 10.971: [class unloading, 0.0042387 secs]2021-01-26T15:10:59.038+0000: 10.976: [scrub symbol table, 0.0147196 secs]2021-01-26T15:10:59.056+0000: 10.994: [scrub string table, 0.0010332 secs][1 CMS-remark: 0K(349568K)] 18691K(506816K), 0.0421829 secs] [Times: user=0.02 sys=0.00, real=0.05 secs] -2021-01-26T15:10:59.059+0000: 10.997: Total time for which application threads were stopped: 0.0585034 seconds, Stopping threads took: 0.0151283 seconds -2021-01-26T15:10:59.060+0000: 10.998: [CMS-concurrent-sweep-start] -2021-01-26T15:10:59.060+0000: 10.998: [CMS-concurrent-sweep: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] -2021-01-26T15:10:59.061+0000: 10.999: [CMS-concurrent-reset-start] -2021-01-26T15:10:59.099+0000: 11.037: Total time for which application threads were stopped: 0.0016321 seconds, Stopping threads took: 0.0015498 seconds -2021-01-26T15:10:59.099+0000: 11.037: Total time for which application threads were stopped: 0.0000467 seconds, Stopping threads took: 0.0000126 seconds -2021-01-26T15:10:59.099+0000: 11.037: Total time for which application threads were stopped: 0.0000334 seconds, Stopping threads took: 0.0000080 seconds -2021-01-26T15:10:59.099+0000: 11.037: Total time for which application threads were stopped: 0.0000317 seconds, Stopping threads took: 0.0000078 seconds -2021-01-26T15:10:59.099+0000: 11.037: Total time for which application threads were stopped: 0.0000316 seconds, Stopping threads took: 0.0000076 seconds -2021-01-26T15:10:59.099+0000: 11.037: Total time for which application threads were stopped: 0.0000359 seconds, Stopping threads took: 0.0000090 seconds -2021-01-26T15:10:59.099+0000: 11.037: Total time for which application threads were stopped: 0.0000711 seconds, Stopping threads took: 0.0000078 seconds -2021-01-26T15:10:59.100+0000: 11.038: Total time for which application threads were stopped: 0.0000524 seconds, Stopping threads took: 0.0000103 seconds -2021-01-26T15:10:59.100+0000: 11.038: Total time for which application threads were stopped: 0.0000385 seconds, Stopping threads took: 0.0000094 seconds -2021-01-26T15:10:59.100+0000: 11.038: Total time for which application threads were stopped: 0.0000408 seconds, Stopping threads took: 0.0000078 seconds -2021-01-26T15:10:59.108+0000: 11.046: Total time for which application threads were stopped: 0.0078584 seconds, Stopping threads took: 0.0000089 seconds -2021-01-26T15:10:59.108+0000: 11.046: Total time for which application threads were stopped: 0.0000693 seconds, Stopping threads took: 0.0000173 seconds -2021-01-26T15:10:59.108+0000: 11.046: Total time for which application threads were stopped: 0.0000456 seconds, Stopping threads took: 0.0000108 seconds -2021-01-26T15:10:59.108+0000: 11.046: Total time for which application threads were stopped: 0.0000430 seconds, Stopping threads took: 0.0000099 seconds -2021-01-26T15:10:59.115+0000: 11.053: Total time for which application threads were stopped: 0.0050315 seconds, Stopping threads took: 0.0047348 seconds -2021-01-26T15:10:59.115+0000: 11.053: Total time for which application threads were stopped: 0.0001091 seconds, Stopping threads took: 0.0000538 seconds -2021-01-26T15:10:59.116+0000: 11.053: Total time for which application threads were stopped: 0.0000558 seconds, Stopping threads took: 0.0000113 seconds -2021-01-26T15:10:59.116+0000: 11.054: [CMS-concurrent-reset: 0.037/0.055 secs] [Times: user=0.03 sys=0.01, real=0.05 secs] -2021-01-26T15:10:59.122+0000: 11.060: Total time for which application threads were stopped: 0.0034749 seconds, Stopping threads took: 0.0033305 seconds -2021-01-26T15:10:59.122+0000: 11.060: Total time for which application threads were stopped: 0.0000628 seconds, Stopping threads took: 0.0000129 seconds -2021-01-26T15:10:59.122+0000: 11.060: Total time for which application threads were stopped: 0.0000664 seconds, Stopping threads took: 0.0000119 seconds -2021-01-26T15:10:59.124+0000: 11.062: Total time for which application threads were stopped: 0.0002149 seconds, Stopping threads took: 0.0001727 seconds -2021-01-26T15:10:59.125+0000: 11.063: Total time for which application threads were stopped: 0.0011592 seconds, Stopping threads took: 0.0011240 seconds -2021-01-26T15:10:59.126+0000: 11.063: Total time for which application threads were stopped: 0.0000578 seconds, Stopping threads took: 0.0000098 seconds -2021-01-26T15:10:59.126+0000: 11.064: Total time for which application threads were stopped: 0.0000659 seconds, Stopping threads took: 0.0000428 seconds -2021-01-26T15:10:59.127+0000: 11.065: Total time for which application threads were stopped: 0.0002484 seconds, Stopping threads took: 0.0001913 seconds -2021-01-26T15:10:59.134+0000: 11.072: Total time for which application threads were stopped: 0.0020425 seconds, Stopping threads took: 0.0019052 seconds -2021-01-26T15:10:59.134+0000: 11.072: Total time for which application threads were stopped: 0.0000946 seconds, Stopping threads took: 0.0000131 seconds -2021-01-26T15:10:59.136+0000: 11.074: Total time for which application threads were stopped: 0.0015851 seconds, Stopping threads took: 0.0015369 seconds -2021-01-26T15:10:59.691+0000: 11.629: Total time for which application threads were stopped: 0.0002393 seconds, Stopping threads took: 0.0001154 seconds -2021-01-26T15:11:00.135+0000: 12.073: Total time for which application threads were stopped: 0.0002422 seconds, Stopping threads took: 0.0001187 seconds -2021-01-26T15:11:00.224+0000: 12.162: [GC (Allocation Failure) 2021-01-26T15:11:00.225+0000: 12.163: [ParNew +- age 1: 16295552 bytes, 16295552 total +: 139776K->15969K(157248K), 0.0843694 secs] 139776K->15969K(506816K), 0.0870636 secs] [Times: user=0.04 sys=0.01, real=0.09 secs] +2021-01-27T13:16:41.289+0000: 10.007: Total time for which application threads were stopped: 0.0886402 seconds, Stopping threads took: 0.0000223 seconds +2021-01-27T13:16:41.294+0000: 10.013: [GC (CMS Initial Mark) [1 CMS-initial-mark: 0K(349568K)] 15969K(506816K), 0.0109373 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] +2021-01-27T13:16:41.307+0000: 10.025: Total time for which application threads were stopped: 0.0176957 seconds, Stopping threads took: 0.0051707 seconds +2021-01-27T13:16:41.307+0000: 10.025: [CMS-concurrent-mark-start] +2021-01-27T13:16:41.310+0000: 10.029: [CMS-concurrent-mark: 0.003/0.003 secs] [Times: user=0.01 sys=0.00, real=0.00 secs] +2021-01-27T13:16:41.311+0000: 10.029: [CMS-concurrent-preclean-start] +2021-01-27T13:16:41.313+0000: 10.032: [CMS-concurrent-preclean: 0.002/0.002 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] +2021-01-27T13:16:41.322+0000: 10.041: [CMS-concurrent-abortable-preclean-start] +2021-01-27T13:16:41.338+0000: 10.057: Total time for which application threads were stopped: 0.0085832 seconds, Stopping threads took: 0.0084680 seconds +2021-01-27T13:16:41.365+0000: 10.084: Total time for which application threads were stopped: 0.0045395 seconds, Stopping threads took: 0.0044272 seconds +2021-01-27T13:16:41.370+0000: 10.089: Total time for which application threads were stopped: 0.0001151 seconds, Stopping threads took: 0.0000303 seconds +2021-01-27T13:16:41.377+0000: 10.096: Total time for which application threads were stopped: 0.0044551 seconds, Stopping threads took: 0.0043127 seconds +2021-01-27T13:16:41.391+0000: 10.110: Total time for which application threads were stopped: 0.0107888 seconds, Stopping threads took: 0.0106946 seconds +2021-01-27T13:16:41.398+0000: 10.116: Total time for which application threads were stopped: 0.0040521 seconds, Stopping threads took: 0.0039339 seconds +2021-01-27T13:16:41.404+0000: 10.123: Total time for which application threads were stopped: 0.0029458 seconds, Stopping threads took: 0.0021821 seconds +2021-01-27T13:16:41.409+0000: 10.128: Total time for which application threads were stopped: 0.0045498 seconds, Stopping threads took: 0.0044006 seconds +2021-01-27T13:16:41.410+0000: 10.129: Total time for which application threads were stopped: 0.0004244 seconds, Stopping threads took: 0.0003798 seconds +2021-01-27T13:16:41.411+0000: 10.130: Total time for which application threads were stopped: 0.0004097 seconds, Stopping threads took: 0.0003269 seconds +2021-01-27T13:16:41.415+0000: 10.134: Total time for which application threads were stopped: 0.0026417 seconds, Stopping threads took: 0.0025515 seconds +2021-01-27T13:16:41.421+0000: 10.140: Total time for which application threads were stopped: 0.0021677 seconds, Stopping threads took: 0.0021135 seconds +2021-01-27T13:16:41.445+0000: 10.163: Total time for which application threads were stopped: 0.0110479 seconds, Stopping threads took: 0.0109226 seconds +2021-01-27T13:16:41.448+0000: 10.167: Total time for which application threads were stopped: 0.0005973 seconds, Stopping threads took: 0.0005360 seconds +2021-01-27T13:16:41.452+0000: 10.170: Total time for which application threads were stopped: 0.0012750 seconds, Stopping threads took: 0.0011762 seconds +2021-01-27T13:16:41.453+0000: 10.172: Total time for which application threads were stopped: 0.0001353 seconds, Stopping threads took: 0.0000525 seconds +2021-01-27T13:16:41.454+0000: 10.172: Total time for which application threads were stopped: 0.0000493 seconds, Stopping threads took: 0.0000126 seconds +2021-01-27T13:16:41.458+0000: 10.176: Total time for which application threads were stopped: 0.0012451 seconds, Stopping threads took: 0.0011834 seconds +2021-01-27T13:16:41.459+0000: 10.178: Total time for which application threads were stopped: 0.0001055 seconds, Stopping threads took: 0.0000598 seconds +2021-01-27T13:16:41.463+0000: 10.182: Total time for which application threads were stopped: 0.0001024 seconds, Stopping threads took: 0.0000576 seconds +2021-01-27T13:16:41.466+0000: 10.185: Total time for which application threads were stopped: 0.0008373 seconds, Stopping threads took: 0.0007637 seconds +2021-01-27T13:16:41.467+0000: 10.185: Total time for which application threads were stopped: 0.0000607 seconds, Stopping threads took: 0.0000120 seconds +2021-01-27T13:16:41.474+0000: 10.192: Total time for which application threads were stopped: 0.0036575 seconds, Stopping threads took: 0.0035509 seconds +2021-01-27T13:16:41.480+0000: 10.199: Total time for which application threads were stopped: 0.0034656 seconds, Stopping threads took: 0.0032880 seconds +2021-01-27T13:16:41.485+0000: 10.204: Total time for which application threads were stopped: 0.0027800 seconds, Stopping threads took: 0.0027264 seconds +2021-01-27T13:16:41.488+0000: 10.207: Total time for which application threads were stopped: 0.0007990 seconds, Stopping threads took: 0.0007273 seconds +2021-01-27T13:16:41.493+0000: 10.211: Total time for which application threads were stopped: 0.0017870 seconds, Stopping threads took: 0.0017160 seconds +2021-01-27T13:16:41.495+0000: 10.213: Total time for which application threads were stopped: 0.0004943 seconds, Stopping threads took: 0.0004354 seconds +2021-01-27T13:16:41.959+0000: 10.677: Total time for which application threads were stopped: 0.0001622 seconds, Stopping threads took: 0.0000364 seconds +2021-01-27T13:16:42.585+0000: 11.304: [CMS-concurrent-abortable-preclean: 0.737/1.263 secs] [Times: user=0.80 sys=0.05, real=1.26 secs] +2021-01-27T13:16:42.588+0000: 11.307: [GC (CMS Final Remark) [YG occupancy: 142243 K (157248 K)]2021-01-27T13:16:42.589+0000: 11.308: [Rescan (parallel) , 0.1253047 secs]2021-01-27T13:16:42.716+0000: 11.434: [weak refs processing, 0.0010617 secs]2021-01-27T13:16:42.718+0000: 11.436: [class unloading, 0.0079592 secs]2021-01-27T13:16:42.727+0000: 11.445: [scrub symbol table, 0.0167278 secs]2021-01-27T13:16:42.745+0000: 11.463: [scrub string table, 0.0032758 secs][1 CMS-remark: 0K(349568K)] 142243K(506816K), 0.1632973 secs] [Times: user=0.09 sys=0.01, real=0.17 secs] +2021-01-27T13:16:42.753+0000: 11.472: Total time for which application threads were stopped: 0.1656243 seconds, Stopping threads took: 0.0000639 seconds +2021-01-27T13:16:42.805+0000: 11.524: [CMS-concurrent-sweep-start] +2021-01-27T13:16:42.805+0000: 11.524: [CMS-concurrent-sweep: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] +2021-01-27T13:16:42.806+0000: 11.525: [CMS-concurrent-reset-start] +2021-01-27T13:16:42.814+0000: 11.532: Total time for which application threads were stopped: 0.0003563 seconds, Stopping threads took: 0.0000243 seconds +2021-01-27T13:16:42.821+0000: 11.539: [CMS-concurrent-reset: 0.009/0.014 secs] [Times: user=0.00 sys=0.01, real=0.01 secs] +2021-01-27T13:16:42.948+0000: 11.667: [GC (Allocation Failure) 2021-01-27T13:16:42.949+0000: 11.668: [ParNew Desired survivor size 8945664 bytes, new threshold 6 (max 6) -- age 1: 5678808 bytes, 5678808 total -: 155756K->10197K(157248K), 0.1636639 secs] 155756K->15594K(506816K), 0.1715476 secs] [Times: user=0.09 sys=0.02, real=0.17 secs] -2021-01-26T15:11:00.397+0000: 12.335: Total time for which application threads were stopped: 0.1732165 seconds, Stopping threads took: 0.0001678 seconds -2021-01-26T15:11:00.399+0000: 12.337: Total time for which application threads were stopped: 0.0003045 seconds, Stopping threads took: 0.0001971 seconds -2021-01-26T15:11:00.399+0000: 12.337: Total time for which application threads were stopped: 0.0000448 seconds, Stopping threads took: 0.0000100 seconds -2021-01-26T15:11:00.399+0000: 12.337: Total time for which application threads were stopped: 0.0000487 seconds, Stopping threads took: 0.0000165 seconds -2021-01-26T15:11:00.408+0000: 12.346: Total time for which application threads were stopped: 0.0082031 seconds, Stopping threads took: 0.0080802 seconds -2021-01-26T15:11:00.408+0000: 12.346: Total time for which application threads were stopped: 0.0001397 seconds, Stopping threads took: 0.0000739 seconds -2021-01-26T15:11:00.408+0000: 12.346: Total time for which application threads were stopped: 0.0001614 seconds, Stopping threads took: 0.0000313 seconds -2021-01-26T15:11:00.410+0000: 12.348: Total time for which application threads were stopped: 0.0007654 seconds, Stopping threads took: 0.0007095 seconds -2021-01-26T15:11:00.412+0000: 12.350: Total time for which application threads were stopped: 0.0020902 seconds, Stopping threads took: 0.0020310 seconds -2021-01-26T15:11:00.413+0000: 12.351: Total time for which application threads were stopped: 0.0008683 seconds, Stopping threads took: 0.0008261 seconds -2021-01-26T15:11:00.413+0000: 12.351: Total time for which application threads were stopped: 0.0001137 seconds, Stopping threads took: 0.0000481 seconds -2021-01-26T15:11:00.413+0000: 12.351: Total time for which application threads were stopped: 0.0000478 seconds, Stopping threads took: 0.0000087 seconds -2021-01-26T15:11:00.416+0000: 12.354: Total time for which application threads were stopped: 0.0025961 seconds, Stopping threads took: 0.0025222 seconds -2021-01-26T15:11:00.416+0000: 12.354: Total time for which application threads were stopped: 0.0000452 seconds, Stopping threads took: 0.0000107 seconds -2021-01-26T15:11:00.417+0000: 12.355: Total time for which application threads were stopped: 0.0001043 seconds, Stopping threads took: 0.0000146 seconds -2021-01-26T15:11:00.417+0000: 12.355: Total time for which application threads were stopped: 0.0000449 seconds, Stopping threads took: 0.0000092 seconds -2021-01-26T15:11:00.417+0000: 12.355: Total time for which application threads were stopped: 0.0000408 seconds, Stopping threads took: 0.0000090 seconds -2021-01-26T15:11:00.418+0000: 12.356: Total time for which application threads were stopped: 0.0000464 seconds, Stopping threads took: 0.0000162 seconds -2021-01-26T15:11:00.418+0000: 12.356: Total time for which application threads were stopped: 0.0000543 seconds, Stopping threads took: 0.0000089 seconds -2021-01-26T15:11:00.418+0000: 12.356: Total time for which application threads were stopped: 0.0001766 seconds, Stopping threads took: 0.0001122 seconds -2021-01-26T15:11:00.418+0000: 12.356: Total time for which application threads were stopped: 0.0001965 seconds, Stopping threads took: 0.0001200 seconds -2021-01-26T15:11:00.811+0000: 12.749: Total time for which application threads were stopped: 0.0002298 seconds, Stopping threads took: 0.0001149 seconds -2021-01-26T15:11:01.329+0000: 13.267: Total time for which application threads were stopped: 0.0006705 seconds, Stopping threads took: 0.0001517 seconds -2021-01-26T15:11:01.371+0000: 13.309: Total time for which application threads were stopped: 0.0052189 seconds, Stopping threads took: 0.0047634 seconds -2021-01-26T15:11:02.157+0000: 14.095: Total time for which application threads were stopped: 0.0005018 seconds, Stopping threads took: 0.0000227 seconds -2021-01-26T15:11:02.479+0000: 14.417: Total time for which application threads were stopped: 0.0000884 seconds, Stopping threads took: 0.0000190 seconds -2021-01-26T15:11:02.495+0000: 14.433: Total time for which application threads were stopped: 0.0040439 seconds, Stopping threads took: 0.0039485 seconds -2021-01-26T15:11:02.507+0000: 14.445: Total time for which application threads were stopped: 0.0000895 seconds, Stopping threads took: 0.0000194 seconds -2021-01-26T15:11:03.518+0000: 15.456: Total time for which application threads were stopped: 0.0084981 seconds, Stopping threads took: 0.0084018 seconds -2021-01-26T15:11:03.598+0000: 15.536: [GC (Allocation Failure) 2021-01-26T15:11:03.599+0000: 15.537: [ParNew -Desired survivor size 8945664 bytes, new threshold 1 (max 6) -- age 1: 11786480 bytes, 11786480 total -- age 2: 47888 bytes, 11834368 total -: 149973K->12462K(157248K), 0.0821028 secs] 155370K->17860K(506816K), 0.0839347 secs] [Times: user=0.03 sys=0.01, real=0.09 secs] -2021-01-26T15:11:03.683+0000: 15.621: Total time for which application threads were stopped: 0.0856279 seconds, Stopping threads took: 0.0000256 seconds -2021-01-26T15:11:03.703+0000: 15.641: Total time for which application threads were stopped: 0.0085914 seconds, Stopping threads took: 0.0084499 seconds -2021-01-26T15:11:03.984+0000: 15.922: Total time for which application threads were stopped: 0.0005482 seconds, Stopping threads took: 0.0001227 seconds -2021-01-26T15:11:03.985+0000: 15.923: Total time for which application threads were stopped: 0.0004666 seconds, Stopping threads took: 0.0001128 seconds -2021-01-26T15:11:04.997+0000: 16.935: Total time for which application threads were stopped: 0.0072629 seconds, Stopping threads took: 0.0070604 seconds -2021-01-26T15:11:05.676+0000: 17.614: Total time for which application threads were stopped: 0.0005153 seconds, Stopping threads took: 0.0000721 seconds -2021-01-26T15:11:06.688+0000: 18.626: Total time for which application threads were stopped: 0.0074486 seconds, Stopping threads took: 0.0073351 seconds -2021-01-26T15:11:07.706+0000: 19.643: Total time for which application threads were stopped: 0.0132784 seconds, Stopping threads took: 0.0131171 seconds -2021-01-26T15:11:08.021+0000: 19.959: Total time for which application threads were stopped: 0.0001075 seconds, Stopping threads took: 0.0000209 seconds -2021-01-26T15:11:08.260+0000: 20.198: Total time for which application threads were stopped: 0.0005142 seconds, Stopping threads took: 0.0004281 seconds -2021-01-26T15:11:08.474+0000: 20.412: Total time for which application threads were stopped: 0.0001317 seconds, Stopping threads took: 0.0000338 seconds -2021-01-26T15:11:08.619+0000: 20.557: Total time for which application threads were stopped: 0.0001208 seconds, Stopping threads took: 0.0000204 seconds -2021-01-26T15:11:08.793+0000: 20.731: Total time for which application threads were stopped: 0.0003428 seconds, Stopping threads took: 0.0002514 seconds -2021-01-26T15:11:09.070+0000: 21.008: Total time for which application threads were stopped: 0.0002685 seconds, Stopping threads took: 0.0001500 seconds -2021-01-26T15:11:09.355+0000: 21.293: Total time for which application threads were stopped: 0.0008351 seconds, Stopping threads took: 0.0005198 seconds -2021-01-26T15:11:09.606+0000: 21.544: Total time for which application threads were stopped: 0.0001286 seconds, Stopping threads took: 0.0000317 seconds -2021-01-26T15:11:09.709+0000: 21.647: [GC (CMS Initial Mark) [1 CMS-initial-mark: 5397K(349568K)] 135030K(506816K), 0.1179132 secs] [Times: user=0.07 sys=0.00, real=0.12 secs] -2021-01-26T15:11:09.829+0000: 21.767: Total time for which application threads were stopped: 0.1318751 seconds, Stopping threads took: 0.0119435 seconds -2021-01-26T15:11:09.829+0000: 21.767: [CMS-concurrent-mark-start] -2021-01-26T15:11:09.887+0000: 21.825: Total time for which application threads were stopped: 0.0000844 seconds, Stopping threads took: 0.0000251 seconds -2021-01-26T15:11:09.917+0000: 21.855: [CMS-concurrent-mark: 0.087/0.087 secs] [Times: user=0.06 sys=0.00, real=0.08 secs] -2021-01-26T15:11:09.929+0000: 21.867: [CMS-concurrent-preclean-start] -2021-01-26T15:11:09.931+0000: 21.869: [CMS-concurrent-preclean: 0.002/0.002 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] -2021-01-26T15:11:09.941+0000: 21.879: [CMS-concurrent-abortable-preclean-start] -2021-01-26T15:11:10.075+0000: 22.013: Total time for which application threads were stopped: 0.0001101 seconds, Stopping threads took: 0.0000222 seconds -2021-01-26T15:11:10.277+0000: 22.215: Total time for which application threads were stopped: 0.0000979 seconds, Stopping threads took: 0.0000208 seconds -2021-01-26T15:11:10.539+0000: 22.477: Total time for which application threads were stopped: 0.0001465 seconds, Stopping threads took: 0.0000350 seconds -2021-01-26T15:11:10.790+0000: 22.728: Total time for which application threads were stopped: 0.0001411 seconds, Stopping threads took: 0.0000471 seconds -2021-01-26T15:11:11.006+0000: 22.944: Total time for which application threads were stopped: 0.0001318 seconds, Stopping threads took: 0.0000305 seconds -2021-01-26T15:11:11.348+0000: 23.286: Total time for which application threads were stopped: 0.0002664 seconds, Stopping threads took: 0.0001501 seconds -2021-01-26T15:11:11.597+0000: 23.536: Total time for which application threads were stopped: 0.0012003 seconds, Stopping threads took: 0.0001504 seconds -2021-01-26T15:11:11.825+0000: 23.762: Total time for which application threads were stopped: 0.0002773 seconds, Stopping threads took: 0.0001524 seconds -2021-01-26T15:11:12.084+0000: 24.022: Total time for which application threads were stopped: 0.0001787 seconds, Stopping threads took: 0.0000225 seconds -2021-01-26T15:11:12.114+0000: 24.052: [GC (Allocation Failure) 2021-01-26T15:11:12.118+0000: 24.056: [ParNew +- age 1: 5547792 bytes, 5547792 total +: 155745K->10150K(157248K), 0.2220356 secs] 155745K->15553K(506816K), 0.2241730 secs] [Times: user=0.10 sys=0.01, real=0.23 secs] +2021-01-27T13:16:43.175+0000: 11.893: Total time for which application threads were stopped: 0.2268083 seconds, Stopping threads took: 0.0000324 seconds +2021-01-27T13:16:43.211+0000: 11.930: Total time for which application threads were stopped: 0.0001833 seconds, Stopping threads took: 0.0000772 seconds +2021-01-27T13:16:43.216+0000: 11.935: Total time for which application threads were stopped: 0.0001673 seconds, Stopping threads took: 0.0000220 seconds +2021-01-27T13:16:43.221+0000: 11.939: Total time for which application threads were stopped: 0.0001036 seconds, Stopping threads took: 0.0000301 seconds +2021-01-27T13:16:43.228+0000: 11.947: Total time for which application threads were stopped: 0.0055460 seconds, Stopping threads took: 0.0054495 seconds +2021-01-27T13:16:43.230+0000: 11.948: Total time for which application threads were stopped: 0.0001664 seconds, Stopping threads took: 0.0000802 seconds +2021-01-27T13:16:43.230+0000: 11.949: Total time for which application threads were stopped: 0.0005482 seconds, Stopping threads took: 0.0000129 seconds +2021-01-27T13:16:43.249+0000: 11.967: Total time for which application threads were stopped: 0.0079796 seconds, Stopping threads took: 0.0078677 seconds +2021-01-27T13:16:43.251+0000: 11.970: Total time for which application threads were stopped: 0.0003488 seconds, Stopping threads took: 0.0000310 seconds +2021-01-27T13:16:43.253+0000: 11.972: Total time for which application threads were stopped: 0.0005747 seconds, Stopping threads took: 0.0003832 seconds +2021-01-27T13:16:43.255+0000: 11.973: Total time for which application threads were stopped: 0.0003166 seconds, Stopping threads took: 0.0001604 seconds +2021-01-27T13:16:43.255+0000: 11.974: Total time for which application threads were stopped: 0.0000647 seconds, Stopping threads took: 0.0000154 seconds +2021-01-27T13:16:43.265+0000: 11.984: Total time for which application threads were stopped: 0.0057276 seconds, Stopping threads took: 0.0056092 seconds +2021-01-27T13:16:43.266+0000: 11.984: Total time for which application threads were stopped: 0.0002117 seconds, Stopping threads took: 0.0001034 seconds +2021-01-27T13:16:43.281+0000: 12.000: Total time for which application threads were stopped: 0.0113007 seconds, Stopping threads took: 0.0112124 seconds +2021-01-27T13:16:43.288+0000: 12.007: Total time for which application threads were stopped: 0.0057278 seconds, Stopping threads took: 0.0056127 seconds +2021-01-27T13:16:43.289+0000: 12.007: Total time for which application threads were stopped: 0.0000716 seconds, Stopping threads took: 0.0000175 seconds +2021-01-27T13:16:43.289+0000: 12.008: Total time for which application threads were stopped: 0.0000517 seconds, Stopping threads took: 0.0000127 seconds +2021-01-27T13:16:43.307+0000: 12.025: Total time for which application threads were stopped: 0.0135910 seconds, Stopping threads took: 0.0135051 seconds +2021-01-27T13:16:43.308+0000: 12.027: Total time for which application threads were stopped: 0.0000921 seconds, Stopping threads took: 0.0000270 seconds +2021-01-27T13:16:43.311+0000: 12.030: Total time for which application threads were stopped: 0.0001508 seconds, Stopping threads took: 0.0000651 seconds +2021-01-27T13:16:43.619+0000: 12.338: Total time for which application threads were stopped: 0.0001171 seconds, Stopping threads took: 0.0000298 seconds +2021-01-27T13:16:44.062+0000: 12.781: Total time for which application threads were stopped: 0.0004320 seconds, Stopping threads took: 0.0000217 seconds +2021-01-27T13:16:44.166+0000: 12.884: Total time for which application threads were stopped: 0.0004715 seconds, Stopping threads took: 0.0000238 seconds +2021-01-27T13:16:45.164+0000: 13.883: Total time for which application threads were stopped: 0.0004072 seconds, Stopping threads took: 0.0000227 seconds +2021-01-27T13:16:45.458+0000: 14.176: Total time for which application threads were stopped: 0.0013364 seconds, Stopping threads took: 0.0000312 seconds +2021-01-27T13:16:45.474+0000: 14.193: Total time for which application threads were stopped: 0.0031652 seconds, Stopping threads took: 0.0030681 seconds +2021-01-27T13:16:45.486+0000: 14.205: Total time for which application threads were stopped: 0.0098744 seconds, Stopping threads took: 0.0097707 seconds +2021-01-27T13:16:46.503+0000: 15.222: Total time for which application threads were stopped: 0.0111930 seconds, Stopping threads took: 0.0110128 seconds +2021-01-27T13:16:46.524+0000: 15.243: [GC (Allocation Failure) 2021-01-27T13:16:46.525+0000: 15.244: [ParNew Desired survivor size 8945664 bytes, new threshold 1 (max 6) -- age 1: 14687136 bytes, 14687136 total -: 152238K->17471K(157248K), 0.1304406 secs] 157636K->25875K(506816K), 0.1360118 secs] [Times: user=0.09 sys=0.01, real=0.14 secs] -2021-01-26T15:11:12.252+0000: 24.190: Total time for which application threads were stopped: 0.1382336 seconds, Stopping threads took: 0.0000540 seconds -2021-01-26T15:11:12.543+0000: 24.481: Total time for which application threads were stopped: 0.0001254 seconds, Stopping threads took: 0.0000253 seconds -2021-01-26T15:11:12.767+0000: 24.705: Total time for which application threads were stopped: 0.0021572 seconds, Stopping threads took: 0.0002733 seconds -2021-01-26T15:11:13.032+0000: 24.970: Total time for which application threads were stopped: 0.0003119 seconds, Stopping threads took: 0.0001229 seconds -2021-01-26T15:11:13.187+0000: 25.125: Total time for which application threads were stopped: 0.0183551 seconds, Stopping threads took: 0.0163098 seconds -2021-01-26T15:11:13.368+0000: 25.306: Total time for which application threads were stopped: 0.0103349 seconds, Stopping threads took: 0.0101679 seconds -2021-01-26T15:11:13.537+0000: 25.475: Total time for which application threads were stopped: 0.0001582 seconds, Stopping threads took: 0.0000341 seconds -2021-01-26T15:11:13.765+0000: 25.703: Total time for which application threads were stopped: 0.0000957 seconds, Stopping threads took: 0.0000242 seconds -2021-01-26T15:11:13.889+0000: 25.827: Total time for which application threads were stopped: 0.0001317 seconds, Stopping threads took: 0.0000266 seconds -2021-01-26T15:11:14.138+0000: 26.076: Total time for which application threads were stopped: 0.0114172 seconds, Stopping threads took: 0.0003046 seconds -2021-01-26T15:11:14.516+0000: 26.454: Total time for which application threads were stopped: 0.0001186 seconds, Stopping threads took: 0.0000237 seconds -2021-01-26T15:11:14.855+0000: 26.793: Total time for which application threads were stopped: 0.0003342 seconds, Stopping threads took: 0.0000238 seconds -2021-01-26T15:11:15.093+0000: 27.031: Total time for which application threads were stopped: 0.0001408 seconds, Stopping threads took: 0.0000248 seconds - CMS: abort preclean due to time 2021-01-26T15:11:15.122+0000: 27.060: [CMS-concurrent-abortable-preclean: 3.831/5.181 secs] [Times: user=3.16 sys=0.13, real=5.18 secs] -2021-01-26T15:11:15.145+0000: 27.083: [GC (CMS Final Remark) [YG occupancy: 58428 K (157248 K)]2021-01-26T15:11:15.146+0000: 27.084: [Rescan (parallel) , 0.0628157 secs]2021-01-26T15:11:15.211+0000: 27.149: [weak refs processing, 0.0031204 secs]2021-01-26T15:11:15.215+0000: 27.153: [class unloading, 0.0397165 secs]2021-01-26T15:11:15.259+0000: 27.197: [scrub symbol table, 0.0803251 secs]2021-01-26T15:11:15.348+0000: 27.286: [scrub string table, 0.0016872 secs][1 CMS-remark: 8403K(349568K)] 66832K(506816K), 0.2071906 secs] [Times: user=0.05 sys=0.00, real=0.21 secs] -2021-01-26T15:11:15.357+0000: 27.295: Total time for which application threads were stopped: 0.2248586 seconds, Stopping threads took: 0.0128752 seconds -2021-01-26T15:11:15.361+0000: 27.299: [CMS-concurrent-sweep-start] -2021-01-26T15:11:15.398+0000: 27.336: [CMS-concurrent-sweep: 0.037/0.037 secs] [Times: user=0.02 sys=0.00, real=0.03 secs] -2021-01-26T15:11:15.401+0000: 27.339: [CMS-concurrent-reset-start] -2021-01-26T15:11:15.401+0000: 27.339: [CMS-concurrent-reset: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] -2021-01-26T15:11:16.363+0000: 28.301: Total time for which application threads were stopped: 0.0053211 seconds, Stopping threads took: 0.0052097 seconds -2021-01-26T15:11:17.377+0000: 29.315: Total time for which application threads were stopped: 0.0120503 seconds, Stopping threads took: 0.0119483 seconds -2021-01-26T15:11:18.379+0000: 30.317: Total time for which application threads were stopped: 0.0015971 seconds, Stopping threads took: 0.0001858 seconds -2021-01-26T15:11:18.445+0000: 30.383: Total time for which application threads were stopped: 0.0086938 seconds, Stopping threads took: 0.0085792 seconds -2021-01-26T15:11:18.462+0000: 30.400: Total time for which application threads were stopped: 0.0076789 seconds, Stopping threads took: 0.0074643 seconds -2021-01-26T15:11:18.467+0000: 30.405: Total time for which application threads were stopped: 0.0030642 seconds, Stopping threads took: 0.0029605 seconds -2021-01-26T15:11:18.473+0000: 30.411: Total time for which application threads were stopped: 0.0006335 seconds, Stopping threads took: 0.0004763 seconds -2021-01-26T15:11:18.496+0000: 30.434: Total time for which application threads were stopped: 0.0124041 seconds, Stopping threads took: 0.0121905 seconds -2021-01-26T15:11:18.503+0000: 30.441: Total time for which application threads were stopped: 0.0047253 seconds, Stopping threads took: 0.0019768 seconds -2021-01-26T15:11:18.767+0000: 30.705: Total time for which application threads were stopped: 0.0012778 seconds, Stopping threads took: 0.0001346 seconds -2021-01-26T15:11:19.344+0000: 31.282: Total time for which application threads were stopped: 0.0005681 seconds, Stopping threads took: 0.0000242 seconds -2021-01-26T15:11:19.837+0000: 31.775: Total time for which application threads were stopped: 0.0003217 seconds, Stopping threads took: 0.0000603 seconds -2021-01-26T15:11:20.841+0000: 32.779: Total time for which application threads were stopped: 0.0032846 seconds, Stopping threads took: 0.0031266 seconds -2021-01-26T15:11:21.846+0000: 33.784: Total time for which application threads were stopped: 0.0021162 seconds, Stopping threads took: 0.0019990 seconds -2021-01-26T15:11:22.412+0000: 34.350: [GC (Allocation Failure) 2021-01-26T15:11:22.415+0000: 34.353: [ParNew +- age 1: 11529512 bytes, 11529512 total +- age 2: 30896 bytes, 11560408 total +: 149926K->12375K(157248K), 0.0725966 secs] 155329K->17778K(506816K), 0.0750913 secs] [Times: user=0.05 sys=0.00, real=0.07 secs] +2021-01-27T13:16:46.601+0000: 15.320: Total time for which application threads were stopped: 0.0770476 seconds, Stopping threads took: 0.0001348 seconds +2021-01-27T13:16:46.606+0000: 15.324: Total time for which application threads were stopped: 0.0004557 seconds, Stopping threads took: 0.0004007 seconds +2021-01-27T13:16:46.944+0000: 15.663: Total time for which application threads were stopped: 0.0008384 seconds, Stopping threads took: 0.0001910 seconds +2021-01-27T13:16:46.947+0000: 15.666: Total time for which application threads were stopped: 0.0008871 seconds, Stopping threads took: 0.0002161 seconds +2021-01-27T13:16:47.960+0000: 16.678: Total time for which application threads were stopped: 0.0122812 seconds, Stopping threads took: 0.0119434 seconds +2021-01-27T13:16:48.017+0000: 16.735: Total time for which application threads were stopped: 0.0002798 seconds, Stopping threads took: 0.0000323 seconds +2021-01-27T13:16:48.987+0000: 17.705: Total time for which application threads were stopped: 0.0015509 seconds, Stopping threads took: 0.0010001 seconds +2021-01-27T13:16:49.988+0000: 18.707: Total time for which application threads were stopped: 0.0001051 seconds, Stopping threads took: 0.0000380 seconds +2021-01-27T13:16:51.003+0000: 19.722: Total time for which application threads were stopped: 0.0136650 seconds, Stopping threads took: 0.0133768 seconds +2021-01-27T13:16:52.006+0000: 20.724: Total time for which application threads were stopped: 0.0003928 seconds, Stopping threads took: 0.0002318 seconds +2021-01-27T13:16:52.184+0000: 20.903: Total time for which application threads were stopped: 0.0001015 seconds, Stopping threads took: 0.0000259 seconds +2021-01-27T13:16:52.368+0000: 21.087: Total time for which application threads were stopped: 0.0001434 seconds, Stopping threads took: 0.0000653 seconds +2021-01-27T13:16:52.470+0000: 21.188: Total time for which application threads were stopped: 0.0001291 seconds, Stopping threads took: 0.0000249 seconds +2021-01-27T13:16:52.638+0000: 21.357: [GC (CMS Initial Mark) [1 CMS-initial-mark: 5402K(349568K)] 125865K(506816K), 0.1649763 secs] [Times: user=0.07 sys=0.00, real=0.17 secs] +2021-01-27T13:16:52.806+0000: 21.524: Total time for which application threads were stopped: 0.1909221 seconds, Stopping threads took: 0.0238479 seconds +2021-01-27T13:16:52.810+0000: 21.528: [CMS-concurrent-mark-start] +2021-01-27T13:16:52.913+0000: 21.632: [CMS-concurrent-mark: 0.104/0.104 secs] [Times: user=0.07 sys=0.00, real=0.11 secs] +2021-01-27T13:16:52.916+0000: 21.635: Total time for which application threads were stopped: 0.0015610 seconds, Stopping threads took: 0.0005384 seconds +2021-01-27T13:16:52.917+0000: 21.636: [CMS-concurrent-preclean-start] +2021-01-27T13:16:52.935+0000: 21.654: [CMS-concurrent-preclean: 0.018/0.018 secs] [Times: user=0.01 sys=0.00, real=0.02 secs] +2021-01-27T13:16:52.940+0000: 21.658: [CMS-concurrent-abortable-preclean-start] +2021-01-27T13:16:53.283+0000: 22.002: Total time for which application threads were stopped: 0.0001093 seconds, Stopping threads took: 0.0000235 seconds +2021-01-27T13:16:53.699+0000: 22.417: Total time for which application threads were stopped: 0.0001446 seconds, Stopping threads took: 0.0000389 seconds +2021-01-27T13:16:53.874+0000: 22.592: Total time for which application threads were stopped: 0.0001726 seconds, Stopping threads took: 0.0000229 seconds +2021-01-27T13:16:54.050+0000: 22.768: Total time for which application threads were stopped: 0.0002775 seconds, Stopping threads took: 0.0001491 seconds +2021-01-27T13:16:54.363+0000: 23.081: Total time for which application threads were stopped: 0.0305682 seconds, Stopping threads took: 0.0211535 seconds +2021-01-27T13:16:54.455+0000: 23.174: Total time for which application threads were stopped: 0.0000980 seconds, Stopping threads took: 0.0000259 seconds +2021-01-27T13:16:54.689+0000: 23.408: Total time for which application threads were stopped: 0.0017786 seconds, Stopping threads took: 0.0000234 seconds +2021-01-27T13:16:54.890+0000: 23.609: Total time for which application threads were stopped: 0.0000829 seconds, Stopping threads took: 0.0000238 seconds +2021-01-27T13:16:55.094+0000: 23.813: Total time for which application threads were stopped: 0.0001176 seconds, Stopping threads took: 0.0000274 seconds +2021-01-27T13:16:55.365+0000: 24.083: Total time for which application threads were stopped: 0.0001085 seconds, Stopping threads took: 0.0000252 seconds +2021-01-27T13:16:55.547+0000: 24.265: Total time for which application threads were stopped: 0.0000903 seconds, Stopping threads took: 0.0000223 seconds +2021-01-27T13:16:55.671+0000: 24.389: Total time for which application threads were stopped: 0.0000958 seconds, Stopping threads took: 0.0000295 seconds +2021-01-27T13:16:55.887+0000: 24.605: [GC (Allocation Failure) 2021-01-27T13:16:55.888+0000: 24.606: [ParNew2021-01-27T13:16:55.971+0000: 24.690: [CMS-concurrent-abortable-preclean: 2.284/3.032 secs] [Times: user=1.86 sys=0.07, real=3.03 secs] + Desired survivor size 8945664 bytes, new threshold 1 (max 6) -- age 1: 16567704 bytes, 16567704 total -: 157247K->17471K(157248K), 0.2695602 secs] 165548K->32157K(506816K), 0.3076263 secs] [Times: user=0.19 sys=0.01, real=0.31 secs] -2021-01-26T15:11:22.724+0000: 34.662: Total time for which application threads were stopped: 0.3122844 seconds, Stopping threads took: 0.0002506 seconds -2021-01-26T15:11:23.729+0000: 35.667: Total time for which application threads were stopped: 0.0051866 seconds, Stopping threads took: 0.0050384 seconds -2021-01-26T15:11:23.866+0000: 35.804: Total time for which application threads were stopped: 0.0008207 seconds, Stopping threads took: 0.0001640 seconds -2021-01-26T15:11:23.937+0000: 35.875: Total time for which application threads were stopped: 0.0041037 seconds, Stopping threads took: 0.0003091 seconds -2021-01-26T15:11:23.940+0000: 35.878: Total time for which application threads were stopped: 0.0002653 seconds, Stopping threads took: 0.0001454 seconds -2021-01-26T15:11:23.947+0000: 35.885: Total time for which application threads were stopped: 0.0005128 seconds, Stopping threads took: 0.0002895 seconds -2021-01-26T15:11:23.953+0000: 35.891: Total time for which application threads were stopped: 0.0047167 seconds, Stopping threads took: 0.0012296 seconds -2021-01-26T15:11:23.957+0000: 35.895: Total time for which application threads were stopped: 0.0003060 seconds, Stopping threads took: 0.0000873 seconds -2021-01-26T15:11:23.958+0000: 35.896: Total time for which application threads were stopped: 0.0002235 seconds, Stopping threads took: 0.0000931 seconds -2021-01-26T15:11:23.967+0000: 35.905: Total time for which application threads were stopped: 0.0070374 seconds, Stopping threads took: 0.0058403 seconds -2021-01-26T15:11:23.980+0000: 35.918: Total time for which application threads were stopped: 0.0096935 seconds, Stopping threads took: 0.0002227 seconds -2021-01-26T15:11:23.985+0000: 35.923: Total time for which application threads were stopped: 0.0046005 seconds, Stopping threads took: 0.0039752 seconds -2021-01-26T15:11:23.998+0000: 35.936: Total time for which application threads were stopped: 0.0056973 seconds, Stopping threads took: 0.0047904 seconds -2021-01-26T15:11:24.003+0000: 35.941: Total time for which application threads were stopped: 0.0013803 seconds, Stopping threads took: 0.0002589 seconds -2021-01-26T15:11:24.006+0000: 35.944: Total time for which application threads were stopped: 0.0002791 seconds, Stopping threads took: 0.0001424 seconds -2021-01-26T15:11:24.018+0000: 35.956: Total time for which application threads were stopped: 0.0092991 seconds, Stopping threads took: 0.0090800 seconds -2021-01-26T15:11:24.027+0000: 35.965: Total time for which application threads were stopped: 0.0082278 seconds, Stopping threads took: 0.0077451 seconds -2021-01-26T15:11:24.070+0000: 36.008: Total time for which application threads were stopped: 0.0042770 seconds, Stopping threads took: 0.0041458 seconds -2021-01-26T15:11:24.131+0000: 36.068: Total time for which application threads were stopped: 0.0002779 seconds, Stopping threads took: 0.0001663 seconds -2021-01-26T15:11:24.148+0000: 36.086: Total time for which application threads were stopped: 0.0170518 seconds, Stopping threads took: 0.0168143 seconds -2021-01-26T15:11:24.151+0000: 36.089: Total time for which application threads were stopped: 0.0003913 seconds, Stopping threads took: 0.0002618 seconds -2021-01-26T15:11:24.159+0000: 36.097: Total time for which application threads were stopped: 0.0003901 seconds, Stopping threads took: 0.0002489 seconds -2021-01-26T15:11:24.163+0000: 36.101: Total time for which application threads were stopped: 0.0002667 seconds, Stopping threads took: 0.0001600 seconds -2021-01-26T15:11:24.172+0000: 36.110: Total time for which application threads were stopped: 0.0003120 seconds, Stopping threads took: 0.0001495 seconds -2021-01-26T15:11:24.175+0000: 36.113: Total time for which application threads were stopped: 0.0000842 seconds, Stopping threads took: 0.0000258 seconds -2021-01-26T15:11:24.180+0000: 36.118: Total time for which application threads were stopped: 0.0000940 seconds, Stopping threads took: 0.0000303 seconds -2021-01-26T15:11:24.183+0000: 36.121: Total time for which application threads were stopped: 0.0004023 seconds, Stopping threads took: 0.0002432 seconds -2021-01-26T15:11:24.274+0000: 36.212: Total time for which application threads were stopped: 0.0006591 seconds, Stopping threads took: 0.0004771 seconds -2021-01-26T15:11:24.282+0000: 36.220: Total time for which application threads were stopped: 0.0004555 seconds, Stopping threads took: 0.0002792 seconds -2021-01-26T15:11:24.285+0000: 36.223: Total time for which application threads were stopped: 0.0001003 seconds, Stopping threads took: 0.0000267 seconds -2021-01-26T15:11:24.289+0000: 36.227: Total time for which application threads were stopped: 0.0000965 seconds, Stopping threads took: 0.0000306 seconds -2021-01-26T15:11:24.300+0000: 36.238: Total time for which application threads were stopped: 0.0003000 seconds, Stopping threads took: 0.0001935 seconds -2021-01-26T15:11:24.303+0000: 36.241: Total time for which application threads were stopped: 0.0005807 seconds, Stopping threads took: 0.0000301 seconds -2021-01-26T15:11:24.319+0000: 36.257: Total time for which application threads were stopped: 0.0001504 seconds, Stopping threads took: 0.0000558 seconds -2021-01-26T15:11:24.319+0000: 36.257: Total time for which application threads were stopped: 0.0002214 seconds, Stopping threads took: 0.0001393 seconds -2021-01-26T15:11:24.325+0000: 36.263: Total time for which application threads were stopped: 0.0000860 seconds, Stopping threads took: 0.0000263 seconds -2021-01-26T15:11:24.325+0000: 36.263: Total time for which application threads were stopped: 0.0000570 seconds, Stopping threads took: 0.0000155 seconds -2021-01-26T15:11:24.325+0000: 36.263: Total time for which application threads were stopped: 0.0000520 seconds, Stopping threads took: 0.0000138 seconds -2021-01-26T15:11:24.596+0000: 36.534: Total time for which application threads were stopped: 0.0028541 seconds, Stopping threads took: 0.0026888 seconds -2021-01-26T15:11:24.604+0000: 36.542: Total time for which application threads were stopped: 0.0019812 seconds, Stopping threads took: 0.0018470 seconds -2021-01-26T15:11:24.610+0000: 36.547: Total time for which application threads were stopped: 0.0003179 seconds, Stopping threads took: 0.0001670 seconds -2021-01-26T15:11:24.612+0000: 36.550: Total time for which application threads were stopped: 0.0002916 seconds, Stopping threads took: 0.0000390 seconds -2021-01-26T15:11:24.618+0000: 36.556: Total time for which application threads were stopped: 0.0003283 seconds, Stopping threads took: 0.0001924 seconds -2021-01-26T15:11:24.650+0000: 36.588: Total time for which application threads were stopped: 0.0190182 seconds, Stopping threads took: 0.0188697 seconds -2021-01-26T15:11:24.657+0000: 36.595: Total time for which application threads were stopped: 0.0001586 seconds, Stopping threads took: 0.0000307 seconds -2021-01-26T15:11:24.658+0000: 36.596: Total time for which application threads were stopped: 0.0004548 seconds, Stopping threads took: 0.0001960 seconds -2021-01-26T15:11:24.661+0000: 36.598: Total time for which application threads were stopped: 0.0002662 seconds, Stopping threads took: 0.0001645 seconds -2021-01-26T15:11:24.682+0000: 36.620: Total time for which application threads were stopped: 0.0181863 seconds, Stopping threads took: 0.0180884 seconds -2021-01-26T15:11:24.691+0000: 36.629: Total time for which application threads were stopped: 0.0080714 seconds, Stopping threads took: 0.0079859 seconds -2021-01-26T15:11:24.718+0000: 36.656: Total time for which application threads were stopped: 0.0001365 seconds, Stopping threads took: 0.0000746 seconds -2021-01-26T15:11:24.778+0000: 36.716: Total time for which application threads were stopped: 0.0294427 seconds, Stopping threads took: 0.0293136 seconds -2021-01-26T15:11:24.830+0000: 36.768: Total time for which application threads were stopped: 0.0003388 seconds, Stopping threads took: 0.0001920 seconds -2021-01-26T15:11:24.864+0000: 36.802: Total time for which application threads were stopped: 0.0329996 seconds, Stopping threads took: 0.0328647 seconds -2021-01-26T15:11:24.883+0000: 36.821: Total time for which application threads were stopped: 0.0126022 seconds, Stopping threads took: 0.0125090 seconds -2021-01-26T15:11:24.890+0000: 36.828: Total time for which application threads were stopped: 0.0000980 seconds, Stopping threads took: 0.0000309 seconds -2021-01-26T15:11:24.928+0000: 36.866: Total time for which application threads were stopped: 0.0211048 seconds, Stopping threads took: 0.0209978 seconds -2021-01-26T15:11:24.937+0000: 36.875: Total time for which application threads were stopped: 0.0068676 seconds, Stopping threads took: 0.0066967 seconds -2021-01-26T15:11:24.954+0000: 36.892: Total time for which application threads were stopped: 0.0002424 seconds, Stopping threads took: 0.0001074 seconds -2021-01-26T15:11:24.966+0000: 36.904: Total time for which application threads were stopped: 0.0114976 seconds, Stopping threads took: 0.0113892 seconds -2021-01-26T15:11:24.969+0000: 36.907: Total time for which application threads were stopped: 0.0001475 seconds, Stopping threads took: 0.0000718 seconds -2021-01-26T15:11:24.969+0000: 36.907: Total time for which application threads were stopped: 0.0000648 seconds, Stopping threads took: 0.0000165 seconds -2021-01-26T15:11:24.977+0000: 36.915: Total time for which application threads were stopped: 0.0058322 seconds, Stopping threads took: 0.0056960 seconds -2021-01-26T15:11:24.992+0000: 36.930: Total time for which application threads were stopped: 0.0062899 seconds, Stopping threads took: 0.0061576 seconds -2021-01-26T15:11:25.003+0000: 36.941: Total time for which application threads were stopped: 0.0002523 seconds, Stopping threads took: 0.0000877 seconds -2021-01-26T15:11:25.006+0000: 36.944: Total time for which application threads were stopped: 0.0027002 seconds, Stopping threads took: 0.0024047 seconds -2021-01-26T15:11:25.027+0000: 36.965: Total time for which application threads were stopped: 0.0035133 seconds, Stopping threads took: 0.0033948 seconds -2021-01-26T15:11:25.031+0000: 36.969: Total time for which application threads were stopped: 0.0001621 seconds, Stopping threads took: 0.0000299 seconds -2021-01-26T15:11:25.032+0000: 36.970: Total time for which application threads were stopped: 0.0002731 seconds, Stopping threads took: 0.0000179 seconds -2021-01-26T15:11:25.036+0000: 36.974: Total time for which application threads were stopped: 0.0001196 seconds, Stopping threads took: 0.0000303 seconds -2021-01-26T15:11:25.043+0000: 36.981: Total time for which application threads were stopped: 0.0041890 seconds, Stopping threads took: 0.0040212 seconds -2021-01-26T15:11:25.047+0000: 36.985: Total time for which application threads were stopped: 0.0003768 seconds, Stopping threads took: 0.0000496 seconds -2021-01-26T15:11:25.056+0000: 36.994: Total time for which application threads were stopped: 0.0088715 seconds, Stopping threads took: 0.0087439 seconds -2021-01-26T15:11:25.057+0000: 36.995: Total time for which application threads were stopped: 0.0002647 seconds, Stopping threads took: 0.0001912 seconds -2021-01-26T15:11:25.062+0000: 37.000: Total time for which application threads were stopped: 0.0038366 seconds, Stopping threads took: 0.0037157 seconds -2021-01-26T15:11:25.065+0000: 37.002: Total time for which application threads were stopped: 0.0016317 seconds, Stopping threads took: 0.0014601 seconds -2021-01-26T15:11:25.070+0000: 37.008: Total time for which application threads were stopped: 0.0001696 seconds, Stopping threads took: 0.0000353 seconds -2021-01-26T15:11:25.073+0000: 37.011: Total time for which application threads were stopped: 0.0027231 seconds, Stopping threads took: 0.0025986 seconds -2021-01-26T15:11:25.075+0000: 37.013: Total time for which application threads were stopped: 0.0005079 seconds, Stopping threads took: 0.0004272 seconds -2021-01-26T15:11:25.083+0000: 37.021: Total time for which application threads were stopped: 0.0059723 seconds, Stopping threads took: 0.0058512 seconds -2021-01-26T15:11:25.085+0000: 37.023: Total time for which application threads were stopped: 0.0006241 seconds, Stopping threads took: 0.0005378 seconds -2021-01-26T15:11:25.087+0000: 37.025: Total time for which application threads were stopped: 0.0001515 seconds, Stopping threads took: 0.0000926 seconds -2021-01-26T15:11:25.609+0000: 37.547: Total time for which application threads were stopped: 0.0001925 seconds, Stopping threads took: 0.0000334 seconds -2021-01-26T15:11:25.617+0000: 37.555: Total time for which application threads were stopped: 0.0052640 seconds, Stopping threads took: 0.0051331 seconds -2021-01-26T15:11:25.620+0000: 37.558: Total time for which application threads were stopped: 0.0002096 seconds, Stopping threads took: 0.0000261 seconds -2021-01-26T15:11:25.627+0000: 37.564: Total time for which application threads were stopped: 0.0004108 seconds, Stopping threads took: 0.0002770 seconds -2021-01-26T15:11:25.630+0000: 37.568: Total time for which application threads were stopped: 0.0002038 seconds, Stopping threads took: 0.0000850 seconds -2021-01-26T15:11:25.640+0000: 37.578: Total time for which application threads were stopped: 0.0048296 seconds, Stopping threads took: 0.0046660 seconds -2021-01-26T15:11:25.660+0000: 37.598: Total time for which application threads were stopped: 0.0002331 seconds, Stopping threads took: 0.0000407 seconds -2021-01-26T15:11:25.719+0000: 37.657: Total time for which application threads were stopped: 0.0008862 seconds, Stopping threads took: 0.0006900 seconds -2021-01-26T15:11:25.782+0000: 37.720: Total time for which application threads were stopped: 0.0379646 seconds, Stopping threads took: 0.0375688 seconds -2021-01-26T15:11:25.788+0000: 37.726: Total time for which application threads were stopped: 0.0030981 seconds, Stopping threads took: 0.0029609 seconds -2021-01-26T15:11:25.810+0000: 37.748: Total time for which application threads were stopped: 0.0168719 seconds, Stopping threads took: 0.0140467 seconds -2021-01-26T15:11:25.829+0000: 37.767: Total time for which application threads were stopped: 0.0134352 seconds, Stopping threads took: 0.0132612 seconds -2021-01-26T15:11:25.833+0000: 37.771: Total time for which application threads were stopped: 0.0024876 seconds, Stopping threads took: 0.0023237 seconds -2021-01-26T15:11:25.834+0000: 37.772: Total time for which application threads were stopped: 0.0005436 seconds, Stopping threads took: 0.0004133 seconds -2021-01-26T15:11:25.836+0000: 37.774: Total time for which application threads were stopped: 0.0008640 seconds, Stopping threads took: 0.0007894 seconds -2021-01-26T15:11:25.839+0000: 37.777: Total time for which application threads were stopped: 0.0022892 seconds, Stopping threads took: 0.0021831 seconds -2021-01-26T15:11:25.840+0000: 37.778: Total time for which application threads were stopped: 0.0010843 seconds, Stopping threads took: 0.0009644 seconds -2021-01-26T15:11:25.846+0000: 37.784: Total time for which application threads were stopped: 0.0004621 seconds, Stopping threads took: 0.0003747 seconds -2021-01-26T15:11:25.850+0000: 37.788: Total time for which application threads were stopped: 0.0031760 seconds, Stopping threads took: 0.0030239 seconds -2021-01-26T15:11:25.852+0000: 37.790: Total time for which application threads were stopped: 0.0003497 seconds, Stopping threads took: 0.0002035 seconds -2021-01-26T15:11:25.874+0000: 37.812: Total time for which application threads were stopped: 0.0001219 seconds, Stopping threads took: 0.0000336 seconds -2021-01-26T15:11:25.881+0000: 37.819: Total time for which application threads were stopped: 0.0001608 seconds, Stopping threads took: 0.0000805 seconds -2021-01-26T15:11:25.883+0000: 37.821: Total time for which application threads were stopped: 0.0002703 seconds, Stopping threads took: 0.0001755 seconds -2021-01-26T15:11:25.949+0000: 37.887: Total time for which application threads were stopped: 0.0006783 seconds, Stopping threads took: 0.0000359 seconds -2021-01-26T15:11:25.980+0000: 37.918: Total time for which application threads were stopped: 0.0068901 seconds, Stopping threads took: 0.0067482 seconds -2021-01-26T15:11:25.981+0000: 37.919: Total time for which application threads were stopped: 0.0003473 seconds, Stopping threads took: 0.0002628 seconds -2021-01-26T15:11:25.981+0000: 37.919: Total time for which application threads were stopped: 0.0003830 seconds, Stopping threads took: 0.0002381 seconds -2021-01-26T15:11:25.982+0000: 37.920: Total time for which application threads were stopped: 0.0005652 seconds, Stopping threads took: 0.0004755 seconds -2021-01-26T15:11:25.984+0000: 37.922: Total time for which application threads were stopped: 0.0004667 seconds, Stopping threads took: 0.0003811 seconds -2021-01-26T15:11:25.985+0000: 37.923: Total time for which application threads were stopped: 0.0003469 seconds, Stopping threads took: 0.0002646 seconds -2021-01-26T15:11:25.989+0000: 37.927: Total time for which application threads were stopped: 0.0041621 seconds, Stopping threads took: 0.0040387 seconds -2021-01-26T15:11:25.993+0000: 37.930: Total time for which application threads were stopped: 0.0002915 seconds, Stopping threads took: 0.0001914 seconds -2021-01-26T15:11:25.993+0000: 37.931: Total time for which application threads were stopped: 0.0005135 seconds, Stopping threads took: 0.0004249 seconds -2021-01-26T15:11:26.005+0000: 37.942: Total time for which application threads were stopped: 0.0085138 seconds, Stopping threads took: 0.0084031 seconds -2021-01-26T15:11:26.025+0000: 37.963: Total time for which application threads were stopped: 0.0058439 seconds, Stopping threads took: 0.0056656 seconds -2021-01-26T15:11:26.028+0000: 37.966: Total time for which application threads were stopped: 0.0001949 seconds, Stopping threads took: 0.0000974 seconds -2021-01-26T15:11:26.030+0000: 37.968: Total time for which application threads were stopped: 0.0006574 seconds, Stopping threads took: 0.0004444 seconds -2021-01-26T15:11:26.034+0000: 37.972: Total time for which application threads were stopped: 0.0026486 seconds, Stopping threads took: 0.0024391 seconds -2021-01-26T15:11:26.040+0000: 37.978: Total time for which application threads were stopped: 0.0013163 seconds, Stopping threads took: 0.0011570 seconds -2021-01-26T15:11:26.048+0000: 37.986: Total time for which application threads were stopped: 0.0012431 seconds, Stopping threads took: 0.0008243 seconds -2021-01-26T15:11:26.052+0000: 37.990: Total time for which application threads were stopped: 0.0003974 seconds, Stopping threads took: 0.0002343 seconds -2021-01-26T15:11:26.062+0000: 38.000: Total time for which application threads were stopped: 0.0101053 seconds, Stopping threads took: 0.0095321 seconds -2021-01-26T15:11:26.069+0000: 38.007: Total time for which application threads were stopped: 0.0039503 seconds, Stopping threads took: 0.0037281 seconds -2021-01-26T15:11:26.075+0000: 38.012: Total time for which application threads were stopped: 0.0003616 seconds, Stopping threads took: 0.0002245 seconds -2021-01-26T15:11:26.078+0000: 38.015: Total time for which application threads were stopped: 0.0003004 seconds, Stopping threads took: 0.0001733 seconds -2021-01-26T15:11:26.097+0000: 38.035: Total time for which application threads were stopped: 0.0080244 seconds, Stopping threads took: 0.0078850 seconds -2021-01-26T15:11:26.102+0000: 38.040: Total time for which application threads were stopped: 0.0040061 seconds, Stopping threads took: 0.0038500 seconds -2021-01-26T15:11:26.111+0000: 38.049: Total time for which application threads were stopped: 0.0058109 seconds, Stopping threads took: 0.0056964 seconds -2021-01-26T15:11:26.115+0000: 38.053: Total time for which application threads were stopped: 0.0028286 seconds, Stopping threads took: 0.0027113 seconds -2021-01-26T15:11:26.120+0000: 38.057: Total time for which application threads were stopped: 0.0013281 seconds, Stopping threads took: 0.0011440 seconds -2021-01-26T15:11:26.132+0000: 38.070: Total time for which application threads were stopped: 0.0021982 seconds, Stopping threads took: 0.0020554 seconds -2021-01-26T15:11:26.141+0000: 38.079: Total time for which application threads were stopped: 0.0040615 seconds, Stopping threads took: 0.0038657 seconds -2021-01-26T15:11:26.169+0000: 38.107: Total time for which application threads were stopped: 0.0029444 seconds, Stopping threads took: 0.0028176 seconds -2021-01-26T15:11:26.190+0000: 38.128: Total time for which application threads were stopped: 0.0084174 seconds, Stopping threads took: 0.0082529 seconds -2021-01-26T15:11:26.192+0000: 38.130: Total time for which application threads were stopped: 0.0001738 seconds, Stopping threads took: 0.0000617 seconds -2021-01-26T15:11:26.194+0000: 38.132: Total time for which application threads were stopped: 0.0001865 seconds, Stopping threads took: 0.0000421 seconds -2021-01-26T15:11:26.201+0000: 38.139: Total time for which application threads were stopped: 0.0031333 seconds, Stopping threads took: 0.0029153 seconds -2021-01-26T15:11:26.206+0000: 38.144: Total time for which application threads were stopped: 0.0044999 seconds, Stopping threads took: 0.0042757 seconds -2021-01-26T15:11:26.212+0000: 38.150: Total time for which application threads were stopped: 0.0041906 seconds, Stopping threads took: 0.0035794 seconds -2021-01-26T15:11:26.623+0000: 38.561: Total time for which application threads were stopped: 0.0004061 seconds, Stopping threads took: 0.0001715 seconds -2021-01-26T15:11:26.632+0000: 38.570: Total time for which application threads were stopped: 0.0009953 seconds, Stopping threads took: 0.0001537 seconds -2021-01-26T15:11:26.674+0000: 38.612: Total time for which application threads were stopped: 0.0076658 seconds, Stopping threads took: 0.0074959 seconds -2021-01-26T15:11:26.733+0000: 38.670: Total time for which application threads were stopped: 0.0103187 seconds, Stopping threads took: 0.0101884 seconds -2021-01-26T15:11:26.759+0000: 38.696: Total time for which application threads were stopped: 0.0029556 seconds, Stopping threads took: 0.0027644 seconds -2021-01-26T15:11:26.759+0000: 38.697: Total time for which application threads were stopped: 0.0001806 seconds, Stopping threads took: 0.0000225 seconds -2021-01-26T15:11:26.760+0000: 38.698: Total time for which application threads were stopped: 0.0002801 seconds, Stopping threads took: 0.0000169 seconds -2021-01-26T15:11:26.766+0000: 38.704: Total time for which application threads were stopped: 0.0005167 seconds, Stopping threads took: 0.0002562 seconds -2021-01-26T15:11:26.778+0000: 38.716: Total time for which application threads were stopped: 0.0090073 seconds, Stopping threads took: 0.0088247 seconds -2021-01-26T15:11:26.782+0000: 38.720: Total time for which application threads were stopped: 0.0019188 seconds, Stopping threads took: 0.0016713 seconds -2021-01-26T15:11:26.807+0000: 38.745: Total time for which application threads were stopped: 0.0231552 seconds, Stopping threads took: 0.0228148 seconds -2021-01-26T15:11:26.824+0000: 38.762: Total time for which application threads were stopped: 0.0123924 seconds, Stopping threads took: 0.0120027 seconds -2021-01-26T15:11:26.836+0000: 38.774: Total time for which application threads were stopped: 0.0050377 seconds, Stopping threads took: 0.0047549 seconds -2021-01-26T15:11:26.850+0000: 38.788: Total time for which application threads were stopped: 0.0056116 seconds, Stopping threads took: 0.0053962 seconds -2021-01-26T15:11:26.959+0000: 38.897: Total time for which application threads were stopped: 0.0224690 seconds, Stopping threads took: 0.0222315 seconds -2021-01-26T15:11:26.970+0000: 38.908: Total time for which application threads were stopped: 0.0001324 seconds, Stopping threads took: 0.0000422 seconds -2021-01-26T15:11:26.994+0000: 38.932: Total time for which application threads were stopped: 0.0165787 seconds, Stopping threads took: 0.0147382 seconds -2021-01-26T15:11:27.005+0000: 38.942: Total time for which application threads were stopped: 0.0100500 seconds, Stopping threads took: 0.0097076 seconds -2021-01-26T15:11:27.115+0000: 39.053: Total time for which application threads were stopped: 0.0137895 seconds, Stopping threads took: 0.0135880 seconds -2021-01-26T15:11:27.123+0000: 39.061: Total time for which application threads were stopped: 0.0002210 seconds, Stopping threads took: 0.0001069 seconds -2021-01-26T15:11:27.138+0000: 39.076: Total time for which application threads were stopped: 0.0036012 seconds, Stopping threads took: 0.0032943 seconds -2021-01-26T15:11:27.192+0000: 39.130: Total time for which application threads were stopped: 0.0198939 seconds, Stopping threads took: 0.0197176 seconds -2021-01-26T15:11:27.204+0000: 39.142: Total time for which application threads were stopped: 0.0044812 seconds, Stopping threads took: 0.0043264 seconds -2021-01-26T15:11:27.221+0000: 39.159: Total time for which application threads were stopped: 0.0130603 seconds, Stopping threads took: 0.0129232 seconds -2021-01-26T15:11:27.273+0000: 39.211: Total time for which application threads were stopped: 0.0003074 seconds, Stopping threads took: 0.0000503 seconds -2021-01-26T15:11:27.747+0000: 39.685: Total time for which application threads were stopped: 0.0003747 seconds, Stopping threads took: 0.0000516 seconds -2021-01-26T15:11:27.747+0000: 39.685: Total time for which application threads were stopped: 0.0001635 seconds, Stopping threads took: 0.0000233 seconds -2021-01-26T15:11:27.836+0000: 39.774: Total time for which application threads were stopped: 0.0003277 seconds, Stopping threads took: 0.0001876 seconds -2021-01-26T15:11:27.959+0000: 39.897: Total time for which application threads were stopped: 0.0312623 seconds, Stopping threads took: 0.0311057 seconds -2021-01-26T15:11:27.970+0000: 39.908: Total time for which application threads were stopped: 0.0003574 seconds, Stopping threads took: 0.0001898 seconds -2021-01-26T15:11:28.021+0000: 39.959: Total time for which application threads were stopped: 0.0034541 seconds, Stopping threads took: 0.0000392 seconds -2021-01-26T15:11:28.300+0000: 40.238: [GC (Allocation Failure) 2021-01-26T15:11:28.302+0000: 40.240: [ParNew +- age 1: 15949728 bytes, 15949728 total +: 152151K->17331K(157248K), 0.1367407 secs] 157554K->24561K(506816K), 0.1457361 secs] [Times: user=0.06 sys=0.01, real=0.15 secs] +2021-01-27T13:16:56.035+0000: 24.753: Total time for which application threads were stopped: 0.1485491 seconds, Stopping threads took: 0.0000240 seconds +2021-01-27T13:16:56.043+0000: 24.762: [GC (CMS Final Remark) [YG occupancy: 20067 K (157248 K)]2021-01-27T13:16:56.044+0000: 24.763: [Rescan (parallel) , 0.0367487 secs]2021-01-27T13:16:56.082+0000: 24.801: [weak refs processing, 0.0011357 secs]2021-01-27T13:16:56.086+0000: 24.805: [class unloading, 0.0403214 secs]2021-01-27T13:16:56.129+0000: 24.848: [scrub symbol table, 0.0799851 secs]2021-01-27T13:16:56.211+0000: 24.929: [scrub string table, 0.0020975 secs][1 CMS-remark: 7229K(349568K)] 27297K(506816K), 0.1741889 secs] [Times: user=0.08 sys=0.00, real=0.17 secs] +2021-01-27T13:16:56.219+0000: 24.938: Total time for which application threads were stopped: 0.1777637 seconds, Stopping threads took: 0.0014288 seconds +2021-01-27T13:16:56.230+0000: 24.948: [CMS-concurrent-sweep-start] +2021-01-27T13:16:56.243+0000: 24.962: [CMS-concurrent-sweep: 0.013/0.013 secs] [Times: user=0.01 sys=0.00, real=0.02 secs] +2021-01-27T13:16:56.252+0000: 24.971: [CMS-concurrent-reset-start] +2021-01-27T13:16:56.253+0000: 24.971: [CMS-concurrent-reset: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] +2021-01-27T13:16:57.223+0000: 25.942: Total time for which application threads were stopped: 0.0032377 seconds, Stopping threads took: 0.0031161 seconds +2021-01-27T13:16:58.232+0000: 26.951: Total time for which application threads were stopped: 0.0081886 seconds, Stopping threads took: 0.0080982 seconds +2021-01-27T13:16:59.234+0000: 27.953: Total time for which application threads were stopped: 0.0016808 seconds, Stopping threads took: 0.0015723 seconds +2021-01-27T13:17:00.238+0000: 28.956: Total time for which application threads were stopped: 0.0002708 seconds, Stopping threads took: 0.0001631 seconds +2021-01-27T13:17:01.252+0000: 29.970: Total time for which application threads were stopped: 0.0119740 seconds, Stopping threads took: 0.0118627 seconds +2021-01-27T13:17:01.507+0000: 30.225: Total time for which application threads were stopped: 0.0005497 seconds, Stopping threads took: 0.0000276 seconds +2021-01-27T13:17:02.100+0000: 30.818: Total time for which application threads were stopped: 0.0005779 seconds, Stopping threads took: 0.0000230 seconds +2021-01-27T13:17:02.139+0000: 30.857: Total time for which application threads were stopped: 0.0049771 seconds, Stopping threads took: 0.0048413 seconds +2021-01-27T13:17:02.140+0000: 30.859: Total time for which application threads were stopped: 0.0003787 seconds, Stopping threads took: 0.0002800 seconds +2021-01-27T13:17:02.141+0000: 30.859: Total time for which application threads were stopped: 0.0001362 seconds, Stopping threads took: 0.0000550 seconds +2021-01-27T13:17:02.141+0000: 30.860: Total time for which application threads were stopped: 0.0004353 seconds, Stopping threads took: 0.0003115 seconds +2021-01-27T13:17:02.147+0000: 30.865: Total time for which application threads were stopped: 0.0049043 seconds, Stopping threads took: 0.0047479 seconds +2021-01-27T13:17:02.492+0000: 31.211: Total time for which application threads were stopped: 0.0001967 seconds, Stopping threads took: 0.0000231 seconds +2021-01-27T13:17:03.499+0000: 32.218: Total time for which application threads were stopped: 0.0066971 seconds, Stopping threads took: 0.0066048 seconds +2021-01-27T13:17:04.524+0000: 33.242: Total time for which application threads were stopped: 0.0231147 seconds, Stopping threads took: 0.0230001 seconds +2021-01-27T13:17:04.648+0000: 33.367: [GC (Allocation Failure) 2021-01-27T13:17:04.649+0000: 33.368: [ParNew Desired survivor size 8945664 bytes, new threshold 1 (max 6) -- age 1: 10557640 bytes, 10557640 total -: 157247K->12448K(157248K), 0.3576459 secs] 171933K->82587K(506816K), 0.3634702 secs] [Times: user=0.24 sys=0.03, real=0.37 secs] -2021-01-26T15:11:28.673+0000: 40.611: Total time for which application threads were stopped: 0.3741785 seconds, Stopping threads took: 0.0002827 seconds -2021-01-26T15:11:28.686+0000: 40.624: Total time for which application threads were stopped: 0.0104208 seconds, Stopping threads took: 0.0102376 seconds -2021-01-26T15:11:29.115+0000: 41.053: Total time for which application threads were stopped: 0.0003026 seconds, Stopping threads took: 0.0000962 seconds -2021-01-26T15:11:29.346+0000: 41.284: Total time for which application threads were stopped: 0.0299232 seconds, Stopping threads took: 0.0295528 seconds -2021-01-26T15:11:29.361+0000: 41.299: Total time for which application threads were stopped: 0.0007956 seconds, Stopping threads took: 0.0006307 seconds -2021-01-26T15:11:29.476+0000: 41.414: Total time for which application threads were stopped: 0.0250034 seconds, Stopping threads took: 0.0246819 seconds -2021-01-26T15:11:29.511+0000: 41.449: Total time for which application threads were stopped: 0.0115340 seconds, Stopping threads took: 0.0112848 seconds -2021-01-26T15:11:29.722+0000: 41.660: Total time for which application threads were stopped: 0.0107240 seconds, Stopping threads took: 0.0105378 seconds -2021-01-26T15:11:29.793+0000: 41.731: Total time for which application threads were stopped: 0.0026940 seconds, Stopping threads took: 0.0023805 seconds -2021-01-26T15:11:29.809+0000: 41.747: Total time for which application threads were stopped: 0.0031922 seconds, Stopping threads took: 0.0018919 seconds -2021-01-26T15:11:29.823+0000: 41.761: Total time for which application threads were stopped: 0.0103279 seconds, Stopping threads took: 0.0054407 seconds -2021-01-26T15:11:29.975+0000: 41.913: Total time for which application threads were stopped: 0.0001635 seconds, Stopping threads took: 0.0000420 seconds -2021-01-26T15:11:30.006+0000: 41.944: Total time for which application threads were stopped: 0.0042520 seconds, Stopping threads took: 0.0040097 seconds -2021-01-26T15:11:30.007+0000: 41.945: Total time for which application threads were stopped: 0.0001742 seconds, Stopping threads took: 0.0000469 seconds -2021-01-26T15:11:30.008+0000: 41.946: Total time for which application threads were stopped: 0.0004368 seconds, Stopping threads took: 0.0002722 seconds -2021-01-26T15:11:30.009+0000: 41.947: Total time for which application threads were stopped: 0.0001570 seconds, Stopping threads took: 0.0000409 seconds -2021-01-26T15:11:30.009+0000: 41.947: Total time for which application threads were stopped: 0.0001747 seconds, Stopping threads took: 0.0000704 seconds -2021-01-26T15:11:30.009+0000: 41.947: Total time for which application threads were stopped: 0.0001865 seconds, Stopping threads took: 0.0000522 seconds -2021-01-26T15:11:30.009+0000: 41.947: Total time for which application threads were stopped: 0.0001370 seconds, Stopping threads took: 0.0000582 seconds -2021-01-26T15:11:30.010+0000: 41.947: Total time for which application threads were stopped: 0.0001099 seconds, Stopping threads took: 0.0000457 seconds -2021-01-26T15:11:30.010+0000: 41.948: Total time for which application threads were stopped: 0.0001179 seconds, Stopping threads took: 0.0000369 seconds -2021-01-26T15:11:30.015+0000: 41.953: Total time for which application threads were stopped: 0.0003003 seconds, Stopping threads took: 0.0001343 seconds -2021-01-26T15:11:30.016+0000: 41.954: Total time for which application threads were stopped: 0.0001933 seconds, Stopping threads took: 0.0000726 seconds -2021-01-26T15:11:30.016+0000: 41.954: Total time for which application threads were stopped: 0.0001346 seconds, Stopping threads took: 0.0000459 seconds -2021-01-26T15:11:30.020+0000: 41.958: Total time for which application threads were stopped: 0.0001775 seconds, Stopping threads took: 0.0000670 seconds -2021-01-26T15:11:30.021+0000: 41.959: Total time for which application threads were stopped: 0.0001637 seconds, Stopping threads took: 0.0000868 seconds -2021-01-26T15:11:30.035+0000: 41.973: Total time for which application threads were stopped: 0.0003117 seconds, Stopping threads took: 0.0001512 seconds -2021-01-26T15:11:30.036+0000: 41.974: Total time for which application threads were stopped: 0.0001409 seconds, Stopping threads took: 0.0000549 seconds -2021-01-26T15:11:30.040+0000: 41.978: Total time for which application threads were stopped: 0.0002646 seconds, Stopping threads took: 0.0001042 seconds -2021-01-26T15:11:30.041+0000: 41.979: Total time for which application threads were stopped: 0.0001711 seconds, Stopping threads took: 0.0000508 seconds -2021-01-26T15:11:30.041+0000: 41.979: Total time for which application threads were stopped: 0.0002236 seconds, Stopping threads took: 0.0000627 seconds -2021-01-26T15:11:30.041+0000: 41.979: Total time for which application threads were stopped: 0.0001729 seconds, Stopping threads took: 0.0000623 seconds -2021-01-26T15:11:30.042+0000: 41.980: Total time for which application threads were stopped: 0.0001551 seconds, Stopping threads took: 0.0000607 seconds -2021-01-26T15:11:30.042+0000: 41.980: Total time for which application threads were stopped: 0.0002589 seconds, Stopping threads took: 0.0000637 seconds -2021-01-26T15:11:30.042+0000: 41.980: Total time for which application threads were stopped: 0.0001585 seconds, Stopping threads took: 0.0000450 seconds -2021-01-26T15:11:30.047+0000: 41.985: Total time for which application threads were stopped: 0.0004013 seconds, Stopping threads took: 0.0002083 seconds -2021-01-26T15:11:30.047+0000: 41.985: Total time for which application threads were stopped: 0.0004060 seconds, Stopping threads took: 0.0002362 seconds -2021-01-26T15:11:30.047+0000: 41.985: Total time for which application threads were stopped: 0.0001223 seconds, Stopping threads took: 0.0000426 seconds -2021-01-26T15:11:30.048+0000: 41.986: Total time for which application threads were stopped: 0.0001324 seconds, Stopping threads took: 0.0000521 seconds -2021-01-26T15:11:30.048+0000: 41.986: Total time for which application threads were stopped: 0.0001754 seconds, Stopping threads took: 0.0000382 seconds -2021-01-26T15:11:30.048+0000: 41.986: Total time for which application threads were stopped: 0.0001318 seconds, Stopping threads took: 0.0000413 seconds -2021-01-26T15:11:30.048+0000: 41.986: Total time for which application threads were stopped: 0.0001164 seconds, Stopping threads took: 0.0000370 seconds -2021-01-26T15:11:30.054+0000: 41.992: Total time for which application threads were stopped: 0.0001985 seconds, Stopping threads took: 0.0000793 seconds -2021-01-26T15:11:30.054+0000: 41.992: Total time for which application threads were stopped: 0.0001179 seconds, Stopping threads took: 0.0000444 seconds -2021-01-26T15:11:30.054+0000: 41.992: Total time for which application threads were stopped: 0.0001076 seconds, Stopping threads took: 0.0000367 seconds -2021-01-26T15:11:30.055+0000: 41.992: Total time for which application threads were stopped: 0.0003808 seconds, Stopping threads took: 0.0000360 seconds -2021-01-26T15:11:30.414+0000: 42.352: Total time for which application threads were stopped: 0.0135513 seconds, Stopping threads took: 0.0129914 seconds -2021-01-26T15:11:30.601+0000: 42.539: Total time for which application threads were stopped: 0.0057736 seconds, Stopping threads took: 0.0056062 seconds -2021-01-26T15:11:30.710+0000: 42.648: Total time for which application threads were stopped: 0.0025444 seconds, Stopping threads took: 0.0022394 seconds -2021-01-26T15:11:30.753+0000: 42.691: Total time for which application threads were stopped: 0.0015779 seconds, Stopping threads took: 0.0013815 seconds -2021-01-26T15:11:31.086+0000: 43.024: Total time for which application threads were stopped: 0.0023945 seconds, Stopping threads took: 0.0022436 seconds -2021-01-26T15:11:31.095+0000: 43.033: Total time for which application threads were stopped: 0.0003832 seconds, Stopping threads took: 0.0001323 seconds -2021-01-26T15:11:31.921+0000: 43.859: Total time for which application threads were stopped: 0.0005620 seconds, Stopping threads took: 0.0002485 seconds -2021-01-26T15:11:31.929+0000: 43.867: Total time for which application threads were stopped: 0.0006817 seconds, Stopping threads took: 0.0005022 seconds -2021-01-26T15:11:31.962+0000: 43.900: Total time for which application threads were stopped: 0.0134227 seconds, Stopping threads took: 0.0132636 seconds -2021-01-26T15:11:32.046+0000: 43.984: Total time for which application threads were stopped: 0.0005402 seconds, Stopping threads took: 0.0003282 seconds -2021-01-26T15:11:32.059+0000: 43.997: Total time for which application threads were stopped: 0.0002301 seconds, Stopping threads took: 0.0000773 seconds -2021-01-26T15:11:32.062+0000: 44.000: Total time for which application threads were stopped: 0.0002724 seconds, Stopping threads took: 0.0000749 seconds -2021-01-26T15:11:32.082+0000: 44.020: Total time for which application threads were stopped: 0.0108629 seconds, Stopping threads took: 0.0106005 seconds -2021-01-26T15:11:32.091+0000: 44.029: Total time for which application threads were stopped: 0.0081417 seconds, Stopping threads took: 0.0080125 seconds -2021-01-26T15:11:32.093+0000: 44.031: Total time for which application threads were stopped: 0.0023830 seconds, Stopping threads took: 0.0021638 seconds -2021-01-26T15:11:32.094+0000: 44.032: Total time for which application threads were stopped: 0.0003308 seconds, Stopping threads took: 0.0001408 seconds -2021-01-26T15:11:32.095+0000: 44.033: Total time for which application threads were stopped: 0.0009559 seconds, Stopping threads took: 0.0007758 seconds -2021-01-26T15:11:32.099+0000: 44.037: Total time for which application threads were stopped: 0.0002020 seconds, Stopping threads took: 0.0000400 seconds -2021-01-26T15:11:32.114+0000: 44.052: Total time for which application threads were stopped: 0.0149877 seconds, Stopping threads took: 0.0147698 seconds -2021-01-26T15:11:32.122+0000: 44.060: Total time for which application threads were stopped: 0.0077927 seconds, Stopping threads took: 0.0049795 seconds -2021-01-26T15:11:32.127+0000: 44.065: Total time for which application threads were stopped: 0.0048901 seconds, Stopping threads took: 0.0026402 seconds -2021-01-26T15:11:32.133+0000: 44.071: Total time for which application threads were stopped: 0.0060047 seconds, Stopping threads took: 0.0046943 seconds -2021-01-26T15:11:32.143+0000: 44.080: Total time for which application threads were stopped: 0.0089874 seconds, Stopping threads took: 0.0060856 seconds -2021-01-26T15:11:32.144+0000: 44.082: Total time for which application threads were stopped: 0.0003106 seconds, Stopping threads took: 0.0001585 seconds -2021-01-26T15:11:32.146+0000: 44.084: Total time for which application threads were stopped: 0.0003740 seconds, Stopping threads took: 0.0001322 seconds -2021-01-26T15:11:32.147+0000: 44.085: Total time for which application threads were stopped: 0.0006091 seconds, Stopping threads took: 0.0003017 seconds -2021-01-26T15:11:32.148+0000: 44.086: Total time for which application threads were stopped: 0.0002839 seconds, Stopping threads took: 0.0001298 seconds -2021-01-26T15:11:32.183+0000: 44.120: Total time for which application threads were stopped: 0.0214253 seconds, Stopping threads took: 0.0212048 seconds -2021-01-26T15:11:32.196+0000: 44.134: Total time for which application threads were stopped: 0.0023090 seconds, Stopping threads took: 0.0000605 seconds -2021-01-26T15:11:32.201+0000: 44.139: Total time for which application threads were stopped: 0.0004208 seconds, Stopping threads took: 0.0001394 seconds -2021-01-26T15:11:32.207+0000: 44.144: Total time for which application threads were stopped: 0.0055083 seconds, Stopping threads took: 0.0052109 seconds -2021-01-26T15:11:32.215+0000: 44.152: Total time for which application threads were stopped: 0.0057916 seconds, Stopping threads took: 0.0045003 seconds -2021-01-26T15:11:32.256+0000: 44.194: Total time for which application threads were stopped: 0.0237348 seconds, Stopping threads took: 0.0234649 seconds -2021-01-26T15:11:32.258+0000: 44.196: Total time for which application threads were stopped: 0.0001705 seconds, Stopping threads took: 0.0000411 seconds -2021-01-26T15:11:32.276+0000: 44.214: Total time for which application threads were stopped: 0.0095772 seconds, Stopping threads took: 0.0065862 seconds -2021-01-26T15:11:32.306+0000: 44.244: Total time for which application threads were stopped: 0.0019609 seconds, Stopping threads took: 0.0000475 seconds -2021-01-26T15:11:32.375+0000: 44.313: Total time for which application threads were stopped: 0.0254666 seconds, Stopping threads took: 0.0251482 seconds -2021-01-26T15:11:32.387+0000: 44.325: Total time for which application threads were stopped: 0.0103915 seconds, Stopping threads took: 0.0101320 seconds -2021-01-26T15:11:32.475+0000: 44.413: Total time for which application threads were stopped: 0.0015715 seconds, Stopping threads took: 0.0010760 seconds -2021-01-26T15:11:32.522+0000: 44.460: Total time for which application threads were stopped: 0.0143125 seconds, Stopping threads took: 0.0135600 seconds -2021-01-26T15:11:32.610+0000: 44.548: Total time for which application threads were stopped: 0.0531299 seconds, Stopping threads took: 0.0525973 seconds -2021-01-26T15:11:32.618+0000: 44.556: Total time for which application threads were stopped: 0.0020069 seconds, Stopping threads took: 0.0018207 seconds -2021-01-26T15:11:32.619+0000: 44.557: Total time for which application threads were stopped: 0.0003624 seconds, Stopping threads took: 0.0000517 seconds -2021-01-26T15:11:32.620+0000: 44.558: Total time for which application threads were stopped: 0.0001744 seconds, Stopping threads took: 0.0000211 seconds -2021-01-26T15:11:32.653+0000: 44.591: Total time for which application threads were stopped: 0.0002040 seconds, Stopping threads took: 0.0000635 seconds -2021-01-26T15:11:32.770+0000: 44.708: Total time for which application threads were stopped: 0.0103248 seconds, Stopping threads took: 0.0096159 seconds -2021-01-26T15:11:32.856+0000: 44.794: Total time for which application threads were stopped: 0.0341027 seconds, Stopping threads took: 0.0336903 seconds -2021-01-26T15:11:32.995+0000: 44.933: Total time for which application threads were stopped: 0.0203496 seconds, Stopping threads took: 0.0199543 seconds -2021-01-26T15:11:33.020+0000: 44.958: Total time for which application threads were stopped: 0.0242562 seconds, Stopping threads took: 0.0239389 seconds -2021-01-26T15:11:33.108+0000: 45.046: Total time for which application threads were stopped: 0.0194382 seconds, Stopping threads took: 0.0181610 seconds -2021-01-26T15:11:33.218+0000: 45.156: Total time for which application threads were stopped: 0.0143949 seconds, Stopping threads took: 0.0141500 seconds -2021-01-26T15:11:33.231+0000: 45.169: Total time for which application threads were stopped: 0.0003172 seconds, Stopping threads took: 0.0000597 seconds -2021-01-26T15:11:33.238+0000: 45.176: Total time for which application threads were stopped: 0.0005746 seconds, Stopping threads took: 0.0001924 seconds -2021-01-26T15:11:33.257+0000: 45.195: Total time for which application threads were stopped: 0.0167932 seconds, Stopping threads took: 0.0163786 seconds -2021-01-26T15:11:33.264+0000: 45.202: Total time for which application threads were stopped: 0.0052484 seconds, Stopping threads took: 0.0048120 seconds -2021-01-26T15:11:33.301+0000: 45.239: Total time for which application threads were stopped: 0.0117548 seconds, Stopping threads took: 0.0115695 seconds -2021-01-26T15:11:33.304+0000: 45.242: Total time for which application threads were stopped: 0.0006833 seconds, Stopping threads took: 0.0004368 seconds -2021-01-26T15:11:33.343+0000: 45.281: Total time for which application threads were stopped: 0.0134024 seconds, Stopping threads took: 0.0131607 seconds -2021-01-26T15:11:33.385+0000: 45.323: Total time for which application threads were stopped: 0.0121979 seconds, Stopping threads took: 0.0007469 seconds -2021-01-26T15:11:33.396+0000: 45.334: Total time for which application threads were stopped: 0.0054797 seconds, Stopping threads took: 0.0017685 seconds -2021-01-26T15:11:33.693+0000: 45.631: Total time for which application threads were stopped: 0.0461354 seconds, Stopping threads took: 0.0457895 seconds -2021-01-26T15:11:33.694+0000: 45.632: Total time for which application threads were stopped: 0.0003093 seconds, Stopping threads took: 0.0000437 seconds -2021-01-26T15:11:33.701+0000: 45.639: Total time for which application threads were stopped: 0.0060409 seconds, Stopping threads took: 0.0058304 seconds -2021-01-26T15:11:33.706+0000: 45.644: Total time for which application threads were stopped: 0.0010463 seconds, Stopping threads took: 0.0008735 seconds -2021-01-26T15:11:33.743+0000: 45.681: Total time for which application threads were stopped: 0.0116036 seconds, Stopping threads took: 0.0113339 seconds -2021-01-26T15:11:33.751+0000: 45.689: Total time for which application threads were stopped: 0.0030630 seconds, Stopping threads took: 0.0027437 seconds -2021-01-26T15:11:33.772+0000: 45.709: Total time for which application threads were stopped: 0.0124075 seconds, Stopping threads took: 0.0119212 seconds -2021-01-26T15:11:33.776+0000: 45.714: Total time for which application threads were stopped: 0.0016578 seconds, Stopping threads took: 0.0012137 seconds -2021-01-26T15:11:33.778+0000: 45.715: Total time for which application threads were stopped: 0.0003718 seconds, Stopping threads took: 0.0000584 seconds -2021-01-26T15:11:33.783+0000: 45.721: Total time for which application threads were stopped: 0.0025098 seconds, Stopping threads took: 0.0022016 seconds -2021-01-26T15:11:33.789+0000: 45.727: Total time for which application threads were stopped: 0.0030759 seconds, Stopping threads took: 0.0028287 seconds -2021-01-26T15:11:33.797+0000: 45.735: Total time for which application threads were stopped: 0.0009806 seconds, Stopping threads took: 0.0006447 seconds -2021-01-26T15:11:33.801+0000: 45.738: Total time for which application threads were stopped: 0.0008169 seconds, Stopping threads took: 0.0005378 seconds -2021-01-26T15:11:33.829+0000: 45.766: Total time for which application threads were stopped: 0.0189348 seconds, Stopping threads took: 0.0186033 seconds -2021-01-26T15:11:33.845+0000: 45.783: Total time for which application threads were stopped: 0.0116862 seconds, Stopping threads took: 0.0114585 seconds -2021-01-26T15:11:33.863+0000: 45.801: Total time for which application threads were stopped: 0.0093849 seconds, Stopping threads took: 0.0090666 seconds -2021-01-26T15:11:33.879+0000: 45.817: Total time for which application threads were stopped: 0.0045475 seconds, Stopping threads took: 0.0040407 seconds -2021-01-26T15:11:33.891+0000: 45.829: Total time for which application threads were stopped: 0.0032024 seconds, Stopping threads took: 0.0030234 seconds -2021-01-26T15:11:33.895+0000: 45.833: Total time for which application threads were stopped: 0.0008336 seconds, Stopping threads took: 0.0006401 seconds -2021-01-26T15:11:33.898+0000: 45.836: Total time for which application threads were stopped: 0.0004530 seconds, Stopping threads took: 0.0002990 seconds -2021-01-26T15:11:33.906+0000: 45.843: Total time for which application threads were stopped: 0.0015339 seconds, Stopping threads took: 0.0009451 seconds -2021-01-26T15:11:33.930+0000: 45.867: Total time for which application threads were stopped: 0.0220145 seconds, Stopping threads took: 0.0216976 seconds -2021-01-26T15:11:33.932+0000: 45.870: Total time for which application threads were stopped: 0.0004365 seconds, Stopping threads took: 0.0001210 seconds -2021-01-26T15:11:33.936+0000: 45.874: Total time for which application threads were stopped: 0.0007468 seconds, Stopping threads took: 0.0004000 seconds -2021-01-26T15:11:33.938+0000: 45.876: Total time for which application threads were stopped: 0.0004783 seconds, Stopping threads took: 0.0001967 seconds -2021-01-26T15:11:33.939+0000: 45.877: Total time for which application threads were stopped: 0.0001979 seconds, Stopping threads took: 0.0000339 seconds -2021-01-26T15:11:33.941+0000: 45.879: Total time for which application threads were stopped: 0.0002896 seconds, Stopping threads took: 0.0001471 seconds -2021-01-26T15:11:34.024+0000: 45.962: Total time for which application threads were stopped: 0.0534076 seconds, Stopping threads took: 0.0531470 seconds -2021-01-26T15:11:34.034+0000: 45.972: Total time for which application threads were stopped: 0.0025358 seconds, Stopping threads took: 0.0022982 seconds -2021-01-26T15:11:34.039+0000: 45.977: Total time for which application threads were stopped: 0.0038552 seconds, Stopping threads took: 0.0035964 seconds -2021-01-26T15:11:34.041+0000: 45.979: Total time for which application threads were stopped: 0.0013223 seconds, Stopping threads took: 0.0010727 seconds -2021-01-26T15:11:34.043+0000: 45.981: Total time for which application threads were stopped: 0.0015555 seconds, Stopping threads took: 0.0011200 seconds -2021-01-26T15:11:34.048+0000: 45.986: Total time for which application threads were stopped: 0.0046042 seconds, Stopping threads took: 0.0043506 seconds -2021-01-26T15:11:34.075+0000: 46.013: Total time for which application threads were stopped: 0.0041317 seconds, Stopping threads took: 0.0037978 seconds -2021-01-26T15:11:34.098+0000: 46.035: Total time for which application threads were stopped: 0.0118160 seconds, Stopping threads took: 0.0115074 seconds -2021-01-26T15:11:34.101+0000: 46.039: Total time for which application threads were stopped: 0.0001935 seconds, Stopping threads took: 0.0000607 seconds -2021-01-26T15:11:34.104+0000: 46.042: Total time for which application threads were stopped: 0.0002518 seconds, Stopping threads took: 0.0000553 seconds -2021-01-26T15:11:36.105+0000: 48.043: Total time for which application threads were stopped: 0.0003746 seconds, Stopping threads took: 0.0001297 seconds -2021-01-26T15:11:37.106+0000: 49.044: Total time for which application threads were stopped: 0.0002596 seconds, Stopping threads took: 0.0000576 seconds -2021-01-26T15:11:37.148+0000: 49.086: Total time for which application threads were stopped: 0.0003525 seconds, Stopping threads took: 0.0001997 seconds -2021-01-26T15:11:37.238+0000: 49.176: Total time for which application threads were stopped: 0.0023353 seconds, Stopping threads took: 0.0021513 seconds -2021-01-26T15:11:37.240+0000: 49.178: Total time for which application threads were stopped: 0.0004493 seconds, Stopping threads took: 0.0002975 seconds -2021-01-26T15:11:37.240+0000: 49.178: Total time for which application threads were stopped: 0.0004028 seconds, Stopping threads took: 0.0002869 seconds -2021-01-26T15:11:37.241+0000: 49.179: Total time for which application threads were stopped: 0.0001526 seconds, Stopping threads took: 0.0000610 seconds -2021-01-26T15:11:37.241+0000: 49.179: Total time for which application threads were stopped: 0.0003778 seconds, Stopping threads took: 0.0002861 seconds -2021-01-26T15:11:37.241+0000: 49.179: Total time for which application threads were stopped: 0.0001063 seconds, Stopping threads took: 0.0000183 seconds -2021-01-26T15:11:37.246+0000: 49.184: Total time for which application threads were stopped: 0.0047093 seconds, Stopping threads took: 0.0045631 seconds -2021-01-26T15:11:37.266+0000: 49.204: Total time for which application threads were stopped: 0.0012046 seconds, Stopping threads took: 0.0010275 seconds -2021-01-26T15:11:37.279+0000: 49.217: Total time for which application threads were stopped: 0.0106993 seconds, Stopping threads took: 0.0104763 seconds -2021-01-26T15:11:37.287+0000: 49.224: Total time for which application threads were stopped: 0.0003006 seconds, Stopping threads took: 0.0001234 seconds -2021-01-26T15:11:38.287+0000: 50.225: Total time for which application threads were stopped: 0.0001730 seconds, Stopping threads took: 0.0000489 seconds -2021-01-26T15:11:39.287+0000: 51.225: Total time for which application threads were stopped: 0.0001761 seconds, Stopping threads took: 0.0000530 seconds -2021-01-26T15:11:41.288+0000: 53.226: Total time for which application threads were stopped: 0.0001582 seconds, Stopping threads took: 0.0000446 seconds -2021-01-26T15:11:42.283+0000: 54.221: Total time for which application threads were stopped: 0.0061907 seconds, Stopping threads took: 0.0057635 seconds -2021-01-26T15:11:45.716+0000: 57.653: Total time for which application threads were stopped: 0.0002334 seconds, Stopping threads took: 0.0000767 seconds -2021-01-26T15:11:45.718+0000: 57.656: Total time for which application threads were stopped: 0.0001743 seconds, Stopping threads took: 0.0000438 seconds -2021-01-26T15:11:45.722+0000: 57.660: Total time for which application threads were stopped: 0.0013862 seconds, Stopping threads took: 0.0012088 seconds -2021-01-26T15:11:45.723+0000: 57.661: Total time for which application threads were stopped: 0.0003026 seconds, Stopping threads took: 0.0001959 seconds -2021-01-26T15:11:46.724+0000: 58.662: Total time for which application threads were stopped: 0.0001986 seconds, Stopping threads took: 0.0000570 seconds -2021-01-26T15:11:47.300+0000: 59.238: Total time for which application threads were stopped: 0.0149012 seconds, Stopping threads took: 0.0146107 seconds -2021-01-26T15:11:47.301+0000: 59.239: Total time for which application threads were stopped: 0.0001357 seconds, Stopping threads took: 0.0000287 seconds -2021-01-26T15:11:47.305+0000: 59.243: Total time for which application threads were stopped: 0.0001559 seconds, Stopping threads took: 0.0000331 seconds -2021-01-26T15:11:47.313+0000: 59.251: Total time for which application threads were stopped: 0.0035445 seconds, Stopping threads took: 0.0002021 seconds -2021-01-26T15:11:47.320+0000: 59.258: Total time for which application threads were stopped: 0.0036858 seconds, Stopping threads took: 0.0035128 seconds -2021-01-26T15:11:47.322+0000: 59.260: Total time for which application threads were stopped: 0.0001440 seconds, Stopping threads took: 0.0000287 seconds -2021-01-26T15:11:47.334+0000: 59.271: Total time for which application threads were stopped: 0.0066441 seconds, Stopping threads took: 0.0063356 seconds -2021-01-26T15:11:47.336+0000: 59.274: Total time for which application threads were stopped: 0.0001856 seconds, Stopping threads took: 0.0000474 seconds -2021-01-26T15:11:48.337+0000: 60.274: Total time for which application threads were stopped: 0.0002368 seconds, Stopping threads took: 0.0000563 seconds -2021-01-26T15:11:52.223+0000: 64.161: Total time for which application threads were stopped: 0.0062193 seconds, Stopping threads took: 0.0059208 seconds -2021-01-26T15:11:52.266+0000: 64.204: Total time for which application threads were stopped: 0.0129920 seconds, Stopping threads took: 0.0127573 seconds -2021-01-26T15:11:53.266+0000: 65.204: Total time for which application threads were stopped: 0.0002329 seconds, Stopping threads took: 0.0000611 seconds -2021-01-26T15:11:57.153+0000: 69.091: Total time for which application threads were stopped: 0.0002854 seconds, Stopping threads took: 0.0000543 seconds -2021-01-26T15:11:57.969+0000: 69.907: Total time for which application threads were stopped: 0.0003484 seconds, Stopping threads took: 0.0000754 seconds -2021-01-26T15:11:58.969+0000: 70.907: Total time for which application threads were stopped: 0.0002609 seconds, Stopping threads took: 0.0000647 seconds -2021-01-26T15:12:00.075+0000: 72.013: Total time for which application threads were stopped: 0.0002036 seconds, Stopping threads took: 0.0000493 seconds -2021-01-26T15:12:00.080+0000: 72.018: Total time for which application threads were stopped: 0.0004777 seconds, Stopping threads took: 0.0003176 seconds -2021-01-26T15:12:00.091+0000: 72.029: Total time for which application threads were stopped: 0.0021931 seconds, Stopping threads took: 0.0004230 seconds -2021-01-26T15:12:00.092+0000: 72.030: Total time for which application threads were stopped: 0.0002888 seconds, Stopping threads took: 0.0000388 seconds -2021-01-26T15:12:00.092+0000: 72.030: Total time for which application threads were stopped: 0.0002497 seconds, Stopping threads took: 0.0000448 seconds -2021-01-26T15:12:01.971+0000: 73.909: Total time for which application threads were stopped: 0.0002705 seconds, Stopping threads took: 0.0001333 seconds -2021-01-26T15:12:01.972+0000: 73.910: Total time for which application threads were stopped: 0.0002628 seconds, Stopping threads took: 0.0001608 seconds -2021-01-26T15:12:01.973+0000: 73.910: Total time for which application threads were stopped: 0.0002626 seconds, Stopping threads took: 0.0001438 seconds -2021-01-26T15:12:01.973+0000: 73.911: Total time for which application threads were stopped: 0.0003139 seconds, Stopping threads took: 0.0001715 seconds -2021-01-26T15:12:01.974+0000: 73.912: Total time for which application threads were stopped: 0.0003573 seconds, Stopping threads took: 0.0002582 seconds -2021-01-26T15:12:02.226+0000: 74.164: Total time for which application threads were stopped: 0.0017519 seconds, Stopping threads took: 0.0010393 seconds -2021-01-26T15:12:02.250+0000: 74.188: Total time for which application threads were stopped: 0.0015777 seconds, Stopping threads took: 0.0014156 seconds -2021-01-26T15:12:04.251+0000: 76.189: Total time for which application threads were stopped: 0.0002271 seconds, Stopping threads took: 0.0000608 seconds -2021-01-26T15:12:05.251+0000: 77.189: Total time for which application threads were stopped: 0.0002653 seconds, Stopping threads took: 0.0000637 seconds -2021-01-26T15:12:07.246+0000: 79.184: Total time for which application threads were stopped: 0.0078281 seconds, Stopping threads took: 0.0074705 seconds -2021-01-26T15:12:07.248+0000: 79.185: Total time for which application threads were stopped: 0.0002517 seconds, Stopping threads took: 0.0001023 seconds -2021-01-26T15:12:08.250+0000: 80.188: Total time for which application threads were stopped: 0.0002110 seconds, Stopping threads took: 0.0000541 seconds -2021-01-26T15:12:12.251+0000: 84.189: Total time for which application threads were stopped: 0.0004276 seconds, Stopping threads took: 0.0001763 seconds -2021-01-26T15:12:14.252+0000: 86.190: Total time for which application threads were stopped: 0.0003661 seconds, Stopping threads took: 0.0000556 seconds -2021-01-26T15:12:15.835+0000: 87.773: Total time for which application threads were stopped: 0.0003695 seconds, Stopping threads took: 0.0002207 seconds -2021-01-26T15:12:15.836+0000: 87.774: Total time for which application threads were stopped: 0.0001959 seconds, Stopping threads took: 0.0000842 seconds -2021-01-26T15:12:15.837+0000: 87.775: Total time for which application threads were stopped: 0.0003372 seconds, Stopping threads took: 0.0001930 seconds -2021-01-26T15:12:17.838+0000: 89.776: Total time for which application threads were stopped: 0.0001871 seconds, Stopping threads took: 0.0000447 seconds -2021-01-26T15:12:18.839+0000: 90.777: Total time for which application threads were stopped: 0.0002321 seconds, Stopping threads took: 0.0000641 seconds -2021-01-26T15:12:19.840+0000: 91.778: Total time for which application threads were stopped: 0.0005966 seconds, Stopping threads took: 0.0001769 seconds -2021-01-26T15:12:20.841+0000: 92.779: Total time for which application threads were stopped: 0.0003716 seconds, Stopping threads took: 0.0001109 seconds -2021-01-26T15:12:21.841+0000: 93.779: Total time for which application threads were stopped: 0.0002821 seconds, Stopping threads took: 0.0000939 seconds -2021-01-26T15:12:22.843+0000: 94.780: Total time for which application threads were stopped: 0.0006382 seconds, Stopping threads took: 0.0000918 seconds -2021-01-26T15:12:23.844+0000: 95.782: Total time for which application threads were stopped: 0.0003908 seconds, Stopping threads took: 0.0000919 seconds -2021-01-26T15:12:27.847+0000: 99.785: Total time for which application threads were stopped: 0.0006719 seconds, Stopping threads took: 0.0000810 seconds -2021-01-26T15:12:27.992+0000: 99.930: Total time for which application threads were stopped: 0.0001986 seconds, Stopping threads took: 0.0000423 seconds -2021-01-26T15:12:29.993+0000: 101.931: Total time for which application threads were stopped: 0.0003628 seconds, Stopping threads took: 0.0001735 seconds -2021-01-26T15:12:30.094+0000: 102.032: Total time for which application threads were stopped: 0.0002263 seconds, Stopping threads took: 0.0000536 seconds -2021-01-26T15:12:30.095+0000: 102.032: Total time for which application threads were stopped: 0.0001705 seconds, Stopping threads took: 0.0000362 seconds -2021-01-26T15:12:30.095+0000: 102.033: Total time for which application threads were stopped: 0.0001203 seconds, Stopping threads took: 0.0000232 seconds -2021-01-26T15:12:30.096+0000: 102.033: Total time for which application threads were stopped: 0.0001955 seconds, Stopping threads took: 0.0000969 seconds -2021-01-26T15:12:31.975+0000: 103.913: Total time for which application threads were stopped: 0.0002352 seconds, Stopping threads took: 0.0000437 seconds -2021-01-26T15:12:31.978+0000: 103.916: Total time for which application threads were stopped: 0.0001505 seconds, Stopping threads took: 0.0000304 seconds -2021-01-26T15:12:31.979+0000: 103.916: Total time for which application threads were stopped: 0.0001148 seconds, Stopping threads took: 0.0000201 seconds -2021-01-26T15:12:31.979+0000: 103.917: Total time for which application threads were stopped: 0.0001106 seconds, Stopping threads took: 0.0000197 seconds -2021-01-26T15:12:32.980+0000: 104.917: Total time for which application threads were stopped: 0.0002500 seconds, Stopping threads took: 0.0000599 seconds -2021-01-26T15:12:34.981+0000: 106.919: Total time for which application threads were stopped: 0.0004215 seconds, Stopping threads took: 0.0000718 seconds -2021-01-26T15:12:36.985+0000: 108.923: Total time for which application threads were stopped: 0.0005843 seconds, Stopping threads took: 0.0000873 seconds -2021-01-26T15:12:37.226+0000: 109.164: Total time for which application threads were stopped: 0.0011306 seconds, Stopping threads took: 0.0008916 seconds -2021-01-26T15:12:38.228+0000: 110.166: Total time for which application threads were stopped: 0.0002830 seconds, Stopping threads took: 0.0000713 seconds -2021-01-26T15:12:42.151+0000: 114.089: Total time for which application threads were stopped: 0.0018870 seconds, Stopping threads took: 0.0017524 seconds -2021-01-26T15:12:42.233+0000: 114.170: Total time for which application threads were stopped: 0.0004477 seconds, Stopping threads took: 0.0002085 seconds -2021-01-26T15:12:45.936+0000: 117.874: Total time for which application threads were stopped: 0.0001802 seconds, Stopping threads took: 0.0000398 seconds -2021-01-26T15:12:45.937+0000: 117.875: Total time for which application threads were stopped: 0.0001201 seconds, Stopping threads took: 0.0000195 seconds -2021-01-26T15:12:46.937+0000: 118.875: Total time for which application threads were stopped: 0.0003263 seconds, Stopping threads took: 0.0000616 seconds -2021-01-26T15:12:47.148+0000: 119.086: Total time for which application threads were stopped: 0.0002944 seconds, Stopping threads took: 0.0001378 seconds -2021-01-26T15:12:47.151+0000: 119.088: Total time for which application threads were stopped: 0.0003089 seconds, Stopping threads took: 0.0001346 seconds -2021-01-26T15:12:47.152+0000: 119.089: Total time for which application threads were stopped: 0.0004619 seconds, Stopping threads took: 0.0003417 seconds -2021-01-26T15:12:47.223+0000: 119.161: Total time for which application threads were stopped: 0.0018252 seconds, Stopping threads took: 0.0012995 seconds -2021-01-26T15:12:48.224+0000: 120.162: Total time for which application threads were stopped: 0.0003837 seconds, Stopping threads took: 0.0000703 seconds -2021-01-26T15:12:52.226+0000: 124.164: Total time for which application threads were stopped: 0.0008528 seconds, Stopping threads took: 0.0006604 seconds -2021-01-26T15:12:53.226+0000: 125.164: Total time for which application threads were stopped: 0.0002150 seconds, Stopping threads took: 0.0000466 seconds -2021-01-26T15:12:54.227+0000: 126.164: Total time for which application threads were stopped: 0.0002793 seconds, Stopping threads took: 0.0000705 seconds -2021-01-26T15:12:57.231+0000: 129.169: Total time for which application threads were stopped: 0.0029085 seconds, Stopping threads took: 0.0026653 seconds -2021-01-26T15:12:58.232+0000: 130.169: Total time for which application threads were stopped: 0.0002435 seconds, Stopping threads took: 0.0000610 seconds -2021-01-26T15:13:02.233+0000: 134.170: Total time for which application threads were stopped: 0.0002166 seconds, Stopping threads took: 0.0000508 seconds -2021-01-26T15:13:02.316+0000: 134.254: Total time for which application threads were stopped: 0.0019866 seconds, Stopping threads took: 0.0014478 seconds -2021-01-26T15:13:03.317+0000: 135.255: Total time for which application threads were stopped: 0.0002305 seconds, Stopping threads took: 0.0000599 seconds -2021-01-26T15:13:04.121+0000: 136.059: Total time for which application threads were stopped: 0.0006588 seconds, Stopping threads took: 0.0004411 seconds -2021-01-26T15:13:04.279+0000: 136.216: Total time for which application threads were stopped: 0.0018822 seconds, Stopping threads took: 0.0013952 seconds -2021-01-26T15:13:04.283+0000: 136.221: Total time for which application threads were stopped: 0.0004754 seconds, Stopping threads took: 0.0001808 seconds -2021-01-26T15:13:04.284+0000: 136.222: Total time for which application threads were stopped: 0.0006170 seconds, Stopping threads took: 0.0003660 seconds -2021-01-26T15:13:04.287+0000: 136.225: Total time for which application threads were stopped: 0.0004035 seconds, Stopping threads took: 0.0001403 seconds -2021-01-26T15:13:04.288+0000: 136.226: Total time for which application threads were stopped: 0.0003896 seconds, Stopping threads took: 0.0001654 seconds -2021-01-26T15:13:04.291+0000: 136.229: Total time for which application threads were stopped: 0.0018816 seconds, Stopping threads took: 0.0013354 seconds -2021-01-26T15:13:04.292+0000: 136.229: Total time for which application threads were stopped: 0.0003166 seconds, Stopping threads took: 0.0000691 seconds -2021-01-26T15:13:04.293+0000: 136.231: Total time for which application threads were stopped: 0.0007237 seconds, Stopping threads took: 0.0004549 seconds -2021-01-26T15:13:04.295+0000: 136.233: Total time for which application threads were stopped: 0.0006496 seconds, Stopping threads took: 0.0002768 seconds -2021-01-26T15:13:04.296+0000: 136.234: Total time for which application threads were stopped: 0.0007836 seconds, Stopping threads took: 0.0004885 seconds -2021-01-26T15:13:04.298+0000: 136.235: Total time for which application threads were stopped: 0.0007811 seconds, Stopping threads took: 0.0004694 seconds -2021-01-26T15:13:04.302+0000: 136.240: [GC (Allocation Failure) 2021-01-26T15:13:04.303+0000: 136.241: [ParNew +- age 1: 16529016 bytes, 16529016 total +: 157107K->17471K(157248K), 0.1612151 secs] 164235K->31064K(506816K), 0.1646947 secs] [Times: user=0.11 sys=0.00, real=0.17 secs] +2021-01-27T13:17:04.816+0000: 33.534: Total time for which application threads were stopped: 0.1673593 seconds, Stopping threads took: 0.0000309 seconds +2021-01-27T13:17:05.818+0000: 34.536: Total time for which application threads were stopped: 0.0017645 seconds, Stopping threads took: 0.0017008 seconds +2021-01-27T13:17:05.898+0000: 34.617: Total time for which application threads were stopped: 0.0006664 seconds, Stopping threads took: 0.0000287 seconds +2021-01-27T13:17:05.977+0000: 34.695: Total time for which application threads were stopped: 0.0002653 seconds, Stopping threads took: 0.0001468 seconds +2021-01-27T13:17:05.991+0000: 34.710: Total time for which application threads were stopped: 0.0000869 seconds, Stopping threads took: 0.0000255 seconds +2021-01-27T13:17:05.996+0000: 34.715: Total time for which application threads were stopped: 0.0000862 seconds, Stopping threads took: 0.0000264 seconds +2021-01-27T13:17:05.998+0000: 34.716: Total time for which application threads were stopped: 0.0001064 seconds, Stopping threads took: 0.0000268 seconds +2021-01-27T13:17:06.014+0000: 34.733: Total time for which application threads were stopped: 0.0001119 seconds, Stopping threads took: 0.0000272 seconds +2021-01-27T13:17:06.024+0000: 34.742: Total time for which application threads were stopped: 0.0000965 seconds, Stopping threads took: 0.0000258 seconds +2021-01-27T13:17:06.033+0000: 34.752: Total time for which application threads were stopped: 0.0002970 seconds, Stopping threads took: 0.0001530 seconds +2021-01-27T13:17:06.034+0000: 34.752: Total time for which application threads were stopped: 0.0002268 seconds, Stopping threads took: 0.0001386 seconds +2021-01-27T13:17:06.038+0000: 34.757: Total time for which application threads were stopped: 0.0000840 seconds, Stopping threads took: 0.0000224 seconds +2021-01-27T13:17:06.045+0000: 34.763: Total time for which application threads were stopped: 0.0000873 seconds, Stopping threads took: 0.0000215 seconds +2021-01-27T13:17:06.062+0000: 34.781: Total time for which application threads were stopped: 0.0002876 seconds, Stopping threads took: 0.0001855 seconds +2021-01-27T13:17:06.064+0000: 34.782: Total time for which application threads were stopped: 0.0000713 seconds, Stopping threads took: 0.0000147 seconds +2021-01-27T13:17:06.066+0000: 34.784: Total time for which application threads were stopped: 0.0001327 seconds, Stopping threads took: 0.0000192 seconds +2021-01-27T13:17:06.067+0000: 34.785: Total time for which application threads were stopped: 0.0002564 seconds, Stopping threads took: 0.0000193 seconds +2021-01-27T13:17:06.134+0000: 34.852: Total time for which application threads were stopped: 0.0082427 seconds, Stopping threads took: 0.0080889 seconds +2021-01-27T13:17:06.191+0000: 34.909: Total time for which application threads were stopped: 0.0002301 seconds, Stopping threads took: 0.0001370 seconds +2021-01-27T13:17:06.194+0000: 34.912: Total time for which application threads were stopped: 0.0000857 seconds, Stopping threads took: 0.0000296 seconds +2021-01-27T13:17:06.194+0000: 34.912: Total time for which application threads were stopped: 0.0000530 seconds, Stopping threads took: 0.0000150 seconds +2021-01-27T13:17:06.195+0000: 34.914: Total time for which application threads were stopped: 0.0000654 seconds, Stopping threads took: 0.0000197 seconds +2021-01-27T13:17:06.198+0000: 34.916: Total time for which application threads were stopped: 0.0002668 seconds, Stopping threads took: 0.0000190 seconds +2021-01-27T13:17:06.208+0000: 34.926: Total time for which application threads were stopped: 0.0001234 seconds, Stopping threads took: 0.0000296 seconds +2021-01-27T13:17:06.219+0000: 34.937: Total time for which application threads were stopped: 0.0000995 seconds, Stopping threads took: 0.0000395 seconds +2021-01-27T13:17:06.225+0000: 34.944: Total time for which application threads were stopped: 0.0000905 seconds, Stopping threads took: 0.0000300 seconds +2021-01-27T13:17:06.231+0000: 34.949: Total time for which application threads were stopped: 0.0001080 seconds, Stopping threads took: 0.0000364 seconds +2021-01-27T13:17:06.300+0000: 35.018: Total time for which application threads were stopped: 0.0000760 seconds, Stopping threads took: 0.0000238 seconds +2021-01-27T13:17:06.307+0000: 35.025: Total time for which application threads were stopped: 0.0000800 seconds, Stopping threads took: 0.0000266 seconds +2021-01-27T13:17:06.318+0000: 35.037: Total time for which application threads were stopped: 0.0000926 seconds, Stopping threads took: 0.0000312 seconds +2021-01-27T13:17:06.320+0000: 35.038: Total time for which application threads were stopped: 0.0000662 seconds, Stopping threads took: 0.0000185 seconds +2021-01-27T13:17:06.328+0000: 35.046: Total time for which application threads were stopped: 0.0002577 seconds, Stopping threads took: 0.0001530 seconds +2021-01-27T13:17:06.337+0000: 35.055: Total time for which application threads were stopped: 0.0005878 seconds, Stopping threads took: 0.0000290 seconds +2021-01-27T13:17:06.344+0000: 35.062: Total time for which application threads were stopped: 0.0004120 seconds, Stopping threads took: 0.0000257 seconds +2021-01-27T13:17:06.353+0000: 35.072: Total time for which application threads were stopped: 0.0046318 seconds, Stopping threads took: 0.0000305 seconds +2021-01-27T13:17:06.359+0000: 35.077: Total time for which application threads were stopped: 0.0004301 seconds, Stopping threads took: 0.0000274 seconds +2021-01-27T13:17:06.361+0000: 35.079: Total time for which application threads were stopped: 0.0000722 seconds, Stopping threads took: 0.0000199 seconds +2021-01-27T13:17:06.366+0000: 35.085: Total time for which application threads were stopped: 0.0001052 seconds, Stopping threads took: 0.0000306 seconds +2021-01-27T13:17:06.640+0000: 35.359: Total time for which application threads were stopped: 0.0071282 seconds, Stopping threads took: 0.0069957 seconds +2021-01-27T13:17:06.647+0000: 35.366: Total time for which application threads were stopped: 0.0057386 seconds, Stopping threads took: 0.0056352 seconds +2021-01-27T13:17:06.686+0000: 35.404: Total time for which application threads were stopped: 0.0093995 seconds, Stopping threads took: 0.0092886 seconds +2021-01-27T13:17:06.687+0000: 35.405: Total time for which application threads were stopped: 0.0001258 seconds, Stopping threads took: 0.0000216 seconds +2021-01-27T13:17:06.689+0000: 35.407: Total time for which application threads were stopped: 0.0003772 seconds, Stopping threads took: 0.0002170 seconds +2021-01-27T13:17:06.691+0000: 35.409: Total time for which application threads were stopped: 0.0012437 seconds, Stopping threads took: 0.0009689 seconds +2021-01-27T13:17:06.705+0000: 35.424: Total time for which application threads were stopped: 0.0115484 seconds, Stopping threads took: 0.0114354 seconds +2021-01-27T13:17:06.709+0000: 35.427: Total time for which application threads were stopped: 0.0002491 seconds, Stopping threads took: 0.0001482 seconds +2021-01-27T13:17:06.713+0000: 35.431: Total time for which application threads were stopped: 0.0042150 seconds, Stopping threads took: 0.0041330 seconds +2021-01-27T13:17:06.756+0000: 35.474: Total time for which application threads were stopped: 0.0402229 seconds, Stopping threads took: 0.0401441 seconds +2021-01-27T13:17:06.758+0000: 35.477: Total time for which application threads were stopped: 0.0024931 seconds, Stopping threads took: 0.0023818 seconds +2021-01-27T13:17:06.786+0000: 35.505: Total time for which application threads were stopped: 0.0084556 seconds, Stopping threads took: 0.0057869 seconds +2021-01-27T13:17:06.837+0000: 35.556: Total time for which application threads were stopped: 0.0189342 seconds, Stopping threads took: 0.0187952 seconds +2021-01-27T13:17:06.839+0000: 35.557: Total time for which application threads were stopped: 0.0009152 seconds, Stopping threads took: 0.0007769 seconds +2021-01-27T13:17:06.843+0000: 35.561: Total time for which application threads were stopped: 0.0001313 seconds, Stopping threads took: 0.0000671 seconds +2021-01-27T13:17:06.874+0000: 35.593: Total time for which application threads were stopped: 0.0007241 seconds, Stopping threads took: 0.0006332 seconds +2021-01-27T13:17:06.912+0000: 35.630: Total time for which application threads were stopped: 0.0117303 seconds, Stopping threads took: 0.0115872 seconds +2021-01-27T13:17:06.927+0000: 35.645: Total time for which application threads were stopped: 0.0113410 seconds, Stopping threads took: 0.0112384 seconds +2021-01-27T13:17:06.931+0000: 35.649: Total time for which application threads were stopped: 0.0005744 seconds, Stopping threads took: 0.0004388 seconds +2021-01-27T13:17:06.939+0000: 35.657: Total time for which application threads were stopped: 0.0066663 seconds, Stopping threads took: 0.0062993 seconds +2021-01-27T13:17:06.942+0000: 35.660: Total time for which application threads were stopped: 0.0006437 seconds, Stopping threads took: 0.0005435 seconds +2021-01-27T13:17:06.959+0000: 35.677: Total time for which application threads were stopped: 0.0024047 seconds, Stopping threads took: 0.0022894 seconds +2021-01-27T13:17:06.984+0000: 35.702: Total time for which application threads were stopped: 0.0184051 seconds, Stopping threads took: 0.0182845 seconds +2021-01-27T13:17:07.011+0000: 35.729: Total time for which application threads were stopped: 0.0184638 seconds, Stopping threads took: 0.0183721 seconds +2021-01-27T13:17:07.031+0000: 35.749: Total time for which application threads were stopped: 0.0134011 seconds, Stopping threads took: 0.0131965 seconds +2021-01-27T13:17:07.035+0000: 35.754: Total time for which application threads were stopped: 0.0026947 seconds, Stopping threads took: 0.0026052 seconds +2021-01-27T13:17:07.046+0000: 35.764: Total time for which application threads were stopped: 0.0021692 seconds, Stopping threads took: 0.0019660 seconds +2021-01-27T13:17:07.050+0000: 35.769: Total time for which application threads were stopped: 0.0008782 seconds, Stopping threads took: 0.0007800 seconds +2021-01-27T13:17:07.057+0000: 35.776: Total time for which application threads were stopped: 0.0039155 seconds, Stopping threads took: 0.0038047 seconds +2021-01-27T13:17:07.078+0000: 35.796: Total time for which application threads were stopped: 0.0202711 seconds, Stopping threads took: 0.0201765 seconds +2021-01-27T13:17:07.079+0000: 35.797: Total time for which application threads were stopped: 0.0001565 seconds, Stopping threads took: 0.0000852 seconds +2021-01-27T13:17:07.091+0000: 35.810: Total time for which application threads were stopped: 0.0001224 seconds, Stopping threads took: 0.0000343 seconds +2021-01-27T13:17:07.096+0000: 35.814: Total time for which application threads were stopped: 0.0008080 seconds, Stopping threads took: 0.0004065 seconds +2021-01-27T13:17:07.103+0000: 35.822: Total time for which application threads were stopped: 0.0049939 seconds, Stopping threads took: 0.0048019 seconds +2021-01-27T13:17:07.107+0000: 35.825: Total time for which application threads were stopped: 0.0026913 seconds, Stopping threads took: 0.0025626 seconds +2021-01-27T13:17:07.108+0000: 35.826: Total time for which application threads were stopped: 0.0001624 seconds, Stopping threads took: 0.0000258 seconds +2021-01-27T13:17:07.112+0000: 35.830: Total time for which application threads were stopped: 0.0001738 seconds, Stopping threads took: 0.0000936 seconds +2021-01-27T13:17:07.130+0000: 35.849: Total time for which application threads were stopped: 0.0072881 seconds, Stopping threads took: 0.0071745 seconds +2021-01-27T13:17:07.132+0000: 35.850: Total time for which application threads were stopped: 0.0002777 seconds, Stopping threads took: 0.0001860 seconds +2021-01-27T13:17:07.136+0000: 35.855: Total time for which application threads were stopped: 0.0028416 seconds, Stopping threads took: 0.0026772 seconds +2021-01-27T13:17:07.141+0000: 35.860: Total time for which application threads were stopped: 0.0001751 seconds, Stopping threads took: 0.0000364 seconds +2021-01-27T13:17:07.145+0000: 35.863: Total time for which application threads were stopped: 0.0028304 seconds, Stopping threads took: 0.0027505 seconds +2021-01-27T13:17:07.156+0000: 35.875: Total time for which application threads were stopped: 0.0074667 seconds, Stopping threads took: 0.0072969 seconds +2021-01-27T13:17:07.181+0000: 35.900: Total time for which application threads were stopped: 0.0242562 seconds, Stopping threads took: 0.0241612 seconds +2021-01-27T13:17:07.185+0000: 35.903: Total time for which application threads were stopped: 0.0000843 seconds, Stopping threads took: 0.0000265 seconds +2021-01-27T13:17:07.765+0000: 36.483: Total time for which application threads were stopped: 0.0000971 seconds, Stopping threads took: 0.0000301 seconds +2021-01-27T13:17:07.791+0000: 36.509: Total time for which application threads were stopped: 0.0200649 seconds, Stopping threads took: 0.0199284 seconds +2021-01-27T13:17:07.792+0000: 36.510: Total time for which application threads were stopped: 0.0000750 seconds, Stopping threads took: 0.0000192 seconds +2021-01-27T13:17:07.794+0000: 36.512: Total time for which application threads were stopped: 0.0001032 seconds, Stopping threads took: 0.0000245 seconds +2021-01-27T13:17:07.796+0000: 36.515: Total time for which application threads were stopped: 0.0023655 seconds, Stopping threads took: 0.0022412 seconds +2021-01-27T13:17:07.817+0000: 36.535: Total time for which application threads were stopped: 0.0001772 seconds, Stopping threads took: 0.0000330 seconds +2021-01-27T13:17:07.818+0000: 36.536: Total time for which application threads were stopped: 0.0000791 seconds, Stopping threads took: 0.0000177 seconds +2021-01-27T13:17:07.822+0000: 36.540: Total time for which application threads were stopped: 0.0002211 seconds, Stopping threads took: 0.0000449 seconds +2021-01-27T13:17:07.825+0000: 36.544: Total time for which application threads were stopped: 0.0001211 seconds, Stopping threads took: 0.0000371 seconds +2021-01-27T13:17:07.826+0000: 36.544: Total time for which application threads were stopped: 0.0000753 seconds, Stopping threads took: 0.0000160 seconds +2021-01-27T13:17:07.829+0000: 36.547: Total time for which application threads were stopped: 0.0001221 seconds, Stopping threads took: 0.0000371 seconds +2021-01-27T13:17:07.836+0000: 36.555: Total time for which application threads were stopped: 0.0073020 seconds, Stopping threads took: 0.0071827 seconds +2021-01-27T13:17:07.837+0000: 36.555: Total time for which application threads were stopped: 0.0000823 seconds, Stopping threads took: 0.0000218 seconds +2021-01-27T13:17:07.839+0000: 36.557: Total time for which application threads were stopped: 0.0001341 seconds, Stopping threads took: 0.0000662 seconds +2021-01-27T13:17:07.839+0000: 36.558: Total time for which application threads were stopped: 0.0001282 seconds, Stopping threads took: 0.0000258 seconds +2021-01-27T13:17:07.843+0000: 36.561: Total time for which application threads were stopped: 0.0001528 seconds, Stopping threads took: 0.0000889 seconds +2021-01-27T13:17:08.764+0000: 37.483: Total time for which application threads were stopped: 0.0001379 seconds, Stopping threads took: 0.0000368 seconds +2021-01-27T13:17:08.766+0000: 37.485: Total time for which application threads were stopped: 0.0001060 seconds, Stopping threads took: 0.0000278 seconds +2021-01-27T13:17:08.767+0000: 37.486: Total time for which application threads were stopped: 0.0002896 seconds, Stopping threads took: 0.0002131 seconds +2021-01-27T13:17:08.768+0000: 37.486: Total time for which application threads were stopped: 0.0001586 seconds, Stopping threads took: 0.0000822 seconds +2021-01-27T13:17:08.773+0000: 37.491: Total time for which application threads were stopped: 0.0036893 seconds, Stopping threads took: 0.0035976 seconds +2021-01-27T13:17:08.778+0000: 37.496: Total time for which application threads were stopped: 0.0041727 seconds, Stopping threads took: 0.0040757 seconds +2021-01-27T13:17:09.769+0000: 38.487: Total time for which application threads were stopped: 0.0001336 seconds, Stopping threads took: 0.0000358 seconds +2021-01-27T13:17:09.775+0000: 38.493: Total time for which application threads were stopped: 0.0002986 seconds, Stopping threads took: 0.0001596 seconds +2021-01-27T13:17:09.775+0000: 38.494: Total time for which application threads were stopped: 0.0002646 seconds, Stopping threads took: 0.0001503 seconds +2021-01-27T13:17:09.808+0000: 38.526: Total time for which application threads were stopped: 0.0001110 seconds, Stopping threads took: 0.0000331 seconds +2021-01-27T13:17:09.825+0000: 38.543: Total time for which application threads were stopped: 0.0002448 seconds, Stopping threads took: 0.0000326 seconds +2021-01-27T13:17:09.832+0000: 38.550: Total time for which application threads were stopped: 0.0001100 seconds, Stopping threads took: 0.0000298 seconds +2021-01-27T13:17:09.842+0000: 38.560: Total time for which application threads were stopped: 0.0001109 seconds, Stopping threads took: 0.0000332 seconds +2021-01-27T13:17:09.852+0000: 38.570: Total time for which application threads were stopped: 0.0084203 seconds, Stopping threads took: 0.0083131 seconds +2021-01-27T13:17:09.866+0000: 38.584: Total time for which application threads were stopped: 0.0114982 seconds, Stopping threads took: 0.0113376 seconds +2021-01-27T13:17:09.900+0000: 38.619: Total time for which application threads were stopped: 0.0001201 seconds, Stopping threads took: 0.0000373 seconds +2021-01-27T13:17:09.913+0000: 38.631: Total time for which application threads were stopped: 0.0068076 seconds, Stopping threads took: 0.0066897 seconds +2021-01-27T13:17:10.004+0000: 38.722: Total time for which application threads were stopped: 0.0102249 seconds, Stopping threads took: 0.0101055 seconds +2021-01-27T13:17:10.126+0000: 38.844: Total time for which application threads were stopped: 0.0004359 seconds, Stopping threads took: 0.0003260 seconds +2021-01-27T13:17:10.142+0000: 38.860: Total time for which application threads were stopped: 0.0055114 seconds, Stopping threads took: 0.0054066 seconds +2021-01-27T13:17:10.211+0000: 38.929: Total time for which application threads were stopped: 0.0067426 seconds, Stopping threads took: 0.0060237 seconds +2021-01-27T13:17:10.218+0000: 38.936: Total time for which application threads were stopped: 0.0001397 seconds, Stopping threads took: 0.0000391 seconds +2021-01-27T13:17:10.304+0000: 39.022: Total time for which application threads were stopped: 0.0194430 seconds, Stopping threads took: 0.0193123 seconds +2021-01-27T13:17:10.324+0000: 39.042: Total time for which application threads were stopped: 0.0001752 seconds, Stopping threads took: 0.0000461 seconds +2021-01-27T13:17:10.474+0000: 39.192: Total time for which application threads were stopped: 0.0080039 seconds, Stopping threads took: 0.0078769 seconds +2021-01-27T13:17:10.499+0000: 39.218: Total time for which application threads were stopped: 0.0233233 seconds, Stopping threads took: 0.0231443 seconds +2021-01-27T13:17:10.503+0000: 39.221: Total time for which application threads were stopped: 0.0001747 seconds, Stopping threads took: 0.0000406 seconds +2021-01-27T13:17:10.512+0000: 39.230: Total time for which application threads were stopped: 0.0049212 seconds, Stopping threads took: 0.0046257 seconds +2021-01-27T13:17:10.522+0000: 39.241: Total time for which application threads were stopped: 0.0097989 seconds, Stopping threads took: 0.0096412 seconds +2021-01-27T13:17:10.539+0000: 39.257: Total time for which application threads were stopped: 0.0118860 seconds, Stopping threads took: 0.0105756 seconds +2021-01-27T13:17:10.553+0000: 39.271: Total time for which application threads were stopped: 0.0065673 seconds, Stopping threads took: 0.0062122 seconds +2021-01-27T13:17:10.646+0000: 39.365: Total time for which application threads were stopped: 0.0123715 seconds, Stopping threads took: 0.0117617 seconds +2021-01-27T13:17:10.648+0000: 39.367: Total time for which application threads were stopped: 0.0004465 seconds, Stopping threads took: 0.0000821 seconds +2021-01-27T13:17:10.695+0000: 39.414: Total time for which application threads were stopped: 0.0125187 seconds, Stopping threads took: 0.0123419 seconds +2021-01-27T13:17:10.780+0000: 39.499: Total time for which application threads were stopped: 0.0047111 seconds, Stopping threads took: 0.0045089 seconds +2021-01-27T13:17:10.784+0000: 39.503: Total time for which application threads were stopped: 0.0027063 seconds, Stopping threads took: 0.0025313 seconds +2021-01-27T13:17:10.803+0000: 39.522: Total time for which application threads were stopped: 0.0051073 seconds, Stopping threads took: 0.0048863 seconds +2021-01-27T13:17:10.813+0000: 39.532: Total time for which application threads were stopped: 0.0035054 seconds, Stopping threads took: 0.0032993 seconds +2021-01-27T13:17:10.821+0000: 39.539: Total time for which application threads were stopped: 0.0017075 seconds, Stopping threads took: 0.0012869 seconds +2021-01-27T13:17:10.822+0000: 39.540: Total time for which application threads were stopped: 0.0004617 seconds, Stopping threads took: 0.0002367 seconds +2021-01-27T13:17:10.822+0000: 39.540: Total time for which application threads were stopped: 0.0001371 seconds, Stopping threads took: 0.0000438 seconds +2021-01-27T13:17:10.860+0000: 39.578: Total time for which application threads were stopped: 0.0189976 seconds, Stopping threads took: 0.0188114 seconds +2021-01-27T13:17:10.881+0000: 39.599: Total time for which application threads were stopped: 0.0076610 seconds, Stopping threads took: 0.0073397 seconds +2021-01-27T13:17:10.907+0000: 39.626: Total time for which application threads were stopped: 0.0102006 seconds, Stopping threads took: 0.0100576 seconds +2021-01-27T13:17:10.914+0000: 39.633: Total time for which application threads were stopped: 0.0015355 seconds, Stopping threads took: 0.0014022 seconds +2021-01-27T13:17:10.916+0000: 39.634: Total time for which application threads were stopped: 0.0004302 seconds, Stopping threads took: 0.0003383 seconds +2021-01-27T13:17:10.918+0000: 39.636: Total time for which application threads were stopped: 0.0015773 seconds, Stopping threads took: 0.0014044 seconds +2021-01-27T13:17:10.922+0000: 39.640: Total time for which application threads were stopped: 0.0010595 seconds, Stopping threads took: 0.0007773 seconds +2021-01-27T13:17:10.923+0000: 39.642: Total time for which application threads were stopped: 0.0001631 seconds, Stopping threads took: 0.0000725 seconds +2021-01-27T13:17:10.936+0000: 39.655: Total time for which application threads were stopped: 0.0075807 seconds, Stopping threads took: 0.0074412 seconds +2021-01-27T13:17:10.937+0000: 39.656: Total time for which application threads were stopped: 0.0008743 seconds, Stopping threads took: 0.0007619 seconds +2021-01-27T13:17:10.938+0000: 39.657: Total time for which application threads were stopped: 0.0001546 seconds, Stopping threads took: 0.0000284 seconds +2021-01-27T13:17:10.946+0000: 39.664: Total time for which application threads were stopped: 0.0061442 seconds, Stopping threads took: 0.0000401 seconds +2021-01-27T13:17:10.952+0000: 39.670: Total time for which application threads were stopped: 0.0045639 seconds, Stopping threads took: 0.0044025 seconds +2021-01-27T13:17:10.953+0000: 39.671: Total time for which application threads were stopped: 0.0008098 seconds, Stopping threads took: 0.0006588 seconds +2021-01-27T13:17:10.959+0000: 39.677: Total time for which application threads were stopped: 0.0026446 seconds, Stopping threads took: 0.0025130 seconds +2021-01-27T13:17:10.962+0000: 39.680: Total time for which application threads were stopped: 0.0020593 seconds, Stopping threads took: 0.0002446 seconds +2021-01-27T13:17:10.963+0000: 39.681: Total time for which application threads were stopped: 0.0003997 seconds, Stopping threads took: 0.0002477 seconds +2021-01-27T13:17:11.065+0000: 39.783: Total time for which application threads were stopped: 0.0086640 seconds, Stopping threads took: 0.0083826 seconds +2021-01-27T13:17:11.068+0000: 39.786: Total time for which application threads were stopped: 0.0015128 seconds, Stopping threads took: 0.0011657 seconds +2021-01-27T13:17:11.094+0000: 39.813: Total time for which application threads were stopped: 0.0069986 seconds, Stopping threads took: 0.0068428 seconds +2021-01-27T13:17:11.095+0000: 39.813: Total time for which application threads were stopped: 0.0001775 seconds, Stopping threads took: 0.0000482 seconds +2021-01-27T13:17:11.111+0000: 39.830: Total time for which application threads were stopped: 0.0025783 seconds, Stopping threads took: 0.0024278 seconds +2021-01-27T13:17:11.130+0000: 39.849: Total time for which application threads were stopped: 0.0061032 seconds, Stopping threads took: 0.0058103 seconds +2021-01-27T13:17:11.163+0000: 39.881: Total time for which application threads were stopped: 0.0218713 seconds, Stopping threads took: 0.0217046 seconds +2021-01-27T13:17:11.163+0000: 39.881: Total time for which application threads were stopped: 0.0001248 seconds, Stopping threads took: 0.0000240 seconds +2021-01-27T13:17:11.163+0000: 39.881: Total time for which application threads were stopped: 0.0000933 seconds, Stopping threads took: 0.0000142 seconds +2021-01-27T13:17:11.195+0000: 39.914: Total time for which application threads were stopped: 0.0009777 seconds, Stopping threads took: 0.0007995 seconds +2021-01-27T13:17:11.259+0000: 39.978: Total time for which application threads were stopped: 0.0133478 seconds, Stopping threads took: 0.0131357 seconds +2021-01-27T13:17:11.281+0000: 40.000: Total time for which application threads were stopped: 0.0070634 seconds, Stopping threads took: 0.0068677 seconds +2021-01-27T13:17:11.285+0000: 40.004: Total time for which application threads were stopped: 0.0013817 seconds, Stopping threads took: 0.0001156 seconds +2021-01-27T13:17:11.286+0000: 40.004: Total time for which application threads were stopped: 0.0001107 seconds, Stopping threads took: 0.0000202 seconds +2021-01-27T13:17:11.286+0000: 40.004: Total time for which application threads were stopped: 0.0000841 seconds, Stopping threads took: 0.0000164 seconds +2021-01-27T13:17:11.286+0000: 40.004: Total time for which application threads were stopped: 0.0000754 seconds, Stopping threads took: 0.0000139 seconds +2021-01-27T13:17:11.286+0000: 40.004: Total time for which application threads were stopped: 0.0001110 seconds, Stopping threads took: 0.0000138 seconds +2021-01-27T13:17:11.288+0000: 40.007: Total time for which application threads were stopped: 0.0001178 seconds, Stopping threads took: 0.0000233 seconds +2021-01-27T13:17:11.290+0000: 40.008: Total time for which application threads were stopped: 0.0001314 seconds, Stopping threads took: 0.0000236 seconds +2021-01-27T13:17:11.290+0000: 40.008: Total time for which application threads were stopped: 0.0000957 seconds, Stopping threads took: 0.0000148 seconds +2021-01-27T13:17:11.293+0000: 40.011: Total time for which application threads were stopped: 0.0026214 seconds, Stopping threads took: 0.0024934 seconds +2021-01-27T13:17:11.293+0000: 40.011: Total time for which application threads were stopped: 0.0001102 seconds, Stopping threads took: 0.0000196 seconds +2021-01-27T13:17:11.293+0000: 40.011: Total time for which application threads were stopped: 0.0000922 seconds, Stopping threads took: 0.0000154 seconds +2021-01-27T13:17:11.293+0000: 40.012: Total time for which application threads were stopped: 0.0000959 seconds, Stopping threads took: 0.0000160 seconds +2021-01-27T13:17:11.293+0000: 40.012: Total time for which application threads were stopped: 0.0000965 seconds, Stopping threads took: 0.0000167 seconds +2021-01-27T13:17:11.295+0000: 40.013: Total time for which application threads were stopped: 0.0001850 seconds, Stopping threads took: 0.0000445 seconds +2021-01-27T13:17:11.296+0000: 40.014: Total time for which application threads were stopped: 0.0001358 seconds, Stopping threads took: 0.0000182 seconds +2021-01-27T13:17:11.296+0000: 40.014: Total time for which application threads were stopped: 0.0001105 seconds, Stopping threads took: 0.0000202 seconds +2021-01-27T13:17:11.298+0000: 40.017: Total time for which application threads were stopped: 0.0025041 seconds, Stopping threads took: 0.0000172 seconds +2021-01-27T13:17:11.298+0000: 40.017: Total time for which application threads were stopped: 0.0001122 seconds, Stopping threads took: 0.0000207 seconds +2021-01-27T13:17:11.299+0000: 40.017: Total time for which application threads were stopped: 0.0000799 seconds, Stopping threads took: 0.0000147 seconds +2021-01-27T13:17:11.299+0000: 40.017: Total time for which application threads were stopped: 0.0000866 seconds, Stopping threads took: 0.0000171 seconds +2021-01-27T13:17:11.300+0000: 40.018: Total time for which application threads were stopped: 0.0001555 seconds, Stopping threads took: 0.0000485 seconds +2021-01-27T13:17:11.300+0000: 40.019: Total time for which application threads were stopped: 0.0001661 seconds, Stopping threads took: 0.0000184 seconds +2021-01-27T13:17:11.300+0000: 40.019: Total time for which application threads were stopped: 0.0000834 seconds, Stopping threads took: 0.0000168 seconds +2021-01-27T13:17:11.301+0000: 40.019: Total time for which application threads were stopped: 0.0000790 seconds, Stopping threads took: 0.0000145 seconds +2021-01-27T13:17:11.301+0000: 40.019: Total time for which application threads were stopped: 0.0000786 seconds, Stopping threads took: 0.0000146 seconds +2021-01-27T13:17:11.301+0000: 40.019: Total time for which application threads were stopped: 0.0000780 seconds, Stopping threads took: 0.0000147 seconds +2021-01-27T13:17:11.301+0000: 40.019: Total time for which application threads were stopped: 0.0000929 seconds, Stopping threads took: 0.0000138 seconds +2021-01-27T13:17:11.303+0000: 40.022: Total time for which application threads were stopped: 0.0002242 seconds, Stopping threads took: 0.0001071 seconds +2021-01-27T13:17:11.303+0000: 40.022: Total time for which application threads were stopped: 0.0001134 seconds, Stopping threads took: 0.0000184 seconds +2021-01-27T13:17:11.304+0000: 40.023: Total time for which application threads were stopped: 0.0009359 seconds, Stopping threads took: 0.0000152 seconds +2021-01-27T13:17:11.305+0000: 40.023: Total time for which application threads were stopped: 0.0001161 seconds, Stopping threads took: 0.0000202 seconds +2021-01-27T13:17:11.305+0000: 40.023: Total time for which application threads were stopped: 0.0001177 seconds, Stopping threads took: 0.0000169 seconds +2021-01-27T13:17:11.305+0000: 40.024: Total time for which application threads were stopped: 0.0001385 seconds, Stopping threads took: 0.0000586 seconds +2021-01-27T13:17:11.306+0000: 40.024: Total time for which application threads were stopped: 0.0002856 seconds, Stopping threads took: 0.0000152 seconds +2021-01-27T13:17:11.498+0000: 40.217: Total time for which application threads were stopped: 0.0169619 seconds, Stopping threads took: 0.0157938 seconds +2021-01-27T13:17:11.735+0000: 40.453: Total time for which application threads were stopped: 0.0007491 seconds, Stopping threads took: 0.0006272 seconds +2021-01-27T13:17:11.917+0000: 40.635: Total time for which application threads were stopped: 0.0020510 seconds, Stopping threads took: 0.0013334 seconds +2021-01-27T13:17:11.941+0000: 40.659: Total time for which application threads were stopped: 0.0007057 seconds, Stopping threads took: 0.0005853 seconds +2021-01-27T13:17:11.944+0000: 40.662: Total time for which application threads were stopped: 0.0010637 seconds, Stopping threads took: 0.0008139 seconds +2021-01-27T13:17:12.001+0000: 40.720: Total time for which application threads were stopped: 0.0101012 seconds, Stopping threads took: 0.0099428 seconds +2021-01-27T13:17:12.011+0000: 40.730: Total time for which application threads were stopped: 0.0014324 seconds, Stopping threads took: 0.0011425 seconds +2021-01-27T13:17:12.027+0000: 40.745: Total time for which application threads were stopped: 0.0016086 seconds, Stopping threads took: 0.0014585 seconds +2021-01-27T13:17:12.211+0000: 40.930: Total time for which application threads were stopped: 0.0140092 seconds, Stopping threads took: 0.0138545 seconds +2021-01-27T13:17:12.225+0000: 40.943: Total time for which application threads were stopped: 0.0043778 seconds, Stopping threads took: 0.0042378 seconds +2021-01-27T13:17:12.229+0000: 40.947: [GC (Allocation Failure) 2021-01-27T13:17:12.230+0000: 40.949: [ParNew Desired survivor size 8945664 bytes, new threshold 1 (max 6) -- age 1: 11569960 bytes, 11569960 total -: 151847K->13730K(157248K), 0.0293634 secs] 221987K->121939K(506816K), 0.0317307 secs] [Times: user=0.05 sys=0.02, real=0.03 secs] -2021-01-26T15:13:04.335+0000: 136.273: Total time for which application threads were stopped: 0.0333228 seconds, Stopping threads took: 0.0000562 seconds -2021-01-26T15:13:05.341+0000: 137.278: Total time for which application threads were stopped: 0.0002261 seconds, Stopping threads took: 0.0000475 seconds -2021-01-26T15:13:06.341+0000: 138.279: Total time for which application threads were stopped: 0.0003225 seconds, Stopping threads took: 0.0000608 seconds -2021-01-26T15:13:09.342+0000: 141.280: Total time for which application threads were stopped: 0.0003035 seconds, Stopping threads took: 0.0000836 seconds -2021-01-26T15:13:10.343+0000: 142.281: Total time for which application threads were stopped: 0.0002066 seconds, Stopping threads took: 0.0000492 seconds -2021-01-26T15:13:11.219+0000: 143.157: Total time for which application threads were stopped: 0.0009758 seconds, Stopping threads took: 0.0003403 seconds -2021-01-26T15:13:11.289+0000: 143.227: Total time for which application threads were stopped: 0.0004101 seconds, Stopping threads took: 0.0001985 seconds -2021-01-26T15:13:12.294+0000: 144.232: Total time for which application threads were stopped: 0.0004697 seconds, Stopping threads took: 0.0000628 seconds -2021-01-26T15:13:13.295+0000: 145.232: Total time for which application threads were stopped: 0.0001859 seconds, Stopping threads took: 0.0000475 seconds -2021-01-26T15:13:14.296+0000: 146.234: Total time for which application threads were stopped: 0.0006038 seconds, Stopping threads took: 0.0000913 seconds -2021-01-26T15:13:16.048+0000: 147.986: Total time for which application threads were stopped: 0.0002037 seconds, Stopping threads took: 0.0000438 seconds -2021-01-26T15:13:16.048+0000: 147.986: Total time for which application threads were stopped: 0.0001180 seconds, Stopping threads took: 0.0000178 seconds -2021-01-26T15:13:17.049+0000: 148.987: Total time for which application threads were stopped: 0.0007957 seconds, Stopping threads took: 0.0001410 seconds -2021-01-26T15:13:19.050+0000: 150.988: Total time for which application threads were stopped: 0.0003764 seconds, Stopping threads took: 0.0000725 seconds -2021-01-26T15:13:23.054+0000: 154.992: Total time for which application threads were stopped: 0.0004061 seconds, Stopping threads took: 0.0001216 seconds -2021-01-26T15:13:24.054+0000: 155.992: Total time for which application threads were stopped: 0.0001828 seconds, Stopping threads took: 0.0000474 seconds -2021-01-26T15:13:25.055+0000: 156.993: Total time for which application threads were stopped: 0.0002142 seconds, Stopping threads took: 0.0000507 seconds -2021-01-26T15:13:28.056+0000: 159.994: Total time for which application threads were stopped: 0.0002843 seconds, Stopping threads took: 0.0000686 seconds -2021-01-26T15:13:31.058+0000: 162.995: Total time for which application threads were stopped: 0.0002383 seconds, Stopping threads took: 0.0000573 seconds -2021-01-26T15:13:32.059+0000: 163.996: Total time for which application threads were stopped: 0.0005753 seconds, Stopping threads took: 0.0002317 seconds -2021-01-26T15:13:36.061+0000: 167.999: Total time for which application threads were stopped: 0.0005736 seconds, Stopping threads took: 0.0001512 seconds -2021-01-26T15:13:37.063+0000: 169.001: Total time for which application threads were stopped: 0.0002874 seconds, Stopping threads took: 0.0000652 seconds -2021-01-26T15:13:41.066+0000: 173.003: Total time for which application threads were stopped: 0.0004698 seconds, Stopping threads took: 0.0001905 seconds -2021-01-26T15:13:46.154+0000: 178.092: Total time for which application threads were stopped: 0.0001713 seconds, Stopping threads took: 0.0000395 seconds -2021-01-26T15:13:46.155+0000: 178.092: Total time for which application threads were stopped: 0.0001259 seconds, Stopping threads took: 0.0000184 seconds -2021-01-26T15:13:47.156+0000: 179.093: Total time for which application threads were stopped: 0.0002725 seconds, Stopping threads took: 0.0000753 seconds -2021-01-26T15:13:54.160+0000: 186.098: Total time for which application threads were stopped: 0.0003496 seconds, Stopping threads took: 0.0001012 seconds -2021-01-26T15:13:58.162+0000: 190.099: Total time for which application threads were stopped: 0.0004999 seconds, Stopping threads took: 0.0003091 seconds -2021-01-26T15:14:00.164+0000: 192.101: Total time for which application threads were stopped: 0.0002860 seconds, Stopping threads took: 0.0000712 seconds -2021-01-26T15:14:04.165+0000: 196.103: Total time for which application threads were stopped: 0.0002831 seconds, Stopping threads took: 0.0000703 seconds -2021-01-26T15:14:13.169+0000: 205.106: Total time for which application threads were stopped: 0.0002454 seconds, Stopping threads took: 0.0000614 seconds -2021-01-26T15:14:14.169+0000: 206.107: Total time for which application threads were stopped: 0.0002076 seconds, Stopping threads took: 0.0000522 seconds -2021-01-26T15:14:16.261+0000: 208.199: Total time for which application threads were stopped: 0.0004615 seconds, Stopping threads took: 0.0003092 seconds -2021-01-26T15:14:16.262+0000: 208.200: Total time for which application threads were stopped: 0.0005909 seconds, Stopping threads took: 0.0004849 seconds -2021-01-26T15:14:17.263+0000: 209.200: Total time for which application threads were stopped: 0.0002534 seconds, Stopping threads took: 0.0000580 seconds -2021-01-26T15:14:19.265+0000: 211.202: Total time for which application threads were stopped: 0.0002523 seconds, Stopping threads took: 0.0000983 seconds -2021-01-26T15:14:24.267+0000: 216.205: Total time for which application threads were stopped: 0.0004889 seconds, Stopping threads took: 0.0003242 seconds -2021-01-26T15:14:26.268+0000: 218.206: Total time for which application threads were stopped: 0.0002548 seconds, Stopping threads took: 0.0000529 seconds -2021-01-26T15:14:28.270+0000: 220.207: Total time for which application threads were stopped: 0.0007727 seconds, Stopping threads took: 0.0001887 seconds -2021-01-26T15:14:29.271+0000: 221.208: Total time for which application threads were stopped: 0.0005705 seconds, Stopping threads took: 0.0001685 seconds -2021-01-26T15:14:34.274+0000: 226.211: Total time for which application threads were stopped: 0.0005335 seconds, Stopping threads took: 0.0000863 seconds -2021-01-26T15:14:40.276+0000: 232.213: Total time for which application threads were stopped: 0.0002839 seconds, Stopping threads took: 0.0000639 seconds -2021-01-26T15:14:44.278+0000: 236.216: Total time for which application threads were stopped: 0.0002143 seconds, Stopping threads took: 0.0000523 seconds -2021-01-26T15:14:46.358+0000: 238.295: Total time for which application threads were stopped: 0.0001987 seconds, Stopping threads took: 0.0000392 seconds -2021-01-26T15:14:46.359+0000: 238.296: Total time for which application threads were stopped: 0.0002402 seconds, Stopping threads took: 0.0000204 seconds -2021-01-26T15:14:48.359+0000: 240.297: Total time for which application threads were stopped: 0.0002100 seconds, Stopping threads took: 0.0000475 seconds -2021-01-26T15:14:58.363+0000: 250.301: Total time for which application threads were stopped: 0.0002271 seconds, Stopping threads took: 0.0000774 seconds -2021-01-26T15:15:14.370+0000: 266.307: Total time for which application threads were stopped: 0.0003648 seconds, Stopping threads took: 0.0000860 seconds -2021-01-26T15:15:16.371+0000: 268.308: Total time for which application threads were stopped: 0.0002400 seconds, Stopping threads took: 0.0000494 seconds -2021-01-26T15:15:16.444+0000: 268.382: Total time for which application threads were stopped: 0.0001795 seconds, Stopping threads took: 0.0000443 seconds -2021-01-26T15:15:16.445+0000: 268.382: Total time for which application threads were stopped: 0.0001211 seconds, Stopping threads took: 0.0000183 seconds -2021-01-26T15:15:17.445+0000: 269.383: Total time for which application threads were stopped: 0.0004525 seconds, Stopping threads took: 0.0000833 seconds -2021-01-26T15:15:19.447+0000: 271.384: Total time for which application threads were stopped: 0.0002722 seconds, Stopping threads took: 0.0000614 seconds -2021-01-26T15:15:28.392+0000: 280.329: Total time for which application threads were stopped: 0.0002489 seconds, Stopping threads took: 0.0000907 seconds -2021-01-26T15:15:28.393+0000: 280.330: Total time for which application threads were stopped: 0.0003856 seconds, Stopping threads took: 0.0002596 seconds -2021-01-26T15:15:28.404+0000: 280.341: Total time for which application threads were stopped: 0.0004845 seconds, Stopping threads took: 0.0002467 seconds -2021-01-26T15:15:28.494+0000: 280.431: Total time for which application threads were stopped: 0.0005909 seconds, Stopping threads took: 0.0002962 seconds -2021-01-26T15:15:28.502+0000: 280.439: Total time for which application threads were stopped: 0.0022392 seconds, Stopping threads took: 0.0019129 seconds -2021-01-26T15:15:28.539+0000: 280.477: Total time for which application threads were stopped: 0.0004649 seconds, Stopping threads took: 0.0002848 seconds -2021-01-26T15:15:28.579+0000: 280.516: Total time for which application threads were stopped: 0.0004373 seconds, Stopping threads took: 0.0002023 seconds -2021-01-26T15:15:28.579+0000: 280.517: Total time for which application threads were stopped: 0.0005942 seconds, Stopping threads took: 0.0004749 seconds -2021-01-26T15:15:28.580+0000: 280.518: Total time for which application threads were stopped: 0.0005699 seconds, Stopping threads took: 0.0004616 seconds -2021-01-26T15:15:28.593+0000: 280.531: Total time for which application threads were stopped: 0.0002251 seconds, Stopping threads took: 0.0000471 seconds -2021-01-26T15:15:28.597+0000: 280.534: Total time for which application threads were stopped: 0.0005229 seconds, Stopping threads took: 0.0002708 seconds -2021-01-26T15:15:28.600+0000: 280.537: Total time for which application threads were stopped: 0.0003094 seconds, Stopping threads took: 0.0001789 seconds -2021-01-26T15:15:29.600+0000: 281.537: Total time for which application threads were stopped: 0.0002451 seconds, Stopping threads took: 0.0000577 seconds -2021-01-26T15:15:32.601+0000: 284.539: Total time for which application threads were stopped: 0.0003872 seconds, Stopping threads took: 0.0000775 seconds -2021-01-26T15:15:34.602+0000: 286.540: Total time for which application threads were stopped: 0.0002261 seconds, Stopping threads took: 0.0000584 seconds -2021-01-26T15:15:40.605+0000: 292.542: Total time for which application threads were stopped: 0.0009395 seconds, Stopping threads took: 0.0002571 seconds -2021-01-26T15:15:46.607+0000: 298.544: Total time for which application threads were stopped: 0.0003801 seconds, Stopping threads took: 0.0000703 seconds -2021-01-26T15:15:58.616+0000: 310.553: Total time for which application threads were stopped: 0.0002784 seconds, Stopping threads took: 0.0000973 seconds -2021-01-26T15:15:59.617+0000: 311.554: Total time for which application threads were stopped: 0.0004121 seconds, Stopping threads took: 0.0001999 seconds -2021-01-26T15:16:01.618+0000: 313.556: Total time for which application threads were stopped: 0.0003882 seconds, Stopping threads took: 0.0000888 seconds -2021-01-26T15:16:02.619+0000: 314.556: Total time for which application threads were stopped: 0.0003527 seconds, Stopping threads took: 0.0001225 seconds -2021-01-26T15:16:14.625+0000: 326.562: Total time for which application threads were stopped: 0.0003622 seconds, Stopping threads took: 0.0000898 seconds -2021-01-26T15:16:16.631+0000: 328.569: Total time for which application threads were stopped: 0.0001886 seconds, Stopping threads took: 0.0000418 seconds -2021-01-26T15:16:16.632+0000: 328.569: Total time for which application threads were stopped: 0.0001297 seconds, Stopping threads took: 0.0000200 seconds -2021-01-26T15:16:17.634+0000: 329.571: Total time for which application threads were stopped: 0.0002843 seconds, Stopping threads took: 0.0000688 seconds -2021-01-26T15:16:28.639+0000: 340.576: Total time for which application threads were stopped: 0.0002960 seconds, Stopping threads took: 0.0001088 seconds -2021-01-26T15:16:33.807+0000: 345.745: Total time for which application threads were stopped: 0.0010290 seconds, Stopping threads took: 0.0008807 seconds -2021-01-26T15:16:33.809+0000: 345.746: Total time for which application threads were stopped: 0.0006637 seconds, Stopping threads took: 0.0004901 seconds -2021-01-26T15:16:33.810+0000: 345.747: Total time for which application threads were stopped: 0.0003775 seconds, Stopping threads took: 0.0002573 seconds -2021-01-26T15:16:33.811+0000: 345.748: Total time for which application threads were stopped: 0.0006130 seconds, Stopping threads took: 0.0004970 seconds -2021-01-26T15:16:33.814+0000: 345.751: Total time for which application threads were stopped: 0.0002030 seconds, Stopping threads took: 0.0000950 seconds -2021-01-26T15:16:33.816+0000: 345.753: Total time for which application threads were stopped: 0.0002552 seconds, Stopping threads took: 0.0001426 seconds -2021-01-26T15:16:33.817+0000: 345.754: Total time for which application threads were stopped: 0.0005990 seconds, Stopping threads took: 0.0003621 seconds -2021-01-26T15:16:33.817+0000: 345.755: Total time for which application threads were stopped: 0.0003589 seconds, Stopping threads took: 0.0002534 seconds -2021-01-26T15:16:33.819+0000: 345.757: Total time for which application threads were stopped: 0.0005711 seconds, Stopping threads took: 0.0004104 seconds -2021-01-26T15:16:33.820+0000: 345.757: Total time for which application threads were stopped: 0.0004026 seconds, Stopping threads took: 0.0003045 seconds -2021-01-26T15:16:33.821+0000: 345.758: Total time for which application threads were stopped: 0.0004633 seconds, Stopping threads took: 0.0003667 seconds -2021-01-26T15:16:33.821+0000: 345.759: Total time for which application threads were stopped: 0.0001262 seconds, Stopping threads took: 0.0000242 seconds -2021-01-26T15:16:33.823+0000: 345.760: Total time for which application threads were stopped: 0.0001142 seconds, Stopping threads took: 0.0000200 seconds -2021-01-26T15:16:33.823+0000: 345.761: Total time for which application threads were stopped: 0.0002654 seconds, Stopping threads took: 0.0001777 seconds -2021-01-26T15:16:33.824+0000: 345.761: Total time for which application threads were stopped: 0.0003363 seconds, Stopping threads took: 0.0002513 seconds -2021-01-26T15:16:33.824+0000: 345.762: Total time for which application threads were stopped: 0.0003430 seconds, Stopping threads took: 0.0002495 seconds -2021-01-26T15:16:33.825+0000: 345.762: Total time for which application threads were stopped: 0.0003997 seconds, Stopping threads took: 0.0003086 seconds -2021-01-26T15:16:33.841+0000: 345.778: Total time for which application threads were stopped: 0.0003232 seconds, Stopping threads took: 0.0000698 seconds -2021-01-26T15:16:33.847+0000: 345.785: Total time for which application threads were stopped: 0.0003108 seconds, Stopping threads took: 0.0000773 seconds -2021-01-26T15:16:33.858+0000: 345.796: Total time for which application threads were stopped: 0.0024287 seconds, Stopping threads took: 0.0022300 seconds -2021-01-26T15:16:33.861+0000: 345.798: Total time for which application threads were stopped: 0.0021067 seconds, Stopping threads took: 0.0018562 seconds -2021-01-26T15:16:33.862+0000: 345.799: Total time for which application threads were stopped: 0.0003298 seconds, Stopping threads took: 0.0001196 seconds -2021-01-26T15:16:33.862+0000: 345.800: Total time for which application threads were stopped: 0.0005175 seconds, Stopping threads took: 0.0001399 seconds -2021-01-26T15:16:33.863+0000: 345.801: Total time for which application threads were stopped: 0.0004438 seconds, Stopping threads took: 0.0001579 seconds -2021-01-26T15:16:33.864+0000: 345.801: Total time for which application threads were stopped: 0.0003251 seconds, Stopping threads took: 0.0001760 seconds -2021-01-26T15:16:33.881+0000: 345.819: Total time for which application threads were stopped: 0.0020159 seconds, Stopping threads took: 0.0017986 seconds -2021-01-26T15:16:33.884+0000: 345.822: Total time for which application threads were stopped: 0.0010598 seconds, Stopping threads took: 0.0009179 seconds -2021-01-26T15:16:33.886+0000: 345.823: Total time for which application threads were stopped: 0.0012317 seconds, Stopping threads took: 0.0011014 seconds -2021-01-26T15:16:33.887+0000: 345.825: Total time for which application threads were stopped: 0.0011292 seconds, Stopping threads took: 0.0009161 seconds -2021-01-26T15:16:33.888+0000: 345.825: Total time for which application threads were stopped: 0.0005115 seconds, Stopping threads took: 0.0003299 seconds -2021-01-26T15:16:33.890+0000: 345.828: Total time for which application threads were stopped: 0.0011727 seconds, Stopping threads took: 0.0008996 seconds -2021-01-26T15:16:33.893+0000: 345.830: Total time for which application threads were stopped: 0.0005713 seconds, Stopping threads took: 0.0002917 seconds -2021-01-26T15:16:33.903+0000: 345.840: Total time for which application threads were stopped: 0.0006650 seconds, Stopping threads took: 0.0003856 seconds -2021-01-26T15:16:33.908+0000: 345.846: Total time for which application threads were stopped: 0.0002775 seconds, Stopping threads took: 0.0001474 seconds -2021-01-26T15:16:33.910+0000: 345.847: Total time for which application threads were stopped: 0.0002961 seconds, Stopping threads took: 0.0000265 seconds -2021-01-26T15:16:33.914+0000: 345.851: Total time for which application threads were stopped: 0.0013540 seconds, Stopping threads took: 0.0011071 seconds -2021-01-26T15:16:33.916+0000: 345.853: Total time for which application threads were stopped: 0.0001759 seconds, Stopping threads took: 0.0000356 seconds -2021-01-26T15:16:33.918+0000: 345.855: Total time for which application threads were stopped: 0.0016035 seconds, Stopping threads took: 0.0014817 seconds -2021-01-26T15:16:33.921+0000: 345.858: Total time for which application threads were stopped: 0.0004786 seconds, Stopping threads took: 0.0002531 seconds -2021-01-26T15:16:33.924+0000: 345.861: Total time for which application threads were stopped: 0.0004374 seconds, Stopping threads took: 0.0001483 seconds -2021-01-26T15:16:33.926+0000: 345.864: Total time for which application threads were stopped: 0.0001812 seconds, Stopping threads took: 0.0000347 seconds -2021-01-26T15:16:33.928+0000: 345.865: Total time for which application threads were stopped: 0.0010259 seconds, Stopping threads took: 0.0001177 seconds -2021-01-26T15:16:33.928+0000: 345.866: Total time for which application threads were stopped: 0.0002610 seconds, Stopping threads took: 0.0000256 seconds -2021-01-26T15:16:33.929+0000: 345.866: Total time for which application threads were stopped: 0.0001845 seconds, Stopping threads took: 0.0000209 seconds -2021-01-26T15:16:33.930+0000: 345.867: Total time for which application threads were stopped: 0.0002769 seconds, Stopping threads took: 0.0000228 seconds -2021-01-26T15:16:33.932+0000: 345.870: Total time for which application threads were stopped: 0.0002877 seconds, Stopping threads took: 0.0000613 seconds -2021-01-26T15:16:33.941+0000: 345.878: Total time for which application threads were stopped: 0.0003727 seconds, Stopping threads took: 0.0001451 seconds -2021-01-26T15:16:33.942+0000: 345.880: Total time for which application threads were stopped: 0.0003204 seconds, Stopping threads took: 0.0002235 seconds -2021-01-26T15:16:33.943+0000: 345.880: Total time for which application threads were stopped: 0.0004345 seconds, Stopping threads took: 0.0003138 seconds -2021-01-26T15:16:33.944+0000: 345.881: Total time for which application threads were stopped: 0.0005043 seconds, Stopping threads took: 0.0003661 seconds -2021-01-26T15:16:33.945+0000: 345.882: Total time for which application threads were stopped: 0.0004888 seconds, Stopping threads took: 0.0003709 seconds -2021-01-26T15:16:33.945+0000: 345.883: Total time for which application threads were stopped: 0.0004804 seconds, Stopping threads took: 0.0002318 seconds -2021-01-26T15:16:33.946+0000: 345.884: Total time for which application threads were stopped: 0.0003528 seconds, Stopping threads took: 0.0000885 seconds -2021-01-26T15:16:33.953+0000: 345.891: Total time for which application threads were stopped: 0.0006843 seconds, Stopping threads took: 0.0005296 seconds -2021-01-26T15:16:33.956+0000: 345.893: Total time for which application threads were stopped: 0.0011380 seconds, Stopping threads took: 0.0009940 seconds -2021-01-26T15:16:33.956+0000: 345.894: Total time for which application threads were stopped: 0.0004688 seconds, Stopping threads took: 0.0003453 seconds -2021-01-26T15:16:33.957+0000: 345.894: Total time for which application threads were stopped: 0.0003122 seconds, Stopping threads took: 0.0000954 seconds -2021-01-26T15:16:33.958+0000: 345.895: Total time for which application threads were stopped: 0.0007280 seconds, Stopping threads took: 0.0005993 seconds -2021-01-26T15:16:33.959+0000: 345.896: Total time for which application threads were stopped: 0.0009064 seconds, Stopping threads took: 0.0007116 seconds -2021-01-26T15:16:33.960+0000: 345.898: Total time for which application threads were stopped: 0.0005505 seconds, Stopping threads took: 0.0004040 seconds -2021-01-26T15:16:33.976+0000: 345.914: Total time for which application threads were stopped: 0.0004693 seconds, Stopping threads took: 0.0003241 seconds -2021-01-26T15:16:34.246+0000: 346.183: Total time for which application threads were stopped: 0.0005276 seconds, Stopping threads took: 0.0003760 seconds -2021-01-26T15:16:34.246+0000: 346.184: Total time for which application threads were stopped: 0.0003657 seconds, Stopping threads took: 0.0002297 seconds -2021-01-26T15:16:34.481+0000: 346.419: Total time for which application threads were stopped: 0.0001983 seconds, Stopping threads took: 0.0000482 seconds -2021-01-26T15:16:34.482+0000: 346.419: Total time for which application threads were stopped: 0.0001438 seconds, Stopping threads took: 0.0000184 seconds -2021-01-26T15:16:34.482+0000: 346.419: Total time for which application threads were stopped: 0.0001334 seconds, Stopping threads took: 0.0000173 seconds -2021-01-26T15:16:34.482+0000: 346.419: Total time for which application threads were stopped: 0.0001302 seconds, Stopping threads took: 0.0000163 seconds -2021-01-26T15:16:34.482+0000: 346.420: Total time for which application threads were stopped: 0.0000957 seconds, Stopping threads took: 0.0000169 seconds -2021-01-26T15:16:34.484+0000: 346.421: Total time for which application threads were stopped: 0.0002622 seconds, Stopping threads took: 0.0001549 seconds -2021-01-26T15:16:34.484+0000: 346.422: Total time for which application threads were stopped: 0.0002588 seconds, Stopping threads took: 0.0001538 seconds -2021-01-26T15:16:34.485+0000: 346.422: Total time for which application threads were stopped: 0.0002073 seconds, Stopping threads took: 0.0001249 seconds -2021-01-26T15:16:34.485+0000: 346.423: Total time for which application threads were stopped: 0.0002504 seconds, Stopping threads took: 0.0001697 seconds -2021-01-26T15:16:34.486+0000: 346.423: Total time for which application threads were stopped: 0.0001590 seconds, Stopping threads took: 0.0000799 seconds -2021-01-26T15:16:34.486+0000: 346.423: Total time for which application threads were stopped: 0.0002003 seconds, Stopping threads took: 0.0001210 seconds -2021-01-26T15:16:34.486+0000: 346.423: Total time for which application threads were stopped: 0.0001308 seconds, Stopping threads took: 0.0000540 seconds -2021-01-26T15:16:34.487+0000: 346.425: Total time for which application threads were stopped: 0.0002247 seconds, Stopping threads took: 0.0001303 seconds -2021-01-26T15:16:34.488+0000: 346.425: Total time for which application threads were stopped: 0.0002493 seconds, Stopping threads took: 0.0001483 seconds -2021-01-26T15:16:46.743+0000: 358.680: Total time for which application threads were stopped: 0.0009887 seconds, Stopping threads took: 0.0008637 seconds -2021-01-26T15:16:46.744+0000: 358.681: Total time for which application threads were stopped: 0.0003398 seconds, Stopping threads took: 0.0001544 seconds -2021-01-26T15:16:47.744+0000: 359.681: Total time for which application threads were stopped: 0.0001686 seconds, Stopping threads took: 0.0000452 seconds -2021-01-26T15:16:49.746+0000: 361.683: Total time for which application threads were stopped: 0.0004456 seconds, Stopping threads took: 0.0001865 seconds -2021-01-26T15:16:54.748+0000: 366.685: Total time for which application threads were stopped: 0.0001820 seconds, Stopping threads took: 0.0000501 seconds -2021-01-26T15:16:58.750+0000: 370.688: Total time for which application threads were stopped: 0.0002459 seconds, Stopping threads took: 0.0000802 seconds -2021-01-26T15:17:12.756+0000: 384.693: Total time for which application threads were stopped: 0.0001883 seconds, Stopping threads took: 0.0000477 seconds -2021-01-26T15:17:16.841+0000: 388.778: Total time for which application threads were stopped: 0.0002021 seconds, Stopping threads took: 0.0000817 seconds -2021-01-26T15:17:16.841+0000: 388.779: Total time for which application threads were stopped: 0.0001693 seconds, Stopping threads took: 0.0000191 seconds -2021-01-26T15:17:17.843+0000: 389.780: Total time for which application threads were stopped: 0.0004005 seconds, Stopping threads took: 0.0000985 seconds -2021-01-26T15:17:28.849+0000: 400.787: Total time for which application threads were stopped: 0.0003755 seconds, Stopping threads took: 0.0001230 seconds -2021-01-26T15:17:46.946+0000: 418.884: Total time for which application threads were stopped: 0.0004459 seconds, Stopping threads took: 0.0002943 seconds +- age 1: 15229000 bytes, 15229000 total +: 153243K->17472K(157248K), 0.1361584 secs] 166836K->71610K(506816K), 0.1386292 secs] [Times: user=0.11 sys=0.02, real=0.14 secs] +2021-01-27T13:17:12.370+0000: 41.089: Total time for which application threads were stopped: 0.1419840 seconds, Stopping threads took: 0.0004906 seconds +2021-01-27T13:17:12.439+0000: 41.157: Total time for which application threads were stopped: 0.0175879 seconds, Stopping threads took: 0.0174322 seconds +2021-01-27T13:17:12.456+0000: 41.175: Total time for which application threads were stopped: 0.0045997 seconds, Stopping threads took: 0.0044818 seconds +2021-01-27T13:17:12.467+0000: 41.185: Total time for which application threads were stopped: 0.0056637 seconds, Stopping threads took: 0.0054955 seconds +2021-01-27T13:17:12.523+0000: 41.242: Total time for which application threads were stopped: 0.0087394 seconds, Stopping threads took: 0.0070594 seconds +2021-01-27T13:17:12.873+0000: 41.591: Total time for which application threads were stopped: 0.0017053 seconds, Stopping threads took: 0.0014236 seconds +2021-01-27T13:17:13.034+0000: 41.752: Total time for which application threads were stopped: 0.0330943 seconds, Stopping threads took: 0.0329080 seconds +2021-01-27T13:17:13.156+0000: 41.875: Total time for which application threads were stopped: 0.0199167 seconds, Stopping threads took: 0.0167672 seconds +2021-01-27T13:17:13.176+0000: 41.894: Total time for which application threads were stopped: 0.0065295 seconds, Stopping threads took: 0.0062882 seconds +2021-01-27T13:17:13.211+0000: 41.930: Total time for which application threads were stopped: 0.0112444 seconds, Stopping threads took: 0.0110690 seconds +2021-01-27T13:17:13.263+0000: 41.982: Total time for which application threads were stopped: 0.0105299 seconds, Stopping threads took: 0.0073561 seconds +2021-01-27T13:17:13.281+0000: 41.999: Total time for which application threads were stopped: 0.0053389 seconds, Stopping threads took: 0.0051614 seconds +2021-01-27T13:17:13.283+0000: 42.001: Total time for which application threads were stopped: 0.0002804 seconds, Stopping threads took: 0.0001251 seconds +2021-01-27T13:17:13.288+0000: 42.007: Total time for which application threads were stopped: 0.0007651 seconds, Stopping threads took: 0.0005209 seconds +2021-01-27T13:17:13.290+0000: 42.008: Total time for which application threads were stopped: 0.0003010 seconds, Stopping threads took: 0.0001510 seconds +2021-01-27T13:17:13.291+0000: 42.009: Total time for which application threads were stopped: 0.0002913 seconds, Stopping threads took: 0.0001647 seconds +2021-01-27T13:17:13.344+0000: 42.063: Total time for which application threads were stopped: 0.0194472 seconds, Stopping threads took: 0.0192595 seconds +2021-01-27T13:17:13.368+0000: 42.086: Total time for which application threads were stopped: 0.0086656 seconds, Stopping threads took: 0.0057953 seconds +2021-01-27T13:17:13.493+0000: 42.212: Total time for which application threads were stopped: 0.0250523 seconds, Stopping threads took: 0.0248830 seconds +2021-01-27T13:17:13.495+0000: 42.214: Total time for which application threads were stopped: 0.0002847 seconds, Stopping threads took: 0.0000429 seconds +2021-01-27T13:17:13.501+0000: 42.219: Total time for which application threads were stopped: 0.0007488 seconds, Stopping threads took: 0.0002575 seconds +2021-01-27T13:17:13.507+0000: 42.225: Total time for which application threads were stopped: 0.0012470 seconds, Stopping threads took: 0.0002953 seconds +2021-01-27T13:17:13.522+0000: 42.240: Total time for which application threads were stopped: 0.0051327 seconds, Stopping threads took: 0.0049202 seconds +2021-01-27T13:17:13.523+0000: 42.242: Total time for which application threads were stopped: 0.0002289 seconds, Stopping threads took: 0.0000493 seconds +2021-01-27T13:17:13.537+0000: 42.255: Total time for which application threads were stopped: 0.0108218 seconds, Stopping threads took: 0.0106382 seconds +2021-01-27T13:17:13.544+0000: 42.263: Total time for which application threads were stopped: 0.0005120 seconds, Stopping threads took: 0.0002043 seconds +2021-01-27T13:17:13.553+0000: 42.271: Total time for which application threads were stopped: 0.0073897 seconds, Stopping threads took: 0.0066627 seconds +2021-01-27T13:17:13.564+0000: 42.283: Total time for which application threads were stopped: 0.0007600 seconds, Stopping threads took: 0.0001110 seconds +2021-01-27T13:17:13.587+0000: 42.306: Total time for which application threads were stopped: 0.0096292 seconds, Stopping threads took: 0.0034216 seconds +2021-01-27T13:17:13.605+0000: 42.324: Total time for which application threads were stopped: 0.0161426 seconds, Stopping threads took: 0.0131551 seconds +2021-01-27T13:17:13.614+0000: 42.332: Total time for which application threads were stopped: 0.0067894 seconds, Stopping threads took: 0.0025195 seconds +2021-01-27T13:17:13.629+0000: 42.348: Total time for which application threads were stopped: 0.0095978 seconds, Stopping threads took: 0.0093918 seconds +2021-01-27T13:17:13.631+0000: 42.349: Total time for which application threads were stopped: 0.0005576 seconds, Stopping threads took: 0.0002471 seconds +2021-01-27T13:17:13.749+0000: 42.468: Total time for which application threads were stopped: 0.0093928 seconds, Stopping threads took: 0.0090208 seconds +2021-01-27T13:17:13.760+0000: 42.478: Total time for which application threads were stopped: 0.0045549 seconds, Stopping threads took: 0.0043085 seconds +2021-01-27T13:17:13.781+0000: 42.499: Total time for which application threads were stopped: 0.0149247 seconds, Stopping threads took: 0.0147533 seconds +2021-01-27T13:17:13.803+0000: 42.522: Total time for which application threads were stopped: 0.0098165 seconds, Stopping threads took: 0.0095445 seconds +2021-01-27T13:17:13.827+0000: 42.545: Total time for which application threads were stopped: 0.0058224 seconds, Stopping threads took: 0.0054341 seconds +2021-01-27T13:17:13.845+0000: 42.564: Total time for which application threads were stopped: 0.0134015 seconds, Stopping threads took: 0.0131223 seconds +2021-01-27T13:17:13.865+0000: 42.583: Total time for which application threads were stopped: 0.0089563 seconds, Stopping threads took: 0.0084005 seconds +2021-01-27T13:17:13.875+0000: 42.593: Total time for which application threads were stopped: 0.0036245 seconds, Stopping threads took: 0.0027268 seconds +2021-01-27T13:17:13.895+0000: 42.613: Total time for which application threads were stopped: 0.0047407 seconds, Stopping threads took: 0.0037567 seconds +2021-01-27T13:17:14.001+0000: 42.719: Total time for which application threads were stopped: 0.0004917 seconds, Stopping threads took: 0.0001396 seconds +2021-01-27T13:17:14.154+0000: 42.872: Total time for which application threads were stopped: 0.0151529 seconds, Stopping threads took: 0.0149473 seconds +2021-01-27T13:17:14.157+0000: 42.875: Total time for which application threads were stopped: 0.0010613 seconds, Stopping threads took: 0.0005829 seconds +2021-01-27T13:17:14.157+0000: 42.875: Total time for which application threads were stopped: 0.0001488 seconds, Stopping threads took: 0.0000577 seconds +2021-01-27T13:17:14.185+0000: 42.903: Total time for which application threads were stopped: 0.0276530 seconds, Stopping threads took: 0.0274443 seconds +2021-01-27T13:17:14.186+0000: 42.904: Total time for which application threads were stopped: 0.0004136 seconds, Stopping threads took: 0.0000355 seconds +2021-01-27T13:17:14.187+0000: 42.905: Total time for which application threads were stopped: 0.0005390 seconds, Stopping threads took: 0.0001432 seconds +2021-01-27T13:17:14.188+0000: 42.906: Total time for which application threads were stopped: 0.0001859 seconds, Stopping threads took: 0.0000431 seconds +2021-01-27T13:17:14.215+0000: 42.934: Total time for which application threads were stopped: 0.0021545 seconds, Stopping threads took: 0.0018810 seconds +2021-01-27T13:17:14.255+0000: 42.973: Total time for which application threads were stopped: 0.0034280 seconds, Stopping threads took: 0.0000438 seconds +2021-01-27T13:17:14.419+0000: 43.138: Total time for which application threads were stopped: 0.0008955 seconds, Stopping threads took: 0.0006986 seconds +2021-01-27T13:17:14.448+0000: 43.166: Total time for which application threads were stopped: 0.0282981 seconds, Stopping threads took: 0.0281471 seconds +2021-01-27T13:17:14.454+0000: 43.172: Total time for which application threads were stopped: 0.0014097 seconds, Stopping threads took: 0.0010629 seconds +2021-01-27T13:17:14.458+0000: 43.176: Total time for which application threads were stopped: 0.0020538 seconds, Stopping threads took: 0.0017475 seconds +2021-01-27T13:17:14.462+0000: 43.181: Total time for which application threads were stopped: 0.0011460 seconds, Stopping threads took: 0.0009812 seconds +2021-01-27T13:17:14.549+0000: 43.268: Total time for which application threads were stopped: 0.0004832 seconds, Stopping threads took: 0.0003185 seconds +2021-01-27T13:17:14.605+0000: 43.324: Total time for which application threads were stopped: 0.0010254 seconds, Stopping threads took: 0.0008044 seconds +2021-01-27T13:17:14.636+0000: 43.354: Total time for which application threads were stopped: 0.0205775 seconds, Stopping threads took: 0.0203762 seconds +2021-01-27T13:17:14.643+0000: 43.361: Total time for which application threads were stopped: 0.0069358 seconds, Stopping threads took: 0.0067474 seconds +2021-01-27T13:17:14.657+0000: 43.376: Total time for which application threads were stopped: 0.0045490 seconds, Stopping threads took: 0.0041272 seconds +2021-01-27T13:17:14.712+0000: 43.430: Total time for which application threads were stopped: 0.0006633 seconds, Stopping threads took: 0.0000776 seconds +2021-01-27T13:17:14.894+0000: 43.612: Total time for which application threads were stopped: 0.0295263 seconds, Stopping threads took: 0.0291938 seconds +2021-01-27T13:17:14.900+0000: 43.618: Total time for which application threads were stopped: 0.0008843 seconds, Stopping threads took: 0.0002133 seconds +2021-01-27T13:17:14.902+0000: 43.620: Total time for which application threads were stopped: 0.0002549 seconds, Stopping threads took: 0.0000593 seconds +2021-01-27T13:17:15.146+0000: 43.864: Total time for which application threads were stopped: 0.0582852 seconds, Stopping threads took: 0.0579951 seconds +2021-01-27T13:17:15.166+0000: 43.885: Total time for which application threads were stopped: 0.0199209 seconds, Stopping threads took: 0.0064994 seconds +2021-01-27T13:17:15.185+0000: 43.903: Total time for which application threads were stopped: 0.0003738 seconds, Stopping threads took: 0.0000869 seconds +2021-01-27T13:17:15.256+0000: 43.974: Total time for which application threads were stopped: 0.0190692 seconds, Stopping threads took: 0.0187234 seconds +2021-01-27T13:17:15.299+0000: 44.017: Total time for which application threads were stopped: 0.0187255 seconds, Stopping threads took: 0.0183710 seconds +2021-01-27T13:17:15.328+0000: 44.047: Total time for which application threads were stopped: 0.0160128 seconds, Stopping threads took: 0.0147465 seconds +2021-01-27T13:17:15.346+0000: 44.065: Total time for which application threads were stopped: 0.0108242 seconds, Stopping threads took: 0.0096708 seconds +2021-01-27T13:17:15.393+0000: 44.112: Total time for which application threads were stopped: 0.0199064 seconds, Stopping threads took: 0.0196629 seconds +2021-01-27T13:17:15.456+0000: 44.174: Total time for which application threads were stopped: 0.0003128 seconds, Stopping threads took: 0.0001222 seconds +2021-01-27T13:17:15.458+0000: 44.176: Total time for which application threads were stopped: 0.0004354 seconds, Stopping threads took: 0.0002887 seconds +2021-01-27T13:17:15.480+0000: 44.199: Total time for which application threads were stopped: 0.0189538 seconds, Stopping threads took: 0.0186854 seconds +2021-01-27T13:17:15.505+0000: 44.224: Total time for which application threads were stopped: 0.0189091 seconds, Stopping threads took: 0.0185860 seconds +2021-01-27T13:17:15.539+0000: 44.258: Total time for which application threads were stopped: 0.0030610 seconds, Stopping threads took: 0.0018963 seconds +2021-01-27T13:17:15.558+0000: 44.276: Total time for which application threads were stopped: 0.0098138 seconds, Stopping threads took: 0.0093361 seconds +2021-01-27T13:17:15.562+0000: 44.280: Total time for which application threads were stopped: 0.0035122 seconds, Stopping threads took: 0.0032853 seconds +2021-01-27T13:17:15.585+0000: 44.303: Total time for which application threads were stopped: 0.0053765 seconds, Stopping threads took: 0.0050772 seconds +2021-01-27T13:17:15.592+0000: 44.310: Total time for which application threads were stopped: 0.0008479 seconds, Stopping threads took: 0.0006392 seconds +2021-01-27T13:17:15.592+0000: 44.310: Total time for which application threads were stopped: 0.0002939 seconds, Stopping threads took: 0.0001265 seconds +2021-01-27T13:17:15.658+0000: 44.377: Total time for which application threads were stopped: 0.0430177 seconds, Stopping threads took: 0.0426902 seconds +2021-01-27T13:17:15.664+0000: 44.382: Total time for which application threads were stopped: 0.0003307 seconds, Stopping threads took: 0.0001468 seconds +2021-01-27T13:17:15.684+0000: 44.403: Total time for which application threads were stopped: 0.0089214 seconds, Stopping threads took: 0.0086978 seconds +2021-01-27T13:17:15.704+0000: 44.423: Total time for which application threads were stopped: 0.0131815 seconds, Stopping threads took: 0.0129286 seconds +2021-01-27T13:17:15.733+0000: 44.451: Total time for which application threads were stopped: 0.0026524 seconds, Stopping threads took: 0.0024439 seconds +2021-01-27T13:17:15.755+0000: 44.473: Total time for which application threads were stopped: 0.0163679 seconds, Stopping threads took: 0.0161607 seconds +2021-01-27T13:17:15.759+0000: 44.477: Total time for which application threads were stopped: 0.0022820 seconds, Stopping threads took: 0.0020567 seconds +2021-01-27T13:17:15.774+0000: 44.492: Total time for which application threads were stopped: 0.0053113 seconds, Stopping threads took: 0.0051264 seconds +2021-01-27T13:17:15.814+0000: 44.533: Total time for which application threads were stopped: 0.0059127 seconds, Stopping threads took: 0.0046167 seconds +2021-01-27T13:17:15.846+0000: 44.565: Total time for which application threads were stopped: 0.0003774 seconds, Stopping threads took: 0.0002297 seconds +2021-01-27T13:17:15.879+0000: 44.597: Total time for which application threads were stopped: 0.0179388 seconds, Stopping threads took: 0.0177059 seconds +2021-01-27T13:17:15.897+0000: 44.616: Total time for which application threads were stopped: 0.0155074 seconds, Stopping threads took: 0.0152161 seconds +2021-01-27T13:17:15.906+0000: 44.624: Total time for which application threads were stopped: 0.0039698 seconds, Stopping threads took: 0.0037336 seconds +2021-01-27T13:17:15.927+0000: 44.646: Total time for which application threads were stopped: 0.0098039 seconds, Stopping threads took: 0.0096009 seconds +2021-01-27T13:17:15.941+0000: 44.659: Total time for which application threads were stopped: 0.0069322 seconds, Stopping threads took: 0.0067442 seconds +2021-01-27T13:17:15.946+0000: 44.665: Total time for which application threads were stopped: 0.0044977 seconds, Stopping threads took: 0.0043135 seconds +2021-01-27T13:17:15.956+0000: 44.675: Total time for which application threads were stopped: 0.0086252 seconds, Stopping threads took: 0.0084095 seconds +2021-01-27T13:17:15.970+0000: 44.688: Total time for which application threads were stopped: 0.0107525 seconds, Stopping threads took: 0.0105449 seconds +2021-01-27T13:17:15.996+0000: 44.714: Total time for which application threads were stopped: 0.0112382 seconds, Stopping threads took: 0.0109231 seconds +2021-01-27T13:17:15.999+0000: 44.717: Total time for which application threads were stopped: 0.0014502 seconds, Stopping threads took: 0.0012111 seconds +2021-01-27T13:17:16.005+0000: 44.723: Total time for which application threads were stopped: 0.0052725 seconds, Stopping threads took: 0.0046752 seconds +2021-01-27T13:17:16.025+0000: 44.743: Total time for which application threads were stopped: 0.0022140 seconds, Stopping threads took: 0.0019336 seconds +2021-01-27T13:17:16.029+0000: 44.748: Total time for which application threads were stopped: 0.0035090 seconds, Stopping threads took: 0.0033206 seconds +2021-01-27T13:17:16.034+0000: 44.752: Total time for which application threads were stopped: 0.0016633 seconds, Stopping threads took: 0.0014216 seconds +2021-01-27T13:17:16.036+0000: 44.755: Total time for which application threads were stopped: 0.0009610 seconds, Stopping threads took: 0.0004508 seconds +2021-01-27T13:17:16.038+0000: 44.757: Total time for which application threads were stopped: 0.0010289 seconds, Stopping threads took: 0.0008732 seconds +2021-01-27T13:17:16.049+0000: 44.767: Total time for which application threads were stopped: 0.0055911 seconds, Stopping threads took: 0.0054166 seconds +2021-01-27T13:17:16.052+0000: 44.771: Total time for which application threads were stopped: 0.0023080 seconds, Stopping threads took: 0.0020878 seconds +2021-01-27T13:17:16.073+0000: 44.791: Total time for which application threads were stopped: 0.0030213 seconds, Stopping threads took: 0.0028078 seconds +2021-01-27T13:17:16.150+0000: 44.868: Total time for which application threads were stopped: 0.0663021 seconds, Stopping threads took: 0.0660949 seconds +2021-01-27T13:17:16.242+0000: 44.960: Total time for which application threads were stopped: 0.0037092 seconds, Stopping threads took: 0.0030633 seconds +2021-01-27T13:17:16.251+0000: 44.970: Total time for which application threads were stopped: 0.0093702 seconds, Stopping threads took: 0.0091107 seconds +2021-01-27T13:17:16.253+0000: 44.972: Total time for which application threads were stopped: 0.0016014 seconds, Stopping threads took: 0.0013630 seconds +2021-01-27T13:17:16.385+0000: 45.104: Total time for which application threads were stopped: 0.0020666 seconds, Stopping threads took: 0.0018648 seconds +2021-01-27T13:17:16.403+0000: 45.121: Total time for which application threads were stopped: 0.0089403 seconds, Stopping threads took: 0.0087405 seconds +2021-01-27T13:17:16.411+0000: 45.129: Total time for which application threads were stopped: 0.0030685 seconds, Stopping threads took: 0.0028956 seconds +2021-01-27T13:17:16.412+0000: 45.130: Total time for which application threads were stopped: 0.0002844 seconds, Stopping threads took: 0.0001016 seconds +2021-01-27T13:17:16.418+0000: 45.137: Total time for which application threads were stopped: 0.0054884 seconds, Stopping threads took: 0.0052572 seconds +2021-01-27T13:17:16.420+0000: 45.138: Total time for which application threads were stopped: 0.0002138 seconds, Stopping threads took: 0.0000451 seconds +2021-01-27T13:17:16.439+0000: 45.157: Total time for which application threads were stopped: 0.0152208 seconds, Stopping threads took: 0.0147494 seconds +2021-01-27T13:17:16.458+0000: 45.176: Total time for which application threads were stopped: 0.0113327 seconds, Stopping threads took: 0.0108218 seconds +2021-01-27T13:17:16.459+0000: 45.177: Total time for which application threads were stopped: 0.0001687 seconds, Stopping threads took: 0.0000361 seconds +2021-01-27T13:17:16.463+0000: 45.181: Total time for which application threads were stopped: 0.0019401 seconds, Stopping threads took: 0.0018126 seconds +2021-01-27T13:17:16.524+0000: 45.243: Total time for which application threads were stopped: 0.0417461 seconds, Stopping threads took: 0.0414694 seconds +2021-01-27T13:17:16.739+0000: 45.458: Total time for which application threads were stopped: 0.0002357 seconds, Stopping threads took: 0.0000924 seconds +2021-01-27T13:17:16.743+0000: 45.461: Total time for which application threads were stopped: 0.0004171 seconds, Stopping threads took: 0.0002683 seconds +2021-01-27T13:17:16.744+0000: 45.462: Total time for which application threads were stopped: 0.0003983 seconds, Stopping threads took: 0.0002892 seconds +2021-01-27T13:17:16.744+0000: 45.462: Total time for which application threads were stopped: 0.0002379 seconds, Stopping threads took: 0.0001522 seconds +2021-01-27T13:17:16.745+0000: 45.463: Total time for which application threads were stopped: 0.0003565 seconds, Stopping threads took: 0.0002630 seconds +2021-01-27T13:17:16.750+0000: 45.469: Total time for which application threads were stopped: 0.0001716 seconds, Stopping threads took: 0.0000473 seconds +2021-01-27T13:17:16.761+0000: 45.479: Total time for which application threads were stopped: 0.0001810 seconds, Stopping threads took: 0.0000540 seconds +2021-01-27T13:17:16.763+0000: 45.482: Total time for which application threads were stopped: 0.0003171 seconds, Stopping threads took: 0.0000514 seconds +2021-01-27T13:17:16.764+0000: 45.482: Total time for which application threads were stopped: 0.0002434 seconds, Stopping threads took: 0.0000431 seconds +2021-01-27T13:17:16.771+0000: 45.489: Total time for which application threads were stopped: 0.0060579 seconds, Stopping threads took: 0.0058949 seconds +2021-01-27T13:17:16.774+0000: 45.493: Total time for which application threads were stopped: 0.0001881 seconds, Stopping threads took: 0.0000543 seconds +2021-01-27T13:17:16.821+0000: 45.539: Total time for which application threads were stopped: 0.0002534 seconds, Stopping threads took: 0.0000934 seconds +2021-01-27T13:17:16.822+0000: 45.541: Total time for which application threads were stopped: 0.0001893 seconds, Stopping threads took: 0.0000551 seconds +2021-01-27T13:17:16.825+0000: 45.543: Total time for which application threads were stopped: 0.0002648 seconds, Stopping threads took: 0.0000637 seconds +2021-01-27T13:17:16.833+0000: 45.552: Total time for which application threads were stopped: 0.0001886 seconds, Stopping threads took: 0.0000551 seconds +2021-01-27T13:17:16.835+0000: 45.553: Total time for which application threads were stopped: 0.0003679 seconds, Stopping threads took: 0.0000572 seconds +2021-01-27T13:17:17.835+0000: 46.554: Total time for which application threads were stopped: 0.0002834 seconds, Stopping threads took: 0.0000545 seconds +2021-01-27T13:17:18.836+0000: 47.554: Total time for which application threads were stopped: 0.0002366 seconds, Stopping threads took: 0.0000691 seconds +2021-01-27T13:17:19.836+0000: 48.554: Total time for which application threads were stopped: 0.0001741 seconds, Stopping threads took: 0.0000583 seconds +2021-01-27T13:17:19.976+0000: 48.695: Total time for which application threads were stopped: 0.0003286 seconds, Stopping threads took: 0.0001940 seconds +2021-01-27T13:17:20.021+0000: 48.740: Total time for which application threads were stopped: 0.0088830 seconds, Stopping threads took: 0.0085850 seconds +2021-01-27T13:17:20.032+0000: 48.750: Total time for which application threads were stopped: 0.0036824 seconds, Stopping threads took: 0.0033840 seconds +2021-01-27T13:17:20.072+0000: 48.790: Total time for which application threads were stopped: 0.0091655 seconds, Stopping threads took: 0.0089709 seconds +2021-01-27T13:17:20.093+0000: 48.812: Total time for which application threads were stopped: 0.0061570 seconds, Stopping threads took: 0.0059808 seconds +2021-01-27T13:17:20.095+0000: 48.813: Total time for which application threads were stopped: 0.0001980 seconds, Stopping threads took: 0.0000375 seconds +2021-01-27T13:17:20.098+0000: 48.816: Total time for which application threads were stopped: 0.0003072 seconds, Stopping threads took: 0.0001482 seconds +2021-01-27T13:17:20.102+0000: 48.821: Total time for which application threads were stopped: 0.0037463 seconds, Stopping threads took: 0.0034794 seconds +2021-01-27T13:17:20.122+0000: 48.841: Total time for which application threads were stopped: 0.0127500 seconds, Stopping threads took: 0.0125866 seconds +2021-01-27T13:17:20.141+0000: 48.859: Total time for which application threads were stopped: 0.0099957 seconds, Stopping threads took: 0.0098380 seconds +2021-01-27T13:17:20.141+0000: 48.859: Total time for which application threads were stopped: 0.0001143 seconds, Stopping threads took: 0.0000255 seconds +2021-01-27T13:17:21.141+0000: 49.860: Total time for which application threads were stopped: 0.0002795 seconds, Stopping threads took: 0.0000667 seconds +2021-01-27T13:17:22.142+0000: 50.860: Total time for which application threads were stopped: 0.0001797 seconds, Stopping threads took: 0.0000558 seconds +2021-01-27T13:17:24.142+0000: 52.861: Total time for which application threads were stopped: 0.0002124 seconds, Stopping threads took: 0.0000690 seconds +2021-01-27T13:17:25.018+0000: 53.736: Total time for which application threads were stopped: 0.0053540 seconds, Stopping threads took: 0.0051258 seconds +2021-01-27T13:17:26.018+0000: 54.737: Total time for which application threads were stopped: 0.0002649 seconds, Stopping threads took: 0.0000671 seconds +2021-01-27T13:17:28.741+0000: 57.459: Total time for which application threads were stopped: 0.0002481 seconds, Stopping threads took: 0.0000583 seconds +2021-01-27T13:17:28.742+0000: 57.461: Total time for which application threads were stopped: 0.0001482 seconds, Stopping threads took: 0.0000356 seconds +2021-01-27T13:17:28.745+0000: 57.463: Total time for which application threads were stopped: 0.0002431 seconds, Stopping threads took: 0.0000893 seconds +2021-01-27T13:17:28.750+0000: 57.468: Total time for which application threads were stopped: 0.0001827 seconds, Stopping threads took: 0.0000456 seconds +2021-01-27T13:17:29.750+0000: 58.469: Total time for which application threads were stopped: 0.0002334 seconds, Stopping threads took: 0.0000916 seconds +2021-01-27T13:17:29.979+0000: 58.697: Total time for which application threads were stopped: 0.0004059 seconds, Stopping threads took: 0.0002130 seconds +2021-01-27T13:17:29.979+0000: 58.697: Total time for which application threads were stopped: 0.0002135 seconds, Stopping threads took: 0.0000651 seconds +2021-01-27T13:17:30.076+0000: 58.794: Total time for which application threads were stopped: 0.0228978 seconds, Stopping threads took: 0.0225217 seconds +2021-01-27T13:17:30.092+0000: 58.811: Total time for which application threads were stopped: 0.0030887 seconds, Stopping threads took: 0.0028917 seconds +2021-01-27T13:17:30.095+0000: 58.813: Total time for which application threads were stopped: 0.0003964 seconds, Stopping threads took: 0.0002155 seconds +2021-01-27T13:17:30.097+0000: 58.815: Total time for which application threads were stopped: 0.0010160 seconds, Stopping threads took: 0.0008538 seconds +2021-01-27T13:17:30.109+0000: 58.827: Total time for which application threads were stopped: 0.0001901 seconds, Stopping threads took: 0.0000483 seconds +2021-01-27T13:17:30.126+0000: 58.844: Total time for which application threads were stopped: 0.0103739 seconds, Stopping threads took: 0.0097614 seconds +2021-01-27T13:17:30.138+0000: 58.856: Total time for which application threads were stopped: 0.0091294 seconds, Stopping threads took: 0.0088757 seconds +2021-01-27T13:17:30.140+0000: 58.858: Total time for which application threads were stopped: 0.0003229 seconds, Stopping threads took: 0.0000670 seconds +2021-01-27T13:17:30.141+0000: 58.859: Total time for which application threads were stopped: 0.0003931 seconds, Stopping threads took: 0.0000374 seconds +2021-01-27T13:17:30.143+0000: 58.861: Total time for which application threads were stopped: 0.0007073 seconds, Stopping threads took: 0.0002561 seconds +2021-01-27T13:17:30.147+0000: 58.865: Total time for which application threads were stopped: 0.0005785 seconds, Stopping threads took: 0.0004541 seconds +2021-01-27T13:17:30.156+0000: 58.874: Total time for which application threads were stopped: 0.0002207 seconds, Stopping threads took: 0.0000837 seconds +2021-01-27T13:17:30.158+0000: 58.876: Total time for which application threads were stopped: 0.0003212 seconds, Stopping threads took: 0.0000462 seconds +2021-01-27T13:17:31.159+0000: 59.877: Total time for which application threads were stopped: 0.0002161 seconds, Stopping threads took: 0.0000501 seconds +2021-01-27T13:17:32.159+0000: 60.877: Total time for which application threads were stopped: 0.0001810 seconds, Stopping threads took: 0.0000518 seconds +2021-01-27T13:17:33.159+0000: 61.878: Total time for which application threads were stopped: 0.0001748 seconds, Stopping threads took: 0.0000493 seconds +2021-01-27T13:17:34.160+0000: 62.878: Total time for which application threads were stopped: 0.0001787 seconds, Stopping threads took: 0.0000484 seconds +2021-01-27T13:17:35.044+0000: 63.762: Total time for which application threads were stopped: 0.0140588 seconds, Stopping threads took: 0.0137963 seconds +2021-01-27T13:17:36.044+0000: 64.763: Total time for which application threads were stopped: 0.0002584 seconds, Stopping threads took: 0.0000922 seconds +2021-01-27T13:17:37.046+0000: 65.764: Total time for which application threads were stopped: 0.0001857 seconds, Stopping threads took: 0.0000515 seconds +2021-01-27T13:17:39.834+0000: 68.553: Total time for which application threads were stopped: 0.0002400 seconds, Stopping threads took: 0.0000519 seconds +2021-01-27T13:17:39.844+0000: 68.562: Total time for which application threads were stopped: 0.0007299 seconds, Stopping threads took: 0.0004489 seconds +2021-01-27T13:17:40.044+0000: 68.762: Total time for which application threads were stopped: 0.0004972 seconds, Stopping threads took: 0.0002788 seconds +2021-01-27T13:17:40.058+0000: 68.776: Total time for which application threads were stopped: 0.0003393 seconds, Stopping threads took: 0.0001840 seconds +2021-01-27T13:17:41.058+0000: 69.776: Total time for which application threads were stopped: 0.0001957 seconds, Stopping threads took: 0.0000523 seconds +2021-01-27T13:17:41.317+0000: 70.035: Total time for which application threads were stopped: 0.0001825 seconds, Stopping threads took: 0.0000454 seconds +2021-01-27T13:17:41.326+0000: 70.044: Total time for which application threads were stopped: 0.0002231 seconds, Stopping threads took: 0.0000644 seconds +2021-01-27T13:17:41.326+0000: 70.044: Total time for which application threads were stopped: 0.0001522 seconds, Stopping threads took: 0.0000442 seconds +2021-01-27T13:17:41.326+0000: 70.045: Total time for which application threads were stopped: 0.0001184 seconds, Stopping threads took: 0.0000360 seconds +2021-01-27T13:17:41.327+0000: 70.045: Total time for which application threads were stopped: 0.0001138 seconds, Stopping threads took: 0.0000349 seconds +2021-01-27T13:17:42.327+0000: 71.045: Total time for which application threads were stopped: 0.0001859 seconds, Stopping threads took: 0.0000505 seconds +2021-01-27T13:17:43.335+0000: 72.053: Total time for which application threads were stopped: 0.0005038 seconds, Stopping threads took: 0.0002862 seconds +2021-01-27T13:17:43.417+0000: 72.136: Total time for which application threads were stopped: 0.0002433 seconds, Stopping threads took: 0.0000524 seconds +2021-01-27T13:17:43.419+0000: 72.138: Total time for which application threads were stopped: 0.0002104 seconds, Stopping threads took: 0.0000577 seconds +2021-01-27T13:17:43.420+0000: 72.138: Total time for which application threads were stopped: 0.0001046 seconds, Stopping threads took: 0.0000183 seconds +2021-01-27T13:17:43.420+0000: 72.139: Total time for which application threads were stopped: 0.0003172 seconds, Stopping threads took: 0.0002331 seconds +2021-01-27T13:17:43.421+0000: 72.139: Total time for which application threads were stopped: 0.0001347 seconds, Stopping threads took: 0.0000586 seconds +2021-01-27T13:17:44.082+0000: 72.800: Total time for which application threads were stopped: 0.0002497 seconds, Stopping threads took: 0.0000988 seconds +2021-01-27T13:17:44.082+0000: 72.801: Total time for which application threads were stopped: 0.0000953 seconds, Stopping threads took: 0.0000177 seconds +2021-01-27T13:17:44.083+0000: 72.801: Total time for which application threads were stopped: 0.0000887 seconds, Stopping threads took: 0.0000164 seconds +2021-01-27T13:17:44.084+0000: 72.802: Total time for which application threads were stopped: 0.0000984 seconds, Stopping threads took: 0.0000183 seconds +2021-01-27T13:17:44.084+0000: 72.802: Total time for which application threads were stopped: 0.0000950 seconds, Stopping threads took: 0.0000171 seconds +2021-01-27T13:17:44.975+0000: 73.693: Total time for which application threads were stopped: 0.0004640 seconds, Stopping threads took: 0.0003232 seconds +2021-01-27T13:17:44.977+0000: 73.695: Total time for which application threads were stopped: 0.0003372 seconds, Stopping threads took: 0.0002031 seconds +2021-01-27T13:17:45.051+0000: 73.769: Total time for which application threads were stopped: 0.0004477 seconds, Stopping threads took: 0.0002197 seconds +2021-01-27T13:17:46.052+0000: 74.770: Total time for which application threads were stopped: 0.0001948 seconds, Stopping threads took: 0.0000504 seconds +2021-01-27T13:17:47.052+0000: 75.770: Total time for which application threads were stopped: 0.0002043 seconds, Stopping threads took: 0.0000547 seconds +2021-01-27T13:17:48.053+0000: 76.772: Total time for which application threads were stopped: 0.0002351 seconds, Stopping threads took: 0.0001064 seconds +2021-01-27T13:17:49.054+0000: 77.772: Total time for which application threads were stopped: 0.0001766 seconds, Stopping threads took: 0.0000472 seconds +2021-01-27T13:17:50.043+0000: 78.761: Total time for which application threads were stopped: 0.0083445 seconds, Stopping threads took: 0.0081115 seconds +2021-01-27T13:17:50.050+0000: 78.768: Total time for which application threads were stopped: 0.0008824 seconds, Stopping threads took: 0.0006967 seconds +2021-01-27T13:17:51.050+0000: 79.769: Total time for which application threads were stopped: 0.0004453 seconds, Stopping threads took: 0.0000816 seconds +2021-01-27T13:17:53.051+0000: 81.769: Total time for which application threads were stopped: 0.0002295 seconds, Stopping threads took: 0.0000651 seconds +2021-01-27T13:17:55.056+0000: 83.775: Total time for which application threads were stopped: 0.0010390 seconds, Stopping threads took: 0.0007080 seconds +2021-01-27T13:17:56.058+0000: 84.777: Total time for which application threads were stopped: 0.0004329 seconds, Stopping threads took: 0.0001103 seconds +2021-01-27T13:17:58.846+0000: 87.564: Total time for which application threads were stopped: 0.0002433 seconds, Stopping threads took: 0.0000955 seconds +2021-01-27T13:17:58.848+0000: 87.566: Total time for which application threads were stopped: 0.0002834 seconds, Stopping threads took: 0.0001301 seconds +2021-01-27T13:17:58.849+0000: 87.567: Total time for which application threads were stopped: 0.0002619 seconds, Stopping threads took: 0.0001251 seconds +2021-01-27T13:17:59.849+0000: 88.567: Total time for which application threads were stopped: 0.0001811 seconds, Stopping threads took: 0.0000498 seconds +2021-01-27T13:17:59.976+0000: 88.695: Total time for which application threads were stopped: 0.0003181 seconds, Stopping threads took: 0.0001186 seconds +2021-01-27T13:18:00.977+0000: 89.695: Total time for which application threads were stopped: 0.0002119 seconds, Stopping threads took: 0.0000518 seconds +2021-01-27T13:18:04.979+0000: 93.698: Total time for which application threads were stopped: 0.0002896 seconds, Stopping threads took: 0.0001240 seconds +2021-01-27T13:18:05.040+0000: 93.759: Total time for which application threads were stopped: 0.0048086 seconds, Stopping threads took: 0.0045416 seconds +2021-01-27T13:18:06.041+0000: 94.759: Total time for which application threads were stopped: 0.0002984 seconds, Stopping threads took: 0.0000757 seconds +2021-01-27T13:18:07.041+0000: 95.760: Total time for which application threads were stopped: 0.0002716 seconds, Stopping threads took: 0.0000701 seconds +2021-01-27T13:18:09.043+0000: 97.761: Total time for which application threads were stopped: 0.0003378 seconds, Stopping threads took: 0.0000735 seconds +2021-01-27T13:18:10.044+0000: 98.762: Total time for which application threads were stopped: 0.0002854 seconds, Stopping threads took: 0.0000563 seconds +2021-01-27T13:18:11.328+0000: 100.047: Total time for which application threads were stopped: 0.0004858 seconds, Stopping threads took: 0.0001292 seconds +2021-01-27T13:18:11.331+0000: 100.049: Total time for which application threads were stopped: 0.0001661 seconds, Stopping threads took: 0.0000341 seconds +2021-01-27T13:18:11.332+0000: 100.050: Total time for which application threads were stopped: 0.0002004 seconds, Stopping threads took: 0.0000877 seconds +2021-01-27T13:18:11.332+0000: 100.050: Total time for which application threads were stopped: 0.0001726 seconds, Stopping threads took: 0.0000241 seconds +2021-01-27T13:18:13.422+0000: 102.141: Total time for which application threads were stopped: 0.0008825 seconds, Stopping threads took: 0.0006021 seconds +2021-01-27T13:18:13.423+0000: 102.141: Total time for which application threads were stopped: 0.0001943 seconds, Stopping threads took: 0.0000876 seconds +2021-01-27T13:18:13.423+0000: 102.142: Total time for which application threads were stopped: 0.0002824 seconds, Stopping threads took: 0.0001352 seconds +2021-01-27T13:18:13.424+0000: 102.142: Total time for which application threads were stopped: 0.0004041 seconds, Stopping threads took: 0.0002888 seconds +2021-01-27T13:18:14.085+0000: 102.803: Total time for which application threads were stopped: 0.0002060 seconds, Stopping threads took: 0.0000555 seconds +2021-01-27T13:18:14.085+0000: 102.803: Total time for which application threads were stopped: 0.0001134 seconds, Stopping threads took: 0.0000197 seconds +2021-01-27T13:18:14.085+0000: 102.803: Total time for which application threads were stopped: 0.0001121 seconds, Stopping threads took: 0.0000200 seconds +2021-01-27T13:18:14.086+0000: 102.804: Total time for which application threads were stopped: 0.0001118 seconds, Stopping threads took: 0.0000196 seconds +2021-01-27T13:18:15.047+0000: 103.766: Total time for which application threads were stopped: 0.0008405 seconds, Stopping threads took: 0.0004126 seconds +2021-01-27T13:18:16.049+0000: 104.767: Total time for which application threads were stopped: 0.0004141 seconds, Stopping threads took: 0.0000901 seconds +2021-01-27T13:18:18.052+0000: 106.770: Total time for which application threads were stopped: 0.0005378 seconds, Stopping threads took: 0.0000948 seconds +2021-01-27T13:18:20.055+0000: 108.773: Total time for which application threads were stopped: 0.0003510 seconds, Stopping threads took: 0.0001996 seconds +2021-01-27T13:18:21.056+0000: 109.774: Total time for which application threads were stopped: 0.0002773 seconds, Stopping threads took: 0.0000715 seconds +2021-01-27T13:18:23.058+0000: 111.776: Total time for which application threads were stopped: 0.0002157 seconds, Stopping threads took: 0.0000569 seconds +2021-01-27T13:18:25.059+0000: 113.777: Total time for which application threads were stopped: 0.0004841 seconds, Stopping threads took: 0.0002533 seconds +2021-01-27T13:18:26.060+0000: 114.778: Total time for which application threads were stopped: 0.0002968 seconds, Stopping threads took: 0.0000712 seconds +2021-01-27T13:18:28.952+0000: 117.670: Total time for which application threads were stopped: 0.0001707 seconds, Stopping threads took: 0.0000401 seconds +2021-01-27T13:18:28.952+0000: 117.670: Total time for which application threads were stopped: 0.0002408 seconds, Stopping threads took: 0.0001420 seconds +2021-01-27T13:18:29.954+0000: 118.672: Total time for which application threads were stopped: 0.0003316 seconds, Stopping threads took: 0.0000899 seconds +2021-01-27T13:18:30.954+0000: 119.673: Total time for which application threads were stopped: 0.0002496 seconds, Stopping threads took: 0.0000610 seconds +2021-01-27T13:18:32.955+0000: 121.673: Total time for which application threads were stopped: 0.0002016 seconds, Stopping threads took: 0.0000761 seconds +2021-01-27T13:18:33.955+0000: 122.674: Total time for which application threads were stopped: 0.0002818 seconds, Stopping threads took: 0.0000859 seconds +2021-01-27T13:18:35.957+0000: 124.675: Total time for which application threads were stopped: 0.0006027 seconds, Stopping threads took: 0.0002633 seconds +2021-01-27T13:18:37.958+0000: 126.676: Total time for which application threads were stopped: 0.0002116 seconds, Stopping threads took: 0.0000646 seconds +2021-01-27T13:18:39.958+0000: 128.677: Total time for which application threads were stopped: 0.0003274 seconds, Stopping threads took: 0.0000634 seconds +2021-01-27T13:18:40.966+0000: 129.684: Total time for which application threads were stopped: 0.0002298 seconds, Stopping threads took: 0.0000492 seconds +2021-01-27T13:18:41.967+0000: 130.685: Total time for which application threads were stopped: 0.0005734 seconds, Stopping threads took: 0.0001192 seconds +2021-01-27T13:18:45.968+0000: 134.686: Total time for which application threads were stopped: 0.0005905 seconds, Stopping threads took: 0.0001480 seconds +2021-01-27T13:18:50.307+0000: 139.025: [GC (Allocation Failure) 2021-01-27T13:18:50.308+0000: 139.026: [ParNew +Desired survivor size 8945664 bytes, new threshold 6 (max 6) +- age 1: 6243232 bytes, 6243232 total +: 157248K->8281K(157248K), 0.0392783 secs] 211386K->117000K(506816K), 0.0419015 secs] [Times: user=0.07 sys=0.02, real=0.04 secs] +2021-01-27T13:18:50.351+0000: 139.069: Total time for which application threads were stopped: 0.0456796 seconds, Stopping threads took: 0.0012043 seconds +2021-01-27T13:18:51.354+0000: 140.072: Total time for which application threads were stopped: 0.0002510 seconds, Stopping threads took: 0.0001030 seconds +2021-01-27T13:18:52.355+0000: 141.073: Total time for which application threads were stopped: 0.0002978 seconds, Stopping threads took: 0.0000709 seconds +2021-01-27T13:18:54.356+0000: 143.074: Total time for which application threads were stopped: 0.0002834 seconds, Stopping threads took: 0.0000610 seconds +2021-01-27T13:18:55.424+0000: 144.142: Total time for which application threads were stopped: 0.0089545 seconds, Stopping threads took: 0.0069954 seconds +2021-01-27T13:18:55.553+0000: 144.271: Total time for which application threads were stopped: 0.0007639 seconds, Stopping threads took: 0.0001472 seconds +2021-01-27T13:18:55.557+0000: 144.275: Total time for which application threads were stopped: 0.0006474 seconds, Stopping threads took: 0.0003289 seconds +2021-01-27T13:18:55.571+0000: 144.289: Total time for which application threads were stopped: 0.0007355 seconds, Stopping threads took: 0.0004800 seconds +2021-01-27T13:18:55.572+0000: 144.290: Total time for which application threads were stopped: 0.0006072 seconds, Stopping threads took: 0.0004681 seconds +2021-01-27T13:18:55.580+0000: 144.298: Total time for which application threads were stopped: 0.0010152 seconds, Stopping threads took: 0.0007152 seconds +2021-01-27T13:18:55.581+0000: 144.299: Total time for which application threads were stopped: 0.0005654 seconds, Stopping threads took: 0.0003480 seconds +2021-01-27T13:18:55.588+0000: 144.306: Total time for which application threads were stopped: 0.0028989 seconds, Stopping threads took: 0.0004533 seconds +2021-01-27T13:18:55.659+0000: 144.377: Total time for which application threads were stopped: 0.0007087 seconds, Stopping threads took: 0.0003643 seconds +2021-01-27T13:18:55.727+0000: 144.445: Total time for which application threads were stopped: 0.0009945 seconds, Stopping threads took: 0.0006542 seconds +2021-01-27T13:18:55.732+0000: 144.450: Total time for which application threads were stopped: 0.0026657 seconds, Stopping threads took: 0.0010106 seconds +2021-01-27T13:18:55.749+0000: 144.467: Total time for which application threads were stopped: 0.0053450 seconds, Stopping threads took: 0.0050080 seconds +2021-01-27T13:18:55.774+0000: 144.492: Total time for which application threads were stopped: 0.0064967 seconds, Stopping threads took: 0.0061108 seconds +2021-01-27T13:18:55.782+0000: 144.500: Total time for which application threads were stopped: 0.0012708 seconds, Stopping threads took: 0.0008204 seconds +2021-01-27T13:18:55.785+0000: 144.503: Total time for which application threads were stopped: 0.0008551 seconds, Stopping threads took: 0.0003343 seconds +2021-01-27T13:18:55.789+0000: 144.507: Total time for which application threads were stopped: 0.0034578 seconds, Stopping threads took: 0.0032275 seconds +2021-01-27T13:18:55.812+0000: 144.530: Total time for which application threads were stopped: 0.0007566 seconds, Stopping threads took: 0.0005161 seconds +2021-01-27T13:18:56.351+0000: 145.069: [GC (CMS Initial Mark) [1 CMS-initial-mark: 108719K(349568K)] 132642K(506816K), 0.0088385 secs] [Times: user=0.02 sys=0.00, real=0.01 secs] +2021-01-27T13:18:56.361+0000: 145.080: Total time for which application threads were stopped: 0.0108358 seconds, Stopping threads took: 0.0001542 seconds +2021-01-27T13:18:56.362+0000: 145.080: [CMS-concurrent-mark-start] +2021-01-27T13:18:56.402+0000: 145.120: [CMS-concurrent-mark: 0.040/0.040 secs] [Times: user=0.05 sys=0.01, real=0.04 secs] +2021-01-27T13:18:56.403+0000: 145.121: [CMS-concurrent-preclean-start] +2021-01-27T13:18:56.409+0000: 145.127: [CMS-concurrent-preclean: 0.006/0.006 secs] [Times: user=0.01 sys=0.00, real=0.00 secs] +2021-01-27T13:18:56.410+0000: 145.128: [CMS-concurrent-abortable-preclean-start] +2021-01-27T13:18:57.362+0000: 146.080: Total time for which application threads were stopped: 0.0001943 seconds, Stopping threads took: 0.0000462 seconds +2021-01-27T13:18:59.061+0000: 147.779: Total time for which application threads were stopped: 0.0002218 seconds, Stopping threads took: 0.0000381 seconds +2021-01-27T13:18:59.062+0000: 147.780: Total time for which application threads were stopped: 0.0001210 seconds, Stopping threads took: 0.0000183 seconds +2021-01-27T13:19:00.062+0000: 148.781: Total time for which application threads were stopped: 0.0003196 seconds, Stopping threads took: 0.0000935 seconds +2021-01-27T13:19:01.063+0000: 149.781: Total time for which application threads were stopped: 0.0004127 seconds, Stopping threads took: 0.0001486 seconds + CMS: abort preclean due to time 2021-01-27T13:19:01.450+0000: 150.169: [CMS-concurrent-abortable-preclean: 0.919/5.040 secs] [Times: user=1.00 sys=0.03, real=5.04 secs] +2021-01-27T13:19:01.452+0000: 150.170: [GC (CMS Final Remark) [YG occupancy: 25243 K (157248 K)]2021-01-27T13:19:01.454+0000: 150.172: [Rescan (parallel) , 0.0135699 secs]2021-01-27T13:19:01.468+0000: 150.186: [weak refs processing, 0.0012167 secs]2021-01-27T13:19:01.471+0000: 150.189: [class unloading, 0.0191687 secs]2021-01-27T13:19:01.491+0000: 150.209: [scrub symbol table, 0.0297276 secs]2021-01-27T13:19:01.521+0000: 150.240: [scrub string table, 0.0016931 secs][1 CMS-remark: 108719K(349568K)] 133962K(506816K), 0.0721108 secs] [Times: user=0.08 sys=0.00, real=0.08 secs] +2021-01-27T13:19:01.526+0000: 150.244: Total time for which application threads were stopped: 0.0742879 seconds, Stopping threads took: 0.0000651 seconds +2021-01-27T13:19:01.527+0000: 150.245: [CMS-concurrent-sweep-start] +2021-01-27T13:19:01.541+0000: 150.259: [CMS-concurrent-sweep: 0.014/0.014 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] +2021-01-27T13:19:01.542+0000: 150.260: [CMS-concurrent-reset-start] +2021-01-27T13:19:01.543+0000: 150.261: [CMS-concurrent-reset: 0.001/0.001 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] +2021-01-27T13:19:02.527+0000: 151.245: Total time for which application threads were stopped: 0.0002313 seconds, Stopping threads took: 0.0000552 seconds +2021-01-27T13:19:05.528+0000: 154.246: Total time for which application threads were stopped: 0.0002744 seconds, Stopping threads took: 0.0000830 seconds +2021-01-27T13:19:10.531+0000: 159.249: Total time for which application threads were stopped: 0.0012423 seconds, Stopping threads took: 0.0009906 seconds +2021-01-27T13:19:12.532+0000: 161.250: Total time for which application threads were stopped: 0.0002391 seconds, Stopping threads took: 0.0000772 seconds +2021-01-27T13:19:14.776+0000: 163.495: Total time for which application threads were stopped: 0.0004653 seconds, Stopping threads took: 0.0001473 seconds +2021-01-27T13:19:14.777+0000: 163.495: Total time for which application threads were stopped: 0.0004248 seconds, Stopping threads took: 0.0001372 seconds +2021-01-27T13:19:14.778+0000: 163.496: Total time for which application threads were stopped: 0.0003606 seconds, Stopping threads took: 0.0002252 seconds +2021-01-27T13:19:14.779+0000: 163.497: Total time for which application threads were stopped: 0.0005132 seconds, Stopping threads took: 0.0003435 seconds +2021-01-27T13:19:14.780+0000: 163.498: Total time for which application threads were stopped: 0.0004091 seconds, Stopping threads took: 0.0002762 seconds +2021-01-27T13:19:14.780+0000: 163.498: Total time for which application threads were stopped: 0.0006199 seconds, Stopping threads took: 0.0002743 seconds +2021-01-27T13:19:14.781+0000: 163.499: Total time for which application threads were stopped: 0.0003046 seconds, Stopping threads took: 0.0001639 seconds +2021-01-27T13:19:14.782+0000: 163.500: Total time for which application threads were stopped: 0.0006616 seconds, Stopping threads took: 0.0005491 seconds +2021-01-27T13:19:14.782+0000: 163.500: Total time for which application threads were stopped: 0.0003657 seconds, Stopping threads took: 0.0002124 seconds +2021-01-27T13:19:14.783+0000: 163.501: Total time for which application threads were stopped: 0.0002915 seconds, Stopping threads took: 0.0001833 seconds +2021-01-27T13:19:14.783+0000: 163.501: Total time for which application threads were stopped: 0.0001486 seconds, Stopping threads took: 0.0000167 seconds +2021-01-27T13:19:14.784+0000: 163.502: Total time for which application threads were stopped: 0.0001725 seconds, Stopping threads took: 0.0000807 seconds +2021-01-27T13:19:14.784+0000: 163.503: Total time for which application threads were stopped: 0.0007690 seconds, Stopping threads took: 0.0004813 seconds +2021-01-27T13:19:14.786+0000: 163.504: Total time for which application threads were stopped: 0.0008033 seconds, Stopping threads took: 0.0005674 seconds +2021-01-27T13:19:14.786+0000: 163.505: Total time for which application threads were stopped: 0.0007803 seconds, Stopping threads took: 0.0005028 seconds +2021-01-27T13:19:14.788+0000: 163.506: Total time for which application threads were stopped: 0.0010534 seconds, Stopping threads took: 0.0008436 seconds +2021-01-27T13:19:14.788+0000: 163.507: Total time for which application threads were stopped: 0.0005841 seconds, Stopping threads took: 0.0004770 seconds +2021-01-27T13:19:15.791+0000: 164.509: Total time for which application threads were stopped: 0.0004823 seconds, Stopping threads took: 0.0000706 seconds +2021-01-27T13:19:20.290+0000: 169.008: Total time for which application threads were stopped: 0.0005561 seconds, Stopping threads took: 0.0000832 seconds +2021-01-27T13:19:21.292+0000: 170.010: Total time for which application threads were stopped: 0.0005664 seconds, Stopping threads took: 0.0002133 seconds +2021-01-27T13:19:26.296+0000: 175.014: Total time for which application threads were stopped: 0.0007249 seconds, Stopping threads took: 0.0000899 seconds +2021-01-27T13:19:29.184+0000: 177.902: Total time for which application threads were stopped: 0.0002424 seconds, Stopping threads took: 0.0000740 seconds +2021-01-27T13:19:29.184+0000: 177.902: Total time for which application threads were stopped: 0.0001974 seconds, Stopping threads took: 0.0000369 seconds +2021-01-27T13:19:30.185+0000: 178.903: Total time for which application threads were stopped: 0.0002165 seconds, Stopping threads took: 0.0000558 seconds +2021-01-27T13:19:31.187+0000: 179.905: Total time for which application threads were stopped: 0.0004263 seconds, Stopping threads took: 0.0000907 seconds +2021-01-27T13:19:32.388+0000: 181.106: Total time for which application threads were stopped: 0.0002468 seconds, Stopping threads took: 0.0000839 seconds +2021-01-27T13:19:32.389+0000: 181.107: Total time for which application threads were stopped: 0.0003688 seconds, Stopping threads took: 0.0002611 seconds +2021-01-27T13:19:32.391+0000: 181.109: Total time for which application threads were stopped: 0.0007119 seconds, Stopping threads took: 0.0005621 seconds +2021-01-27T13:19:32.422+0000: 181.141: Total time for which application threads were stopped: 0.0006172 seconds, Stopping threads took: 0.0003010 seconds +2021-01-27T13:19:32.458+0000: 181.176: Total time for which application threads were stopped: 0.0036388 seconds, Stopping threads took: 0.0032216 seconds +2021-01-27T13:19:32.499+0000: 181.217: Total time for which application threads were stopped: 0.0003514 seconds, Stopping threads took: 0.0001395 seconds +2021-01-27T13:19:32.500+0000: 181.218: Total time for which application threads were stopped: 0.0003415 seconds, Stopping threads took: 0.0001662 seconds +2021-01-27T13:19:32.501+0000: 181.219: Total time for which application threads were stopped: 0.0004607 seconds, Stopping threads took: 0.0002128 seconds +2021-01-27T13:19:32.552+0000: 181.270: Total time for which application threads were stopped: 0.0001648 seconds, Stopping threads took: 0.0000352 seconds +2021-01-27T13:19:32.567+0000: 181.285: Total time for which application threads were stopped: 0.0002382 seconds, Stopping threads took: 0.0000364 seconds +2021-01-27T13:19:32.572+0000: 181.290: Total time for which application threads were stopped: 0.0001691 seconds, Stopping threads took: 0.0000327 seconds +2021-01-27T13:19:32.629+0000: 181.348: Total time for which application threads were stopped: 0.0002957 seconds, Stopping threads took: 0.0000932 seconds +2021-01-27T13:19:32.632+0000: 181.350: Total time for which application threads were stopped: 0.0001687 seconds, Stopping threads took: 0.0000577 seconds +2021-01-27T13:19:32.636+0000: 181.354: Total time for which application threads were stopped: 0.0001497 seconds, Stopping threads took: 0.0000282 seconds +2021-01-27T13:19:32.638+0000: 181.356: Total time for which application threads were stopped: 0.0001380 seconds, Stopping threads took: 0.0000252 seconds +2021-01-27T13:19:32.662+0000: 181.380: Total time for which application threads were stopped: 0.0003525 seconds, Stopping threads took: 0.0000958 seconds +2021-01-27T13:19:32.662+0000: 181.380: Total time for which application threads were stopped: 0.0001882 seconds, Stopping threads took: 0.0000210 seconds +2021-01-27T13:19:32.666+0000: 181.384: Total time for which application threads were stopped: 0.0005066 seconds, Stopping threads took: 0.0003055 seconds +2021-01-27T13:19:32.668+0000: 181.386: Total time for which application threads were stopped: 0.0004114 seconds, Stopping threads took: 0.0001251 seconds +2021-01-27T13:19:32.668+0000: 181.386: Total time for which application threads were stopped: 0.0003853 seconds, Stopping threads took: 0.0002011 seconds +2021-01-27T13:19:32.688+0000: 181.406: Total time for which application threads were stopped: 0.0001909 seconds, Stopping threads took: 0.0000395 seconds +2021-01-27T13:19:32.689+0000: 181.407: Total time for which application threads were stopped: 0.0001550 seconds, Stopping threads took: 0.0000198 seconds +2021-01-27T13:19:32.695+0000: 181.413: Total time for which application threads were stopped: 0.0008172 seconds, Stopping threads took: 0.0004154 seconds +2021-01-27T13:19:32.713+0000: 181.431: Total time for which application threads were stopped: 0.0005234 seconds, Stopping threads took: 0.0002938 seconds +2021-01-27T13:19:32.714+0000: 181.432: Total time for which application threads were stopped: 0.0001663 seconds, Stopping threads took: 0.0000223 seconds +2021-01-27T13:19:32.714+0000: 181.432: Total time for which application threads were stopped: 0.0001205 seconds, Stopping threads took: 0.0000184 seconds +2021-01-27T13:19:32.714+0000: 181.433: Total time for which application threads were stopped: 0.0001405 seconds, Stopping threads took: 0.0000188 seconds +2021-01-27T13:19:32.742+0000: 181.460: Total time for which application threads were stopped: 0.0001851 seconds, Stopping threads took: 0.0000469 seconds +2021-01-27T13:19:32.742+0000: 181.460: Total time for which application threads were stopped: 0.0001175 seconds, Stopping threads took: 0.0000172 seconds +2021-01-27T13:19:32.745+0000: 181.463: Total time for which application threads were stopped: 0.0003499 seconds, Stopping threads took: 0.0001691 seconds +2021-01-27T13:19:32.752+0000: 181.470: Total time for which application threads were stopped: 0.0024775 seconds, Stopping threads took: 0.0020074 seconds +2021-01-27T13:19:32.769+0000: 181.487: Total time for which application threads were stopped: 0.0005065 seconds, Stopping threads took: 0.0002407 seconds +2021-01-27T13:19:32.770+0000: 181.488: Total time for which application threads were stopped: 0.0004083 seconds, Stopping threads took: 0.0002663 seconds +2021-01-27T13:19:32.771+0000: 181.489: Total time for which application threads were stopped: 0.0004209 seconds, Stopping threads took: 0.0002547 seconds +2021-01-27T13:19:32.773+0000: 181.491: Total time for which application threads were stopped: 0.0009867 seconds, Stopping threads took: 0.0007467 seconds +2021-01-27T13:19:32.774+0000: 181.492: Total time for which application threads were stopped: 0.0007139 seconds, Stopping threads took: 0.0005322 seconds +2021-01-27T13:19:32.799+0000: 181.517: Total time for which application threads were stopped: 0.0004438 seconds, Stopping threads took: 0.0002351 seconds +2021-01-27T13:19:32.806+0000: 181.524: Total time for which application threads were stopped: 0.0005803 seconds, Stopping threads took: 0.0001180 seconds +2021-01-27T13:19:32.807+0000: 181.525: Total time for which application threads were stopped: 0.0009695 seconds, Stopping threads took: 0.0006088 seconds +2021-01-27T13:19:32.811+0000: 181.529: Total time for which application threads were stopped: 0.0010958 seconds, Stopping threads took: 0.0004209 seconds +2021-01-27T13:19:32.817+0000: 181.535: Total time for which application threads were stopped: 0.0008997 seconds, Stopping threads took: 0.0005413 seconds +2021-01-27T13:19:32.819+0000: 181.537: Total time for which application threads were stopped: 0.0003909 seconds, Stopping threads took: 0.0001206 seconds +2021-01-27T13:19:32.825+0000: 181.543: Total time for which application threads were stopped: 0.0004312 seconds, Stopping threads took: 0.0002454 seconds +2021-01-27T13:19:32.841+0000: 181.559: Total time for which application threads were stopped: 0.0005263 seconds, Stopping threads took: 0.0003523 seconds +2021-01-27T13:19:32.845+0000: 181.563: Total time for which application threads were stopped: 0.0043158 seconds, Stopping threads took: 0.0041152 seconds +2021-01-27T13:19:32.846+0000: 181.564: Total time for which application threads were stopped: 0.0003054 seconds, Stopping threads took: 0.0000760 seconds +2021-01-27T13:19:32.847+0000: 181.565: Total time for which application threads were stopped: 0.0003068 seconds, Stopping threads took: 0.0001849 seconds +2021-01-27T13:19:32.869+0000: 181.587: Total time for which application threads were stopped: 0.0005397 seconds, Stopping threads took: 0.0001252 seconds +2021-01-27T13:19:32.874+0000: 181.592: Total time for which application threads were stopped: 0.0008918 seconds, Stopping threads took: 0.0004781 seconds +2021-01-27T13:19:32.877+0000: 181.595: Total time for which application threads were stopped: 0.0012247 seconds, Stopping threads took: 0.0009635 seconds +2021-01-27T13:19:32.879+0000: 181.597: Total time for which application threads were stopped: 0.0005929 seconds, Stopping threads took: 0.0001692 seconds +2021-01-27T13:19:32.893+0000: 181.611: Total time for which application threads were stopped: 0.0021319 seconds, Stopping threads took: 0.0018376 seconds +2021-01-27T13:19:32.922+0000: 181.640: Total time for which application threads were stopped: 0.0008057 seconds, Stopping threads took: 0.0005413 seconds +2021-01-27T13:19:32.923+0000: 181.641: Total time for which application threads were stopped: 0.0005202 seconds, Stopping threads took: 0.0002418 seconds +2021-01-27T13:19:32.925+0000: 181.643: Total time for which application threads were stopped: 0.0010245 seconds, Stopping threads took: 0.0004537 seconds +2021-01-27T13:19:32.959+0000: 181.677: Total time for which application threads were stopped: 0.0007175 seconds, Stopping threads took: 0.0003614 seconds +2021-01-27T13:19:32.960+0000: 181.678: Total time for which application threads were stopped: 0.0007285 seconds, Stopping threads took: 0.0004442 seconds +2021-01-27T13:19:33.031+0000: 181.749: Total time for which application threads were stopped: 0.0064714 seconds, Stopping threads took: 0.0033483 seconds +2021-01-27T13:19:33.069+0000: 181.787: Total time for which application threads were stopped: 0.0021135 seconds, Stopping threads took: 0.0017546 seconds +2021-01-27T13:19:33.083+0000: 181.801: Total time for which application threads were stopped: 0.0063499 seconds, Stopping threads took: 0.0060680 seconds +2021-01-27T13:19:33.107+0000: 181.825: Total time for which application threads were stopped: 0.0008167 seconds, Stopping threads took: 0.0005960 seconds +2021-01-27T13:19:33.114+0000: 181.832: Total time for which application threads were stopped: 0.0020479 seconds, Stopping threads took: 0.0017574 seconds +2021-01-27T13:19:33.120+0000: 181.838: Total time for which application threads were stopped: 0.0011355 seconds, Stopping threads took: 0.0008480 seconds +2021-01-27T13:19:33.143+0000: 181.861: Total time for which application threads were stopped: 0.0007182 seconds, Stopping threads took: 0.0004338 seconds +2021-01-27T13:19:33.145+0000: 181.863: Total time for which application threads were stopped: 0.0009638 seconds, Stopping threads took: 0.0005560 seconds +2021-01-27T13:19:33.161+0000: 181.879: Total time for which application threads were stopped: 0.0019065 seconds, Stopping threads took: 0.0015553 seconds +2021-01-27T13:19:33.171+0000: 181.889: Total time for which application threads were stopped: 0.0005580 seconds, Stopping threads took: 0.0002514 seconds +2021-01-27T13:19:33.177+0000: 181.895: Total time for which application threads were stopped: 0.0006813 seconds, Stopping threads took: 0.0002834 seconds +2021-01-27T13:19:33.225+0000: 181.943: Total time for which application threads were stopped: 0.0008280 seconds, Stopping threads took: 0.0005216 seconds +2021-01-27T13:19:33.227+0000: 181.945: Total time for which application threads were stopped: 0.0008795 seconds, Stopping threads took: 0.0005990 seconds +2021-01-27T13:19:33.243+0000: 181.961: Total time for which application threads were stopped: 0.0013098 seconds, Stopping threads took: 0.0009182 seconds +2021-01-27T13:19:33.262+0000: 181.980: Total time for which application threads were stopped: 0.0007035 seconds, Stopping threads took: 0.0004645 seconds +2021-01-27T13:19:33.297+0000: 182.015: Total time for which application threads were stopped: 0.0039846 seconds, Stopping threads took: 0.0035422 seconds +2021-01-27T13:19:33.342+0000: 182.060: Total time for which application threads were stopped: 0.0020094 seconds, Stopping threads took: 0.0010272 seconds +2021-01-27T13:19:33.343+0000: 182.061: Total time for which application threads were stopped: 0.0006966 seconds, Stopping threads took: 0.0002187 seconds +2021-01-27T13:19:33.391+0000: 182.109: Total time for which application threads were stopped: 0.0006499 seconds, Stopping threads took: 0.0002529 seconds +2021-01-27T13:19:33.421+0000: 182.139: Total time for which application threads were stopped: 0.0008239 seconds, Stopping threads took: 0.0005257 seconds +2021-01-27T13:19:33.422+0000: 182.140: Total time for which application threads were stopped: 0.0005838 seconds, Stopping threads took: 0.0003193 seconds +2021-01-27T13:19:33.445+0000: 182.164: Total time for which application threads were stopped: 0.0007214 seconds, Stopping threads took: 0.0004663 seconds +2021-01-27T13:19:33.446+0000: 182.164: Total time for which application threads were stopped: 0.0003432 seconds, Stopping threads took: 0.0001694 seconds +2021-01-27T13:19:33.451+0000: 182.169: Total time for which application threads were stopped: 0.0005558 seconds, Stopping threads took: 0.0003233 seconds +2021-01-27T13:19:33.452+0000: 182.170: Total time for which application threads were stopped: 0.0006312 seconds, Stopping threads took: 0.0001991 seconds +2021-01-27T13:19:33.461+0000: 182.179: Total time for which application threads were stopped: 0.0005934 seconds, Stopping threads took: 0.0002390 seconds +2021-01-27T13:19:33.472+0000: 182.190: Total time for which application threads were stopped: 0.0020657 seconds, Stopping threads took: 0.0014570 seconds +2021-01-27T13:19:33.474+0000: 182.192: Total time for which application threads were stopped: 0.0012698 seconds, Stopping threads took: 0.0009163 seconds +2021-01-27T13:19:33.482+0000: 182.200: Total time for which application threads were stopped: 0.0006351 seconds, Stopping threads took: 0.0004389 seconds +2021-01-27T13:19:33.518+0000: 182.236: Total time for which application threads were stopped: 0.0011096 seconds, Stopping threads took: 0.0008054 seconds +2021-01-27T13:19:33.522+0000: 182.240: Total time for which application threads were stopped: 0.0032085 seconds, Stopping threads took: 0.0029124 seconds +2021-01-27T13:19:33.564+0000: 182.282: Total time for which application threads were stopped: 0.0007956 seconds, Stopping threads took: 0.0004117 seconds +2021-01-27T13:19:33.567+0000: 182.285: Total time for which application threads were stopped: 0.0020260 seconds, Stopping threads took: 0.0017288 seconds +2021-01-27T13:19:33.593+0000: 182.311: Total time for which application threads were stopped: 0.0046830 seconds, Stopping threads took: 0.0043622 seconds +2021-01-27T13:19:33.609+0000: 182.327: Total time for which application threads were stopped: 0.0011723 seconds, Stopping threads took: 0.0004778 seconds +2021-01-27T13:19:33.613+0000: 182.331: Total time for which application threads were stopped: 0.0025543 seconds, Stopping threads took: 0.0021883 seconds +2021-01-27T13:19:33.621+0000: 182.339: Total time for which application threads were stopped: 0.0018519 seconds, Stopping threads took: 0.0010071 seconds +2021-01-27T13:19:33.651+0000: 182.370: Total time for which application threads were stopped: 0.0008861 seconds, Stopping threads took: 0.0005730 seconds +2021-01-27T13:19:33.653+0000: 182.371: Total time for which application threads were stopped: 0.0009550 seconds, Stopping threads took: 0.0007260 seconds +2021-01-27T13:19:33.659+0000: 182.377: Total time for which application threads were stopped: 0.0031692 seconds, Stopping threads took: 0.0018746 seconds +2021-01-27T13:19:33.676+0000: 182.395: Total time for which application threads were stopped: 0.0006664 seconds, Stopping threads took: 0.0002499 seconds +2021-01-27T13:19:33.678+0000: 182.396: Total time for which application threads were stopped: 0.0009044 seconds, Stopping threads took: 0.0006599 seconds +2021-01-27T13:19:33.691+0000: 182.409: Total time for which application threads were stopped: 0.0011525 seconds, Stopping threads took: 0.0006953 seconds +2021-01-27T13:19:33.695+0000: 182.413: Total time for which application threads were stopped: 0.0009907 seconds, Stopping threads took: 0.0001187 seconds +2021-01-27T13:19:33.697+0000: 182.415: Total time for which application threads were stopped: 0.0013844 seconds, Stopping threads took: 0.0010084 seconds +2021-01-27T13:19:33.699+0000: 182.417: Total time for which application threads were stopped: 0.0011995 seconds, Stopping threads took: 0.0009486 seconds +2021-01-27T13:19:33.700+0000: 182.418: Total time for which application threads were stopped: 0.0009960 seconds, Stopping threads took: 0.0005578 seconds +2021-01-27T13:19:34.702+0000: 183.420: Total time for which application threads were stopped: 0.0006748 seconds, Stopping threads took: 0.0003803 seconds +2021-01-27T13:19:34.705+0000: 183.423: Total time for which application threads were stopped: 0.0004686 seconds, Stopping threads took: 0.0001647 seconds +2021-01-27T13:19:34.725+0000: 183.443: Total time for which application threads were stopped: 0.0002782 seconds, Stopping threads took: 0.0000587 seconds +2021-01-27T13:19:34.726+0000: 183.444: Total time for which application threads were stopped: 0.0003816 seconds, Stopping threads took: 0.0001502 seconds +2021-01-27T13:19:34.801+0000: 183.519: Total time for which application threads were stopped: 0.0009859 seconds, Stopping threads took: 0.0003617 seconds +2021-01-27T13:19:34.817+0000: 183.535: Total time for which application threads were stopped: 0.0003380 seconds, Stopping threads took: 0.0001479 seconds +2021-01-27T13:19:34.823+0000: 183.542: Total time for which application threads were stopped: 0.0005185 seconds, Stopping threads took: 0.0002102 seconds +2021-01-27T13:19:34.833+0000: 183.551: Total time for which application threads were stopped: 0.0065414 seconds, Stopping threads took: 0.0063514 seconds +2021-01-27T13:19:34.833+0000: 183.551: Total time for which application threads were stopped: 0.0002714 seconds, Stopping threads took: 0.0001221 seconds +2021-01-27T13:19:34.834+0000: 183.552: Total time for which application threads were stopped: 0.0002725 seconds, Stopping threads took: 0.0001543 seconds +2021-01-27T13:19:34.834+0000: 183.552: Total time for which application threads were stopped: 0.0002336 seconds, Stopping threads took: 0.0001177 seconds +2021-01-27T13:19:34.836+0000: 183.554: Total time for which application threads were stopped: 0.0003546 seconds, Stopping threads took: 0.0001446 seconds +2021-01-27T13:19:34.841+0000: 183.559: [GC (Allocation Failure) 2021-01-27T13:19:34.841+0000: 183.559: [ParNew +Desired survivor size 8945664 bytes, new threshold 2 (max 6) +- age 1: 6670728 bytes, 6670728 total +- age 2: 4778520 bytes, 11449248 total +: 148055K->13569K(157248K), 0.0126118 secs] 252422K->117936K(506816K), 0.0141903 secs] [Times: user=0.04 sys=0.00, real=0.02 secs] +2021-01-27T13:19:34.856+0000: 183.574: Total time for which application threads were stopped: 0.0160175 seconds, Stopping threads took: 0.0002858 seconds +2021-01-27T13:19:34.875+0000: 183.593: Total time for which application threads were stopped: 0.0006779 seconds, Stopping threads took: 0.0002693 seconds +2021-01-27T13:19:34.876+0000: 183.594: Total time for which application threads were stopped: 0.0003057 seconds, Stopping threads took: 0.0001355 seconds +2021-01-27T13:19:34.971+0000: 183.689: Total time for which application threads were stopped: 0.0005016 seconds, Stopping threads took: 0.0002148 seconds +2021-01-27T13:19:35.029+0000: 183.747: Total time for which application threads were stopped: 0.0005211 seconds, Stopping threads took: 0.0003065 seconds +2021-01-27T13:19:35.029+0000: 183.747: Total time for which application threads were stopped: 0.0004025 seconds, Stopping threads took: 0.0002428 seconds +2021-01-27T13:19:35.037+0000: 183.755: Total time for which application threads were stopped: 0.0004258 seconds, Stopping threads took: 0.0002024 seconds +2021-01-27T13:19:35.063+0000: 183.781: Total time for which application threads were stopped: 0.0008543 seconds, Stopping threads took: 0.0004140 seconds +2021-01-27T13:19:35.069+0000: 183.787: Total time for which application threads were stopped: 0.0059096 seconds, Stopping threads took: 0.0055470 seconds +2021-01-27T13:19:35.142+0000: 183.860: Total time for which application threads were stopped: 0.0003926 seconds, Stopping threads took: 0.0000741 seconds +2021-01-27T13:19:35.171+0000: 183.889: Total time for which application threads were stopped: 0.0005314 seconds, Stopping threads took: 0.0003048 seconds +2021-01-27T13:19:35.182+0000: 183.900: Total time for which application threads were stopped: 0.0010110 seconds, Stopping threads took: 0.0007768 seconds +2021-01-27T13:19:35.193+0000: 183.911: Total time for which application threads were stopped: 0.0009799 seconds, Stopping threads took: 0.0007372 seconds +2021-01-27T13:19:35.194+0000: 183.912: Total time for which application threads were stopped: 0.0003996 seconds, Stopping threads took: 0.0002020 seconds +2021-01-27T13:19:35.199+0000: 183.918: Total time for which application threads were stopped: 0.0006544 seconds, Stopping threads took: 0.0003776 seconds +2021-01-27T13:19:35.219+0000: 183.937: Total time for which application threads were stopped: 0.0002576 seconds, Stopping threads took: 0.0000499 seconds +2021-01-27T13:19:35.220+0000: 183.938: Total time for which application threads were stopped: 0.0002517 seconds, Stopping threads took: 0.0000737 seconds +2021-01-27T13:19:35.300+0000: 184.018: Total time for which application threads were stopped: 0.0002695 seconds, Stopping threads took: 0.0000703 seconds +2021-01-27T13:19:35.322+0000: 184.040: Total time for which application threads were stopped: 0.0008812 seconds, Stopping threads took: 0.0000465 seconds +2021-01-27T13:19:35.340+0000: 184.059: Total time for which application threads were stopped: 0.0004049 seconds, Stopping threads took: 0.0002324 seconds +2021-01-27T13:19:35.349+0000: 184.067: Total time for which application threads were stopped: 0.0033716 seconds, Stopping threads took: 0.0032031 seconds +2021-01-27T13:19:35.351+0000: 184.069: Total time for which application threads were stopped: 0.0001792 seconds, Stopping threads took: 0.0000385 seconds +2021-01-27T13:19:36.351+0000: 185.069: Total time for which application threads were stopped: 0.0004213 seconds, Stopping threads took: 0.0001410 seconds +2021-01-27T13:19:36.352+0000: 185.070: Total time for which application threads were stopped: 0.0002538 seconds, Stopping threads took: 0.0001133 seconds +2021-01-27T13:19:37.353+0000: 186.071: Total time for which application threads were stopped: 0.0008098 seconds, Stopping threads took: 0.0004821 seconds +2021-01-27T13:19:37.354+0000: 186.072: Total time for which application threads were stopped: 0.0005309 seconds, Stopping threads took: 0.0002571 seconds +2021-01-27T13:19:37.355+0000: 186.073: Total time for which application threads were stopped: 0.0008615 seconds, Stopping threads took: 0.0004543 seconds +2021-01-27T13:19:37.356+0000: 186.074: Total time for which application threads were stopped: 0.0004251 seconds, Stopping threads took: 0.0002120 seconds +2021-01-27T13:19:38.358+0000: 187.076: Total time for which application threads were stopped: 0.0007050 seconds, Stopping threads took: 0.0005183 seconds +2021-01-27T13:19:38.910+0000: 187.628: Total time for which application threads were stopped: 0.0051612 seconds, Stopping threads took: 0.0044118 seconds +2021-01-27T13:19:39.308+0000: 188.026: Total time for which application threads were stopped: 0.0011670 seconds, Stopping threads took: 0.0005362 seconds +2021-01-27T13:19:40.309+0000: 189.027: Total time for which application threads were stopped: 0.0004268 seconds, Stopping threads took: 0.0000835 seconds +2021-01-27T13:19:41.310+0000: 190.028: Total time for which application threads were stopped: 0.0004143 seconds, Stopping threads took: 0.0000945 seconds +2021-01-27T13:19:44.347+0000: 193.065: Total time for which application threads were stopped: 0.0002857 seconds, Stopping threads took: 0.0000508 seconds +2021-01-27T13:19:45.348+0000: 194.066: Total time for which application threads were stopped: 0.0003572 seconds, Stopping threads took: 0.0000996 seconds +2021-01-27T13:19:47.351+0000: 196.069: Total time for which application threads were stopped: 0.0002426 seconds, Stopping threads took: 0.0000566 seconds +2021-01-27T13:19:48.010+0000: 196.728: Total time for which application threads were stopped: 0.0007387 seconds, Stopping threads took: 0.0005402 seconds +2021-01-27T13:19:48.011+0000: 196.729: Total time for which application threads were stopped: 0.0004565 seconds, Stopping threads took: 0.0003215 seconds +2021-01-27T13:19:48.015+0000: 196.733: Total time for which application threads were stopped: 0.0006594 seconds, Stopping threads took: 0.0004773 seconds +2021-01-27T13:19:48.018+0000: 196.736: Total time for which application threads were stopped: 0.0004713 seconds, Stopping threads took: 0.0002686 seconds +2021-01-27T13:19:48.020+0000: 196.738: Total time for which application threads were stopped: 0.0004982 seconds, Stopping threads took: 0.0003467 seconds +2021-01-27T13:19:49.021+0000: 197.739: Total time for which application threads were stopped: 0.0003124 seconds, Stopping threads took: 0.0000747 seconds +2021-01-27T13:19:50.023+0000: 198.741: Total time for which application threads were stopped: 0.0003289 seconds, Stopping threads took: 0.0000534 seconds +2021-01-27T13:19:53.024+0000: 201.742: Total time for which application threads were stopped: 0.0002140 seconds, Stopping threads took: 0.0000528 seconds +2021-01-27T13:19:54.024+0000: 202.742: Total time for which application threads were stopped: 0.0002876 seconds, Stopping threads took: 0.0000736 seconds +2021-01-27T13:19:55.025+0000: 203.743: Total time for which application threads were stopped: 0.0002786 seconds, Stopping threads took: 0.0000509 seconds +2021-01-27T13:19:57.026+0000: 205.744: Total time for which application threads were stopped: 0.0003936 seconds, Stopping threads took: 0.0000905 seconds +2021-01-27T13:19:59.294+0000: 208.012: Total time for which application threads were stopped: 0.0005076 seconds, Stopping threads took: 0.0000941 seconds +2021-01-27T13:19:59.295+0000: 208.013: Total time for which application threads were stopped: 0.0005545 seconds, Stopping threads took: 0.0002017 seconds +2021-01-27T13:20:00.296+0000: 209.014: Total time for which application threads were stopped: 0.0003354 seconds, Stopping threads took: 0.0000610 seconds +2021-01-27T13:20:02.297+0000: 211.015: Total time for which application threads were stopped: 0.0003048 seconds, Stopping threads took: 0.0000767 seconds +2021-01-27T13:20:03.298+0000: 212.016: Total time for which application threads were stopped: 0.0003906 seconds, Stopping threads took: 0.0000946 seconds +2021-01-27T13:20:04.299+0000: 213.017: Total time for which application threads were stopped: 0.0002409 seconds, Stopping threads took: 0.0000642 seconds +2021-01-27T13:20:05.299+0000: 214.018: Total time for which application threads were stopped: 0.0004981 seconds, Stopping threads took: 0.0001215 seconds +2021-01-27T13:20:06.300+0000: 215.018: Total time for which application threads were stopped: 0.0002952 seconds, Stopping threads took: 0.0000795 seconds +2021-01-27T13:20:10.302+0000: 219.020: Total time for which application threads were stopped: 0.0002925 seconds, Stopping threads took: 0.0000637 seconds +2021-01-27T13:20:11.305+0000: 220.023: Total time for which application threads were stopped: 0.0003324 seconds, Stopping threads took: 0.0001147 seconds +2021-01-27T13:20:12.306+0000: 221.024: Total time for which application threads were stopped: 0.0002249 seconds, Stopping threads took: 0.0000579 seconds +2021-01-27T13:20:14.307+0000: 223.025: Total time for which application threads were stopped: 0.0003929 seconds, Stopping threads took: 0.0000927 seconds +2021-01-27T13:20:16.308+0000: 225.026: Total time for which application threads were stopped: 0.0003421 seconds, Stopping threads took: 0.0000725 seconds +2021-01-27T13:20:20.312+0000: 229.030: Total time for which application threads were stopped: 0.0003624 seconds, Stopping threads took: 0.0001414 seconds +2021-01-27T13:20:26.315+0000: 235.033: Total time for which application threads were stopped: 0.0004295 seconds, Stopping threads took: 0.0001718 seconds +2021-01-27T13:20:27.316+0000: 236.034: Total time for which application threads were stopped: 0.0003611 seconds, Stopping threads took: 0.0000743 seconds +2021-01-27T13:20:29.464+0000: 238.182: Total time for which application threads were stopped: 0.0006528 seconds, Stopping threads took: 0.0004501 seconds +2021-01-27T13:20:29.467+0000: 238.185: Total time for which application threads were stopped: 0.0009901 seconds, Stopping threads took: 0.0005516 seconds +2021-01-27T13:20:35.469+0000: 244.187: Total time for which application threads were stopped: 0.0002826 seconds, Stopping threads took: 0.0000651 seconds +2021-01-27T13:20:38.470+0000: 247.188: Total time for which application threads were stopped: 0.0002992 seconds, Stopping threads took: 0.0000718 seconds +2021-01-27T13:20:40.472+0000: 249.190: Total time for which application threads were stopped: 0.0004715 seconds, Stopping threads took: 0.0000736 seconds +2021-01-27T13:20:44.476+0000: 253.194: Total time for which application threads were stopped: 0.0005755 seconds, Stopping threads took: 0.0000907 seconds +2021-01-27T13:20:45.476+0000: 254.194: Total time for which application threads were stopped: 0.0003464 seconds, Stopping threads took: 0.0001082 seconds +2021-01-27T13:20:50.481+0000: 259.199: Total time for which application threads were stopped: 0.0004947 seconds, Stopping threads took: 0.0002260 seconds +2021-01-27T13:20:56.483+0000: 265.201: Total time for which application threads were stopped: 0.0002466 seconds, Stopping threads took: 0.0000593 seconds +2021-01-27T13:20:57.484+0000: 266.202: Total time for which application threads were stopped: 0.0003137 seconds, Stopping threads took: 0.0000675 seconds +2021-01-27T13:21:00.485+0000: 269.203: Total time for which application threads were stopped: 0.0003282 seconds, Stopping threads took: 0.0001036 seconds +2021-01-27T13:21:06.487+0000: 275.205: Total time for which application threads were stopped: 0.0003431 seconds, Stopping threads took: 0.0000748 seconds +2021-01-27T13:21:07.488+0000: 276.206: Total time for which application threads were stopped: 0.0003298 seconds, Stopping threads took: 0.0000596 seconds +2021-01-27T13:21:10.489+0000: 279.207: Total time for which application threads were stopped: 0.0002430 seconds, Stopping threads took: 0.0000606 seconds +2021-01-27T13:21:13.492+0000: 282.210: Total time for which application threads were stopped: 0.0002754 seconds, Stopping threads took: 0.0000551 seconds +2021-01-27T13:21:15.493+0000: 284.211: Total time for which application threads were stopped: 0.0005271 seconds, Stopping threads took: 0.0000918 seconds +2021-01-27T13:21:20.495+0000: 289.213: Total time for which application threads were stopped: 0.0003283 seconds, Stopping threads took: 0.0000762 seconds +2021-01-27T13:21:25.497+0000: 294.215: Total time for which application threads were stopped: 0.0001988 seconds, Stopping threads took: 0.0000481 seconds +2021-01-27T13:21:29.659+0000: 298.377: Total time for which application threads were stopped: 0.0002196 seconds, Stopping threads took: 0.0000397 seconds +2021-01-27T13:21:29.659+0000: 298.377: Total time for which application threads were stopped: 0.0001554 seconds, Stopping threads took: 0.0000616 seconds +2021-01-27T13:21:30.660+0000: 299.378: Total time for which application threads were stopped: 0.0002413 seconds, Stopping threads took: 0.0000546 seconds +2021-01-27T13:21:36.663+0000: 305.381: Total time for which application threads were stopped: 0.0003422 seconds, Stopping threads took: 0.0001058 seconds +2021-01-27T13:21:40.666+0000: 309.383: Total time for which application threads were stopped: 0.0003033 seconds, Stopping threads took: 0.0000753 seconds +2021-01-27T13:21:41.666+0000: 310.384: Total time for which application threads were stopped: 0.0003463 seconds, Stopping threads took: 0.0000728 seconds +2021-01-27T13:21:46.668+0000: 315.386: Total time for which application threads were stopped: 0.0004098 seconds, Stopping threads took: 0.0000904 seconds +2021-01-27T13:21:50.671+0000: 319.389: Total time for which application threads were stopped: 0.0004475 seconds, Stopping threads took: 0.0000927 seconds +2021-01-27T13:21:54.299+0000: 323.017: Total time for which application threads were stopped: 0.0013575 seconds, Stopping threads took: 0.0007506 seconds +2021-01-27T13:21:54.304+0000: 323.022: Total time for which application threads were stopped: 0.0010556 seconds, Stopping threads took: 0.0008209 seconds +2021-01-27T13:21:55.307+0000: 324.025: Total time for which application threads were stopped: 0.0011867 seconds, Stopping threads took: 0.0009710 seconds +2021-01-27T13:21:56.308+0000: 325.026: Total time for which application threads were stopped: 0.0002911 seconds, Stopping threads took: 0.0001061 seconds +2021-01-27T13:21:59.749+0000: 328.467: Total time for which application threads were stopped: 0.0007792 seconds, Stopping threads took: 0.0005042 seconds +2021-01-27T13:21:59.750+0000: 328.467: Total time for which application threads were stopped: 0.0002728 seconds, Stopping threads took: 0.0000187 seconds +2021-01-27T13:22:00.750+0000: 329.468: Total time for which application threads were stopped: 0.0002577 seconds, Stopping threads took: 0.0000554 seconds +2021-01-27T13:22:02.751+0000: 331.469: Total time for which application threads were stopped: 0.0003551 seconds, Stopping threads took: 0.0001196 seconds +2021-01-27T13:22:05.753+0000: 334.471: Total time for which application threads were stopped: 0.0004839 seconds, Stopping threads took: 0.0000731 seconds +2021-01-27T13:22:10.299+0000: 339.017: [GC (Allocation Failure) 2021-01-27T13:22:10.300+0000: 339.018: [ParNew +Desired survivor size 8945664 bytes, new threshold 6 (max 6) +- age 1: 1107088 bytes, 1107088 total +- age 2: 1177632 bytes, 2284720 total +: 153345K->8147K(157248K), 0.0127254 secs] 257712K->117232K(506816K), 0.0152842 secs] [Times: user=0.03 sys=0.00, real=0.02 secs] +2021-01-27T13:22:10.316+0000: 339.034: Total time for which application threads were stopped: 0.0177075 seconds, Stopping threads took: 0.0004307 seconds +2021-01-27T13:22:10.892+0000: 339.610: Total time for which application threads were stopped: 0.0002476 seconds, Stopping threads took: 0.0000472 seconds +2021-01-27T13:22:10.892+0000: 339.610: Total time for which application threads were stopped: 0.0001288 seconds, Stopping threads took: 0.0000213 seconds +2021-01-27T13:22:10.894+0000: 339.612: Total time for which application threads were stopped: 0.0013466 seconds, Stopping threads took: 0.0011421 seconds +2021-01-27T13:22:11.895+0000: 340.613: Total time for which application threads were stopped: 0.0002924 seconds, Stopping threads took: 0.0000716 seconds +2021-01-27T13:22:14.896+0000: 343.614: Total time for which application threads were stopped: 0.0003158 seconds, Stopping threads took: 0.0001176 seconds +2021-01-27T13:22:17.206+0000: 345.923: Total time for which application threads were stopped: 0.0006619 seconds, Stopping threads took: 0.0004767 seconds +2021-01-27T13:22:17.208+0000: 345.925: Total time for which application threads were stopped: 0.0004695 seconds, Stopping threads took: 0.0003094 seconds +2021-01-27T13:22:17.208+0000: 345.926: Total time for which application threads were stopped: 0.0002691 seconds, Stopping threads took: 0.0001214 seconds +2021-01-27T13:22:17.218+0000: 345.936: Total time for which application threads were stopped: 0.0067114 seconds, Stopping threads took: 0.0065995 seconds +2021-01-27T13:22:17.219+0000: 345.937: Total time for which application threads were stopped: 0.0002882 seconds, Stopping threads took: 0.0001819 seconds +2021-01-27T13:22:17.220+0000: 345.937: Total time for which application threads were stopped: 0.0003277 seconds, Stopping threads took: 0.0002358 seconds +2021-01-27T13:22:17.221+0000: 345.938: Total time for which application threads were stopped: 0.0003095 seconds, Stopping threads took: 0.0001983 seconds +2021-01-27T13:22:17.221+0000: 345.939: Total time for which application threads were stopped: 0.0005037 seconds, Stopping threads took: 0.0004059 seconds +2021-01-27T13:22:17.223+0000: 345.940: Total time for which application threads were stopped: 0.0004086 seconds, Stopping threads took: 0.0002487 seconds +2021-01-27T13:22:17.223+0000: 345.941: Total time for which application threads were stopped: 0.0003706 seconds, Stopping threads took: 0.0002405 seconds +2021-01-27T13:22:17.224+0000: 345.941: Total time for which application threads were stopped: 0.0004683 seconds, Stopping threads took: 0.0003285 seconds +2021-01-27T13:22:17.224+0000: 345.942: Total time for which application threads were stopped: 0.0002828 seconds, Stopping threads took: 0.0001620 seconds +2021-01-27T13:22:17.226+0000: 345.944: Total time for which application threads were stopped: 0.0016733 seconds, Stopping threads took: 0.0015465 seconds +2021-01-27T13:22:17.227+0000: 345.944: Total time for which application threads were stopped: 0.0003245 seconds, Stopping threads took: 0.0001974 seconds +2021-01-27T13:22:17.227+0000: 345.945: Total time for which application threads were stopped: 0.0004071 seconds, Stopping threads took: 0.0002853 seconds +2021-01-27T13:22:17.228+0000: 345.946: Total time for which application threads were stopped: 0.0002971 seconds, Stopping threads took: 0.0001756 seconds +2021-01-27T13:22:17.229+0000: 345.947: Total time for which application threads were stopped: 0.0001967 seconds, Stopping threads took: 0.0000717 seconds +2021-01-27T13:22:17.230+0000: 345.948: Total time for which application threads were stopped: 0.0009733 seconds, Stopping threads took: 0.0006435 seconds +2021-01-27T13:22:17.243+0000: 345.960: Total time for which application threads were stopped: 0.0017423 seconds, Stopping threads took: 0.0012827 seconds +2021-01-27T13:22:17.255+0000: 345.973: Total time for which application threads were stopped: 0.0001771 seconds, Stopping threads took: 0.0000375 seconds +2021-01-27T13:22:17.256+0000: 345.973: Total time for which application threads were stopped: 0.0001545 seconds, Stopping threads took: 0.0000174 seconds +2021-01-27T13:22:17.257+0000: 345.975: Total time for which application threads were stopped: 0.0010647 seconds, Stopping threads took: 0.0009620 seconds +2021-01-27T13:22:17.258+0000: 345.976: Total time for which application threads were stopped: 0.0001551 seconds, Stopping threads took: 0.0000264 seconds +2021-01-27T13:22:17.258+0000: 345.976: Total time for which application threads were stopped: 0.0000943 seconds, Stopping threads took: 0.0000162 seconds +2021-01-27T13:22:17.259+0000: 345.977: Total time for which application threads were stopped: 0.0001703 seconds, Stopping threads took: 0.0000831 seconds +2021-01-27T13:22:17.270+0000: 345.988: Total time for which application threads were stopped: 0.0001903 seconds, Stopping threads took: 0.0000402 seconds +2021-01-27T13:22:17.270+0000: 345.988: Total time for which application threads were stopped: 0.0001072 seconds, Stopping threads took: 0.0000167 seconds +2021-01-27T13:22:17.270+0000: 345.988: Total time for which application threads were stopped: 0.0000940 seconds, Stopping threads took: 0.0000157 seconds +2021-01-27T13:22:17.270+0000: 345.988: Total time for which application threads were stopped: 0.0000929 seconds, Stopping threads took: 0.0000155 seconds +2021-01-27T13:22:17.271+0000: 345.989: Total time for which application threads were stopped: 0.0001285 seconds, Stopping threads took: 0.0000463 seconds +2021-01-27T13:22:17.271+0000: 345.989: Total time for which application threads were stopped: 0.0000989 seconds, Stopping threads took: 0.0000158 seconds +2021-01-27T13:22:17.275+0000: 345.993: Total time for which application threads were stopped: 0.0002736 seconds, Stopping threads took: 0.0000728 seconds +2021-01-27T13:22:17.279+0000: 345.997: Total time for which application threads were stopped: 0.0001970 seconds, Stopping threads took: 0.0000490 seconds +2021-01-27T13:22:17.287+0000: 346.005: Total time for which application threads were stopped: 0.0003611 seconds, Stopping threads took: 0.0002249 seconds +2021-01-27T13:22:17.288+0000: 346.006: Total time for which application threads were stopped: 0.0004702 seconds, Stopping threads took: 0.0003405 seconds +2021-01-27T13:22:17.289+0000: 346.007: Total time for which application threads were stopped: 0.0003685 seconds, Stopping threads took: 0.0002018 seconds +2021-01-27T13:22:17.290+0000: 346.008: Total time for which application threads were stopped: 0.0004149 seconds, Stopping threads took: 0.0002398 seconds +2021-01-27T13:22:17.291+0000: 346.009: Total time for which application threads were stopped: 0.0003684 seconds, Stopping threads took: 0.0002257 seconds +2021-01-27T13:22:17.292+0000: 346.009: Total time for which application threads were stopped: 0.0003485 seconds, Stopping threads took: 0.0001520 seconds +2021-01-27T13:22:17.292+0000: 346.010: Total time for which application threads were stopped: 0.0005366 seconds, Stopping threads took: 0.0003579 seconds +2021-01-27T13:22:17.293+0000: 346.011: Total time for which application threads were stopped: 0.0002757 seconds, Stopping threads took: 0.0000606 seconds +2021-01-27T13:22:17.293+0000: 346.011: Total time for which application threads were stopped: 0.0005774 seconds, Stopping threads took: 0.0004289 seconds +2021-01-27T13:22:17.295+0000: 346.013: Total time for which application threads were stopped: 0.0013361 seconds, Stopping threads took: 0.0011934 seconds +2021-01-27T13:22:17.297+0000: 346.015: Total time for which application threads were stopped: 0.0010788 seconds, Stopping threads took: 0.0003479 seconds +2021-01-27T13:22:17.307+0000: 346.025: Total time for which application threads were stopped: 0.0003086 seconds, Stopping threads took: 0.0000475 seconds +2021-01-27T13:22:17.314+0000: 346.031: Total time for which application threads were stopped: 0.0006627 seconds, Stopping threads took: 0.0004560 seconds +2021-01-27T13:22:17.318+0000: 346.036: Total time for which application threads were stopped: 0.0007484 seconds, Stopping threads took: 0.0004093 seconds +2021-01-27T13:22:17.319+0000: 346.037: Total time for which application threads were stopped: 0.0006897 seconds, Stopping threads took: 0.0004493 seconds +2021-01-27T13:22:17.320+0000: 346.038: Total time for which application threads were stopped: 0.0006570 seconds, Stopping threads took: 0.0004307 seconds +2021-01-27T13:22:17.321+0000: 346.038: Total time for which application threads were stopped: 0.0003998 seconds, Stopping threads took: 0.0002538 seconds +2021-01-27T13:22:17.322+0000: 346.040: Total time for which application threads were stopped: 0.0004526 seconds, Stopping threads took: 0.0003271 seconds +2021-01-27T13:22:17.323+0000: 346.040: Total time for which application threads were stopped: 0.0001616 seconds, Stopping threads took: 0.0000178 seconds +2021-01-27T13:22:17.328+0000: 346.045: Total time for which application threads were stopped: 0.0002974 seconds, Stopping threads took: 0.0001224 seconds +2021-01-27T13:22:17.329+0000: 346.047: Total time for which application threads were stopped: 0.0002955 seconds, Stopping threads took: 0.0000441 seconds +2021-01-27T13:22:17.329+0000: 346.047: Total time for which application threads were stopped: 0.0001217 seconds, Stopping threads took: 0.0000235 seconds +2021-01-27T13:22:17.329+0000: 346.047: Total time for which application threads were stopped: 0.0001516 seconds, Stopping threads took: 0.0000162 seconds +2021-01-27T13:22:17.330+0000: 346.048: Total time for which application threads were stopped: 0.0003228 seconds, Stopping threads took: 0.0000280 seconds +2021-01-27T13:22:17.332+0000: 346.049: Total time for which application threads were stopped: 0.0003320 seconds, Stopping threads took: 0.0000407 seconds +2021-01-27T13:22:17.333+0000: 346.051: Total time for which application threads were stopped: 0.0005102 seconds, Stopping threads took: 0.0000468 seconds +2021-01-27T13:22:17.340+0000: 346.058: Total time for which application threads were stopped: 0.0003370 seconds, Stopping threads took: 0.0000972 seconds +2021-01-27T13:22:17.485+0000: 346.202: Total time for which application threads were stopped: 0.0002872 seconds, Stopping threads took: 0.0001262 seconds +2021-01-27T13:22:17.486+0000: 346.204: Total time for which application threads were stopped: 0.0008190 seconds, Stopping threads took: 0.0005402 seconds +2021-01-27T13:22:17.935+0000: 346.653: Total time for which application threads were stopped: 0.0002525 seconds, Stopping threads took: 0.0000541 seconds +2021-01-27T13:22:17.936+0000: 346.653: Total time for which application threads were stopped: 0.0001323 seconds, Stopping threads took: 0.0000222 seconds +2021-01-27T13:22:17.937+0000: 346.655: Total time for which application threads were stopped: 0.0004126 seconds, Stopping threads took: 0.0000278 seconds +2021-01-27T13:22:17.938+0000: 346.656: Total time for which application threads were stopped: 0.0002428 seconds, Stopping threads took: 0.0000221 seconds +2021-01-27T13:22:17.939+0000: 346.657: Total time for which application threads were stopped: 0.0001220 seconds, Stopping threads took: 0.0000214 seconds +2021-01-27T13:22:17.941+0000: 346.659: Total time for which application threads were stopped: 0.0002820 seconds, Stopping threads took: 0.0000420 seconds +2021-01-27T13:22:18.942+0000: 347.660: Total time for which application threads were stopped: 0.0003380 seconds, Stopping threads took: 0.0001879 seconds +2021-01-27T13:22:19.942+0000: 348.660: Total time for which application threads were stopped: 0.0003197 seconds, Stopping threads took: 0.0000758 seconds +2021-01-27T13:22:24.945+0000: 353.663: Total time for which application threads were stopped: 0.0004460 seconds, Stopping threads took: 0.0001842 seconds +2021-01-27T13:22:29.853+0000: 358.571: Total time for which application threads were stopped: 0.0002219 seconds, Stopping threads took: 0.0000739 seconds +2021-01-27T13:22:29.853+0000: 358.571: Total time for which application threads were stopped: 0.0001301 seconds, Stopping threads took: 0.0000222 seconds +2021-01-27T13:22:30.854+0000: 359.572: Total time for which application threads were stopped: 0.0004059 seconds, Stopping threads took: 0.0001799 seconds +2021-01-27T13:22:32.856+0000: 361.574: Total time for which application threads were stopped: 0.0003650 seconds, Stopping threads took: 0.0000886 seconds +2021-01-27T13:22:33.857+0000: 362.575: Total time for which application threads were stopped: 0.0004139 seconds, Stopping threads took: 0.0002769 seconds +2021-01-27T13:22:35.859+0000: 364.576: Total time for which application threads were stopped: 0.0004052 seconds, Stopping threads took: 0.0000915 seconds +2021-01-27T13:22:37.861+0000: 366.579: Total time for which application threads were stopped: 0.0004861 seconds, Stopping threads took: 0.0001128 seconds +2021-01-27T13:22:40.865+0000: 369.583: Total time for which application threads were stopped: 0.0004090 seconds, Stopping threads took: 0.0000926 seconds +2021-01-27T13:22:42.866+0000: 371.584: Total time for which application threads were stopped: 0.0004047 seconds, Stopping threads took: 0.0000927 seconds +2021-01-27T13:22:45.867+0000: 374.585: Total time for which application threads were stopped: 0.0003663 seconds, Stopping threads took: 0.0000688 seconds +2021-01-27T13:22:51.870+0000: 380.588: Total time for which application threads were stopped: 0.0003150 seconds, Stopping threads took: 0.0001003 seconds +2021-01-27T13:22:54.873+0000: 383.591: Total time for which application threads were stopped: 0.0005744 seconds, Stopping threads took: 0.0000917 seconds +2021-01-27T13:22:57.875+0000: 386.593: Total time for which application threads were stopped: 0.0007074 seconds, Stopping threads took: 0.0001901 seconds +2021-01-27T13:22:59.957+0000: 388.675: Total time for which application threads were stopped: 0.0001647 seconds, Stopping threads took: 0.0000377 seconds +2021-01-27T13:22:59.958+0000: 388.676: Total time for which application threads were stopped: 0.0001713 seconds, Stopping threads took: 0.0000681 seconds +2021-01-27T13:23:00.959+0000: 389.676: Total time for which application threads were stopped: 0.0002533 seconds, Stopping threads took: 0.0000843 seconds +2021-01-27T13:23:04.960+0000: 393.677: Total time for which application threads were stopped: 0.0003318 seconds, Stopping threads took: 0.0000849 seconds +2021-01-27T13:23:10.963+0000: 399.680: Total time for which application threads were stopped: 0.0009224 seconds, Stopping threads took: 0.0004484 seconds +2021-01-27T13:23:11.964+0000: 400.682: Total time for which application threads were stopped: 0.0004743 seconds, Stopping threads took: 0.0000823 seconds +2021-01-27T13:23:14.966+0000: 403.684: Total time for which application threads were stopped: 0.0003654 seconds, Stopping threads took: 0.0001814 seconds +2021-01-27T13:23:19.967+0000: 408.685: Total time for which application threads were stopped: 0.0002208 seconds, Stopping threads took: 0.0000542 seconds +2021-01-27T13:23:21.969+0000: 410.687: Total time for which application threads were stopped: 0.0002324 seconds, Stopping threads took: 0.0000629 seconds +2021-01-27T13:23:25.972+0000: 414.689: Total time for which application threads were stopped: 0.0002432 seconds, Stopping threads took: 0.0000532 seconds +2021-01-27T13:23:30.973+0000: 419.691: Total time for which application threads were stopped: 0.0003111 seconds, Stopping threads took: 0.0000709 seconds +2021-01-27T13:23:33.975+0000: 422.693: Total time for which application threads were stopped: 0.0003587 seconds, Stopping threads took: 0.0001464 seconds +2021-01-27T13:23:35.977+0000: 424.695: Total time for which application threads were stopped: 0.0002910 seconds, Stopping threads took: 0.0000559 seconds +2021-01-27T13:23:36.978+0000: 425.696: Total time for which application threads were stopped: 0.0002482 seconds, Stopping threads took: 0.0000628 seconds +2021-01-27T13:23:37.979+0000: 426.697: Total time for which application threads were stopped: 0.0005616 seconds, Stopping threads took: 0.0001313 seconds +2021-01-27T13:23:41.982+0000: 430.700: Total time for which application threads were stopped: 0.0004050 seconds, Stopping threads took: 0.0000702 seconds +2021-01-27T13:23:42.983+0000: 431.701: Total time for which application threads were stopped: 0.0006108 seconds, Stopping threads took: 0.0001089 seconds +2021-01-27T13:23:44.984+0000: 433.702: Total time for which application threads were stopped: 0.0004212 seconds, Stopping threads took: 0.0000710 seconds +2021-01-27T13:23:50.986+0000: 439.704: Total time for which application threads were stopped: 0.0003752 seconds, Stopping threads took: 0.0000884 seconds +2021-01-27T13:23:55.989+0000: 444.707: Total time for which application threads were stopped: 0.0002729 seconds, Stopping threads took: 0.0000717 seconds +2021-01-27T13:24:00.219+0000: 448.937: Total time for which application threads were stopped: 0.0003754 seconds, Stopping threads took: 0.0001384 seconds +2021-01-27T13:24:00.220+0000: 448.938: Total time for which application threads were stopped: 0.0003160 seconds, Stopping threads took: 0.0000413 seconds +2021-01-27T13:24:01.222+0000: 449.939: Total time for which application threads were stopped: 0.0003812 seconds, Stopping threads took: 0.0000830 seconds +2021-01-27T13:24:05.223+0000: 453.941: Total time for which application threads were stopped: 0.0003456 seconds, Stopping threads took: 0.0000718 seconds +2021-01-27T13:24:08.225+0000: 456.943: Total time for which application threads were stopped: 0.0002736 seconds, Stopping threads took: 0.0000721 seconds +2021-01-27T13:24:11.228+0000: 459.945: Total time for which application threads were stopped: 0.0002951 seconds, Stopping threads took: 0.0000758 seconds +2021-01-27T13:24:15.230+0000: 463.948: Total time for which application threads were stopped: 0.0003693 seconds, Stopping threads took: 0.0000867 seconds +2021-01-27T13:24:20.231+0000: 468.949: Total time for which application threads were stopped: 0.0003322 seconds, Stopping threads took: 0.0000666 seconds +2021-01-27T13:24:22.232+0000: 470.950: Total time for which application threads were stopped: 0.0003643 seconds, Stopping threads took: 0.0001440 seconds +2021-01-27T13:24:26.235+0000: 474.953: Total time for which application threads were stopped: 0.0003226 seconds, Stopping threads took: 0.0000600 seconds +2021-01-27T13:24:29.865+0000: 478.582: Total time for which application threads were stopped: 0.0006630 seconds, Stopping threads took: 0.0003405 seconds +2021-01-27T13:24:29.866+0000: 478.583: Total time for which application threads were stopped: 0.0005903 seconds, Stopping threads took: 0.0004356 seconds +2021-01-27T13:24:30.341+0000: 479.058: Total time for which application threads were stopped: 0.0002435 seconds, Stopping threads took: 0.0000430 seconds +2021-01-27T13:24:30.341+0000: 479.059: Total time for which application threads were stopped: 0.0001344 seconds, Stopping threads took: 0.0000179 seconds +2021-01-27T13:24:35.344+0000: 484.061: Total time for which application threads were stopped: 0.0001975 seconds, Stopping threads took: 0.0000532 seconds +2021-01-27T13:24:37.234+0000: 485.952: Total time for which application threads were stopped: 0.0004552 seconds, Stopping threads took: 0.0001336 seconds +2021-01-27T13:24:37.263+0000: 485.980: Total time for which application threads were stopped: 0.0003289 seconds, Stopping threads took: 0.0000825 seconds +2021-01-27T13:24:37.283+0000: 486.001: Total time for which application threads were stopped: 0.0005527 seconds, Stopping threads took: 0.0000763 seconds +2021-01-27T13:24:37.285+0000: 486.003: Total time for which application threads were stopped: 0.0002767 seconds, Stopping threads took: 0.0000507 seconds +2021-01-27T13:24:37.288+0000: 486.005: Total time for which application threads were stopped: 0.0002690 seconds, Stopping threads took: 0.0000621 seconds +2021-01-27T13:24:37.306+0000: 486.023: Total time for which application threads were stopped: 0.0002643 seconds, Stopping threads took: 0.0001086 seconds +2021-01-27T13:24:37.360+0000: 486.077: Total time for which application threads were stopped: 0.0002839 seconds, Stopping threads took: 0.0000681 seconds +2021-01-27T13:24:37.363+0000: 486.080: Total time for which application threads were stopped: 0.0002378 seconds, Stopping threads took: 0.0000430 seconds +2021-01-27T13:24:37.364+0000: 486.081: Total time for which application threads were stopped: 0.0001632 seconds, Stopping threads took: 0.0000282 seconds +2021-01-27T13:24:37.364+0000: 486.082: Total time for which application threads were stopped: 0.0001246 seconds, Stopping threads took: 0.0000208 seconds +2021-01-27T13:24:37.368+0000: 486.085: Total time for which application threads were stopped: 0.0001764 seconds, Stopping threads took: 0.0000383 seconds +2021-01-27T13:24:37.546+0000: 486.264: Total time for which application threads were stopped: 0.0002664 seconds, Stopping threads took: 0.0000938 seconds +2021-01-27T13:24:37.547+0000: 486.264: Total time for which application threads were stopped: 0.0001657 seconds, Stopping threads took: 0.0000206 seconds +2021-01-27T13:24:37.547+0000: 486.265: Total time for which application threads were stopped: 0.0001670 seconds, Stopping threads took: 0.0000715 seconds +2021-01-27T13:24:37.548+0000: 486.266: Total time for which application threads were stopped: 0.0004333 seconds, Stopping threads took: 0.0003343 seconds +2021-01-27T13:24:38.550+0000: 487.268: Total time for which application threads were stopped: 0.0003532 seconds, Stopping threads took: 0.0001505 seconds +2021-01-27T13:24:39.551+0000: 488.269: Total time for which application threads were stopped: 0.0002682 seconds, Stopping threads took: 0.0001151 seconds +2021-01-27T13:24:40.552+0000: 489.269: Total time for which application threads were stopped: 0.0004829 seconds, Stopping threads took: 0.0000935 seconds +2021-01-27T13:24:43.553+0000: 492.271: Total time for which application threads were stopped: 0.0002779 seconds, Stopping threads took: 0.0000545 seconds +2021-01-27T13:24:45.554+0000: 494.271: Total time for which application threads were stopped: 0.0003270 seconds, Stopping threads took: 0.0000712 seconds +2021-01-27T13:24:50.557+0000: 499.274: Total time for which application threads were stopped: 0.0002312 seconds, Stopping threads took: 0.0000597 seconds +2021-01-27T13:25:00.431+0000: 509.149: Total time for which application threads were stopped: 0.0001738 seconds, Stopping threads took: 0.0000385 seconds +2021-01-27T13:25:00.437+0000: 509.155: Total time for which application threads were stopped: 0.0002108 seconds, Stopping threads took: 0.0000713 seconds +2021-01-27T13:25:01.438+0000: 510.155: Total time for which application threads were stopped: 0.0002879 seconds, Stopping threads took: 0.0000839 seconds +2021-01-27T13:25:05.439+0000: 514.157: Total time for which application threads were stopped: 0.0009195 seconds, Stopping threads took: 0.0006014 seconds +2021-01-27T13:25:10.441+0000: 519.159: Total time for which application threads were stopped: 0.0002774 seconds, Stopping threads took: 0.0000623 seconds +2021-01-27T13:25:11.442+0000: 520.159: Total time for which application threads were stopped: 0.0002241 seconds, Stopping threads took: 0.0000595 seconds +2021-01-27T13:25:15.443+0000: 524.161: Total time for which application threads were stopped: 0.0002944 seconds, Stopping threads took: 0.0001317 seconds +2021-01-27T13:25:21.446+0000: 530.164: Total time for which application threads were stopped: 0.0002995 seconds, Stopping threads took: 0.0000677 seconds +2021-01-27T13:25:25.449+0000: 534.167: Total time for which application threads were stopped: 0.0002840 seconds, Stopping threads took: 0.0000700 seconds +2021-01-27T13:25:30.453+0000: 539.171: Total time for which application threads were stopped: 0.0003210 seconds, Stopping threads took: 0.0001070 seconds +2021-01-27T13:25:30.544+0000: 539.262: Total time for which application threads were stopped: 0.0002736 seconds, Stopping threads took: 0.0000386 seconds +2021-01-27T13:25:30.545+0000: 539.262: Total time for which application threads were stopped: 0.0001562 seconds, Stopping threads took: 0.0000297 seconds +2021-01-27T13:25:35.547+0000: 544.264: Total time for which application threads were stopped: 0.0004071 seconds, Stopping threads took: 0.0001292 seconds +2021-01-27T13:25:36.447+0000: 545.164: Total time for which application threads were stopped: 0.0005138 seconds, Stopping threads took: 0.0000560 seconds +2021-01-27T13:25:36.448+0000: 545.166: Total time for which application threads were stopped: 0.0005432 seconds, Stopping threads took: 0.0001021 seconds +2021-01-27T13:25:36.459+0000: 545.176: Total time for which application threads were stopped: 0.0002726 seconds, Stopping threads took: 0.0000511 seconds +2021-01-27T13:25:38.918+0000: 547.636: Total time for which application threads were stopped: 0.0009362 seconds, Stopping threads took: 0.0005096 seconds +2021-01-27T13:25:40.919+0000: 549.637: Total time for which application threads were stopped: 0.0002427 seconds, Stopping threads took: 0.0000587 seconds +2021-01-27T13:25:45.921+0000: 554.638: Total time for which application threads were stopped: 0.0003926 seconds, Stopping threads took: 0.0000708 seconds +2021-01-27T13:25:50.923+0000: 559.641: Total time for which application threads were stopped: 0.0002862 seconds, Stopping threads took: 0.0000882 seconds +2021-01-27T13:25:55.926+0000: 564.643: Total time for which application threads were stopped: 0.0002813 seconds, Stopping threads took: 0.0000711 seconds +2021-01-27T13:26:00.649+0000: 569.367: Total time for which application threads were stopped: 0.0003848 seconds, Stopping threads took: 0.0002354 seconds +2021-01-27T13:26:00.651+0000: 569.368: Total time for which application threads were stopped: 0.0002219 seconds, Stopping threads took: 0.0000908 seconds +2021-01-27T13:26:01.652+0000: 570.369: Total time for which application threads were stopped: 0.0003120 seconds, Stopping threads took: 0.0001103 seconds +2021-01-27T13:26:02.652+0000: 571.370: Total time for which application threads were stopped: 0.0004013 seconds, Stopping threads took: 0.0000683 seconds +2021-01-27T13:26:04.653+0000: 573.371: Total time for which application threads were stopped: 0.0003847 seconds, Stopping threads took: 0.0000750 seconds +2021-01-27T13:26:09.657+0000: 578.374: Total time for which application threads were stopped: 0.0003498 seconds, Stopping threads took: 0.0000656 seconds +2021-01-27T13:26:14.659+0000: 583.376: Total time for which application threads were stopped: 0.0002387 seconds, Stopping threads took: 0.0000582 seconds +2021-01-27T13:26:20.662+0000: 589.380: Total time for which application threads were stopped: 0.0004891 seconds, Stopping threads took: 0.0002132 seconds +2021-01-27T13:26:23.665+0000: 592.382: Total time for which application threads were stopped: 0.0002265 seconds, Stopping threads took: 0.0000622 seconds +2021-01-27T13:26:25.667+0000: 594.384: Total time for which application threads were stopped: 0.0002865 seconds, Stopping threads took: 0.0000655 seconds +2021-01-27T13:26:30.496+0000: 599.214: Total time for which application threads were stopped: 0.0007228 seconds, Stopping threads took: 0.0001650 seconds +2021-01-27T13:26:30.770+0000: 599.488: Total time for which application threads were stopped: 0.0002139 seconds, Stopping threads took: 0.0000392 seconds +2021-01-27T13:26:30.771+0000: 599.488: Total time for which application threads were stopped: 0.0001211 seconds, Stopping threads took: 0.0000215 seconds +2021-01-27T13:26:34.774+0000: 603.491: Total time for which application threads were stopped: 0.0002464 seconds, Stopping threads took: 0.0000794 seconds +2021-01-27T13:26:40.986+0000: 609.704: [GC (Allocation Failure) 2021-01-27T13:26:40.988+0000: 609.705: [ParNew +Desired survivor size 8945664 bytes, new threshold 6 (max 6) +- age 1: 909008 bytes, 909008 total +- age 2: 749184 bytes, 1658192 total +- age 3: 1167288 bytes, 2825480 total +: 147923K->4393K(157248K), 0.0209780 secs] 257008K->113478K(506816K), 0.0239209 secs] [Times: user=0.04 sys=0.00, real=0.02 secs] +2021-01-27T13:26:41.012+0000: 609.729: Total time for which application threads were stopped: 0.0280612 seconds, Stopping threads took: 0.0020590 seconds +2021-01-27T13:26:41.014+0000: 609.732: Total time for which application threads were stopped: 0.0013663 seconds, Stopping threads took: 0.0005203 seconds +2021-01-27T13:26:45.016+0000: 613.733: Total time for which application threads were stopped: 0.0002269 seconds, Stopping threads took: 0.0000501 seconds +2021-01-27T13:26:55.021+0000: 623.739: Total time for which application threads were stopped: 0.0013712 seconds, Stopping threads took: 0.0000642 seconds +2021-01-27T13:27:00.025+0000: 628.742: Total time for which application threads were stopped: 0.0003635 seconds, Stopping threads took: 0.0001052 seconds +2021-01-27T13:27:00.900+0000: 629.617: Total time for which application threads were stopped: 0.0007455 seconds, Stopping threads took: 0.0003618 seconds +2021-01-27T13:27:00.902+0000: 629.619: Total time for which application threads were stopped: 0.0010210 seconds, Stopping threads took: 0.0006227 seconds +2021-01-27T13:27:04.908+0000: 633.626: Total time for which application threads were stopped: 0.0002978 seconds, Stopping threads took: 0.0001253 seconds +2021-01-27T13:27:06.125+0000: 634.843: Total time for which application threads were stopped: 0.0002596 seconds, Stopping threads took: 0.0000444 seconds +2021-01-27T13:27:06.130+0000: 634.847: Total time for which application threads were stopped: 0.0012725 seconds, Stopping threads took: 0.0000280 seconds +2021-01-27T13:27:06.132+0000: 634.849: Total time for which application threads were stopped: 0.0003226 seconds, Stopping threads took: 0.0001783 seconds +2021-01-27T13:27:06.140+0000: 634.857: Total time for which application threads were stopped: 0.0004334 seconds, Stopping threads took: 0.0001872 seconds +2021-01-27T13:27:06.141+0000: 634.858: Total time for which application threads were stopped: 0.0001852 seconds, Stopping threads took: 0.0000862 seconds +2021-01-27T13:27:06.141+0000: 634.858: Total time for which application threads were stopped: 0.0001242 seconds, Stopping threads took: 0.0000381 seconds +2021-01-27T13:27:06.142+0000: 634.860: Total time for which application threads were stopped: 0.0003381 seconds, Stopping threads took: 0.0001285 seconds +2021-01-27T13:27:06.158+0000: 634.875: Total time for which application threads were stopped: 0.0011783 seconds, Stopping threads took: 0.0000476 seconds +2021-01-27T13:27:06.160+0000: 634.877: Total time for which application threads were stopped: 0.0001214 seconds, Stopping threads took: 0.0000370 seconds +2021-01-27T13:27:06.160+0000: 634.877: Total time for which application threads were stopped: 0.0001787 seconds, Stopping threads took: 0.0001122 seconds +2021-01-27T13:27:06.160+0000: 634.877: Total time for which application threads were stopped: 0.0000938 seconds, Stopping threads took: 0.0000279 seconds +2021-01-27T13:27:06.160+0000: 634.877: Total time for which application threads were stopped: 0.0000929 seconds, Stopping threads took: 0.0000277 seconds +2021-01-27T13:27:06.169+0000: 634.886: Total time for which application threads were stopped: 0.0001568 seconds, Stopping threads took: 0.0000453 seconds +2021-01-27T13:27:06.314+0000: 635.031: Total time for which application threads were stopped: 0.0002532 seconds, Stopping threads took: 0.0000445 seconds +2021-01-27T13:27:06.315+0000: 635.032: Total time for which application threads were stopped: 0.0001775 seconds, Stopping threads took: 0.0000581 seconds +2021-01-27T13:27:06.337+0000: 635.054: Total time for which application threads were stopped: 0.0005807 seconds, Stopping threads took: 0.0000394 seconds +2021-01-27T13:27:06.338+0000: 635.055: Total time for which application threads were stopped: 0.0006363 seconds, Stopping threads took: 0.0000182 seconds +2021-01-27T13:27:06.338+0000: 635.055: Total time for which application threads were stopped: 0.0001874 seconds, Stopping threads took: 0.0000209 seconds +2021-01-27T13:27:06.340+0000: 635.057: Total time for which application threads were stopped: 0.0004663 seconds, Stopping threads took: 0.0003646 seconds +2021-01-27T13:27:06.348+0000: 635.065: Total time for which application threads were stopped: 0.0002039 seconds, Stopping threads took: 0.0000766 seconds +2021-01-27T13:27:06.407+0000: 635.124: Total time for which application threads were stopped: 0.0002153 seconds, Stopping threads took: 0.0000453 seconds +2021-01-27T13:27:06.407+0000: 635.124: Total time for which application threads were stopped: 0.0002178 seconds, Stopping threads took: 0.0000223 seconds +2021-01-27T13:27:06.414+0000: 635.131: Total time for which application threads were stopped: 0.0002782 seconds, Stopping threads took: 0.0001469 seconds +2021-01-27T13:27:06.415+0000: 635.132: Total time for which application threads were stopped: 0.0001058 seconds, Stopping threads took: 0.0000195 seconds +2021-01-27T13:27:06.415+0000: 635.132: Total time for which application threads were stopped: 0.0000960 seconds, Stopping threads took: 0.0000174 seconds +2021-01-27T13:27:06.415+0000: 635.132: Total time for which application threads were stopped: 0.0001368 seconds, Stopping threads took: 0.0000185 seconds +2021-01-27T13:27:06.416+0000: 635.133: Total time for which application threads were stopped: 0.0001025 seconds, Stopping threads took: 0.0000187 seconds +2021-01-27T13:27:06.418+0000: 635.135: Total time for which application threads were stopped: 0.0001377 seconds, Stopping threads took: 0.0000445 seconds +2021-01-27T13:27:06.418+0000: 635.135: Total time for which application threads were stopped: 0.0001363 seconds, Stopping threads took: 0.0000172 seconds +2021-01-27T13:27:06.419+0000: 635.136: Total time for which application threads were stopped: 0.0002444 seconds, Stopping threads took: 0.0000222 seconds +2021-01-27T13:27:06.419+0000: 635.136: Total time for which application threads were stopped: 0.0001080 seconds, Stopping threads took: 0.0000163 seconds +2021-01-27T13:27:06.419+0000: 635.136: Total time for which application threads were stopped: 0.0001427 seconds, Stopping threads took: 0.0000163 seconds +2021-01-27T13:27:06.419+0000: 635.137: Total time for which application threads were stopped: 0.0001128 seconds, Stopping threads took: 0.0000160 seconds +2021-01-27T13:27:06.420+0000: 635.137: Total time for which application threads were stopped: 0.0001087 seconds, Stopping threads took: 0.0000158 seconds +2021-01-27T13:27:06.421+0000: 635.138: Total time for which application threads were stopped: 0.0001534 seconds, Stopping threads took: 0.0000199 seconds +2021-01-27T13:27:06.421+0000: 635.138: Total time for which application threads were stopped: 0.0000849 seconds, Stopping threads took: 0.0000156 seconds +2021-01-27T13:27:06.421+0000: 635.139: Total time for which application threads were stopped: 0.0000832 seconds, Stopping threads took: 0.0000153 seconds +2021-01-27T13:27:06.425+0000: 635.142: Total time for which application threads were stopped: 0.0001109 seconds, Stopping threads took: 0.0000232 seconds +2021-01-27T13:27:06.425+0000: 635.142: Total time for which application threads were stopped: 0.0001057 seconds, Stopping threads took: 0.0000215 seconds +2021-01-27T13:27:06.425+0000: 635.142: Total time for which application threads were stopped: 0.0000909 seconds, Stopping threads took: 0.0000158 seconds +2021-01-27T13:27:06.425+0000: 635.143: Total time for which application threads were stopped: 0.0000855 seconds, Stopping threads took: 0.0000159 seconds +2021-01-27T13:27:06.426+0000: 635.144: Total time for which application threads were stopped: 0.0003126 seconds, Stopping threads took: 0.0000161 seconds +2021-01-27T13:27:06.442+0000: 635.160: Total time for which application threads were stopped: 0.0004048 seconds, Stopping threads took: 0.0002913 seconds +2021-01-27T13:27:06.443+0000: 635.160: Total time for which application threads were stopped: 0.0004596 seconds, Stopping threads took: 0.0003416 seconds +2021-01-27T13:27:06.444+0000: 635.161: Total time for which application threads were stopped: 0.0004903 seconds, Stopping threads took: 0.0003818 seconds +2021-01-27T13:27:06.444+0000: 635.162: Total time for which application threads were stopped: 0.0003584 seconds, Stopping threads took: 0.0002519 seconds +2021-01-27T13:27:06.445+0000: 635.162: Total time for which application threads were stopped: 0.0003522 seconds, Stopping threads took: 0.0002806 seconds +2021-01-27T13:27:06.446+0000: 635.163: Total time for which application threads were stopped: 0.0004269 seconds, Stopping threads took: 0.0003499 seconds +2021-01-27T13:27:06.447+0000: 635.164: Total time for which application threads were stopped: 0.0002870 seconds, Stopping threads took: 0.0001990 seconds +2021-01-27T13:27:06.447+0000: 635.164: Total time for which application threads were stopped: 0.0002650 seconds, Stopping threads took: 0.0001637 seconds +2021-01-27T13:27:06.448+0000: 635.165: Total time for which application threads were stopped: 0.0002191 seconds, Stopping threads took: 0.0001491 seconds +2021-01-27T13:27:06.448+0000: 635.165: Total time for which application threads were stopped: 0.0002366 seconds, Stopping threads took: 0.0001528 seconds +2021-01-27T13:27:06.450+0000: 635.167: Total time for which application threads were stopped: 0.0012867 seconds, Stopping threads took: 0.0002524 seconds +2021-01-27T13:27:06.450+0000: 635.167: Total time for which application threads were stopped: 0.0000932 seconds, Stopping threads took: 0.0000176 seconds +2021-01-27T13:27:06.450+0000: 635.168: Total time for which application threads were stopped: 0.0000910 seconds, Stopping threads took: 0.0000168 seconds +2021-01-27T13:27:06.451+0000: 635.169: Total time for which application threads were stopped: 0.0003214 seconds, Stopping threads took: 0.0002394 seconds +2021-01-27T13:27:06.452+0000: 635.169: Total time for which application threads were stopped: 0.0002833 seconds, Stopping threads took: 0.0001984 seconds +2021-01-27T13:27:06.452+0000: 635.170: Total time for which application threads were stopped: 0.0002611 seconds, Stopping threads took: 0.0001328 seconds +2021-01-27T13:27:06.453+0000: 635.170: Total time for which application threads were stopped: 0.0001710 seconds, Stopping threads took: 0.0000876 seconds +2021-01-27T13:27:06.453+0000: 635.170: Total time for which application threads were stopped: 0.0001270 seconds, Stopping threads took: 0.0000459 seconds +2021-01-27T13:27:06.454+0000: 635.171: Total time for which application threads were stopped: 0.0002370 seconds, Stopping threads took: 0.0001535 seconds +2021-01-27T13:27:06.454+0000: 635.172: Total time for which application threads were stopped: 0.0004742 seconds, Stopping threads took: 0.0001533 seconds +2021-01-27T13:27:06.505+0000: 635.223: Total time for which application threads were stopped: 0.0003476 seconds, Stopping threads took: 0.0001613 seconds +2021-01-27T13:27:06.506+0000: 635.223: Total time for which application threads were stopped: 0.0002704 seconds, Stopping threads took: 0.0001365 seconds +2021-01-27T13:27:06.593+0000: 635.311: Total time for which application threads were stopped: 0.0004204 seconds, Stopping threads took: 0.0001625 seconds +2021-01-27T13:27:06.648+0000: 635.366: Total time for which application threads were stopped: 0.0013832 seconds, Stopping threads took: 0.0000579 seconds +2021-01-27T13:27:09.649+0000: 638.366: Total time for which application threads were stopped: 0.0002267 seconds, Stopping threads took: 0.0000484 seconds +2021-01-27T13:27:10.651+0000: 639.368: Total time for which application threads were stopped: 0.0002817 seconds, Stopping threads took: 0.0000740 seconds +2021-01-27T13:27:11.316+0000: 640.034: Total time for which application threads were stopped: 0.0002444 seconds, Stopping threads took: 0.0000522 seconds +2021-01-27T13:27:11.649+0000: 640.366: Total time for which application threads were stopped: 0.0003406 seconds, Stopping threads took: 0.0000675 seconds +2021-01-27T13:27:11.649+0000: 640.366: Total time for which application threads were stopped: 0.0001720 seconds, Stopping threads took: 0.0000204 seconds +2021-01-27T13:27:13.418+0000: 642.136: Total time for which application threads were stopped: 0.0002671 seconds, Stopping threads took: 0.0000517 seconds +2021-01-27T13:27:14.083+0000: 642.801: Total time for which application threads were stopped: 0.0002234 seconds, Stopping threads took: 0.0000551 seconds +2021-01-27T13:27:16.084+0000: 644.802: Total time for which application threads were stopped: 0.0002939 seconds, Stopping threads took: 0.0001287 seconds +2021-01-27T13:27:16.650+0000: 645.367: Total time for which application threads were stopped: 0.0002634 seconds, Stopping threads took: 0.0000664 seconds +2021-01-27T13:27:16.652+0000: 645.369: Total time for which application threads were stopped: 0.0002137 seconds, Stopping threads took: 0.0000464 seconds +2021-01-27T13:27:16.654+0000: 645.371: Total time for which application threads were stopped: 0.0001776 seconds, Stopping threads took: 0.0000364 seconds +2021-01-27T13:27:20.655+0000: 649.373: Total time for which application threads were stopped: 0.0004348 seconds, Stopping threads took: 0.0000726 seconds +2021-01-27T13:27:25.658+0000: 654.375: Total time for which application threads were stopped: 0.0003753 seconds, Stopping threads took: 0.0000719 seconds +2021-01-27T13:27:30.661+0000: 659.378: Total time for which application threads were stopped: 0.0002177 seconds, Stopping threads took: 0.0000701 seconds +2021-01-27T13:27:31.049+0000: 659.766: Total time for which application threads were stopped: 0.0005050 seconds, Stopping threads took: 0.0002892 seconds +2021-01-27T13:27:31.050+0000: 659.768: Total time for which application threads were stopped: 0.0005664 seconds, Stopping threads took: 0.0004458 seconds +2021-01-27T13:27:36.053+0000: 664.770: Total time for which application threads were stopped: 0.0004600 seconds, Stopping threads took: 0.0000849 seconds +2021-01-27T13:27:39.055+0000: 667.772: Total time for which application threads were stopped: 0.0003200 seconds, Stopping threads took: 0.0000724 seconds +2021-01-27T13:27:42.058+0000: 670.775: Total time for which application threads were stopped: 0.0006327 seconds, Stopping threads took: 0.0003060 seconds +2021-01-27T13:27:46.061+0000: 674.778: Total time for which application threads were stopped: 0.0004806 seconds, Stopping threads took: 0.0000926 seconds +2021-01-27T13:27:50.063+0000: 678.780: Total time for which application threads were stopped: 0.0003660 seconds, Stopping threads took: 0.0000918 seconds +2021-01-27T13:27:55.068+0000: 683.785: Total time for which application threads were stopped: 0.0005458 seconds, Stopping threads took: 0.0001151 seconds +2021-01-27T13:28:01.164+0000: 689.881: Total time for which application threads were stopped: 0.0004814 seconds, Stopping threads took: 0.0000819 seconds +2021-01-27T13:28:01.166+0000: 689.883: Total time for which application threads were stopped: 0.0023453 seconds, Stopping threads took: 0.0020290 seconds +2021-01-27T13:28:05.171+0000: 693.888: Total time for which application threads were stopped: 0.0002912 seconds, Stopping threads took: 0.0000762 seconds +2021-01-27T13:28:06.171+0000: 694.888: Total time for which application threads were stopped: 0.0001833 seconds, Stopping threads took: 0.0000477 seconds +2021-01-27T13:28:06.629+0000: 695.346: Total time for which application threads were stopped: 0.0008069 seconds, Stopping threads took: 0.0005628 seconds +2021-01-27T13:28:08.626+0000: 697.343: Total time for which application threads were stopped: 0.0005822 seconds, Stopping threads took: 0.0003196 seconds +2021-01-27T13:28:09.627+0000: 698.344: Total time for which application threads were stopped: 0.0003391 seconds, Stopping threads took: 0.0001299 seconds +2021-01-27T13:28:11.629+0000: 700.346: Total time for which application threads were stopped: 0.0011271 seconds, Stopping threads took: 0.0007033 seconds +2021-01-27T13:28:15.300+0000: 704.017: Total time for which application threads were stopped: 0.0011314 seconds, Stopping threads took: 0.0007073 seconds +2021-01-27T13:28:16.302+0000: 705.019: Total time for which application threads were stopped: 0.0002914 seconds, Stopping threads took: 0.0000736 seconds +2021-01-27T13:28:22.305+0000: 711.022: Total time for which application threads were stopped: 0.0004246 seconds, Stopping threads took: 0.0000762 seconds +2021-01-27T13:28:22.664+0000: 711.381: Total time for which application threads were stopped: 0.0006226 seconds, Stopping threads took: 0.0003099 seconds +2021-01-27T13:28:28.722+0000: 717.439: Total time for which application threads were stopped: 0.0007360 seconds, Stopping threads took: 0.0004852 seconds +2021-01-27T13:28:29.723+0000: 718.440: Total time for which application threads were stopped: 0.0002999 seconds, Stopping threads took: 0.0001407 seconds +2021-01-27T13:28:30.724+0000: 719.441: Total time for which application threads were stopped: 0.0002638 seconds, Stopping threads took: 0.0000654 seconds +2021-01-27T13:28:31.307+0000: 720.024: Total time for which application threads were stopped: 0.0002250 seconds, Stopping threads took: 0.0000694 seconds +2021-01-27T13:28:31.309+0000: 720.026: Total time for which application threads were stopped: 0.0001458 seconds, Stopping threads took: 0.0000279 seconds +2021-01-27T13:28:40.313+0000: 729.030: Total time for which application threads were stopped: 0.0012011 seconds, Stopping threads took: 0.0008691 seconds +2021-01-27T13:28:41.314+0000: 730.031: Total time for which application threads were stopped: 0.0003635 seconds, Stopping threads took: 0.0000903 seconds +2021-01-27T13:28:45.316+0000: 734.033: Total time for which application threads were stopped: 0.0008959 seconds, Stopping threads took: 0.0006143 seconds +2021-01-27T13:28:46.317+0000: 735.034: Total time for which application threads were stopped: 0.0003290 seconds, Stopping threads took: 0.0000742 seconds +2021-01-27T13:28:50.319+0000: 739.036: Total time for which application threads were stopped: 0.0002550 seconds, Stopping threads took: 0.0000643 seconds +2021-01-27T13:28:55.322+0000: 744.039: Total time for which application threads were stopped: 0.0003433 seconds, Stopping threads took: 0.0000747 seconds +2021-01-27T13:29:01.412+0000: 750.129: Total time for which application threads were stopped: 0.0001686 seconds, Stopping threads took: 0.0000404 seconds +2021-01-27T13:29:01.412+0000: 750.129: Total time for which application threads were stopped: 0.0001023 seconds, Stopping threads took: 0.0000175 seconds +2021-01-27T13:29:04.413+0000: 753.130: Total time for which application threads were stopped: 0.0002057 seconds, Stopping threads took: 0.0000639 seconds +2021-01-27T13:29:09.416+0000: 758.133: Total time for which application threads were stopped: 0.0002649 seconds, Stopping threads took: 0.0000580 seconds +2021-01-27T13:29:14.418+0000: 763.135: Total time for which application threads were stopped: 0.0002321 seconds, Stopping threads took: 0.0000543 seconds +2021-01-27T13:29:19.420+0000: 768.137: Total time for which application threads were stopped: 0.0002258 seconds, Stopping threads took: 0.0000556 seconds +2021-01-27T13:29:26.422+0000: 775.139: Total time for which application threads were stopped: 0.0002816 seconds, Stopping threads took: 0.0000975 seconds +2021-01-27T13:29:30.427+0000: 779.144: Total time for which application threads were stopped: 0.0002397 seconds, Stopping threads took: 0.0000647 seconds +2021-01-27T13:29:38.431+0000: 787.147: Total time for which application threads were stopped: 0.0002391 seconds, Stopping threads took: 0.0000626 seconds +2021-01-27T13:29:45.434+0000: 794.151: Total time for which application threads were stopped: 0.0002005 seconds, Stopping threads took: 0.0000482 seconds +2021-01-27T13:29:47.435+0000: 796.152: Total time for which application threads were stopped: 0.0002977 seconds, Stopping threads took: 0.0000714 seconds +2021-01-27T13:29:50.436+0000: 799.153: Total time for which application threads were stopped: 0.0003329 seconds, Stopping threads took: 0.0000659 seconds +2021-01-27T13:29:56.437+0000: 805.154: Total time for which application threads were stopped: 0.0002249 seconds, Stopping threads took: 0.0000504 seconds +2021-01-27T13:29:59.438+0000: 808.155: Total time for which application threads were stopped: 0.0002134 seconds, Stopping threads took: 0.0000556 seconds +2021-01-27T13:30:01.626+0000: 810.343: Total time for which application threads were stopped: 0.0001782 seconds, Stopping threads took: 0.0000486 seconds +2021-01-27T13:30:01.626+0000: 810.343: Total time for which application threads were stopped: 0.0001169 seconds, Stopping threads took: 0.0000209 seconds +2021-01-27T13:30:10.632+0000: 819.349: Total time for which application threads were stopped: 0.0005558 seconds, Stopping threads took: 0.0002402 seconds +2021-01-27T13:30:15.633+0000: 824.350: Total time for which application threads were stopped: 0.0002369 seconds, Stopping threads took: 0.0000610 seconds +2021-01-27T13:30:20.635+0000: 829.352: Total time for which application threads were stopped: 0.0003147 seconds, Stopping threads took: 0.0000772 seconds +2021-01-27T13:30:25.636+0000: 834.353: Total time for which application threads were stopped: 0.0003659 seconds, Stopping threads took: 0.0000585 seconds +2021-01-27T13:30:30.639+0000: 839.356: Total time for which application threads were stopped: 0.0002328 seconds, Stopping threads took: 0.0000606 seconds +2021-01-27T13:30:31.708+0000: 840.425: Total time for which application threads were stopped: 0.0001627 seconds, Stopping threads took: 0.0000388 seconds +2021-01-27T13:30:31.709+0000: 840.425: Total time for which application threads were stopped: 0.0002321 seconds, Stopping threads took: 0.0000782 seconds +2021-01-27T13:30:32.710+0000: 841.427: Total time for which application threads were stopped: 0.0002533 seconds, Stopping threads took: 0.0001091 seconds +2021-01-27T13:30:35.711+0000: 844.428: Total time for which application threads were stopped: 0.0002648 seconds, Stopping threads took: 0.0000872 seconds +2021-01-27T13:30:40.305+0000: 849.022: [GC (Allocation Failure) 2021-01-27T13:30:40.306+0000: 849.023: [ParNew +Desired survivor size 8945664 bytes, new threshold 6 (max 6) +- age 1: 2170448 bytes, 2170448 total +- age 2: 708576 bytes, 2879024 total +- age 3: 718680 bytes, 3597704 total +- age 4: 1056168 bytes, 4653872 total +: 144169K->6105K(157248K), 0.0175869 secs] 253254K->115190K(506816K), 0.0219675 secs] [Times: user=0.03 sys=0.00, real=0.02 secs] +2021-01-27T13:30:40.330+0000: 849.047: Total time for which application threads were stopped: 0.0263483 seconds, Stopping threads took: 0.0004263 seconds +2021-01-27T13:30:41.331+0000: 850.048: Total time for which application threads were stopped: 0.0002064 seconds, Stopping threads took: 0.0000563 seconds +2021-01-27T13:30:42.332+0000: 851.049: Total time for which application threads were stopped: 0.0002866 seconds, Stopping threads took: 0.0000584 seconds +2021-01-27T13:30:46.334+0000: 855.051: Total time for which application threads were stopped: 0.0004505 seconds, Stopping threads took: 0.0000895 seconds +2021-01-27T13:30:47.901+0000: 856.618: Total time for which application threads were stopped: 0.0003537 seconds, Stopping threads took: 0.0001731 seconds +2021-01-27T13:30:47.902+0000: 856.619: Total time for which application threads were stopped: 0.0006227 seconds, Stopping threads took: 0.0001561 seconds +2021-01-27T13:30:48.903+0000: 857.620: Total time for which application threads were stopped: 0.0004365 seconds, Stopping threads took: 0.0001077 seconds +2021-01-27T13:30:56.034+0000: 864.751: Total time for which application threads were stopped: 0.0004835 seconds, Stopping threads took: 0.0002379 seconds +2021-01-27T13:30:56.034+0000: 864.751: Total time for which application threads were stopped: 0.0002011 seconds, Stopping threads took: 0.0000426 seconds +2021-01-27T13:30:57.035+0000: 865.752: Total time for which application threads were stopped: 0.0002836 seconds, Stopping threads took: 0.0000529 seconds +2021-01-27T13:31:00.036+0000: 868.753: Total time for which application threads were stopped: 0.0002118 seconds, Stopping threads took: 0.0000558 seconds +2021-01-27T13:31:01.818+0000: 870.535: Total time for which application threads were stopped: 0.0002823 seconds, Stopping threads took: 0.0000503 seconds +2021-01-27T13:31:01.819+0000: 870.536: Total time for which application threads were stopped: 0.0002399 seconds, Stopping threads took: 0.0000829 seconds +2021-01-27T13:31:03.820+0000: 872.537: Total time for which application threads were stopped: 0.0003623 seconds, Stopping threads took: 0.0000914 seconds +2021-01-27T13:31:05.823+0000: 874.540: Total time for which application threads were stopped: 0.0002973 seconds, Stopping threads took: 0.0001034 seconds +2021-01-27T13:31:06.825+0000: 875.542: Total time for which application threads were stopped: 0.0004192 seconds, Stopping threads took: 0.0000910 seconds +2021-01-27T13:31:10.832+0000: 879.549: Total time for which application threads were stopped: 0.0005416 seconds, Stopping threads took: 0.0002355 seconds +2021-01-27T13:31:12.835+0000: 881.551: Total time for which application threads were stopped: 0.0004373 seconds, Stopping threads took: 0.0001072 seconds +2021-01-27T13:31:14.836+0000: 883.553: Total time for which application threads were stopped: 0.0002355 seconds, Stopping threads took: 0.0000632 seconds +2021-01-27T13:31:19.840+0000: 888.557: Total time for which application threads were stopped: 0.0004727 seconds, Stopping threads took: 0.0002027 seconds +2021-01-27T13:31:20.840+0000: 889.557: Total time for which application threads were stopped: 0.0002156 seconds, Stopping threads took: 0.0000628 seconds +2021-01-27T13:31:25.843+0000: 894.560: Total time for which application threads were stopped: 0.0002777 seconds, Stopping threads took: 0.0000731 seconds +2021-01-27T13:31:26.844+0000: 895.561: Total time for which application threads were stopped: 0.0003634 seconds, Stopping threads took: 0.0000917 seconds +2021-01-27T13:31:30.847+0000: 899.564: Total time for which application threads were stopped: 0.0001996 seconds, Stopping threads took: 0.0000493 seconds +2021-01-27T13:31:31.908+0000: 900.625: Total time for which application threads were stopped: 0.0001647 seconds, Stopping threads took: 0.0000384 seconds +2021-01-27T13:31:31.911+0000: 900.628: Total time for which application threads were stopped: 0.0025309 seconds, Stopping threads took: 0.0023892 seconds +2021-01-27T13:31:32.912+0000: 901.629: Total time for which application threads were stopped: 0.0003916 seconds, Stopping threads took: 0.0000906 seconds +2021-01-27T13:31:36.915+0000: 905.631: Total time for which application threads were stopped: 0.0002985 seconds, Stopping threads took: 0.0000936 seconds +2021-01-27T13:31:40.920+0000: 909.636: Total time for which application threads were stopped: 0.0002488 seconds, Stopping threads took: 0.0000508 seconds +2021-01-27T13:31:46.921+0000: 915.638: Total time for which application threads were stopped: 0.0002891 seconds, Stopping threads took: 0.0000725 seconds +2021-01-27T13:31:49.922+0000: 918.639: Total time for which application threads were stopped: 0.0002951 seconds, Stopping threads took: 0.0000703 seconds +2021-01-27T13:31:54.925+0000: 923.642: Total time for which application threads were stopped: 0.0003956 seconds, Stopping threads took: 0.0000919 seconds +2021-01-27T13:32:00.929+0000: 929.645: Total time for which application threads were stopped: 0.0010824 seconds, Stopping threads took: 0.0000677 seconds +2021-01-27T13:32:06.931+0000: 935.647: Total time for which application threads were stopped: 0.0005094 seconds, Stopping threads took: 0.0002430 seconds +2021-01-27T13:32:10.933+0000: 939.649: Total time for which application threads were stopped: 0.0002724 seconds, Stopping threads took: 0.0000712 seconds +2021-01-27T13:32:15.942+0000: 944.659: Total time for which application threads were stopped: 0.0003419 seconds, Stopping threads took: 0.0001049 seconds +2021-01-27T13:32:20.945+0000: 949.662: Total time for which application threads were stopped: 0.0004683 seconds, Stopping threads took: 0.0003053 seconds +2021-01-27T13:32:25.948+0000: 954.664: Total time for which application threads were stopped: 0.0002286 seconds, Stopping threads took: 0.0000528 seconds +2021-01-27T13:32:32.121+0000: 960.837: Total time for which application threads were stopped: 0.0001865 seconds, Stopping threads took: 0.0000456 seconds +2021-01-27T13:32:32.121+0000: 960.838: Total time for which application threads were stopped: 0.0004860 seconds, Stopping threads took: 0.0003741 seconds +2021-01-27T13:32:51.133+0000: 979.849: Total time for which application threads were stopped: 0.0003006 seconds, Stopping threads took: 0.0000897 seconds +2021-01-27T13:32:56.134+0000: 984.851: Total time for which application threads were stopped: 0.0002195 seconds, Stopping threads took: 0.0000595 seconds +2021-01-27T13:33:01.140+0000: 989.857: Total time for which application threads were stopped: 0.0004688 seconds, Stopping threads took: 0.0000953 seconds +2021-01-27T13:33:02.230+0000: 990.947: Total time for which application threads were stopped: 0.0001742 seconds, Stopping threads took: 0.0000456 seconds +2021-01-27T13:33:02.231+0000: 990.948: Total time for which application threads were stopped: 0.0001601 seconds, Stopping threads took: 0.0000253 seconds +2021-01-27T13:33:03.232+0000: 991.948: Total time for which application threads were stopped: 0.0002687 seconds, Stopping threads took: 0.0000683 seconds +2021-01-27T13:33:06.232+0000: 994.949: Total time for which application threads were stopped: 0.0002276 seconds, Stopping threads took: 0.0000449 seconds +2021-01-27T13:33:10.233+0000: 998.950: Total time for which application threads were stopped: 0.0002563 seconds, Stopping threads took: 0.0000904 seconds +2021-01-27T13:33:12.234+0000: 1000.951: Total time for which application threads were stopped: 0.0006330 seconds, Stopping threads took: 0.0000922 seconds +2021-01-27T13:33:21.244+0000: 1009.960: Total time for which application threads were stopped: 0.0003073 seconds, Stopping threads took: 0.0000726 seconds +2021-01-27T13:33:26.247+0000: 1014.964: Total time for which application threads were stopped: 0.0003643 seconds, Stopping threads took: 0.0000714 seconds +2021-01-27T13:33:32.341+0000: 1021.057: Total time for which application threads were stopped: 0.0001759 seconds, Stopping threads took: 0.0000412 seconds +2021-01-27T13:33:32.341+0000: 1021.058: Total time for which application threads were stopped: 0.0001246 seconds, Stopping threads took: 0.0000214 seconds +2021-01-27T13:33:33.342+0000: 1022.059: Total time for which application threads were stopped: 0.0004118 seconds, Stopping threads took: 0.0002032 seconds +2021-01-27T13:33:36.344+0000: 1025.060: Total time for which application threads were stopped: 0.0002855 seconds, Stopping threads took: 0.0000729 seconds +2021-01-27T13:33:40.346+0000: 1029.062: Total time for which application threads were stopped: 0.0003115 seconds, Stopping threads took: 0.0000992 seconds +2021-01-27T13:33:42.348+0000: 1031.065: Total time for which application threads were stopped: 0.0003861 seconds, Stopping threads took: 0.0000775 seconds +2021-01-27T13:33:45.349+0000: 1034.066: Total time for which application threads were stopped: 0.0004892 seconds, Stopping threads took: 0.0000892 seconds +2021-01-27T13:33:46.350+0000: 1035.066: Total time for which application threads were stopped: 0.0002510 seconds, Stopping threads took: 0.0000658 seconds +2021-01-27T13:33:51.353+0000: 1040.069: Total time for which application threads were stopped: 0.0002825 seconds, Stopping threads took: 0.0000922 seconds +2021-01-27T13:33:59.357+0000: 1048.073: Total time for which application threads were stopped: 0.0006141 seconds, Stopping threads took: 0.0002145 seconds +2021-01-27T13:34:02.428+0000: 1051.144: Total time for which application threads were stopped: 0.0002375 seconds, Stopping threads took: 0.0001093 seconds +2021-01-27T13:34:02.428+0000: 1051.145: Total time for which application threads were stopped: 0.0003886 seconds, Stopping threads took: 0.0001937 seconds +2021-01-27T13:34:03.430+0000: 1052.147: Total time for which application threads were stopped: 0.0004882 seconds, Stopping threads took: 0.0000836 seconds +2021-01-27T13:34:05.431+0000: 1054.148: Total time for which application threads were stopped: 0.0003745 seconds, Stopping threads took: 0.0001778 seconds +2021-01-27T13:34:08.433+0000: 1057.149: Total time for which application threads were stopped: 0.0002654 seconds, Stopping threads took: 0.0000687 seconds +2021-01-27T13:34:10.436+0000: 1059.152: Total time for which application threads were stopped: 0.0006516 seconds, Stopping threads took: 0.0002770 seconds +2021-01-27T13:34:12.436+0000: 1061.153: Total time for which application threads were stopped: 0.0001998 seconds, Stopping threads took: 0.0000591 seconds +2021-01-27T13:34:19.438+0000: 1068.155: Total time for which application threads were stopped: 0.0002861 seconds, Stopping threads took: 0.0000761 seconds +2021-01-27T13:34:24.441+0000: 1073.157: Total time for which application threads were stopped: 0.0002826 seconds, Stopping threads took: 0.0000756 seconds +2021-01-27T13:34:32.546+0000: 1081.263: Total time for which application threads were stopped: 0.0002507 seconds, Stopping threads took: 0.0000450 seconds +2021-01-27T13:34:32.547+0000: 1081.263: Total time for which application threads were stopped: 0.0001361 seconds, Stopping threads took: 0.0000236 seconds +2021-01-27T13:34:33.549+0000: 1082.265: Total time for which application threads were stopped: 0.0004812 seconds, Stopping threads took: 0.0001796 seconds +2021-01-27T13:34:36.551+0000: 1085.267: Total time for which application threads were stopped: 0.0005712 seconds, Stopping threads took: 0.0002205 seconds +2021-01-27T13:34:40.555+0000: 1089.271: Total time for which application threads were stopped: 0.0003444 seconds, Stopping threads took: 0.0000936 seconds +2021-01-27T13:34:46.558+0000: 1095.275: Total time for which application threads were stopped: 0.0005755 seconds, Stopping threads took: 0.0000997 seconds +2021-01-27T13:34:51.455+0000: 1100.171: [GC (Allocation Failure) 2021-01-27T13:34:51.456+0000: 1100.172: [ParNew +Desired survivor size 8945664 bytes, new threshold 6 (max 6) +- age 1: 4740960 bytes, 4740960 total +- age 2: 1619848 bytes, 6360808 total +- age 3: 673448 bytes, 7034256 total +- age 4: 717544 bytes, 7751800 total +- age 5: 1054992 bytes, 8806792 total +: 141859K->10183K(157248K), 0.0129961 secs] 250944K->119268K(506816K), 0.0155284 secs] [Times: user=0.03 sys=0.00, real=0.01 secs] +2021-01-27T13:34:51.472+0000: 1100.188: Total time for which application threads were stopped: 0.0173280 seconds, Stopping threads took: 0.0001308 seconds +2021-01-27T13:35:00.477+0000: 1109.193: Total time for which application threads were stopped: 0.0002728 seconds, Stopping threads took: 0.0000730 seconds +2021-01-27T13:35:02.635+0000: 1111.351: Total time for which application threads were stopped: 0.0001848 seconds, Stopping threads took: 0.0000416 seconds +2021-01-27T13:35:02.635+0000: 1111.351: Total time for which application threads were stopped: 0.0001296 seconds, Stopping threads took: 0.0000166 seconds +2021-01-27T13:35:10.638+0000: 1119.355: Total time for which application threads were stopped: 0.0001927 seconds, Stopping threads took: 0.0000508 seconds +2021-01-27T13:35:11.639+0000: 1120.355: Total time for which application threads were stopped: 0.0002333 seconds, Stopping threads took: 0.0000559 seconds +2021-01-27T13:35:15.641+0000: 1124.357: Total time for which application threads were stopped: 0.0002426 seconds, Stopping threads took: 0.0000597 seconds +2021-01-27T13:35:21.649+0000: 1130.365: Total time for which application threads were stopped: 0.0003155 seconds, Stopping threads took: 0.0001042 seconds +2021-01-27T13:35:25.650+0000: 1134.366: Total time for which application threads were stopped: 0.0003454 seconds, Stopping threads took: 0.0001072 seconds +2021-01-27T13:35:29.653+0000: 1138.369: Total time for which application threads were stopped: 0.0003753 seconds, Stopping threads took: 0.0000899 seconds +2021-01-27T13:35:32.736+0000: 1141.452: Total time for which application threads were stopped: 0.0001816 seconds, Stopping threads took: 0.0000424 seconds +2021-01-27T13:35:32.737+0000: 1141.453: Total time for which application threads were stopped: 0.0001221 seconds, Stopping threads took: 0.0000217 seconds +2021-01-27T13:35:36.739+0000: 1145.455: Total time for which application threads were stopped: 0.0003728 seconds, Stopping threads took: 0.0000935 seconds +2021-01-27T13:35:40.741+0000: 1149.457: Total time for which application threads were stopped: 0.0004991 seconds, Stopping threads took: 0.0002326 seconds +2021-01-27T13:35:46.750+0000: 1155.467: Total time for which application threads were stopped: 0.0002724 seconds, Stopping threads took: 0.0000656 seconds +2021-01-27T13:35:49.751+0000: 1158.468: Total time for which application threads were stopped: 0.0004728 seconds, Stopping threads took: 0.0002400 seconds +2021-01-27T13:35:55.756+0000: 1164.473: Total time for which application threads were stopped: 0.0005607 seconds, Stopping threads took: 0.0001355 seconds +2021-01-27T13:36:01.760+0000: 1170.476: Total time for which application threads were stopped: 0.0003994 seconds, Stopping threads took: 0.0000875 seconds +2021-01-27T13:36:04.761+0000: 1173.478: Total time for which application threads were stopped: 0.0004691 seconds, Stopping threads took: 0.0000941 seconds +2021-01-27T13:36:10.765+0000: 1179.481: Total time for which application threads were stopped: 0.0002790 seconds, Stopping threads took: 0.0000696 seconds +2021-01-27T13:36:11.766+0000: 1180.483: Total time for which application threads were stopped: 0.0004349 seconds, Stopping threads took: 0.0000882 seconds +2021-01-27T13:36:20.770+0000: 1189.486: Total time for which application threads were stopped: 0.0002868 seconds, Stopping threads took: 0.0000714 seconds +2021-01-27T13:36:25.772+0000: 1194.488: Total time for which application threads were stopped: 0.0002685 seconds, Stopping threads took: 0.0000917 seconds +2021-01-27T13:36:31.775+0000: 1200.491: Total time for which application threads were stopped: 0.0002146 seconds, Stopping threads took: 0.0000520 seconds +2021-01-27T13:36:32.935+0000: 1201.652: Total time for which application threads were stopped: 0.0003034 seconds, Stopping threads took: 0.0000665 seconds +2021-01-27T13:36:32.936+0000: 1201.652: Total time for which application threads were stopped: 0.0001612 seconds, Stopping threads took: 0.0000183 seconds +2021-01-27T13:36:34.937+0000: 1203.653: Total time for which application threads were stopped: 0.0003222 seconds, Stopping threads took: 0.0001164 seconds +2021-01-27T13:36:40.939+0000: 1209.655: Total time for which application threads were stopped: 0.0003913 seconds, Stopping threads took: 0.0000612 seconds +2021-01-27T13:36:44.948+0000: 1213.664: Total time for which application threads were stopped: 0.0002084 seconds, Stopping threads took: 0.0000565 seconds +2021-01-27T13:36:50.953+0000: 1219.669: Total time for which application threads were stopped: 0.0002358 seconds, Stopping threads took: 0.0000592 seconds +2021-01-27T13:36:52.956+0000: 1221.672: Total time for which application threads were stopped: 0.0003908 seconds, Stopping threads took: 0.0000901 seconds +2021-01-27T13:37:01.959+0000: 1230.675: Total time for which application threads were stopped: 0.0004152 seconds, Stopping threads took: 0.0000860 seconds +2021-01-27T13:37:03.040+0000: 1231.757: Total time for which application threads were stopped: 0.0002317 seconds, Stopping threads took: 0.0000490 seconds +2021-01-27T13:37:03.041+0000: 1231.757: Total time for which application threads were stopped: 0.0001212 seconds, Stopping threads took: 0.0000224 seconds +2021-01-27T13:37:05.044+0000: 1233.760: Total time for which application threads were stopped: 0.0002816 seconds, Stopping threads took: 0.0000563 seconds +2021-01-27T13:37:11.049+0000: 1239.765: Total time for which application threads were stopped: 0.0004308 seconds, Stopping threads took: 0.0000923 seconds +2021-01-27T13:37:16.051+0000: 1244.767: Total time for which application threads were stopped: 0.0002301 seconds, Stopping threads took: 0.0000498 seconds +2021-01-27T13:37:21.053+0000: 1249.769: Total time for which application threads were stopped: 0.0004629 seconds, Stopping threads took: 0.0000866 seconds +2021-01-27T13:37:33.145+0000: 1261.861: Total time for which application threads were stopped: 0.0003089 seconds, Stopping threads took: 0.0000977 seconds +2021-01-27T13:37:33.146+0000: 1261.862: Total time for which application threads were stopped: 0.0002682 seconds, Stopping threads took: 0.0000337 seconds +2021-01-27T13:37:46.150+0000: 1274.866: Total time for which application threads were stopped: 0.0002237 seconds, Stopping threads took: 0.0000568 seconds +2021-01-27T13:38:01.154+0000: 1289.870: Total time for which application threads were stopped: 0.0002988 seconds, Stopping threads took: 0.0000729 seconds +2021-01-27T13:38:03.247+0000: 1291.963: Total time for which application threads were stopped: 0.0005802 seconds, Stopping threads took: 0.0000400 seconds +2021-01-27T13:38:03.248+0000: 1291.964: Total time for which application threads were stopped: 0.0004060 seconds, Stopping threads took: 0.0000186 seconds +2021-01-27T13:38:06.249+0000: 1294.965: Total time for which application threads were stopped: 0.0004545 seconds, Stopping threads took: 0.0002261 seconds +2021-01-27T13:38:10.251+0000: 1298.967: Total time for which application threads were stopped: 0.0002111 seconds, Stopping threads took: 0.0000539 seconds +2021-01-27T13:38:14.253+0000: 1302.969: Total time for which application threads were stopped: 0.0004282 seconds, Stopping threads took: 0.0000918 seconds +2021-01-27T13:38:21.256+0000: 1309.972: Total time for which application threads were stopped: 0.0002333 seconds, Stopping threads took: 0.0000620 seconds +2021-01-27T13:38:26.258+0000: 1314.973: Total time for which application threads were stopped: 0.0003975 seconds, Stopping threads took: 0.0001694 seconds +2021-01-27T13:38:33.356+0000: 1322.072: Total time for which application threads were stopped: 0.0001847 seconds, Stopping threads took: 0.0000495 seconds +2021-01-27T13:38:33.357+0000: 1322.073: Total time for which application threads were stopped: 0.0001263 seconds, Stopping threads took: 0.0000214 seconds +2021-01-27T13:38:40.361+0000: 1329.077: Total time for which application threads were stopped: 0.0002283 seconds, Stopping threads took: 0.0000740 seconds +2021-01-27T13:38:44.363+0000: 1333.079: Total time for which application threads were stopped: 0.0004636 seconds, Stopping threads took: 0.0002314 seconds +2021-01-27T13:38:45.363+0000: 1334.079: Total time for which application threads were stopped: 0.0002924 seconds, Stopping threads took: 0.0000556 seconds +2021-01-27T13:38:50.366+0000: 1339.082: Total time for which application threads were stopped: 0.0003792 seconds, Stopping threads took: 0.0000729 seconds +2021-01-27T13:38:54.367+0000: 1343.083: Total time for which application threads were stopped: 0.0002298 seconds, Stopping threads took: 0.0000583 seconds +2021-01-27T13:38:56.375+0000: 1345.091: Total time for which application threads were stopped: 0.0002741 seconds, Stopping threads took: 0.0000670 seconds +2021-01-27T13:39:00.376+0000: 1349.092: Total time for which application threads were stopped: 0.0002563 seconds, Stopping threads took: 0.0000600 seconds +2021-01-27T13:39:03.501+0000: 1352.217: Total time for which application threads were stopped: 0.0014785 seconds, Stopping threads took: 0.0004157 seconds +2021-01-27T13:39:03.504+0000: 1352.220: Total time for which application threads were stopped: 0.0012300 seconds, Stopping threads took: 0.0009975 seconds +2021-01-27T13:39:05.305+0000: 1354.021: [GC (Allocation Failure) 2021-01-27T13:39:05.307+0000: 1354.023: [ParNew +Desired survivor size 8945664 bytes, new threshold 6 (max 6) +- age 1: 469864 bytes, 469864 total +- age 2: 450400 bytes, 920264 total +- age 3: 1067112 bytes, 1987376 total +- age 4: 673448 bytes, 2660824 total +- age 5: 717544 bytes, 3378368 total +- age 6: 1054816 bytes, 4433184 total +: 149959K->6396K(157248K), 0.0114238 secs] 259044K->115481K(506816K), 0.0150174 secs] [Times: user=0.03 sys=0.00, real=0.01 secs] +2021-01-27T13:39:05.322+0000: 1354.038: Total time for which application threads were stopped: 0.0185967 seconds, Stopping threads took: 0.0014362 seconds +2021-01-27T13:39:06.327+0000: 1355.043: Total time for which application threads were stopped: 0.0003839 seconds, Stopping threads took: 0.0001032 seconds +2021-01-27T13:39:15.332+0000: 1364.048: Total time for which application threads were stopped: 0.0004841 seconds, Stopping threads took: 0.0003154 seconds +2021-01-27T13:39:21.336+0000: 1370.052: Total time for which application threads were stopped: 0.0004643 seconds, Stopping threads took: 0.0001069 seconds +2021-01-27T13:39:30.338+0000: 1379.054: Total time for which application threads were stopped: 0.0002372 seconds, Stopping threads took: 0.0000615 seconds +2021-01-27T13:39:33.655+0000: 1382.371: Total time for which application threads were stopped: 0.0002156 seconds, Stopping threads took: 0.0000512 seconds +2021-01-27T13:39:33.656+0000: 1382.372: Total time for which application threads were stopped: 0.0002075 seconds, Stopping threads took: 0.0000274 seconds +2021-01-27T13:39:47.664+0000: 1396.380: Total time for which application threads were stopped: 0.0004582 seconds, Stopping threads took: 0.0002427 seconds +2021-01-27T13:39:55.667+0000: 1404.383: Total time for which application threads were stopped: 0.0002849 seconds, Stopping threads took: 0.0000700 seconds +2021-01-27T13:40:16.674+0000: 1425.390: Total time for which application threads were stopped: 0.0002318 seconds, Stopping threads took: 0.0000596 seconds +2021-01-27T13:40:30.679+0000: 1439.394: Total time for which application threads were stopped: 0.0003626 seconds, Stopping threads took: 0.0000642 seconds +2021-01-27T13:40:33.878+0000: 1442.594: Total time for which application threads were stopped: 0.0010738 seconds, Stopping threads took: 0.0009074 seconds +2021-01-27T13:40:33.879+0000: 1442.595: Total time for which application threads were stopped: 0.0003505 seconds, Stopping threads took: 0.0001263 seconds +2021-01-27T13:40:34.879+0000: 1443.595: Total time for which application threads were stopped: 0.0003422 seconds, Stopping threads took: 0.0000931 seconds +2021-01-27T13:40:36.884+0000: 1445.600: Total time for which application threads were stopped: 0.0002108 seconds, Stopping threads took: 0.0000525 seconds +2021-01-27T13:40:40.886+0000: 1449.601: Total time for which application threads were stopped: 0.0002384 seconds, Stopping threads took: 0.0000754 seconds +2021-01-27T13:40:43.796+0000: 1452.512: Total time for which application threads were stopped: 0.0001771 seconds, Stopping threads took: 0.0000414 seconds +2021-01-27T13:40:43.797+0000: 1452.513: Total time for which application threads were stopped: 0.0001213 seconds, Stopping threads took: 0.0000202 seconds +2021-01-27T13:40:43.814+0000: 1452.529: Total time for which application threads were stopped: 0.0003435 seconds, Stopping threads took: 0.0001302 seconds +2021-01-27T13:40:43.814+0000: 1452.530: Total time for which application threads were stopped: 0.0001513 seconds, Stopping threads took: 0.0000236 seconds +2021-01-27T13:40:43.815+0000: 1452.530: Total time for which application threads were stopped: 0.0001218 seconds, Stopping threads took: 0.0000157 seconds +2021-01-27T13:40:43.842+0000: 1452.558: Total time for which application threads were stopped: 0.0039837 seconds, Stopping threads took: 0.0000651 seconds +2021-01-27T13:40:43.899+0000: 1452.614: Total time for which application threads were stopped: 0.0026067 seconds, Stopping threads took: 0.0000699 seconds +2021-01-27T13:40:43.953+0000: 1452.669: Total time for which application threads were stopped: 0.0013837 seconds, Stopping threads took: 0.0005840 seconds +2021-01-27T13:40:43.967+0000: 1452.683: Total time for which application threads were stopped: 0.0009560 seconds, Stopping threads took: 0.0006036 seconds +2021-01-27T13:40:43.975+0000: 1452.691: Total time for which application threads were stopped: 0.0006071 seconds, Stopping threads took: 0.0003899 seconds +2021-01-27T13:40:43.977+0000: 1452.692: Total time for which application threads were stopped: 0.0006944 seconds, Stopping threads took: 0.0004581 seconds +2021-01-27T13:40:43.978+0000: 1452.693: Total time for which application threads were stopped: 0.0006300 seconds, Stopping threads took: 0.0003835 seconds +2021-01-27T13:40:43.982+0000: 1452.698: Total time for which application threads were stopped: 0.0008951 seconds, Stopping threads took: 0.0005523 seconds +2021-01-27T13:40:43.983+0000: 1452.698: Total time for which application threads were stopped: 0.0005377 seconds, Stopping threads took: 0.0003228 seconds +2021-01-27T13:40:43.983+0000: 1452.699: Total time for which application threads were stopped: 0.0005447 seconds, Stopping threads took: 0.0003905 seconds +2021-01-27T13:40:43.985+0000: 1452.700: Total time for which application threads were stopped: 0.0007582 seconds, Stopping threads took: 0.0003915 seconds +2021-01-27T13:40:43.985+0000: 1452.701: Total time for which application threads were stopped: 0.0007044 seconds, Stopping threads took: 0.0003946 seconds +2021-01-27T13:40:43.986+0000: 1452.702: Total time for which application threads were stopped: 0.0006943 seconds, Stopping threads took: 0.0005342 seconds +2021-01-27T13:40:43.987+0000: 1452.703: Total time for which application threads were stopped: 0.0005197 seconds, Stopping threads took: 0.0003689 seconds +2021-01-27T13:40:43.990+0000: 1452.705: Total time for which application threads were stopped: 0.0009976 seconds, Stopping threads took: 0.0006070 seconds +2021-01-27T13:40:43.991+0000: 1452.707: Total time for which application threads were stopped: 0.0011937 seconds, Stopping threads took: 0.0008571 seconds +2021-01-27T13:40:43.992+0000: 1452.708: Total time for which application threads were stopped: 0.0008294 seconds, Stopping threads took: 0.0003407 seconds +2021-01-27T13:40:43.993+0000: 1452.709: Total time for which application threads were stopped: 0.0009153 seconds, Stopping threads took: 0.0006607 seconds +2021-01-27T13:40:43.994+0000: 1452.710: Total time for which application threads were stopped: 0.0006602 seconds, Stopping threads took: 0.0004139 seconds +2021-01-27T13:40:43.995+0000: 1452.711: Total time for which application threads were stopped: 0.0005713 seconds, Stopping threads took: 0.0003260 seconds +2021-01-27T13:40:43.996+0000: 1452.712: Total time for which application threads were stopped: 0.0007372 seconds, Stopping threads took: 0.0005393 seconds +2021-01-27T13:40:43.998+0000: 1452.714: Total time for which application threads were stopped: 0.0007633 seconds, Stopping threads took: 0.0004114 seconds +2021-01-27T13:40:44.002+0000: 1452.718: Total time for which application threads were stopped: 0.0033639 seconds, Stopping threads took: 0.0004628 seconds +2021-01-27T13:40:44.003+0000: 1452.719: Total time for which application threads were stopped: 0.0008373 seconds, Stopping threads took: 0.0001493 seconds +2021-01-27T13:40:44.039+0000: 1452.755: Total time for which application threads were stopped: 0.0007949 seconds, Stopping threads took: 0.0004621 seconds +2021-01-27T13:40:44.057+0000: 1452.773: Total time for which application threads were stopped: 0.0004438 seconds, Stopping threads took: 0.0001853 seconds +2021-01-27T13:40:44.072+0000: 1452.788: Total time for which application threads were stopped: 0.0051169 seconds, Stopping threads took: 0.0014551 seconds +2021-01-27T13:40:44.097+0000: 1452.813: Total time for which application threads were stopped: 0.0006051 seconds, Stopping threads took: 0.0004395 seconds +2021-01-27T13:40:44.102+0000: 1452.818: Total time for which application threads were stopped: 0.0005934 seconds, Stopping threads took: 0.0001856 seconds +2021-01-27T13:40:44.104+0000: 1452.819: Total time for which application threads were stopped: 0.0007437 seconds, Stopping threads took: 0.0005207 seconds +2021-01-27T13:40:44.115+0000: 1452.830: Total time for which application threads were stopped: 0.0005595 seconds, Stopping threads took: 0.0002799 seconds +2021-01-27T13:40:44.123+0000: 1452.838: Total time for which application threads were stopped: 0.0004110 seconds, Stopping threads took: 0.0001608 seconds +2021-01-27T13:40:44.145+0000: 1452.860: Total time for which application threads were stopped: 0.0006358 seconds, Stopping threads took: 0.0001814 seconds +2021-01-27T13:40:44.172+0000: 1452.888: Total time for which application threads were stopped: 0.0004506 seconds, Stopping threads took: 0.0001839 seconds +2021-01-27T13:40:44.174+0000: 1452.890: Total time for which application threads were stopped: 0.0004110 seconds, Stopping threads took: 0.0002102 seconds +2021-01-27T13:40:44.179+0000: 1452.894: Total time for which application threads were stopped: 0.0007836 seconds, Stopping threads took: 0.0003965 seconds +2021-01-27T13:40:44.192+0000: 1452.908: Total time for which application threads were stopped: 0.0006358 seconds, Stopping threads took: 0.0004803 seconds +2021-01-27T13:40:44.208+0000: 1452.923: Total time for which application threads were stopped: 0.0004113 seconds, Stopping threads took: 0.0001728 seconds +2021-01-27T13:40:44.208+0000: 1452.924: Total time for which application threads were stopped: 0.0003095 seconds, Stopping threads took: 0.0001331 seconds +2021-01-27T13:40:44.337+0000: 1453.052: Total time for which application threads were stopped: 0.0009993 seconds, Stopping threads took: 0.0005718 seconds +2021-01-27T13:40:44.654+0000: 1453.370: Total time for which application threads were stopped: 0.0002488 seconds, Stopping threads took: 0.0000757 seconds +2021-01-27T13:40:44.668+0000: 1453.384: Total time for which application threads were stopped: 0.0002285 seconds, Stopping threads took: 0.0000430 seconds +2021-01-27T13:40:44.669+0000: 1453.385: Total time for which application threads were stopped: 0.0001447 seconds, Stopping threads took: 0.0000261 seconds +2021-01-27T13:40:45.340+0000: 1454.056: Total time for which application threads were stopped: 0.0005435 seconds, Stopping threads took: 0.0000811 seconds +2021-01-27T13:40:45.749+0000: 1454.465: Total time for which application threads were stopped: 0.0006599 seconds, Stopping threads took: 0.0000877 seconds +2021-01-27T13:40:51.753+0000: 1460.469: Total time for which application threads were stopped: 0.0003933 seconds, Stopping threads took: 0.0001600 seconds +2021-01-27T13:40:55.755+0000: 1464.471: Total time for which application threads were stopped: 0.0003159 seconds, Stopping threads took: 0.0000733 seconds +2021-01-27T13:41:01.758+0000: 1470.473: Total time for which application threads were stopped: 0.0002792 seconds, Stopping threads took: 0.0000707 seconds +2021-01-27T13:41:03.978+0000: 1472.694: Total time for which application threads were stopped: 0.0002751 seconds, Stopping threads took: 0.0000933 seconds +2021-01-27T13:41:03.980+0000: 1472.695: Total time for which application threads were stopped: 0.0002250 seconds, Stopping threads took: 0.0000699 seconds +2021-01-27T13:41:25.989+0000: 1494.705: Total time for which application threads were stopped: 0.0002679 seconds, Stopping threads took: 0.0000741 seconds +2021-01-27T13:41:32.992+0000: 1501.708: Total time for which application threads were stopped: 0.0005735 seconds, Stopping threads took: 0.0000895 seconds +2021-01-27T13:41:34.074+0000: 1502.789: Total time for which application threads were stopped: 0.0003374 seconds, Stopping threads took: 0.0000820 seconds +2021-01-27T13:41:34.074+0000: 1502.790: Total time for which application threads were stopped: 0.0001654 seconds, Stopping threads took: 0.0000259 seconds +2021-01-27T13:41:35.075+0000: 1503.791: Total time for which application threads were stopped: 0.0003571 seconds, Stopping threads took: 0.0000657 seconds +2021-01-27T13:41:36.075+0000: 1504.791: Total time for which application threads were stopped: 0.0001794 seconds, Stopping threads took: 0.0000448 seconds +2021-01-27T13:41:40.079+0000: 1508.795: Total time for which application threads were stopped: 0.0004173 seconds, Stopping threads took: 0.0000898 seconds +2021-01-27T13:41:46.082+0000: 1514.798: Total time for which application threads were stopped: 0.0002466 seconds, Stopping threads took: 0.0000870 seconds +2021-01-27T13:41:49.086+0000: 1517.801: Total time for which application threads were stopped: 0.0005468 seconds, Stopping threads took: 0.0000891 seconds +2021-01-27T13:41:51.087+0000: 1519.803: Total time for which application threads were stopped: 0.0002523 seconds, Stopping threads took: 0.0000519 seconds +2021-01-27T13:41:56.719+0000: 1525.435: Total time for which application threads were stopped: 0.0007095 seconds, Stopping threads took: 0.0005218 seconds +2021-01-27T13:41:56.722+0000: 1525.437: Total time for which application threads were stopped: 0.0020690 seconds, Stopping threads took: 0.0019079 seconds +2021-01-27T13:41:57.722+0000: 1526.438: Total time for which application threads were stopped: 0.0002130 seconds, Stopping threads took: 0.0000654 seconds +2021-01-27T13:41:58.167+0000: 1526.883: Total time for which application threads were stopped: 0.0003235 seconds, Stopping threads took: 0.0000441 seconds +2021-01-27T13:41:58.168+0000: 1526.884: Total time for which application threads were stopped: 0.0003257 seconds, Stopping threads took: 0.0000602 seconds +2021-01-27T13:41:58.214+0000: 1526.930: Total time for which application threads were stopped: 0.0003570 seconds, Stopping threads took: 0.0000876 seconds +2021-01-27T13:41:58.217+0000: 1526.932: Total time for which application threads were stopped: 0.0004842 seconds, Stopping threads took: 0.0003067 seconds +2021-01-27T13:41:58.218+0000: 1526.934: Total time for which application threads were stopped: 0.0006180 seconds, Stopping threads took: 0.0000467 seconds +2021-01-27T13:41:58.803+0000: 1527.519: Total time for which application threads were stopped: 0.0002120 seconds, Stopping threads took: 0.0000714 seconds +2021-01-27T13:41:58.815+0000: 1527.531: Total time for which application threads were stopped: 0.0003271 seconds, Stopping threads took: 0.0000464 seconds +2021-01-27T13:41:58.817+0000: 1527.532: Total time for which application threads were stopped: 0.0003240 seconds, Stopping threads took: 0.0000317 seconds +2021-01-27T13:41:59.817+0000: 1528.533: Total time for which application threads were stopped: 0.0003086 seconds, Stopping threads took: 0.0001393 seconds +2021-01-27T13:41:59.919+0000: 1528.634: Total time for which application threads were stopped: 0.0003669 seconds, Stopping threads took: 0.0000815 seconds +2021-01-27T13:42:04.169+0000: 1532.884: Total time for which application threads were stopped: 0.0001701 seconds, Stopping threads took: 0.0000403 seconds +2021-01-27T13:42:04.169+0000: 1532.884: Total time for which application threads were stopped: 0.0000961 seconds, Stopping threads took: 0.0000172 seconds +2021-01-27T13:42:06.169+0000: 1534.885: Total time for which application threads were stopped: 0.0002136 seconds, Stopping threads took: 0.0000537 seconds +2021-01-27T13:42:10.170+0000: 1538.886: Total time for which application threads were stopped: 0.0002094 seconds, Stopping threads took: 0.0000515 seconds +2021-01-27T13:42:16.174+0000: 1544.890: Total time for which application threads were stopped: 0.0002634 seconds, Stopping threads took: 0.0000886 seconds +2021-01-27T13:42:21.178+0000: 1549.893: Total time for which application threads were stopped: 0.0004610 seconds, Stopping threads took: 0.0000852 seconds +2021-01-27T13:42:25.181+0000: 1553.896: Total time for which application threads were stopped: 0.0003785 seconds, Stopping threads took: 0.0000878 seconds +2021-01-27T13:42:28.923+0000: 1557.639: Total time for which application threads were stopped: 0.0002708 seconds, Stopping threads took: 0.0000499 seconds +2021-01-27T13:42:28.924+0000: 1557.639: Total time for which application threads were stopped: 0.0001631 seconds, Stopping threads took: 0.0000264 seconds +2021-01-27T13:42:29.085+0000: 1557.800: Total time for which application threads were stopped: 0.0003867 seconds, Stopping threads took: 0.0001793 seconds +2021-01-27T13:42:29.104+0000: 1557.820: Total time for which application threads were stopped: 0.0002616 seconds, Stopping threads took: 0.0000818 seconds +2021-01-27T13:42:29.106+0000: 1557.822: Total time for which application threads were stopped: 0.0002305 seconds, Stopping threads took: 0.0000861 seconds +2021-01-27T13:42:29.941+0000: 1558.656: Total time for which application threads were stopped: 0.0002820 seconds, Stopping threads took: 0.0000488 seconds +2021-01-27T13:42:29.955+0000: 1558.671: Total time for which application threads were stopped: 0.0004484 seconds, Stopping threads took: 0.0000979 seconds +2021-01-27T13:42:29.955+0000: 1558.671: Total time for which application threads were stopped: 0.0001334 seconds, Stopping threads took: 0.0000217 seconds +2021-01-27T13:42:30.055+0000: 1558.771: Total time for which application threads were stopped: 0.0003531 seconds, Stopping threads took: 0.0000909 seconds +2021-01-27T13:42:30.055+0000: 1558.771: Total time for which application threads were stopped: 0.0001731 seconds, Stopping threads took: 0.0000782 seconds +2021-01-27T13:42:30.056+0000: 1558.771: Total time for which application threads were stopped: 0.0001426 seconds, Stopping threads took: 0.0000669 seconds +2021-01-27T13:42:30.061+0000: 1558.776: Total time for which application threads were stopped: 0.0002977 seconds, Stopping threads took: 0.0000613 seconds +2021-01-27T13:42:30.061+0000: 1558.777: Total time for which application threads were stopped: 0.0001471 seconds, Stopping threads took: 0.0000371 seconds +2021-01-27T13:42:31.062+0000: 1559.778: Total time for which application threads were stopped: 0.0004494 seconds, Stopping threads took: 0.0001719 seconds +2021-01-27T13:42:31.063+0000: 1559.778: Total time for which application threads were stopped: 0.0002164 seconds, Stopping threads took: 0.0000447 seconds +2021-01-27T13:42:34.260+0000: 1562.975: Total time for which application threads were stopped: 0.0001728 seconds, Stopping threads took: 0.0000391 seconds +2021-01-27T13:42:34.260+0000: 1562.976: Total time for which application threads were stopped: 0.0001566 seconds, Stopping threads took: 0.0000537 seconds +2021-01-27T13:42:39.903+0000: 1568.618: [GC (Allocation Failure) 2021-01-27T13:42:39.904+0000: 1568.620: [ParNew +Desired survivor size 8945664 bytes, new threshold 6 (max 6) +- age 1: 1536240 bytes, 1536240 total +- age 2: 350928 bytes, 1887168 total +- age 3: 449176 bytes, 2336344 total +- age 4: 1041424 bytes, 3377768 total +- age 5: 657480 bytes, 4035248 total +- age 6: 717296 bytes, 4752544 total +: 146172K->6746K(157248K), 0.0124293 secs] 255257K->116872K(506816K), 0.0146195 secs] [Times: user=0.04 sys=0.00, real=0.02 secs] +2021-01-27T13:42:39.919+0000: 1568.634: Total time for which application threads were stopped: 0.0169944 seconds, Stopping threads took: 0.0006521 seconds +2021-01-27T13:42:40.920+0000: 1569.635: Total time for which application threads were stopped: 0.0003451 seconds, Stopping threads took: 0.0001389 seconds +2021-01-27T13:42:42.921+0000: 1571.637: Total time for which application threads were stopped: 0.0006004 seconds, Stopping threads took: 0.0001335 seconds +2021-01-27T13:42:49.923+0000: 1578.639: Total time for which application threads were stopped: 0.0003569 seconds, Stopping threads took: 0.0000897 seconds +2021-01-27T13:42:56.926+0000: 1585.641: Total time for which application threads were stopped: 0.0002712 seconds, Stopping threads took: 0.0000651 seconds +2021-01-27T13:42:57.927+0000: 1586.643: Total time for which application threads were stopped: 0.0005863 seconds, Stopping threads took: 0.0000922 seconds +2021-01-27T13:42:59.928+0000: 1588.644: Total time for which application threads were stopped: 0.0004056 seconds, Stopping threads took: 0.0000691 seconds +2021-01-27T13:43:03.198+0000: 1591.914: Total time for which application threads were stopped: 0.0001999 seconds, Stopping threads took: 0.0000465 seconds +2021-01-27T13:43:03.199+0000: 1591.914: Total time for which application threads were stopped: 0.0001338 seconds, Stopping threads took: 0.0000211 seconds +2021-01-27T13:43:03.249+0000: 1591.964: Total time for which application threads were stopped: 0.0003590 seconds, Stopping threads took: 0.0001413 seconds +2021-01-27T13:43:03.297+0000: 1592.013: Total time for which application threads were stopped: 0.0004694 seconds, Stopping threads took: 0.0002134 seconds +2021-01-27T13:43:03.300+0000: 1592.016: Total time for which application threads were stopped: 0.0024880 seconds, Stopping threads took: 0.0023094 seconds +2021-01-27T13:43:03.308+0000: 1592.024: Total time for which application threads were stopped: 0.0002525 seconds, Stopping threads took: 0.0000878 seconds +2021-01-27T13:43:03.309+0000: 1592.024: Total time for which application threads were stopped: 0.0001708 seconds, Stopping threads took: 0.0000751 seconds +2021-01-27T13:43:04.310+0000: 1593.026: Total time for which application threads were stopped: 0.0001909 seconds, Stopping threads took: 0.0000457 seconds +2021-01-27T13:43:04.365+0000: 1593.081: Total time for which application threads were stopped: 0.0006122 seconds, Stopping threads took: 0.0000498 seconds +2021-01-27T13:43:04.368+0000: 1593.084: Total time for which application threads were stopped: 0.0001562 seconds, Stopping threads took: 0.0000309 seconds +2021-01-27T13:43:05.369+0000: 1594.085: Total time for which application threads were stopped: 0.0002620 seconds, Stopping threads took: 0.0000543 seconds +2021-01-27T13:43:06.370+0000: 1595.085: Total time for which application threads were stopped: 0.0003073 seconds, Stopping threads took: 0.0000856 seconds +2021-01-27T13:43:10.371+0000: 1599.087: Total time for which application threads were stopped: 0.0002826 seconds, Stopping threads took: 0.0000636 seconds +2021-01-27T13:43:14.516+0000: 1603.232: Total time for which application threads were stopped: 0.0009205 seconds, Stopping threads took: 0.0001013 seconds +2021-01-27T13:43:14.525+0000: 1603.240: Total time for which application threads were stopped: 0.0002318 seconds, Stopping threads took: 0.0000466 seconds +2021-01-27T13:43:14.531+0000: 1603.247: Total time for which application threads were stopped: 0.0003349 seconds, Stopping threads took: 0.0001378 seconds +2021-01-27T13:43:14.552+0000: 1603.268: Total time for which application threads were stopped: 0.0003993 seconds, Stopping threads took: 0.0002301 seconds +2021-01-27T13:43:14.573+0000: 1603.289: Total time for which application threads were stopped: 0.0008653 seconds, Stopping threads took: 0.0004754 seconds +2021-01-27T13:43:14.575+0000: 1603.291: Total time for which application threads were stopped: 0.0008303 seconds, Stopping threads took: 0.0002894 seconds +2021-01-27T13:43:14.577+0000: 1603.293: Total time for which application threads were stopped: 0.0005501 seconds, Stopping threads took: 0.0003216 seconds +2021-01-27T13:43:15.095+0000: 1603.810: Total time for which application threads were stopped: 0.0001961 seconds, Stopping threads took: 0.0000503 seconds +2021-01-27T13:43:15.108+0000: 1603.824: Total time for which application threads were stopped: 0.0001784 seconds, Stopping threads took: 0.0000417 seconds +2021-01-27T13:43:15.109+0000: 1603.824: Total time for which application threads were stopped: 0.0001090 seconds, Stopping threads took: 0.0000181 seconds +2021-01-27T13:43:16.109+0000: 1604.825: Total time for which application threads were stopped: 0.0003067 seconds, Stopping threads took: 0.0000576 seconds +2021-01-27T13:43:16.194+0000: 1604.909: Total time for which application threads were stopped: 0.0003833 seconds, Stopping threads took: 0.0000878 seconds +2021-01-27T13:43:19.168+0000: 1607.883: Total time for which application threads were stopped: 0.0034084 seconds, Stopping threads took: 0.0030238 seconds +2021-01-27T13:43:19.168+0000: 1607.884: Total time for which application threads were stopped: 0.0003467 seconds, Stopping threads took: 0.0001979 seconds +2021-01-27T13:43:19.205+0000: 1607.921: Total time for which application threads were stopped: 0.0006563 seconds, Stopping threads took: 0.0003904 seconds +2021-01-27T13:43:19.246+0000: 1607.961: Total time for which application threads were stopped: 0.0005225 seconds, Stopping threads took: 0.0001238 seconds +2021-01-27T13:43:19.247+0000: 1607.962: Total time for which application threads were stopped: 0.0003114 seconds, Stopping threads took: 0.0000578 seconds +2021-01-27T13:43:20.247+0000: 1608.963: Total time for which application threads were stopped: 0.0003291 seconds, Stopping threads took: 0.0000809 seconds +2021-01-27T13:43:20.391+0000: 1609.107: Total time for which application threads were stopped: 0.0003131 seconds, Stopping threads took: 0.0000651 seconds +2021-01-27T13:43:25.394+0000: 1614.109: Total time for which application threads were stopped: 0.0002729 seconds, Stopping threads took: 0.0000421 seconds +2021-01-27T13:43:25.867+0000: 1614.583: Total time for which application threads were stopped: 0.0001896 seconds, Stopping threads took: 0.0000424 seconds +2021-01-27T13:43:25.867+0000: 1614.583: Total time for which application threads were stopped: 0.0001220 seconds, Stopping threads took: 0.0000198 seconds +2021-01-27T13:43:25.889+0000: 1614.604: Total time for which application threads were stopped: 0.0002152 seconds, Stopping threads took: 0.0000413 seconds +2021-01-27T13:43:25.891+0000: 1614.607: Total time for which application threads were stopped: 0.0003862 seconds, Stopping threads took: 0.0002535 seconds +2021-01-27T13:43:25.893+0000: 1614.608: Total time for which application threads were stopped: 0.0001151 seconds, Stopping threads took: 0.0000218 seconds +2021-01-27T13:43:26.895+0000: 1615.610: Total time for which application threads were stopped: 0.0004255 seconds, Stopping threads took: 0.0001098 seconds +2021-01-27T13:43:31.899+0000: 1620.615: Total time for which application threads were stopped: 0.0004226 seconds, Stopping threads took: 0.0000914 seconds +2021-01-27T13:43:34.462+0000: 1623.178: Total time for which application threads were stopped: 0.0001726 seconds, Stopping threads took: 0.0000388 seconds +2021-01-27T13:43:34.463+0000: 1623.178: Total time for which application threads were stopped: 0.0001165 seconds, Stopping threads took: 0.0000194 seconds +2021-01-27T13:43:35.464+0000: 1624.180: Total time for which application threads were stopped: 0.0002655 seconds, Stopping threads took: 0.0000626 seconds +2021-01-27T13:43:41.470+0000: 1630.185: Total time for which application threads were stopped: 0.0004806 seconds, Stopping threads took: 0.0000942 seconds +2021-01-27T13:43:45.472+0000: 1634.187: Total time for which application threads were stopped: 0.0002997 seconds, Stopping threads took: 0.0000907 seconds +2021-01-27T13:43:50.476+0000: 1639.191: Total time for which application threads were stopped: 0.0003503 seconds, Stopping threads took: 0.0000822 seconds +2021-01-27T13:43:58.321+0000: 1647.036: Total time for which application threads were stopped: 0.0006204 seconds, Stopping threads took: 0.0004460 seconds +2021-01-27T13:43:58.321+0000: 1647.037: Total time for which application threads were stopped: 0.0006557 seconds, Stopping threads took: 0.0005090 seconds +2021-01-27T13:43:58.322+0000: 1647.037: Total time for which application threads were stopped: 0.0001238 seconds, Stopping threads took: 0.0000191 seconds +2021-01-27T13:43:59.323+0000: 1648.039: Total time for which application threads were stopped: 0.0002806 seconds, Stopping threads took: 0.0000536 seconds +2021-01-27T13:44:01.325+0000: 1650.041: Total time for which application threads were stopped: 0.0005775 seconds, Stopping threads took: 0.0000886 seconds +2021-01-27T13:44:05.328+0000: 1654.043: Total time for which application threads were stopped: 0.0005964 seconds, Stopping threads took: 0.0000918 seconds +2021-01-27T13:44:21.341+0000: 1670.056: Total time for which application threads were stopped: 0.0004475 seconds, Stopping threads took: 0.0001348 seconds +2021-01-27T13:44:25.342+0000: 1674.057: Total time for which application threads were stopped: 0.0003276 seconds, Stopping threads took: 0.0001147 seconds +2021-01-27T13:44:29.745+0000: 1678.460: Total time for which application threads were stopped: 0.0003701 seconds, Stopping threads took: 0.0001205 seconds +2021-01-27T13:44:29.746+0000: 1678.461: Total time for which application threads were stopped: 0.0002670 seconds, Stopping threads took: 0.0000430 seconds +2021-01-27T13:44:29.862+0000: 1678.577: Total time for which application threads were stopped: 0.0003380 seconds, Stopping threads took: 0.0000503 seconds +2021-01-27T13:44:29.863+0000: 1678.578: Total time for which application threads were stopped: 0.0004610 seconds, Stopping threads took: 0.0001924 seconds +2021-01-27T13:44:29.892+0000: 1678.608: Total time for which application threads were stopped: 0.0003621 seconds, Stopping threads took: 0.0001086 seconds +2021-01-27T13:44:29.893+0000: 1678.609: Total time for which application threads were stopped: 0.0002048 seconds, Stopping threads took: 0.0000257 seconds +2021-01-27T13:44:30.444+0000: 1679.159: Total time for which application threads were stopped: 0.0002325 seconds, Stopping threads took: 0.0000414 seconds +2021-01-27T13:44:30.458+0000: 1679.173: Total time for which application threads were stopped: 0.0003166 seconds, Stopping threads took: 0.0000783 seconds +2021-01-27T13:44:30.458+0000: 1679.173: Total time for which application threads were stopped: 0.0001576 seconds, Stopping threads took: 0.0000525 seconds +2021-01-27T13:44:30.535+0000: 1679.251: Total time for which application threads were stopped: 0.0002454 seconds, Stopping threads took: 0.0001172 seconds +2021-01-27T13:44:30.535+0000: 1679.251: Total time for which application threads were stopped: 0.0001596 seconds, Stopping threads took: 0.0000747 seconds +2021-01-27T13:44:30.536+0000: 1679.251: Total time for which application threads were stopped: 0.0000980 seconds, Stopping threads took: 0.0000273 seconds +2021-01-27T13:44:30.538+0000: 1679.253: Total time for which application threads were stopped: 0.0001719 seconds, Stopping threads took: 0.0000534 seconds +2021-01-27T13:44:30.538+0000: 1679.254: Total time for which application threads were stopped: 0.0001119 seconds, Stopping threads took: 0.0000319 seconds +2021-01-27T13:44:31.540+0000: 1680.255: Total time for which application threads were stopped: 0.0004638 seconds, Stopping threads took: 0.0002231 seconds +2021-01-27T13:44:34.648+0000: 1683.363: Total time for which application threads were stopped: 0.0003699 seconds, Stopping threads took: 0.0000404 seconds +2021-01-27T13:44:34.649+0000: 1683.365: Total time for which application threads were stopped: 0.0005273 seconds, Stopping threads took: 0.0002224 seconds +2021-01-27T13:44:35.650+0000: 1684.366: Total time for which application threads were stopped: 0.0004522 seconds, Stopping threads took: 0.0001795 seconds +2021-01-27T13:44:45.654+0000: 1694.370: Total time for which application threads were stopped: 0.0002611 seconds, Stopping threads took: 0.0000488 seconds +2021-01-27T13:44:55.662+0000: 1704.377: Total time for which application threads were stopped: 0.0005645 seconds, Stopping threads took: 0.0002575 seconds +2021-01-27T13:44:59.665+0000: 1708.380: Total time for which application threads were stopped: 0.0005028 seconds, Stopping threads took: 0.0000912 seconds +2021-01-27T13:45:00.666+0000: 1709.381: Total time for which application threads were stopped: 0.0004787 seconds, Stopping threads took: 0.0001763 seconds +2021-01-27T13:45:04.747+0000: 1713.462: Total time for which application threads were stopped: 0.0002572 seconds, Stopping threads took: 0.0000408 seconds +2021-01-27T13:45:04.750+0000: 1713.466: Total time for which application threads were stopped: 0.0001971 seconds, Stopping threads took: 0.0000256 seconds +2021-01-27T13:45:15.757+0000: 1724.472: Total time for which application threads were stopped: 0.0003074 seconds, Stopping threads took: 0.0000897 seconds +2021-01-27T13:45:19.758+0000: 1728.474: Total time for which application threads were stopped: 0.0002569 seconds, Stopping threads took: 0.0000540 seconds +2021-01-27T13:45:25.760+0000: 1734.475: Total time for which application threads were stopped: 0.0002453 seconds, Stopping threads took: 0.0000586 seconds +2021-01-27T13:45:30.762+0000: 1739.477: Total time for which application threads were stopped: 0.0003640 seconds, Stopping threads took: 0.0000935 seconds +2021-01-27T13:45:34.763+0000: 1743.478: Total time for which application threads were stopped: 0.0003175 seconds, Stopping threads took: 0.0000986 seconds +2021-01-27T13:45:34.850+0000: 1743.565: Total time for which application threads were stopped: 0.0002131 seconds, Stopping threads took: 0.0000480 seconds +2021-01-27T13:45:34.856+0000: 1743.572: Total time for which application threads were stopped: 0.0001676 seconds, Stopping threads took: 0.0000366 seconds +2021-01-27T13:45:41.863+0000: 1750.578: Total time for which application threads were stopped: 0.0005568 seconds, Stopping threads took: 0.0000925 seconds +2021-01-27T13:45:45.865+0000: 1754.580: Total time for which application threads were stopped: 0.0002783 seconds, Stopping threads took: 0.0000722 seconds +2021-01-27T13:45:47.387+0000: 1756.102: Total time for which application threads were stopped: 0.0006766 seconds, Stopping threads took: 0.0004075 seconds +2021-01-27T13:45:47.387+0000: 1756.103: Total time for which application threads were stopped: 0.0005046 seconds, Stopping threads took: 0.0001610 seconds +2021-01-27T13:45:47.388+0000: 1756.103: Total time for which application threads were stopped: 0.0002876 seconds, Stopping threads took: 0.0000607 seconds +2021-01-27T13:45:47.453+0000: 1756.168: Total time for which application threads were stopped: 0.0003962 seconds, Stopping threads took: 0.0000637 seconds +2021-01-27T13:45:47.455+0000: 1756.170: Total time for which application threads were stopped: 0.0002646 seconds, Stopping threads took: 0.0000490 seconds +2021-01-27T13:45:47.460+0000: 1756.175: Total time for which application threads were stopped: 0.0046105 seconds, Stopping threads took: 0.0038851 seconds +2021-01-27T13:45:47.462+0000: 1756.177: Total time for which application threads were stopped: 0.0008632 seconds, Stopping threads took: 0.0005958 seconds +2021-01-27T13:45:47.463+0000: 1756.178: Total time for which application threads were stopped: 0.0003232 seconds, Stopping threads took: 0.0000444 seconds +2021-01-27T13:45:47.479+0000: 1756.194: Total time for which application threads were stopped: 0.0007490 seconds, Stopping threads took: 0.0001648 seconds +2021-01-27T13:45:47.491+0000: 1756.206: Total time for which application threads were stopped: 0.0003216 seconds, Stopping threads took: 0.0000571 seconds +2021-01-27T13:45:47.541+0000: 1756.257: Total time for which application threads were stopped: 0.0006402 seconds, Stopping threads took: 0.0003316 seconds +2021-01-27T13:45:47.579+0000: 1756.294: Total time for which application threads were stopped: 0.0002709 seconds, Stopping threads took: 0.0000702 seconds +2021-01-27T13:45:50.580+0000: 1759.295: Total time for which application threads were stopped: 0.0003485 seconds, Stopping threads took: 0.0000670 seconds +2021-01-27T13:45:56.582+0000: 1765.297: Total time for which application threads were stopped: 0.0003383 seconds, Stopping threads took: 0.0001062 seconds +2021-01-27T13:45:59.663+0000: 1768.378: Total time for which application threads were stopped: 0.0008428 seconds, Stopping threads took: 0.0005035 seconds +2021-01-27T13:45:59.668+0000: 1768.384: [GC (Allocation Failure) 2021-01-27T13:45:59.671+0000: 1768.386: [ParNew +Desired survivor size 8945664 bytes, new threshold 6 (max 6) +- age 1: 5538000 bytes, 5538000 total +- age 2: 1077752 bytes, 6615752 total +- age 3: 349672 bytes, 6965424 total +- age 4: 447712 bytes, 7413136 total +- age 5: 1041392 bytes, 8454528 total +- age 6: 636040 bytes, 9090568 total +: 143168K->10929K(157248K), 0.0157882 secs] 253295K->121762K(506816K), 0.0192063 secs] [Times: user=0.04 sys=0.00, real=0.02 secs] +2021-01-27T13:45:59.689+0000: 1768.404: Total time for which application threads were stopped: 0.0224484 seconds, Stopping threads took: 0.0012926 seconds +2021-01-27T13:46:00.691+0000: 1769.406: Total time for which application threads were stopped: 0.0003357 seconds, Stopping threads took: 0.0000988 seconds +2021-01-27T13:46:04.944+0000: 1773.659: Total time for which application threads were stopped: 0.0001765 seconds, Stopping threads took: 0.0000396 seconds +2021-01-27T13:46:04.944+0000: 1773.659: Total time for which application threads were stopped: 0.0001076 seconds, Stopping threads took: 0.0000166 seconds +2021-01-27T13:46:05.945+0000: 1774.660: Total time for which application threads were stopped: 0.0002320 seconds, Stopping threads took: 0.0000558 seconds +2021-01-27T13:46:11.947+0000: 1780.662: Total time for which application threads were stopped: 0.0002383 seconds, Stopping threads took: 0.0000631 seconds +2021-01-27T13:46:14.950+0000: 1783.665: Total time for which application threads were stopped: 0.0003958 seconds, Stopping threads took: 0.0000940 seconds +2021-01-27T13:46:20.956+0000: 1789.671: Total time for which application threads were stopped: 0.0006196 seconds, Stopping threads took: 0.0000932 seconds +2021-01-27T13:46:24.959+0000: 1793.674: Total time for which application threads were stopped: 0.0005699 seconds, Stopping threads took: 0.0000917 seconds +2021-01-27T13:46:30.961+0000: 1799.676: Total time for which application threads were stopped: 0.0002251 seconds, Stopping threads took: 0.0000516 seconds +2021-01-27T13:46:35.047+0000: 1803.762: Total time for which application threads were stopped: 0.0001806 seconds, Stopping threads took: 0.0000419 seconds +2021-01-27T13:46:35.047+0000: 1803.762: Total time for which application threads were stopped: 0.0001079 seconds, Stopping threads took: 0.0000177 seconds +2021-01-27T13:46:56.060+0000: 1824.775: Total time for which application threads were stopped: 0.0030367 seconds, Stopping threads took: 0.0014953 seconds +2021-01-27T13:47:00.061+0000: 1828.776: Total time for which application threads were stopped: 0.0002062 seconds, Stopping threads took: 0.0000472 seconds +2021-01-27T13:47:06.064+0000: 1834.779: Total time for which application threads were stopped: 0.0002640 seconds, Stopping threads took: 0.0000838 seconds +2021-01-27T13:47:10.066+0000: 1838.781: Total time for which application threads were stopped: 0.0003238 seconds, Stopping threads took: 0.0000947 seconds +2021-01-27T13:47:12.067+0000: 1840.782: Total time for which application threads were stopped: 0.0004216 seconds, Stopping threads took: 0.0000721 seconds +2021-01-27T13:47:15.068+0000: 1843.783: Total time for which application threads were stopped: 0.0004109 seconds, Stopping threads took: 0.0000905 seconds +2021-01-27T13:47:16.068+0000: 1844.783: Total time for which application threads were stopped: 0.0002842 seconds, Stopping threads took: 0.0000942 seconds +2021-01-27T13:47:21.070+0000: 1849.785: Total time for which application threads were stopped: 0.0002777 seconds, Stopping threads took: 0.0000597 seconds +2021-01-27T13:47:31.072+0000: 1859.787: Total time for which application threads were stopped: 0.0002669 seconds, Stopping threads took: 0.0000640 seconds +2021-01-27T13:47:32.400+0000: 1861.115: Total time for which application threads were stopped: 0.0002603 seconds, Stopping threads took: 0.0000616 seconds +2021-01-27T13:47:32.401+0000: 1861.116: Total time for which application threads were stopped: 0.0001885 seconds, Stopping threads took: 0.0000304 seconds +2021-01-27T13:47:32.654+0000: 1861.369: Total time for which application threads were stopped: 0.0004680 seconds, Stopping threads took: 0.0001241 seconds +2021-01-27T13:47:35.227+0000: 1863.942: Total time for which application threads were stopped: 0.0001667 seconds, Stopping threads took: 0.0000397 seconds +2021-01-27T13:47:35.228+0000: 1863.943: Total time for which application threads were stopped: 0.0001752 seconds, Stopping threads took: 0.0000777 seconds +2021-01-27T13:47:36.228+0000: 1864.943: Total time for which application threads were stopped: 0.0002365 seconds, Stopping threads took: 0.0000620 seconds +2021-01-27T13:47:40.231+0000: 1868.945: Total time for which application threads were stopped: 0.0003223 seconds, Stopping threads took: 0.0000938 seconds +2021-01-27T13:47:45.236+0000: 1873.951: Total time for which application threads were stopped: 0.0004136 seconds, Stopping threads took: 0.0000857 seconds +2021-01-27T13:47:56.242+0000: 1884.957: Total time for which application threads were stopped: 0.0003555 seconds, Stopping threads took: 0.0001554 seconds +2021-01-27T13:48:01.245+0000: 1889.960: Total time for which application threads were stopped: 0.0009270 seconds, Stopping threads took: 0.0001828 seconds +2021-01-27T13:48:05.247+0000: 1893.962: Total time for which application threads were stopped: 0.0003389 seconds, Stopping threads took: 0.0000676 seconds +2021-01-27T13:48:05.333+0000: 1894.048: Total time for which application threads were stopped: 0.0007058 seconds, Stopping threads took: 0.0004230 seconds +2021-01-27T13:48:05.333+0000: 1894.048: Total time for which application threads were stopped: 0.0004863 seconds, Stopping threads took: 0.0003479 seconds +2021-01-27T13:48:16.337+0000: 1905.052: Total time for which application threads were stopped: 0.0004012 seconds, Stopping threads took: 0.0000987 seconds +2021-01-27T13:48:20.340+0000: 1909.055: Total time for which application threads were stopped: 0.0002815 seconds, Stopping threads took: 0.0000568 seconds +2021-01-27T13:48:22.456+0000: 1911.171: Total time for which application threads were stopped: 0.0002433 seconds, Stopping threads took: 0.0000650 seconds +2021-01-27T13:48:22.457+0000: 1911.172: Total time for which application threads were stopped: 0.0001383 seconds, Stopping threads took: 0.0000221 seconds +2021-01-27T13:48:22.478+0000: 1911.193: Total time for which application threads were stopped: 0.0003241 seconds, Stopping threads took: 0.0000532 seconds +2021-01-27T13:48:22.684+0000: 1911.398: Total time for which application threads were stopped: 0.0002857 seconds, Stopping threads took: 0.0000635 seconds +2021-01-27T13:48:22.684+0000: 1911.399: Total time for which application threads were stopped: 0.0002667 seconds, Stopping threads took: 0.0000278 seconds +2021-01-27T13:48:22.684+0000: 1911.399: Total time for which application threads were stopped: 0.0001639 seconds, Stopping threads took: 0.0000274 seconds +2021-01-27T13:48:22.686+0000: 1911.401: Total time for which application threads were stopped: 0.0002607 seconds, Stopping threads took: 0.0000294 seconds +2021-01-27T13:48:30.689+0000: 1919.404: Total time for which application threads were stopped: 0.0002541 seconds, Stopping threads took: 0.0000806 seconds +2021-01-27T13:48:35.443+0000: 1924.158: Total time for which application threads were stopped: 0.0002561 seconds, Stopping threads took: 0.0000800 seconds +2021-01-27T13:48:35.443+0000: 1924.158: Total time for which application threads were stopped: 0.0001998 seconds, Stopping threads took: 0.0000157 seconds +2021-01-27T13:48:36.444+0000: 1925.159: Total time for which application threads were stopped: 0.0004398 seconds, Stopping threads took: 0.0000600 seconds +2021-01-27T13:48:41.445+0000: 1930.160: Total time for which application threads were stopped: 0.0002785 seconds, Stopping threads took: 0.0000709 seconds +2021-01-27T13:48:44.446+0000: 1933.161: Total time for which application threads were stopped: 0.0003278 seconds, Stopping threads took: 0.0000724 seconds +2021-01-27T13:49:00.459+0000: 1949.174: Total time for which application threads were stopped: 0.0002492 seconds, Stopping threads took: 0.0000836 seconds +2021-01-27T13:49:02.460+0000: 1951.175: Total time for which application threads were stopped: 0.0003561 seconds, Stopping threads took: 0.0001397 seconds +2021-01-27T13:49:05.557+0000: 1954.272: Total time for which application threads were stopped: 0.0003374 seconds, Stopping threads took: 0.0001161 seconds +2021-01-27T13:49:05.557+0000: 1954.272: Total time for which application threads were stopped: 0.0001412 seconds, Stopping threads took: 0.0000210 seconds +2021-01-27T13:49:06.559+0000: 1955.274: Total time for which application threads were stopped: 0.0005224 seconds, Stopping threads took: 0.0001760 seconds +2021-01-27T13:49:10.560+0000: 1959.275: Total time for which application threads were stopped: 0.0002856 seconds, Stopping threads took: 0.0000734 seconds +2021-01-27T13:49:16.562+0000: 1965.277: Total time for which application threads were stopped: 0.0001911 seconds, Stopping threads took: 0.0000512 seconds +2021-01-27T13:49:25.570+0000: 1974.284: Total time for which application threads were stopped: 0.0003393 seconds, Stopping threads took: 0.0001248 seconds +2021-01-27T13:49:30.571+0000: 1979.286: Total time for which application threads were stopped: 0.0002410 seconds, Stopping threads took: 0.0000582 seconds +2021-01-27T13:49:32.418+0000: 1981.133: Total time for which application threads were stopped: 0.0001829 seconds, Stopping threads took: 0.0000452 seconds +2021-01-27T13:49:32.419+0000: 1981.133: Total time for which application threads were stopped: 0.0001195 seconds, Stopping threads took: 0.0000226 seconds +2021-01-27T13:49:32.729+0000: 1981.444: Total time for which application threads were stopped: 0.0004749 seconds, Stopping threads took: 0.0001997 seconds +2021-01-27T13:49:35.656+0000: 1984.371: Total time for which application threads were stopped: 0.0001970 seconds, Stopping threads took: 0.0000422 seconds +2021-01-27T13:49:35.657+0000: 1984.372: Total time for which application threads were stopped: 0.0002783 seconds, Stopping threads took: 0.0000890 seconds +2021-01-27T13:50:00.671+0000: 2009.386: Total time for which application threads were stopped: 0.0002888 seconds, Stopping threads took: 0.0000881 seconds +2021-01-27T13:50:01.672+0000: 2010.386: Total time for which application threads were stopped: 0.0002560 seconds, Stopping threads took: 0.0000561 seconds +2021-01-27T13:50:05.934+0000: 2014.648: Total time for which application threads were stopped: 0.0006686 seconds, Stopping threads took: 0.0004034 seconds +2021-01-27T13:50:05.935+0000: 2014.649: Total time for which application threads were stopped: 0.0004383 seconds, Stopping threads took: 0.0001880 seconds +2021-01-27T13:50:19.940+0000: 2028.655: Total time for which application threads were stopped: 0.0002774 seconds, Stopping threads took: 0.0000731 seconds +2021-01-27T13:50:25.942+0000: 2034.657: Total time for which application threads were stopped: 0.0002323 seconds, Stopping threads took: 0.0000780 seconds +2021-01-27T13:50:36.046+0000: 2044.761: Total time for which application threads were stopped: 0.0003718 seconds, Stopping threads took: 0.0000798 seconds +2021-01-27T13:50:36.048+0000: 2044.763: Total time for which application threads were stopped: 0.0006504 seconds, Stopping threads took: 0.0004612 seconds +2021-01-27T13:50:37.049+0000: 2045.764: Total time for which application threads were stopped: 0.0004894 seconds, Stopping threads took: 0.0000720 seconds +2021-01-27T13:50:40.559+0000: 2049.273: [GC (Allocation Failure) 2021-01-27T13:50:40.560+0000: 2049.275: [ParNew +Desired survivor size 8945664 bytes, new threshold 6 (max 6) +- age 1: 605568 bytes, 605568 total +- age 2: 798328 bytes, 1403896 total +- age 3: 1011952 bytes, 2415848 total +- age 4: 349240 bytes, 2765088 total +- age 5: 447016 bytes, 3212104 total +- age 6: 1040552 bytes, 4252656 total +: 150705K->5494K(157248K), 0.0148004 secs] 261538K->116923K(506816K), 0.0172850 secs] [Times: user=0.04 sys=0.00, real=0.02 secs] +2021-01-27T13:50:40.578+0000: 2049.292: Total time for which application threads were stopped: 0.0195327 seconds, Stopping threads took: 0.0003364 seconds +2021-01-27T13:50:40.580+0000: 2049.295: Total time for which application threads were stopped: 0.0012100 seconds, Stopping threads took: 0.0004806 seconds +2021-01-27T13:50:45.582+0000: 2054.297: Total time for which application threads were stopped: 0.0002788 seconds, Stopping threads took: 0.0000737 seconds +2021-01-27T13:50:49.336+0000: 2058.050: Total time for which application threads were stopped: 0.0002212 seconds, Stopping threads took: 0.0000475 seconds +2021-01-27T13:50:49.345+0000: 2058.060: Total time for which application threads were stopped: 0.0002971 seconds, Stopping threads took: 0.0000820 seconds +2021-01-27T13:50:49.779+0000: 2058.494: Total time for which application threads were stopped: 0.0002617 seconds, Stopping threads took: 0.0000448 seconds +2021-01-27T13:50:49.792+0000: 2058.506: Total time for which application threads were stopped: 0.0002360 seconds, Stopping threads took: 0.0000592 seconds +2021-01-27T13:50:49.793+0000: 2058.507: Total time for which application threads were stopped: 0.0001411 seconds, Stopping threads took: 0.0000246 seconds +2021-01-27T13:50:49.869+0000: 2058.584: Total time for which application threads were stopped: 0.0004420 seconds, Stopping threads took: 0.0002681 seconds +2021-01-27T13:50:49.870+0000: 2058.584: Total time for which application threads were stopped: 0.0002969 seconds, Stopping threads took: 0.0001733 seconds +2021-01-27T13:50:50.876+0000: 2059.591: Total time for which application threads were stopped: 0.0002228 seconds, Stopping threads took: 0.0000506 seconds +2021-01-27T13:50:55.104+0000: 2063.819: Total time for which application threads were stopped: 0.0002507 seconds, Stopping threads took: 0.0000676 seconds +2021-01-27T13:50:55.105+0000: 2063.819: Total time for which application threads were stopped: 0.0001609 seconds, Stopping threads took: 0.0000289 seconds +2021-01-27T13:50:55.109+0000: 2063.824: Total time for which application threads were stopped: 0.0002641 seconds, Stopping threads took: 0.0000424 seconds +2021-01-27T13:50:55.117+0000: 2063.831: Total time for which application threads were stopped: 0.0002300 seconds, Stopping threads took: 0.0000652 seconds +2021-01-27T13:50:55.119+0000: 2063.833: Total time for which application threads were stopped: 0.0002110 seconds, Stopping threads took: 0.0000521 seconds +2021-01-27T13:50:55.125+0000: 2063.840: Total time for which application threads were stopped: 0.0003793 seconds, Stopping threads took: 0.0002201 seconds +2021-01-27T13:50:55.132+0000: 2063.847: Total time for which application threads were stopped: 0.0001865 seconds, Stopping threads took: 0.0000391 seconds +2021-01-27T13:50:55.883+0000: 2064.597: Total time for which application threads were stopped: 0.0002816 seconds, Stopping threads took: 0.0001105 seconds +2021-01-27T13:50:55.916+0000: 2064.630: Total time for which application threads were stopped: 0.0002960 seconds, Stopping threads took: 0.0001248 seconds +2021-01-27T13:50:55.917+0000: 2064.631: Total time for which application threads were stopped: 0.0001901 seconds, Stopping threads took: 0.0000275 seconds +2021-01-27T13:50:56.012+0000: 2064.726: Total time for which application threads were stopped: 0.0002034 seconds, Stopping threads took: 0.0000420 seconds +2021-01-27T13:50:56.012+0000: 2064.727: Total time for which application threads were stopped: 0.0001134 seconds, Stopping threads took: 0.0000226 seconds +2021-01-27T13:50:56.012+0000: 2064.727: Total time for which application threads were stopped: 0.0001451 seconds, Stopping threads took: 0.0000216 seconds +2021-01-27T13:50:56.013+0000: 2064.727: Total time for which application threads were stopped: 0.0000981 seconds, Stopping threads took: 0.0000170 seconds +2021-01-27T13:50:57.017+0000: 2065.732: Total time for which application threads were stopped: 0.0002071 seconds, Stopping threads took: 0.0000494 seconds +2021-01-27T13:51:00.019+0000: 2068.733: Total time for which application threads were stopped: 0.0002447 seconds, Stopping threads took: 0.0000951 seconds +2021-01-27T13:51:03.019+0000: 2071.734: Total time for which application threads were stopped: 0.0002347 seconds, Stopping threads took: 0.0000928 seconds +2021-01-27T13:51:03.493+0000: 2072.208: Total time for which application threads were stopped: 0.0003874 seconds, Stopping threads took: 0.0002382 seconds +2021-01-27T13:51:03.494+0000: 2072.209: Total time for which application threads were stopped: 0.0003265 seconds, Stopping threads took: 0.0002014 seconds +2021-01-27T13:51:03.506+0000: 2072.221: Total time for which application threads were stopped: 0.0007117 seconds, Stopping threads took: 0.0003604 seconds +2021-01-27T13:51:03.525+0000: 2072.240: Total time for which application threads were stopped: 0.0014509 seconds, Stopping threads took: 0.0012093 seconds +2021-01-27T13:51:03.526+0000: 2072.241: Total time for which application threads were stopped: 0.0005335 seconds, Stopping threads took: 0.0003797 seconds +2021-01-27T13:51:03.530+0000: 2072.244: Total time for which application threads were stopped: 0.0004446 seconds, Stopping threads took: 0.0003114 seconds +2021-01-27T13:51:03.531+0000: 2072.245: Total time for which application threads were stopped: 0.0005670 seconds, Stopping threads took: 0.0003874 seconds +2021-01-27T13:51:03.533+0000: 2072.247: Total time for which application threads were stopped: 0.0003930 seconds, Stopping threads took: 0.0002800 seconds +2021-01-27T13:51:04.533+0000: 2073.248: Total time for which application threads were stopped: 0.0003380 seconds, Stopping threads took: 0.0001512 seconds +2021-01-27T13:51:05.534+0000: 2074.248: Total time for which application threads were stopped: 0.0002418 seconds, Stopping threads took: 0.0000582 seconds +2021-01-27T13:51:06.203+0000: 2074.917: Total time for which application threads were stopped: 0.0003610 seconds, Stopping threads took: 0.0000534 seconds +2021-01-27T13:51:06.204+0000: 2074.918: Total time for which application threads were stopped: 0.0004323 seconds, Stopping threads took: 0.0000589 seconds +2021-01-27T13:51:07.205+0000: 2075.919: Total time for which application threads were stopped: 0.0004098 seconds, Stopping threads took: 0.0000911 seconds +2021-01-27T13:51:10.206+0000: 2078.921: Total time for which application threads were stopped: 0.0002263 seconds, Stopping threads took: 0.0000539 seconds +2021-01-27T13:51:36.222+0000: 2104.937: Total time for which application threads were stopped: 0.0003096 seconds, Stopping threads took: 0.0001080 seconds +2021-01-27T13:51:36.304+0000: 2105.018: Total time for which application threads were stopped: 0.0003801 seconds, Stopping threads took: 0.0001062 seconds +2021-01-27T13:51:36.304+0000: 2105.019: Total time for which application threads were stopped: 0.0002475 seconds, Stopping threads took: 0.0000151 seconds +2021-01-27T13:51:46.525+0000: 2115.239: Total time for which application threads were stopped: 0.0003717 seconds, Stopping threads took: 0.0002232 seconds +2021-01-27T13:51:46.525+0000: 2115.240: Total time for which application threads were stopped: 0.0003056 seconds, Stopping threads took: 0.0002005 seconds +2021-01-27T13:51:46.551+0000: 2115.266: Total time for which application threads were stopped: 0.0002779 seconds, Stopping threads took: 0.0001072 seconds +2021-01-27T13:51:47.055+0000: 2115.769: Total time for which application threads were stopped: 0.0001866 seconds, Stopping threads took: 0.0000446 seconds +2021-01-27T13:51:47.073+0000: 2115.787: Total time for which application threads were stopped: 0.0002115 seconds, Stopping threads took: 0.0000826 seconds +2021-01-27T13:51:47.073+0000: 2115.788: Total time for which application threads were stopped: 0.0001651 seconds, Stopping threads took: 0.0000180 seconds +2021-01-27T13:51:47.143+0000: 2115.858: Total time for which application threads were stopped: 0.0002882 seconds, Stopping threads took: 0.0000440 seconds +2021-01-27T13:51:47.144+0000: 2115.858: Total time for which application threads were stopped: 0.0001855 seconds, Stopping threads took: 0.0000218 seconds +2021-01-27T13:51:48.149+0000: 2116.863: Total time for which application threads were stopped: 0.0002730 seconds, Stopping threads took: 0.0000640 seconds +2021-01-27T13:51:53.153+0000: 2121.868: Total time for which application threads were stopped: 0.0007437 seconds, Stopping threads took: 0.0005355 seconds +2021-01-27T13:51:56.157+0000: 2124.872: Total time for which application threads were stopped: 0.0011599 seconds, Stopping threads took: 0.0009444 seconds +2021-01-27T13:52:01.162+0000: 2129.877: Total time for which application threads were stopped: 0.0002047 seconds, Stopping threads took: 0.0000529 seconds +2021-01-27T13:52:06.399+0000: 2135.113: Total time for which application threads were stopped: 0.0008407 seconds, Stopping threads took: 0.0005824 seconds +2021-01-27T13:52:06.401+0000: 2135.115: Total time for which application threads were stopped: 0.0001484 seconds, Stopping threads took: 0.0000285 seconds +2021-01-27T13:52:15.405+0000: 2144.119: Total time for which application threads were stopped: 0.0002555 seconds, Stopping threads took: 0.0000611 seconds +2021-01-27T13:52:25.412+0000: 2154.126: Total time for which application threads were stopped: 0.0003260 seconds, Stopping threads took: 0.0001037 seconds +2021-01-27T13:52:30.415+0000: 2159.129: Total time for which application threads were stopped: 0.0002752 seconds, Stopping threads took: 0.0000724 seconds +2021-01-27T13:52:36.417+0000: 2165.132: Total time for which application threads were stopped: 0.0003209 seconds, Stopping threads took: 0.0000544 seconds +2021-01-27T13:52:36.508+0000: 2165.222: Total time for which application threads were stopped: 0.0001701 seconds, Stopping threads took: 0.0000422 seconds +2021-01-27T13:52:36.508+0000: 2165.222: Total time for which application threads were stopped: 0.0001062 seconds, Stopping threads took: 0.0000167 seconds +2021-01-27T13:52:40.510+0000: 2169.224: Total time for which application threads were stopped: 0.0003174 seconds, Stopping threads took: 0.0000947 seconds +2021-01-27T13:52:46.512+0000: 2175.226: Total time for which application threads were stopped: 0.0003783 seconds, Stopping threads took: 0.0001253 seconds +2021-01-27T13:53:03.959+0000: 2192.673: Total time for which application threads were stopped: 0.0005682 seconds, Stopping threads took: 0.0003131 seconds +2021-01-27T13:53:09.961+0000: 2198.676: Total time for which application threads were stopped: 0.0003747 seconds, Stopping threads took: 0.0000559 seconds +2021-01-27T13:53:24.965+0000: 2213.679: Total time for which application threads were stopped: 0.0002810 seconds, Stopping threads took: 0.0000719 seconds +2021-01-27T13:53:30.975+0000: 2219.690: Total time for which application threads were stopped: 0.0002189 seconds, Stopping threads took: 0.0000581 seconds +2021-01-27T13:53:36.711+0000: 2225.426: Total time for which application threads were stopped: 0.0002080 seconds, Stopping threads took: 0.0000466 seconds +2021-01-27T13:53:36.712+0000: 2225.426: Total time for which application threads were stopped: 0.0001148 seconds, Stopping threads took: 0.0000189 seconds +2021-01-27T13:53:37.713+0000: 2226.427: Total time for which application threads were stopped: 0.0004223 seconds, Stopping threads took: 0.0001372 seconds +2021-01-27T13:53:52.723+0000: 2241.437: Total time for which application threads were stopped: 0.0003973 seconds, Stopping threads took: 0.0000901 seconds +2021-01-27T13:54:01.729+0000: 2250.443: Total time for which application threads were stopped: 0.0003714 seconds, Stopping threads took: 0.0000922 seconds +2021-01-27T13:54:04.731+0000: 2253.445: Total time for which application threads were stopped: 0.0002778 seconds, Stopping threads took: 0.0000707 seconds +2021-01-27T13:54:05.732+0000: 2254.446: Total time for which application threads were stopped: 0.0002080 seconds, Stopping threads took: 0.0000537 seconds +2021-01-27T13:54:06.807+0000: 2255.521: Total time for which application threads were stopped: 0.0004009 seconds, Stopping threads took: 0.0000417 seconds +2021-01-27T13:54:06.808+0000: 2255.522: Total time for which application threads were stopped: 0.0002730 seconds, Stopping threads took: 0.0000198 seconds +2021-01-27T13:54:19.658+0000: 2268.373: [GC (Allocation Failure) 2021-01-27T13:54:19.661+0000: 2268.375: [ParNew +Desired survivor size 8945664 bytes, new threshold 6 (max 6) +- age 1: 600256 bytes, 600256 total +- age 2: 481040 bytes, 1081296 total +- age 3: 764408 bytes, 1845704 total +- age 4: 979256 bytes, 2824960 total +- age 5: 348928 bytes, 3173888 total +- age 6: 446976 bytes, 3620864 total +: 145270K->5269K(157248K), 0.0151785 secs] 256699K->117723K(506816K), 0.0187954 secs] [Times: user=0.04 sys=0.01, real=0.02 secs] +2021-01-27T13:54:19.679+0000: 2268.393: Total time for which application threads were stopped: 0.0210864 seconds, Stopping threads took: 0.0002480 seconds +2021-01-27T13:54:36.905+0000: 2285.619: Total time for which application threads were stopped: 0.0001748 seconds, Stopping threads took: 0.0000408 seconds +2021-01-27T13:54:36.905+0000: 2285.620: Total time for which application threads were stopped: 0.0001187 seconds, Stopping threads took: 0.0000189 seconds +2021-01-27T13:54:37.906+0000: 2286.620: Total time for which application threads were stopped: 0.0003322 seconds, Stopping threads took: 0.0000598 seconds +2021-01-27T13:54:41.911+0000: 2290.626: Total time for which application threads were stopped: 0.0006790 seconds, Stopping threads took: 0.0002528 seconds +2021-01-27T13:54:42.912+0000: 2291.626: Total time for which application threads were stopped: 0.0002035 seconds, Stopping threads took: 0.0000500 seconds +2021-01-27T13:54:44.914+0000: 2293.629: Total time for which application threads were stopped: 0.0002876 seconds, Stopping threads took: 0.0000625 seconds +2021-01-27T13:54:56.921+0000: 2305.635: Total time for which application threads were stopped: 0.0002217 seconds, Stopping threads took: 0.0000493 seconds +2021-01-27T13:54:59.922+0000: 2308.636: Total time for which application threads were stopped: 0.0003868 seconds, Stopping threads took: 0.0000845 seconds +2021-01-27T13:55:04.924+0000: 2313.638: Total time for which application threads were stopped: 0.0003527 seconds, Stopping threads took: 0.0000920 seconds +2021-01-27T13:55:07.018+0000: 2315.732: Total time for which application threads were stopped: 0.0003254 seconds, Stopping threads took: 0.0000992 seconds +2021-01-27T13:55:07.019+0000: 2315.733: Total time for which application threads were stopped: 0.0001399 seconds, Stopping threads took: 0.0000243 seconds +2021-01-27T13:55:11.020+0000: 2319.734: Total time for which application threads were stopped: 0.0002273 seconds, Stopping threads took: 0.0000741 seconds +2021-01-27T13:55:37.115+0000: 2345.829: Total time for which application threads were stopped: 0.0003841 seconds, Stopping threads took: 0.0000767 seconds +2021-01-27T13:55:37.117+0000: 2345.831: Total time for which application threads were stopped: 0.0004908 seconds, Stopping threads took: 0.0003547 seconds +2021-01-27T13:55:52.462+0000: 2361.176: Total time for which application threads were stopped: 0.0003539 seconds, Stopping threads took: 0.0001481 seconds +2021-01-27T13:55:52.462+0000: 2361.176: Total time for which application threads were stopped: 0.0002322 seconds, Stopping threads took: 0.0000935 seconds +2021-01-27T13:55:52.506+0000: 2361.220: Total time for which application threads were stopped: 0.0002251 seconds, Stopping threads took: 0.0000639 seconds +2021-01-27T13:55:52.506+0000: 2361.220: Total time for which application threads were stopped: 0.0001245 seconds, Stopping threads took: 0.0000351 seconds +2021-01-27T13:55:52.522+0000: 2361.236: Total time for which application threads were stopped: 0.0001950 seconds, Stopping threads took: 0.0000374 seconds +2021-01-27T13:55:56.523+0000: 2365.237: Total time for which application threads were stopped: 0.0002197 seconds, Stopping threads took: 0.0000550 seconds +2021-01-27T13:55:57.462+0000: 2366.176: Total time for which application threads were stopped: 0.0004230 seconds, Stopping threads took: 0.0001148 seconds +2021-01-27T13:55:57.463+0000: 2366.177: Total time for which application threads were stopped: 0.0002069 seconds, Stopping threads took: 0.0000545 seconds +2021-01-27T13:55:57.512+0000: 2366.226: Total time for which application threads were stopped: 0.0003232 seconds, Stopping threads took: 0.0000994 seconds +2021-01-27T13:55:57.512+0000: 2366.226: Total time for which application threads were stopped: 0.0001491 seconds, Stopping threads took: 0.0000369 seconds +2021-01-27T13:56:00.513+0000: 2369.227: Total time for which application threads were stopped: 0.0002978 seconds, Stopping threads took: 0.0000831 seconds +2021-01-27T13:56:05.514+0000: 2374.228: Total time for which application threads were stopped: 0.0004050 seconds, Stopping threads took: 0.0001327 seconds +2021-01-27T13:56:07.230+0000: 2375.944: Total time for which application threads were stopped: 0.0002386 seconds, Stopping threads took: 0.0000920 seconds +2021-01-27T13:56:07.232+0000: 2375.946: Total time for which application threads were stopped: 0.0001669 seconds, Stopping threads took: 0.0000293 seconds +2021-01-27T13:56:11.234+0000: 2379.948: Total time for which application threads were stopped: 0.0004552 seconds, Stopping threads took: 0.0002225 seconds +2021-01-27T13:56:21.237+0000: 2389.951: Total time for which application threads were stopped: 0.0002104 seconds, Stopping threads took: 0.0000539 seconds +2021-01-27T13:56:26.240+0000: 2394.953: Total time for which application threads were stopped: 0.0004462 seconds, Stopping threads took: 0.0000721 seconds +2021-01-27T13:56:30.242+0000: 2398.956: Total time for which application threads were stopped: 0.0007016 seconds, Stopping threads took: 0.0004226 seconds +2021-01-27T13:56:37.339+0000: 2406.052: Total time for which application threads were stopped: 0.0009624 seconds, Stopping threads took: 0.0002229 seconds +2021-01-27T13:56:37.340+0000: 2406.054: Total time for which application threads were stopped: 0.0004397 seconds, Stopping threads took: 0.0000551 seconds +2021-01-27T13:56:47.467+0000: 2416.181: Total time for which application threads were stopped: 0.0002566 seconds, Stopping threads took: 0.0000526 seconds +2021-01-27T13:56:47.468+0000: 2416.182: Total time for which application threads were stopped: 0.0001573 seconds, Stopping threads took: 0.0000254 seconds +2021-01-27T13:56:47.529+0000: 2416.243: Total time for which application threads were stopped: 0.0005264 seconds, Stopping threads took: 0.0001155 seconds +2021-01-27T13:56:47.530+0000: 2416.244: Total time for which application threads were stopped: 0.0002457 seconds, Stopping threads took: 0.0000824 seconds +2021-01-27T13:56:48.530+0000: 2417.244: Total time for which application threads were stopped: 0.0002048 seconds, Stopping threads took: 0.0000507 seconds +2021-01-27T13:57:21.540+0000: 2450.254: Total time for which application threads were stopped: 0.0004176 seconds, Stopping threads took: 0.0000929 seconds +2021-01-27T13:57:31.543+0000: 2460.257: Total time for which application threads were stopped: 0.0002930 seconds, Stopping threads took: 0.0000705 seconds +2021-01-27T13:57:37.557+0000: 2466.271: Total time for which application threads were stopped: 0.0002217 seconds, Stopping threads took: 0.0000778 seconds +2021-01-27T13:57:37.557+0000: 2466.271: Total time for which application threads were stopped: 0.0001554 seconds, Stopping threads took: 0.0000178 seconds +2021-01-27T13:58:07.641+0000: 2496.355: Total time for which application threads were stopped: 0.0001746 seconds, Stopping threads took: 0.0000410 seconds +2021-01-27T13:58:07.642+0000: 2496.356: Total time for which application threads were stopped: 0.0001191 seconds, Stopping threads took: 0.0000198 seconds +2021-01-27T13:58:09.643+0000: 2498.356: Total time for which application threads were stopped: 0.0003017 seconds, Stopping threads took: 0.0000682 seconds +2021-01-27T13:58:29.654+0000: 2518.368: Total time for which application threads were stopped: 0.0005228 seconds, Stopping threads took: 0.0000906 seconds +2021-01-27T13:58:37.753+0000: 2526.466: Total time for which application threads were stopped: 0.0027399 seconds, Stopping threads took: 0.0025140 seconds +2021-01-27T13:58:37.754+0000: 2526.468: Total time for which application threads were stopped: 0.0001476 seconds, Stopping threads took: 0.0000228 seconds +2021-01-27T13:58:54.761+0000: 2543.475: Total time for which application threads were stopped: 0.0002810 seconds, Stopping threads took: 0.0000693 seconds +2021-01-27T13:59:00.763+0000: 2549.476: Total time for which application threads were stopped: 0.0002340 seconds, Stopping threads took: 0.0000578 seconds +2021-01-27T13:59:04.764+0000: 2553.477: Total time for which application threads were stopped: 0.0002768 seconds, Stopping threads took: 0.0000716 seconds +2021-01-27T13:59:05.943+0000: 2554.657: [GC (Allocation Failure) 2021-01-27T13:59:05.950+0000: 2554.663: [ParNew +Desired survivor size 8945664 bytes, new threshold 6 (max 6) +- age 1: 599608 bytes, 599608 total +- age 2: 485664 bytes, 1085272 total +- age 3: 426400 bytes, 1511672 total +- age 4: 737848 bytes, 2249520 total +- age 5: 978416 bytes, 3227936 total +- age 6: 348928 bytes, 3576864 total +: 142687K->5552K(157248K), 0.0129477 secs] 255141K->118448K(506816K), 0.0207746 secs] [Times: user=0.03 sys=0.00, real=0.02 secs] +2021-01-27T13:59:05.965+0000: 2554.679: Total time for which application threads were stopped: 0.0228840 seconds, Stopping threads took: 0.0004205 seconds +2021-01-27T13:59:06.966+0000: 2555.680: Total time for which application threads were stopped: 0.0002393 seconds, Stopping threads took: 0.0000599 seconds +2021-01-27T13:59:07.852+0000: 2556.566: Total time for which application threads were stopped: 0.0002237 seconds, Stopping threads took: 0.0000405 seconds +2021-01-27T13:59:07.852+0000: 2556.566: Total time for which application threads were stopped: 0.0001216 seconds, Stopping threads took: 0.0000177 seconds +2021-01-27T13:59:09.853+0000: 2558.567: Total time for which application threads were stopped: 0.0002808 seconds, Stopping threads took: 0.0001134 seconds +2021-01-27T13:59:34.866+0000: 2583.580: Total time for which application threads were stopped: 0.0004891 seconds, Stopping threads took: 0.0001208 seconds +2021-01-27T13:59:37.946+0000: 2586.660: Total time for which application threads were stopped: 0.0001824 seconds, Stopping threads took: 0.0000411 seconds +2021-01-27T13:59:37.947+0000: 2586.661: Total time for which application threads were stopped: 0.0001469 seconds, Stopping threads took: 0.0000255 seconds +2021-01-27T13:59:49.953+0000: 2598.667: Total time for which application threads were stopped: 0.0006920 seconds, Stopping threads took: 0.0002062 seconds +2021-01-27T13:59:56.959+0000: 2605.672: Total time for which application threads were stopped: 0.0003780 seconds, Stopping threads took: 0.0000906 seconds +2021-01-27T14:00:08.046+0000: 2616.760: Total time for which application threads were stopped: 0.0001965 seconds, Stopping threads took: 0.0000556 seconds +2021-01-27T14:00:08.047+0000: 2616.760: Total time for which application threads were stopped: 0.0001035 seconds, Stopping threads took: 0.0000167 seconds +2021-01-27T14:00:10.048+0000: 2618.762: Total time for which application threads were stopped: 0.0002749 seconds, Stopping threads took: 0.0000662 seconds +2021-01-27T14:00:25.060+0000: 2633.774: Total time for which application threads were stopped: 0.0002222 seconds, Stopping threads took: 0.0000567 seconds +2021-01-27T14:00:38.151+0000: 2646.864: Total time for which application threads were stopped: 0.0002060 seconds, Stopping threads took: 0.0000581 seconds +2021-01-27T14:00:38.151+0000: 2646.865: Total time for which application threads were stopped: 0.0001216 seconds, Stopping threads took: 0.0000196 seconds +2021-01-27T14:00:45.157+0000: 2653.871: Total time for which application threads were stopped: 0.0002471 seconds, Stopping threads took: 0.0000724 seconds +2021-01-27T14:00:55.161+0000: 2663.874: Total time for which application threads were stopped: 0.0002633 seconds, Stopping threads took: 0.0000637 seconds +2021-01-27T14:01:20.168+0000: 2688.881: Total time for which application threads were stopped: 0.0004010 seconds, Stopping threads took: 0.0001317 seconds +2021-01-27T14:01:38.353+0000: 2707.066: Total time for which application threads were stopped: 0.0002338 seconds, Stopping threads took: 0.0000576 seconds +2021-01-27T14:01:38.353+0000: 2707.067: Total time for which application threads were stopped: 0.0001374 seconds, Stopping threads took: 0.0000186 seconds +2021-01-27T14:01:44.362+0000: 2713.076: Total time for which application threads were stopped: 0.0002660 seconds, Stopping threads took: 0.0000584 seconds +2021-01-27T14:01:48.364+0000: 2717.077: Total time for which application threads were stopped: 0.0001834 seconds, Stopping threads took: 0.0000467 seconds +2021-01-27T14:01:49.364+0000: 2718.078: Total time for which application threads were stopped: 0.0003065 seconds, Stopping threads took: 0.0000507 seconds +2021-01-27T14:01:54.367+0000: 2723.080: Total time for which application threads were stopped: 0.0001924 seconds, Stopping threads took: 0.0000504 seconds +2021-01-27T14:02:08.449+0000: 2737.163: Total time for which application threads were stopped: 0.0002244 seconds, Stopping threads took: 0.0000523 seconds +2021-01-27T14:02:08.450+0000: 2737.163: Total time for which application threads were stopped: 0.0002038 seconds, Stopping threads took: 0.0000512 seconds +2021-01-27T14:02:09.450+0000: 2738.164: Total time for which application threads were stopped: 0.0002213 seconds, Stopping threads took: 0.0000705 seconds +2021-01-27T14:02:38.544+0000: 2767.258: Total time for which application threads were stopped: 0.0002624 seconds, Stopping threads took: 0.0000404 seconds +2021-01-27T14:02:38.545+0000: 2767.258: Total time for which application threads were stopped: 0.0001267 seconds, Stopping threads took: 0.0000170 seconds +2021-01-27T14:02:59.682+0000: 2788.395: Total time for which application threads were stopped: 0.0003780 seconds, Stopping threads took: 0.0000903 seconds +2021-01-27T14:03:04.685+0000: 2793.398: Total time for which application threads were stopped: 0.0002331 seconds, Stopping threads took: 0.0000553 seconds +2021-01-27T14:03:06.052+0000: 2794.765: [GC (Allocation Failure) 2021-01-27T14:03:06.053+0000: 2794.766: [ParNew +Desired survivor size 8945664 bytes, new threshold 6 (max 6) +- age 1: 4659704 bytes, 4659704 total +- age 2: 502768 bytes, 5162472 total +- age 3: 443664 bytes, 5606136 total +- age 4: 425816 bytes, 6031952 total +- age 5: 729080 bytes, 6761032 total +- age 6: 928992 bytes, 7690024 total +: 143060K->9411K(157248K), 0.0096501 secs] 255957K->122653K(506816K), 0.0116616 secs] [Times: user=0.03 sys=0.00, real=0.01 secs] +2021-01-27T14:03:06.066+0000: 2794.779: Total time for which application threads were stopped: 0.0139211 seconds, Stopping threads took: 0.0001864 seconds +2021-01-27T14:03:08.628+0000: 2797.341: Total time for which application threads were stopped: 0.0002568 seconds, Stopping threads took: 0.0000818 seconds +2021-01-27T14:03:08.629+0000: 2797.342: Total time for which application threads were stopped: 0.0002764 seconds, Stopping threads took: 0.0000180 seconds +2021-01-27T14:03:09.630+0000: 2798.343: Total time for which application threads were stopped: 0.0002994 seconds, Stopping threads took: 0.0000721 seconds +2021-01-27T14:03:14.632+0000: 2803.345: Total time for which application threads were stopped: 0.0003693 seconds, Stopping threads took: 0.0000917 seconds +2021-01-27T14:03:19.637+0000: 2808.351: Total time for which application threads were stopped: 0.0002858 seconds, Stopping threads took: 0.0000730 seconds +2021-01-27T14:03:24.644+0000: 2813.357: Total time for which application threads were stopped: 0.0005336 seconds, Stopping threads took: 0.0001157 seconds +2021-01-27T14:03:29.648+0000: 2818.361: Total time for which application threads were stopped: 0.0002193 seconds, Stopping threads took: 0.0000560 seconds +2021-01-27T14:03:32.650+0000: 2821.363: Total time for which application threads were stopped: 0.0004164 seconds, Stopping threads took: 0.0001949 seconds +2021-01-27T14:03:38.726+0000: 2827.439: Total time for which application threads were stopped: 0.0003529 seconds, Stopping threads took: 0.0001247 seconds +2021-01-27T14:03:38.726+0000: 2827.439: Total time for which application threads were stopped: 0.0001517 seconds, Stopping threads took: 0.0000177 seconds +2021-01-27T14:03:41.728+0000: 2830.441: Total time for which application threads were stopped: 0.0001965 seconds, Stopping threads took: 0.0000496 seconds +2021-01-27T14:03:44.729+0000: 2833.442: Total time for which application threads were stopped: 0.0002783 seconds, Stopping threads took: 0.0000799 seconds +2021-01-27T14:04:06.736+0000: 2855.449: Total time for which application threads were stopped: 0.0002732 seconds, Stopping threads took: 0.0000680 seconds +2021-01-27T14:04:08.818+0000: 2857.531: Total time for which application threads were stopped: 0.0002348 seconds, Stopping threads took: 0.0000500 seconds +2021-01-27T14:04:08.819+0000: 2857.532: Total time for which application threads were stopped: 0.0001078 seconds, Stopping threads took: 0.0000177 seconds +2021-01-27T14:04:10.822+0000: 2859.535: Total time for which application threads were stopped: 0.0004100 seconds, Stopping threads took: 0.0000968 seconds +2021-01-27T14:04:38.904+0000: 2887.617: Total time for which application threads were stopped: 0.0002284 seconds, Stopping threads took: 0.0000448 seconds +2021-01-27T14:04:38.905+0000: 2887.618: Total time for which application threads were stopped: 0.0001729 seconds, Stopping threads took: 0.0000251 seconds +2021-01-27T14:04:54.912+0000: 2903.625: Total time for which application threads were stopped: 0.0003012 seconds, Stopping threads took: 0.0000884 seconds +2021-01-27T14:05:06.920+0000: 2915.633: Total time for which application threads were stopped: 0.0002669 seconds, Stopping threads took: 0.0000552 seconds +2021-01-27T14:05:30.935+0000: 2939.648: Total time for which application threads were stopped: 0.0002089 seconds, Stopping threads took: 0.0000537 seconds +2021-01-27T14:05:39.164+0000: 2947.877: Total time for which application threads were stopped: 0.0005434 seconds, Stopping threads took: 0.0001744 seconds +2021-01-27T14:05:39.164+0000: 2947.877: Total time for which application threads were stopped: 0.0002967 seconds, Stopping threads took: 0.0000611 seconds +2021-01-27T14:06:06.177+0000: 2974.890: Total time for which application threads were stopped: 0.0004235 seconds, Stopping threads took: 0.0000944 seconds +2021-01-27T14:06:09.261+0000: 2977.974: Total time for which application threads were stopped: 0.0002269 seconds, Stopping threads took: 0.0000570 seconds +2021-01-27T14:06:09.262+0000: 2977.975: Total time for which application threads were stopped: 0.0001343 seconds, Stopping threads took: 0.0000231 seconds +2021-01-27T14:06:15.264+0000: 2983.977: Total time for which application threads were stopped: 0.0002350 seconds, Stopping threads took: 0.0000629 seconds +2021-01-27T14:06:39.374+0000: 3008.087: Total time for which application threads were stopped: 0.0004620 seconds, Stopping threads took: 0.0001492 seconds +2021-01-27T14:06:39.375+0000: 3008.088: Total time for which application threads were stopped: 0.0002240 seconds, Stopping threads took: 0.0000200 seconds +2021-01-27T14:06:51.379+0000: 3020.092: Total time for which application threads were stopped: 0.0003137 seconds, Stopping threads took: 0.0001213 seconds +2021-01-27T14:07:01.382+0000: 3030.095: Total time for which application threads were stopped: 0.0002819 seconds, Stopping threads took: 0.0000750 seconds +2021-01-27T14:07:07.386+0000: 3036.099: Total time for which application threads were stopped: 0.0004295 seconds, Stopping threads took: 0.0001302 seconds +2021-01-27T14:07:09.477+0000: 3038.190: Total time for which application threads were stopped: 0.0001790 seconds, Stopping threads took: 0.0000387 seconds +2021-01-27T14:07:09.478+0000: 3038.191: Total time for which application threads were stopped: 0.0001287 seconds, Stopping threads took: 0.0000250 seconds +2021-01-27T14:07:10.481+0000: 3039.194: Total time for which application threads were stopped: 0.0002307 seconds, Stopping threads took: 0.0000574 seconds +2021-01-27T14:07:39.582+0000: 3068.295: Total time for which application threads were stopped: 0.0002176 seconds, Stopping threads took: 0.0000426 seconds +2021-01-27T14:07:39.582+0000: 3068.295: Total time for which application threads were stopped: 0.0001076 seconds, Stopping threads took: 0.0000182 seconds +2021-01-27T14:07:40.583+0000: 3069.295: Total time for which application threads were stopped: 0.0002184 seconds, Stopping threads took: 0.0000512 seconds +2021-01-27T14:07:46.586+0000: 3075.298: Total time for which application threads were stopped: 0.0002510 seconds, Stopping threads took: 0.0000617 seconds +2021-01-27T14:07:55.396+0000: 3084.109: [GC (Allocation Failure) 2021-01-27T14:07:55.400+0000: 3084.113: [ParNew +Desired survivor size 8945664 bytes, new threshold 6 (max 6) +- age 1: 482088 bytes, 482088 total +- age 2: 325304 bytes, 807392 total +- age 3: 501320 bytes, 1308712 total +- age 4: 443288 bytes, 1752000 total +- age 5: 425696 bytes, 2177696 total +- age 6: 728960 bytes, 2906656 total +: 149187K->4308K(157248K), 0.0160593 secs] 262429K->118466K(506816K), 0.0213217 secs] [Times: user=0.04 sys=0.00, real=0.03 secs] +2021-01-27T14:07:55.419+0000: 3084.131: Total time for which application threads were stopped: 0.0228317 seconds, Stopping threads took: 0.0000621 seconds +2021-01-27T14:07:56.419+0000: 3085.132: Total time for which application threads were stopped: 0.0004375 seconds, Stopping threads took: 0.0000887 seconds +2021-01-27T14:08:01.424+0000: 3090.137: Total time for which application threads were stopped: 0.0007444 seconds, Stopping threads took: 0.0001196 seconds +2021-01-27T14:08:08.428+0000: 3097.141: Total time for which application threads were stopped: 0.0004270 seconds, Stopping threads took: 0.0000919 seconds +2021-01-27T14:08:09.681+0000: 3098.394: Total time for which application threads were stopped: 0.0002528 seconds, Stopping threads took: 0.0000601 seconds +2021-01-27T14:08:09.682+0000: 3098.395: Total time for which application threads were stopped: 0.0001138 seconds, Stopping threads took: 0.0000184 seconds +2021-01-27T14:08:20.687+0000: 3109.400: Total time for which application threads were stopped: 0.0002644 seconds, Stopping threads took: 0.0000930 seconds +2021-01-27T14:08:39.786+0000: 3128.498: Total time for which application threads were stopped: 0.0001795 seconds, Stopping threads took: 0.0000413 seconds +2021-01-27T14:08:39.786+0000: 3128.499: Total time for which application threads were stopped: 0.0001365 seconds, Stopping threads took: 0.0000183 seconds +2021-01-27T14:08:40.786+0000: 3129.499: Total time for which application threads were stopped: 0.0002842 seconds, Stopping threads took: 0.0000662 seconds +2021-01-27T14:09:00.792+0000: 3149.505: Total time for which application threads were stopped: 0.0002543 seconds, Stopping threads took: 0.0000823 seconds +2021-01-27T14:09:07.796+0000: 3156.508: Total time for which application threads were stopped: 0.0002468 seconds, Stopping threads took: 0.0000612 seconds +2021-01-27T14:09:21.801+0000: 3170.514: Total time for which application threads were stopped: 0.0003047 seconds, Stopping threads took: 0.0001003 seconds +2021-01-27T14:09:24.803+0000: 3173.515: Total time for which application threads were stopped: 0.0004014 seconds, Stopping threads took: 0.0001156 seconds +2021-01-27T14:09:30.812+0000: 3179.524: Total time for which application threads were stopped: 0.0002898 seconds, Stopping threads took: 0.0000738 seconds +2021-01-27T14:09:39.984+0000: 3188.696: Total time for which application threads were stopped: 0.0002481 seconds, Stopping threads took: 0.0000396 seconds +2021-01-27T14:09:39.985+0000: 3188.697: Total time for which application threads were stopped: 0.0004174 seconds, Stopping threads took: 0.0003052 seconds +2021-01-27T14:09:45.986+0000: 3194.699: Total time for which application threads were stopped: 0.0002664 seconds, Stopping threads took: 0.0000520 seconds +2021-01-27T14:09:50.988+0000: 3199.700: Total time for which application threads were stopped: 0.0003627 seconds, Stopping threads took: 0.0001636 seconds +2021-01-27T14:09:52.988+0000: 3201.701: Total time for which application threads were stopped: 0.0002163 seconds, Stopping threads took: 0.0000585 seconds +2021-01-27T14:09:54.991+0000: 3203.704: Total time for which application threads were stopped: 0.0003254 seconds, Stopping threads took: 0.0001217 seconds +2021-01-27T14:10:07.000+0000: 3215.712: Total time for which application threads were stopped: 0.0003170 seconds, Stopping threads took: 0.0000586 seconds +2021-01-27T14:10:09.001+0000: 3217.714: Total time for which application threads were stopped: 0.0003879 seconds, Stopping threads took: 0.0000982 seconds +2021-01-27T14:10:10.090+0000: 3218.802: Total time for which application threads were stopped: 0.0003119 seconds, Stopping threads took: 0.0000529 seconds +2021-01-27T14:10:10.096+0000: 3218.809: Total time for which application threads were stopped: 0.0002324 seconds, Stopping threads took: 0.0000356 seconds +2021-01-27T14:10:11.097+0000: 3219.810: Total time for which application threads were stopped: 0.0002481 seconds, Stopping threads took: 0.0000819 seconds +2021-01-27T14:10:26.107+0000: 3234.819: Total time for which application threads were stopped: 0.0004499 seconds, Stopping threads took: 0.0001360 seconds +2021-01-27T14:10:40.193+0000: 3248.905: Total time for which application threads were stopped: 0.0002097 seconds, Stopping threads took: 0.0000393 seconds +2021-01-27T14:10:40.200+0000: 3248.912: Total time for which application threads were stopped: 0.0001408 seconds, Stopping threads took: 0.0000273 seconds +2021-01-27T14:10:41.201+0000: 3249.914: Total time for which application threads were stopped: 0.0006645 seconds, Stopping threads took: 0.0001529 seconds +2021-01-27T14:11:00.213+0000: 3268.926: Total time for which application threads were stopped: 0.0004085 seconds, Stopping threads took: 0.0001164 seconds +2021-01-27T14:11:05.216+0000: 3273.929: Total time for which application threads were stopped: 0.0005679 seconds, Stopping threads took: 0.0001288 seconds +2021-01-27T14:11:10.219+0000: 3278.932: Total time for which application threads were stopped: 0.0002433 seconds, Stopping threads took: 0.0000861 seconds +2021-01-27T14:11:10.321+0000: 3279.033: Total time for which application threads were stopped: 0.0007289 seconds, Stopping threads took: 0.0003896 seconds +2021-01-27T14:11:10.322+0000: 3279.035: Total time for which application threads were stopped: 0.0006035 seconds, Stopping threads took: 0.0003386 seconds +2021-01-27T14:11:11.324+0000: 3280.037: Total time for which application threads were stopped: 0.0004623 seconds, Stopping threads took: 0.0000809 seconds +2021-01-27T14:11:15.327+0000: 3284.040: Total time for which application threads were stopped: 0.0005917 seconds, Stopping threads took: 0.0002769 seconds +2021-01-27T14:11:25.334+0000: 3294.046: Total time for which application threads were stopped: 0.0005048 seconds, Stopping threads took: 0.0000835 seconds +2021-01-27T14:11:40.434+0000: 3309.147: Total time for which application threads were stopped: 0.0001763 seconds, Stopping threads took: 0.0000408 seconds +2021-01-27T14:11:40.435+0000: 3309.147: Total time for which application threads were stopped: 0.0001030 seconds, Stopping threads took: 0.0000177 seconds +2021-01-27T14:11:45.437+0000: 3314.149: Total time for which application threads were stopped: 0.0004794 seconds, Stopping threads took: 0.0002107 seconds +2021-01-27T14:12:05.445+0000: 3334.157: Total time for which application threads were stopped: 0.0002938 seconds, Stopping threads took: 0.0000689 seconds +2021-01-27T14:12:10.311+0000: 3339.023: [GC (Allocation Failure) 2021-01-27T14:12:10.313+0000: 3339.025: [ParNew +Desired survivor size 8945664 bytes, new threshold 6 (max 6) +- age 1: 573632 bytes, 573632 total +- age 2: 386784 bytes, 960416 total +- age 3: 324728 bytes, 1285144 total +- age 4: 500480 bytes, 1785624 total +- age 5: 443288 bytes, 2228912 total +- age 6: 425480 bytes, 2654392 total +: 142653K->4500K(157248K), 0.0135477 secs] 256811K->119378K(506816K), 0.0169020 secs] [Times: user=0.04 sys=0.00, real=0.01 secs] +2021-01-27T14:12:10.329+0000: 3339.041: Total time for which application threads were stopped: 0.0188528 seconds, Stopping threads took: 0.0003078 seconds +2021-01-27T14:12:10.528+0000: 3339.240: Total time for which application threads were stopped: 0.0003043 seconds, Stopping threads took: 0.0000428 seconds +2021-01-27T14:12:10.528+0000: 3339.240: Total time for which application threads were stopped: 0.0001874 seconds, Stopping threads took: 0.0000203 seconds +2021-01-27T14:12:35.536+0000: 3364.248: Total time for which application threads were stopped: 0.0002848 seconds, Stopping threads took: 0.0000872 seconds +2021-01-27T14:12:40.537+0000: 3369.249: Total time for which application threads were stopped: 0.0002450 seconds, Stopping threads took: 0.0000862 seconds +2021-01-27T14:12:40.630+0000: 3369.342: Total time for which application threads were stopped: 0.0002770 seconds, Stopping threads took: 0.0000411 seconds +2021-01-27T14:12:40.631+0000: 3369.343: Total time for which application threads were stopped: 0.0002503 seconds, Stopping threads took: 0.0000182 seconds +2021-01-27T14:12:50.636+0000: 3379.348: Total time for which application threads were stopped: 0.0002681 seconds, Stopping threads took: 0.0000560 seconds +2021-01-27T14:12:55.638+0000: 3384.350: Total time for which application threads were stopped: 0.0002350 seconds, Stopping threads took: 0.0000547 seconds +2021-01-27T14:13:06.643+0000: 3395.355: Total time for which application threads were stopped: 0.0003695 seconds, Stopping threads took: 0.0000887 seconds +2021-01-27T14:13:10.645+0000: 3399.357: Total time for which application threads were stopped: 0.0003315 seconds, Stopping threads took: 0.0001189 seconds +2021-01-27T14:13:40.839+0000: 3429.551: Total time for which application threads were stopped: 0.0001946 seconds, Stopping threads took: 0.0000447 seconds +2021-01-27T14:13:40.840+0000: 3429.552: Total time for which application threads were stopped: 0.0001253 seconds, Stopping threads took: 0.0000224 seconds +2021-01-27T14:13:50.845+0000: 3439.558: Total time for which application threads were stopped: 0.0005749 seconds, Stopping threads took: 0.0001481 seconds +2021-01-27T14:14:10.941+0000: 3459.653: Total time for which application threads were stopped: 0.0002506 seconds, Stopping threads took: 0.0000957 seconds +2021-01-27T14:14:10.942+0000: 3459.654: Total time for which application threads were stopped: 0.0003074 seconds, Stopping threads took: 0.0000966 seconds +2021-01-27T14:14:41.050+0000: 3489.762: Total time for which application threads were stopped: 0.0003900 seconds, Stopping threads took: 0.0001247 seconds +2021-01-27T14:14:41.050+0000: 3489.762: Total time for which application threads were stopped: 0.0001843 seconds, Stopping threads took: 0.0000279 seconds +2021-01-27T14:15:08.052+0000: 3516.764: Total time for which application threads were stopped: 0.0004805 seconds, Stopping threads took: 0.0000951 seconds +2021-01-27T14:15:08.053+0000: 3516.765: Total time for which application threads were stopped: 0.0001684 seconds, Stopping threads took: 0.0000310 seconds +2021-01-27T14:15:08.067+0000: 3516.779: Total time for which application threads were stopped: 0.0033093 seconds, Stopping threads took: 0.0029333 seconds +2021-01-27T14:15:08.071+0000: 3516.783: Total time for which application threads were stopped: 0.0003724 seconds, Stopping threads took: 0.0001938 seconds +2021-01-27T14:15:09.072+0000: 3517.784: Total time for which application threads were stopped: 0.0007371 seconds, Stopping threads took: 0.0002940 seconds +2021-01-27T14:15:11.142+0000: 3519.854: Total time for which application threads were stopped: 0.0001939 seconds, Stopping threads took: 0.0000506 seconds +2021-01-27T14:15:11.142+0000: 3519.854: Total time for which application threads were stopped: 0.0001325 seconds, Stopping threads took: 0.0000243 seconds +2021-01-27T14:15:12.143+0000: 3520.855: Total time for which application threads were stopped: 0.0002395 seconds, Stopping threads took: 0.0000782 seconds +2021-01-27T14:15:36.157+0000: 3544.869: Total time for which application threads were stopped: 0.0003154 seconds, Stopping threads took: 0.0000733 seconds +2021-01-27T14:15:41.235+0000: 3549.947: Total time for which application threads were stopped: 0.0006003 seconds, Stopping threads took: 0.0000835 seconds diff --git a/deploy/docker-compose.yaml b/deploy/docker-compose.yaml index 44606d3..a7ba377 100644 --- a/deploy/docker-compose.yaml +++ b/deploy/docker-compose.yaml @@ -173,11 +173,15 @@ services: - frontend grafana: - image: grafana/grafana + image: grafana/grafana:7.3.7 ports: - "3000:3000" environment: - GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-worldmap-panel + volumes: + - ./crate-datasource:/var/lib/grafana/plugins/crate-datasource + - ./grafana-map-plugin:/var/lib/grafana/plugins/map-panel + - ./grafana.db:/var/lib/grafana/grafana.db depends_on: - crate networks: diff --git a/deploy/grafana-map-plugin/.eslintignore b/deploy/grafana-map-plugin/.eslintignore new file mode 100755 index 0000000..e61de8a --- /dev/null +++ b/deploy/grafana-map-plugin/.eslintignore @@ -0,0 +1,2 @@ +dist/* +src/libs/leaflet.js diff --git a/deploy/grafana-map-plugin/.eslintrc b/deploy/grafana-map-plugin/.eslintrc new file mode 100755 index 0000000..c65b5e9 --- /dev/null +++ b/deploy/grafana-map-plugin/.eslintrc @@ -0,0 +1,50 @@ +{ + "root": true, + "extends": "airbnb/base", + "env": { + "browser": true + }, + "parser": "babel-eslint", + "parserOptions": { + "ecmaVersion": 6 + }, + "rules": { + "array-bracket-spacing": 0, + "arrow-body-style": 0, + "comma-dangle": 0, // not sure why airbnb turned this on. gross! + "computed-property-spacing": 0, + "consistent-return": 0, + "global-require": 0, + "id-length": [2, {"min": 2, "max": 30, "properties": "never", "exceptions": ["_", "t", "a", "b"]}], + "import/default": 0, + "import/named": 0, + "import/namespace": 0, + "import/no-duplicates": 0, + "import/no-named-as-default": 2, + "import/no-unresolved": 0, + "import/extensions": 0, + "indent": [2, 2, {"SwitchCase": 1}], + "max-len": [0, 120, 2], + "no-alert": 0, + "no-console": 0, + "no-param-reassign": [2, {"props": false}], + "no-use-before-define": 0, // disabled until https://github.com/babel/babel-eslint/issues/249 is fixed + "no-underscore-dangle": 0, + "object-curly-spacing": 0, + "object-shorthand": 0, + "prefer-arrow-callback": 0, + "prefer-template": 0, + "quote-props": [2, "consistent"] + }, + "plugins": [ + "import" + ], + "settings": { + "import/parser": "babel-eslint", + "import/resolve": { + "moduleDirectory": ["node_modules", "src"] + } + }, + "globals": { + } +} diff --git a/deploy/grafana-map-plugin/.gitignore b/deploy/grafana-map-plugin/.gitignore new file mode 100755 index 0000000..3bb7e5c --- /dev/null +++ b/deploy/grafana-map-plugin/.gitignore @@ -0,0 +1,5 @@ +node_modules +npm-debug.log +.DS_Store +crate-datasource +package-lock.json \ No newline at end of file diff --git a/deploy/grafana-map-plugin/.gitlab-ci.yml b/deploy/grafana-map-plugin/.gitlab-ci.yml new file mode 100755 index 0000000..603ada8 --- /dev/null +++ b/deploy/grafana-map-plugin/.gitlab-ci.yml @@ -0,0 +1,29 @@ +image: node:9.11 +cache: + paths: + - node_modules/ + +stages: + - build + - deploy + +build frontend: + stage: build + script: + - yarn install + - yarn build + +pages: + stage: deploy + script: + - echo "Creating artifact / Deploying" + - yarn install + - yarn build + - rm -rf public + - mv dist public + artifacts: + paths: + - public + expire_in: 1 month + only: + - master diff --git a/deploy/grafana-map-plugin/CHANGELOG.md b/deploy/grafana-map-plugin/CHANGELOG.md new file mode 100755 index 0000000..72456e8 --- /dev/null +++ b/deploy/grafana-map-plugin/CHANGELOG.md @@ -0,0 +1,118 @@ +# Changelog + +## v1.3.1 +- Map centered at location updated when changing coordinates. + +## v1.3.0 +- New option for centering map at user geolocation + +## v1.2.0 +- Suport for leaflet markercluster +- Suport for leaflet sleep to avoid auto scroll when hover big dashboards. +- Resize panel improvements for mobile. +- min zoom level set to 3. + +## v1.1.0 +- In the editor metrics tab, a query result can be 'format as' 'table' + +## v1.0.0 + +### New features / Fix +- Changed the plugin's working process. Any datasource query with a group by clause will result in layers. +- Map rendering faster. +- Removal of polylines for data point of type traffic flow observed. +- Data points of type air quality, traffic flow and other have now distinct shapes (circle, square and triangle). +- Added missing snapshot functionality (Not tested). +- New option on editor for cityenv variable support. If we choose this option the map centers on the selected city. +- Fix problem with multiple map panels in the same dashboard. +- Ability to change the icon associated to the layer (with leaflet.awesome-markers). +- When adding this panel for the first time to a dashboard, metrics are filled with predefined values. +- Dark theme improvements. + +### Development +- Improvements based on grafana development guide best practices. +- New project structure. Improved DRY. +- Updated project packages. Leaflet version updated from 0.7 to 1.3. +- Updated project packages. Highcharts updated from 5.0.15 to 6.1.0. +- Fix app bugs introduced by Leaflet update. +- Gruntfile improvements. + +## v0.1.0 + +- Project structure improvements. Leaflet and highstock went out from project src and are now a dependency. +- Support for light and dark themes. +- From now on this file contents are reverse ordered to get last features on top. + +## v0.0.2 + +- Fixes bug where time series with a country code not found in the country data crashes the panel. +- Adds some extra country codes to the country data to be more similar to the MaxMind Country database. + +## v0.0.3 + +- Support for lowercase country codes for non-elasticsearch datasources. + +## v0.0.4 + +- Fixes snapshotting. + +## v.0.0.5 + +- Adds support for json and jsonp endpoints for location data. + +## v.0.0.6 + +- Adds decimal places option for data values in circle popovers. + +## v.0.0.7 + +- Updates tile map urls to https to avoid mixed content warnings on https sites. + +## v.0.0.8 + +- Saves location data in the dashboard json when snapshotting. This means snapshots should work even when using a custom endpoint for returning a location data json file. + +## v.0.0.9 + +- Fixes bug that meant location data did not refresh after being changed in the editor. It required the page to be refreshed to reload it. + +## v.0.0.10 + +- Performance fix for snapshotting. Sets maxdatapoints to 1 to minimize data that needs to be saved in the snapshot. + +## v.0.0.11 + +- Zoom issue fix and adds a states options for USA states location data. + +## v.0.0.12 + +- Fixes [issue with the JSON endpoint not working](https://github.com/grafana/worldmap-panel/issues/22) + +## v.0.0.13 + +- New location data option -> table data. Location data can now come from data sources other than graphite and Elasticsearch (InfluxDb for example). See table data instructions above on how to use it. + +## v.0.0.14 + +- Various [bug](https://github.com/grafana/worldmap-panel/pull/31) [fixes](https://github.com/grafana/worldmap-panel/pull/32) provided by [linkslice](https://github.com/linkslice) (Thank you!) + +## v.0.0.15 + +- Fix for change in Grafana that [breaks Worldmap panels using Geohash or Table Data](https://github.com/grafana/worldmap-panel/issues/45). + +## v.0.0.16 + +- Option for sticky labels. Fix for https://github.com/grafana/worldmap-panel/issues/27 + +- Ability to hide null or 0 values. Fix for https://github.com/grafana/worldmap-panel/issues/13 + +- Background color change. Fixes https://github.com/grafana/worldmap-panel/issues/36 + +- Dynamic thresholds implemented by [Sam Hatchett](https://github.com/samhatchett). Can now have more than 2 threshold values. Thanks! Fixes https://github.com/grafana/worldmap-panel/issues/25 + +- Validation and default values for option fields. Fixes https://github.com/grafana/worldmap-panel/issues/29 + +## v.0.0.17 + +- Adds Country data with 3-letter country codes. + diff --git a/deploy/grafana-map-plugin/CONTRIBUTING.md b/deploy/grafana-map-plugin/CONTRIBUTING.md new file mode 100755 index 0000000..b8dfe48 --- /dev/null +++ b/deploy/grafana-map-plugin/CONTRIBUTING.md @@ -0,0 +1,82 @@ +# Building Map Plugin + +## Requirements +- git +- npm / yarn + +## Install process + +- Clone "map-plugin" from repo to the grafana plugins folder. (eg. grafana_data/plugins) + +- Install plugin package dependencies + +```sh +$ npm install +``` +or +``` +$ yarn install +``` + +If you are using Docker, the two steps above can be done as follows: +``` +# First cd into this plugin's folder. +docker run -it --rm -v "$PWD":/usr/src/app -w /usr/src/app node:8 npm install +docker run -it --rm -v "$PWD":/usr/src/app -w /usr/src/app node:8 yarn install +``` + +## Test / Run + +- clone the crated data source. + + ```sh + $ sh get-crate-plugin.sh + ``` + +- Start docker-compose. + + ```sh + $ docker-compose up -d + ``` + +Once the services are up and running, set-up the data as follows: + +- Populate the database: + + ```sh + $ sh create-table.sh + ``` + +- Set-up grafana: + + ```sh + $ sh set-up-grafana.sh + ``` + +**NOTE:** Unless you remove the docker volumes, you need to run the last two +steps above only the first time) + +At this point in time login in grafana using admin/admin and you should be +able to see a dashboard called `Dashboard Map`. If there is an error regarding +the datasource metadata, just go to the `datasource` menu, open the datasource +and click `save & test`. + +## Other Tasks + +- `Compile the code` + restart grafana +```sh +$ yarn build && docker-compose restart grafana +``` + +Or using docker: +``` +docker run -it --rm -v "$PWD":/usr/src/app -w /usr/src/app node:8 yarn build +docker-compose restart grafana +``` + +## Notes + +Default start page url: http://localhost:3000 +Default user/pass is admin/admin. + +If you are trying to install packages and you get console permissions errors, it could be related with grafana changing owner from dist files. diff --git a/deploy/grafana-map-plugin/Gruntfile.js b/deploy/grafana-map-plugin/Gruntfile.js new file mode 100755 index 0000000..8befc86 --- /dev/null +++ b/deploy/grafana-map-plugin/Gruntfile.js @@ -0,0 +1,137 @@ +/* eslint import/no-extraneous-dependencies: 0 */ + +module.exports = (grunt) => { + require('load-grunt-tasks')(grunt); + + // grunt.loadNpmTasks('grunt-exec'); + grunt.loadNpmTasks('grunt-contrib-clean'); + // grunt.loadNpmTasks('grunt-postcss'); + + grunt.initConfig({ + clean: ['dist'], + copy: { + srcToDist: { + cwd: 'src', + expand: true, + src: ['plugin.json', '**/*.html', '!**/*.js', '**/*.css'], + dest: 'dist' + }, + pluginDef: { + expand: true, + src: [ 'LICENSE', 'README.md', 'CHANGELOG.md' ], + dest: 'dist', + }, + + imgToDist: { + cwd: 'src', + expand: true, + src: ['img/**/*'], + dest: 'dist/' + }, + + leaflet: { + cwd: 'node_modules/leaflet/dist/', + expand: true, + src: ['**/*'], + dest: 'dist/vendor/leaflet' + }, + + turf: { + cwd: 'node_modules/turf', + expand: true, + src: ['**/*'], + dest: 'dist/vendor/turf' + }, + + osmbuildings: { + cwd: 'node_modules/osmbuildings/dist/', + expand: true, + src: ['**/*'], + dest: 'dist/vendor/osmbuildings' + }, + + leafletAwesomeMarkers: { + cwd: 'node_modules/leaflet.awesome-markers/dist/', + expand: true, + src: ['**/*'], + dest: 'dist/vendor/leaflet.awesome-markers' + }, + + leafletMarkerCluster: { + cwd: 'node_modules/leaflet.markercluster/dist/', + expand: true, + src: ['**/*'], + dest: 'dist/vendor/leaflet.markercluster' + }, + + leafletSleep: { + cwd: 'node_modules/leaflet-sleep/', + expand: true, + src: ['Leaflet.Sleep.js'], + dest: 'dist/vendor/leaflet-sleep/' + }, + + fontawesome: { + cwd: 'node_modules/@fortawesome/fontawesome-free/', + expand: true, + src: ['css/*.css','webfonts/*'], + dest: 'dist/vendor/fontawesome-free' + }, + + }, + + babel: { + options: { + sourceMap: true, + presets: ['@babel/preset-env'] + }, + dist: { + files: [ + { + cwd: 'src', + expand: true, + src: ['**/*.js'], + dest: 'dist', + ext: '.js' + }, + ] + }, + }, + + // postcss: { + // options: { + // map: true, // inline sourcemaps + + // processors: [ + // require('pixrem')(), // add fallbacks for rem units + // require('autoprefixer')({browsers: 'last 2 versions'}), // add vendor prefixes + // //require('cssnano')() // minify the result TO-DO: just for production + // ] + // }, + // dist: { + // cwd: 'src', + // expand: true, + // src: ['*css/*.css'], + // dest: 'dist' + // } + // } + + }); + + grunt.registerTask('default', [ + 'clean', + 'copy:srcToDist', + 'copy:pluginDef', + 'copy:imgToDist', + 'copy:leaflet', + 'copy:turf', + 'copy:osmbuildings', + 'copy:leafletAwesomeMarkers', + 'copy:leafletMarkerCluster', + 'copy:leafletSleep', + 'copy:fontawesome', + + // 'postcss', + 'babel' + ]); +}; diff --git a/deploy/grafana-map-plugin/LICENSE b/deploy/grafana-map-plugin/LICENSE new file mode 100755 index 0000000..4644c8c --- /dev/null +++ b/deploy/grafana-map-plugin/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Grafana + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/deploy/grafana-map-plugin/README.md b/deploy/grafana-map-plugin/README.md new file mode 100755 index 0000000..7f32a7c --- /dev/null +++ b/deploy/grafana-map-plugin/README.md @@ -0,0 +1,8 @@ +# Grafana Map Plugin + +Map views of your Time Series datasources. + +Use this plugin if you want: + +- A representation of your geolocated data in one map panel with your points represented as markers. +- Analyse the historical timeline data using a line chart. \ No newline at end of file diff --git a/deploy/grafana-map-plugin/circle.yml b/deploy/grafana-map-plugin/circle.yml new file mode 100755 index 0000000..47283e9 --- /dev/null +++ b/deploy/grafana-map-plugin/circle.yml @@ -0,0 +1,12 @@ +machine: + node: + version: 6.4.0 + +dependencies: + override: + - npm install + - npm run build + +test: + override: + - npm run test diff --git a/deploy/grafana-map-plugin/config.sh b/deploy/grafana-map-plugin/config.sh new file mode 100755 index 0000000..43ee84d --- /dev/null +++ b/deploy/grafana-map-plugin/config.sh @@ -0,0 +1 @@ +CRATE_URL="localhost:4200" diff --git a/deploy/grafana-map-plugin/create-table.sh b/deploy/grafana-map-plugin/create-table.sh new file mode 100755 index 0000000..e5f8314 --- /dev/null +++ b/deploy/grafana-map-plugin/create-table.sh @@ -0,0 +1,211 @@ +source config.sh + +echo 'create table\n' + +curl -sS -H 'Content-Type: application/json' \ + -X POST "$CRATE_URL/_sql" \ + -H 'Default-Schema: doc' \ + -d '{"stmt":"create table example ( bool boolean, address object, availablespotnumber FLOAT, entity_id STRING, entity_type STRING, fiware_servicepath STRING, license STRING, location GEO_SHAPE, location_centroid GEO_POINT, name STRING, source STRING, status STRING, time_index TIMESTAMP, timeinstant STRING);"}' + +echo '\n\ninsert data 1\n' + +curl -sS -H 'Content-Type: application/json' \ + -X POST "$CRATE_URL/_sql" \ + -H 'Default-Schema: doc' \ + -d ' + {"stmt": "INSERT INTO example (bool, address,availablespotnumber,entity_id,entity_type,fiware_servicepath,license,location,location_centroid,name,source,status,time_index,timeinstant) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", "bulk_args": [[true, {"addressCountry":"Switzerland","streetAddress":"Armin-Bollinger-Weg","addressLocality":"Zurich"}, 73, "urn:ngsi-ld:OffStreetParking:max_bill_platz", "OffStreetParking", "/ParkingManagement", "https://creativecommons.org/publicdomain/zero/1.0/", {"coordinates":[[8.5379554,47.4143907],[8.5378758,47.4143952],[8.5365221,47.4144732],[8.5364455,47.4144776]],"type":"LineString"}, [8.537199699999999,47.414434175], "Parkhaus Max-Bill-Platz / Armin-Bollinger-Weg", "https://data.stadt-zuerich.ch", "open", 1551872353000, "2019-03-06T11:39:13Z"]]}' + +echo '\n\ninsert data 2\n' + + curl -sS -H 'Content-Type: application/json' \ + -X POST "$CRATE_URL/_sql" \ + -H 'Default-Schema: doc' \ + -d '{"stmt": "INSERT INTO example (bool, address,availablespotnumber,entity_id,entity_type,fiware_servicepath,license,location,location_centroid,name,source,status,time_index,timeinstant) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", "bulk_args": [[false, {"addressCountry": "Switzerland","streetAddress": "Dufourstrasse 142","addressLocality": "Zurich"},65,"urn:ngsi-ld:OffStreetParking:zuerichhorn","OffStreetParking","/ParkingManagement","https://creativecommons.org/publicdomain/zero/1.0/",{"coordinates":[[[8.5532871,47.3560349],[8.5533097,47.3560042],[8.5533122,47.3560009],[8.5535063,47.3560663],[8.5535399,47.3560206],[8.5535011,47.3560076],[8.5535323,47.355965],[8.5535761,47.3559798],[8.5535994,47.3559482],[8.5536647,47.3559702],[8.5535516,47.3561241],[ 8.5532871,47.3560349]]],"type": "Polygon"},[8.553472291666667,47.35601305833334],"Parkhaus Zurichhorn / Dufourstrasse 142","https://data.stadt-zuerich.ch","open",1552031070000,"2019-03-08T07:44:30Z"]]}' + +echo '\n\ninsert data 3\n' + + curl -sS -H 'Content-Type: application/json' \ + -X POST "$CRATE_URL/_sql" \ + -H 'Default-Schema: doc' \ + -d '{"stmt": "INSERT INTO example (address,availablespotnumber,entity_id,entity_type,fiware_servicepath,license,location,location_centroid,name,source,status,time_index,timeinstant) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", "bulk_args": [[{"addressCountry":"Switzerland","streetAddress":"Gloriastrasse","addressLocality":"Zurich"}, 55, "urn:ngsi-ld:OffStreetParking:unispital_sued", "OffStreetParking", "/ParkingManagement", "https://creativecommons.org/publicdomain/zero/1.0/", {"coordinates":[[8.5536227,47.3770429],[8.5539427,47.3769896],[8.5543784,47.3769189]],"type":"LineString"}, [8.553981266666666,47.3769838], "Parkplatz USZ S�d / Gloriastrasse", "https://data.stadt-zuerich.ch/", "open", 1551906232000, "2019-03-06T21:03:52Z"]]}' + +echo '\n\ninsert data 4\n' + + curl -sS -H 'Content-Type: application/json' \ + -X POST "$CRATE_URL/_sql" \ + -H 'Default-Schema: doc' \ + -d '{"stmt": "INSERT INTO example (address,availablespotnumber,entity_id,entity_type,fiware_servicepath,license,location,location_centroid,name,source,status,time_index,timeinstant) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", "bulk_args": [[{"addressCountry":"Switzerland","streetAddress":"N�schelerstrasse 31","addressLocality":"Zurich"}, 45, "urn:ngsi-ld:OffStreetParking:talgarten", "OffStreetParking", "/ParkingManagement", "https://creativecommons.org/publicdomain/zero/1.0/", {"coordinates":[[[8.5353503,47.3724602],[8.5354002,47.3724064],[8.5354454,47.3723659],[8.535915,47.3720271],[8.5360576,47.3721039],[8.5360503,47.3721084],[8.5360682,47.3721192],[8.5356209,47.3724429],[8.5355803,47.3724762],[8.5355454,47.3725128],[8.5355045,47.3724983],[8.5353503,47.3724602]]],"type":"Polygon"}, [8.535657366666667,47.37233179166666], "Parkhaus Talgarten / N�schelerstrasse 31", "https://data.stadt-zuerich.ch/", "open", 1552158093000, "2019-03-09T19:01:33Z"]]}' + +echo '\n\ninsert data 5\n' + + curl -sS -H 'Content-Type: application/json' \ + -X POST "$CRATE_URL/_sql" \ + -H 'Default-Schema: doc' \ + -d '{"stmt": "INSERT INTO example (address,availablespotnumber,entity_id,entity_type,fiware_servicepath,license,location,location_centroid,name,source,status,time_index,timeinstant) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", "bulk_args": [[{"addressCountry":"Switzerland","streetAddress":"Schillerstrasse 5","addressLocality":"Zurich"}, 35, "urn:ngsi-ld:OffStreetParking:opera", "OffStreetParking", "/ParkingManagement", "https://creativecommons.org/publicdomain/zero/1.0/", {"coordinates":[[[8.5457149,47.3656622],[8.546062,47.365176],[8.5468001,47.365415],[8.5469132,47.3654479],[8.5472176,47.3655636],[8.5471347,47.3656516],[8.5470483,47.3656188],[8.546679,47.3659876],[8.5457149,47.3656622]]],"type":"Polygon"}, [8.546587188888887,47.3655761], "Parkhaus Op�ra / Schillerstrasse 5", "https://data.stadt-zuerich.ch/", "open", 1551200630000, "2019-02-26T17:03:50Z" +]]}' + +echo '\n\ninsert data 6\n' + + curl -sS -H 'Content-Type: application/json' \ + -X POST "$CRATE_URL/_sql" \ + -H 'Default-Schema: doc' \ + -d '{"stmt": "INSERT INTO example (address,availablespotnumber,entity_id,entity_type,fiware_servicepath,license,location,location_centroid,name,source,status,time_index,timeinstant) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", "bulk_args": [[{"addressCountry":"Switzerland","streetAddress":"Schillerstrasse 5","addressLocality":"Zurich"}, 25, "urn:ngsi-ld:OffStreetParking:opera", "OffStreetParking2", "/ParkingManagement", "https://creativecommons.org/publicdomain/zero/1.0/", {"coordinates":[[[8.5457149,47.3656622],[8.546062,47.265176],[8.5468001,47.365415],[8.5469132,47.3654479],[8.5472176,47.3655636],[8.5471347,47.3656516],[8.5470483,47.3656188],[8.546679,47.3659876],[8.5457149,47.3656622]]],"type":"Polygon"}, [8.546587188888887,47.3655761], "Parkhaus Op�ra / Schillerstrasse 55", "https://data.stadt-zuerich.ch/", "open", 1551200630000, "2019-02-26T17:03:50Z" +]]}' + +echo '\n\ninsert data 6\n' + + curl -sS -H 'Content-Type: application/json' \ + -X POST 'localhost:4200/_sql' \ + -H 'Default-Schema: doc' \ + -d '{"stmt": "INSERT INTO example (address,availablespotnumber,entity_id,entity_type,fiware_servicepath,license,location,location_centroid,name,source,status,time_index,timeinstant) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", "bulk_args": [[{"addressCountry":"Switzerland","streetAddress":"Gladbachstrasse","addressLocality":"Zurich"}, 0, "urn:ngsi-ld:OffStreetParking:Siriuswiese", "OffStreetParking", "/ParkingManagement", "https://creativecommons.org/publicdomain/zero/1.0/", {"coordinates":[8.5539437,47.3797464],"type":"Point"}, [8.5539437,47.3797464], "Siriuswiese", "https://test.ch/", "open", 1551200630000, "2019-02-26T17:03:50Z" +]]}' + +echo '\n\ninsert data 7\n' + + curl -sS -H 'Content-Type: application/json' \ + -X POST 'localhost:4200/_sql' \ + -H 'Default-Schema: doc' \ + -d '{"stmt": "INSERT INTO example (address,availablespotnumber,entity_id,entity_type,fiware_servicepath,license,location,location_centroid,name,source,status,time_index,timeinstant) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", "bulk_args": [[{"addressCountry":"Switzerland","streetAddress":"Voltastrasse 40","addressLocality":"Zurich"}, 1, "urn:ngsi-ld:OffStreetParking:ultimobacio", "OffStreetParking", "/ParkingManagement", "https://creativecommons.org/publicdomain/zero/1.0/", {"coordinates":[8.5534266,47.3791918],"type":"Point"}, [8.5534266,47.3791918], "LUltimo Bacio", "https://test/", "open", 1551200630000, "2019-02-26T17:03:50Z" +]]}' + +echo '\n\ninsert data 8\n' + + curl -sS -H 'Content-Type: application/json' \ + -X POST 'localhost:4200/_sql' \ + -H 'Default-Schema: doc' \ + -d '{"stmt": "INSERT INTO example (address,availablespotnumber,entity_id,entity_type,fiware_servicepath,license,location,location_centroid,name,source,status,time_index,timeinstant) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", "bulk_args": [[{"addressCountry":"Switzerland","streetAddress":"Liedenhofstrasse 4","addressLocality":"Zurich"}, 1, "urn:ngsi-ld:EVChargingStation:EVChargingStation1", "EVChargingStation", "/ParkingManagement", "https://creativecommons.org/publicdomain/zero/1.0/", {"coordinates":[8.54098230600357, 47.37481948235262],"type":"Point"}, [8.54098230600357, 47.37481948235262], "EVChargingStation 1", "https://test/", "open", 1551200630000, "2019-02-26T17:03:50Z" +]]}' + +echo '\n\ninsert data 9\n' + + curl -sS -H 'Content-Type: application/json' \ + -X POST 'localhost:4200/_sql' \ + -H 'Default-Schema: doc' \ + -d '{"stmt": "INSERT INTO example (address,availablespotnumber,entity_id,entity_type,fiware_servicepath,license,location,location_centroid,name,source,status,time_index,timeinstant) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", "bulk_args": [[{"addressCountry":"Switzerland","streetAddress":"Liedenhofstrasse 4","addressLocality":"Zurich"}, 1, "urn:ngsi-ld:EVChargingStation:EVChargingStation2", "EVChargingStation", "/ParkingManagement", "https://creativecommons.org/publicdomain/zero/1.0/", {"coordinates":[8.54112982749939,47.37481040040007],"type":"Point"}, [8.54112982749939,47.37481040040007], "EVChargingStation 2", "https://test/", "open", 1551200630000, "2019-02-26T17:03:50Z" +]]}' + +echo '\n\ninsert data 10\n' + + curl -sS -H 'Content-Type: application/json' \ + -X POST 'localhost:4200/_sql' \ + -H 'Default-Schema: doc' \ + -d '{"stmt": "INSERT INTO example (address,availablespotnumber,entity_id,entity_type,fiware_servicepath,license,location,location_centroid,name,source,status,time_index,timeinstant) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", "bulk_args": [[{"addressCountry": "Switzerland","streetAddress": "Liedenhofstrasse 4","addressLocality": "Zurich"},1,"urn:ngsi-ld:OffStreetParking:l1","OffStreetParking","/ParkingManagement","https://creativecommons.org/publicdomain/zero/1.0/",{"coordinates":[ + [ + [ + 8.54087769985199, + 47.374832197083556 + ], + [ + 8.540968894958496, + 47.374826747913545 + ], + [ + 8.5409876704216, + 47.3749084854048 + ], + [ + 8.540893793106079, + 47.37491575095346 + ], + [ + 8.54087769985199, + 47.374832197083556 + ] + ] + ],"type": "Polygon"},[8.54087769985199,47.374832197083556],"Random Test in Zurich","https://test.ch","open",1552031070000,"2019-03-08T07:44:30Z"]]}' + +echo '\n\ninsert data 11\n' + + curl -sS -H 'Content-Type: application/json' \ + -X POST 'localhost:4200/_sql' \ + -H 'Default-Schema: doc' \ + -d '{"stmt": "INSERT INTO example (address,availablespotnumber,entity_id,entity_type,fiware_servicepath,license,location,location_centroid,name,source,status,time_index,timeinstant) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", "bulk_args": [[{"addressCountry": "Switzerland","streetAddress": "Liedenhofstrasse 4","addressLocality": "Zurich"},1,"urn:ngsi-ld:OffStreetParking:l2","OffStreetParking","/ParkingManagement","https://creativecommons.org/publicdomain/zero/1.0/",{"coordinates":[ + [ + [ + 8.541017174720764, + 47.37482493152339 + ], + [ + 8.5411137342453, + 47.37481766596224 + ], + [ + 8.54112982749939, + 47.37489758707997 + ], + [ + 8.541038632392883, + 47.3749048526301 + ], + [ + 8.541017174720764, + 47.37482493152339 + ] + ] + ],"type": "Polygon"},[8.541038632392883,47.3749048526301],"Random Test in Zurich","https://test.ch","open",1552031070000,"2019-03-08T07:44:30Z"]]}' + +echo '\n\ninsert data 12\n' + + curl -sS -H 'Content-Type: application/json' \ + -X POST 'localhost:4200/_sql' \ + -H 'Default-Schema: doc' \ + -d '{"stmt": "INSERT INTO example (address,availablespotnumber,entity_id,entity_type,fiware_servicepath,license,location,location_centroid,name,source,status,time_index,timeinstant) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", "bulk_args": [[{"addressCountry": "Switzerland","streetAddress": "Liedenhofstrasse 4","addressLocality": "Zurich"},1,"urn:ngsi-ld:OffStreetParking:l3","OffStreetParking","/ParkingManagement","https://creativecommons.org/publicdomain/zero/1.0/",{"coordinates":[ + [ + [ + 8.540861606597899, + 47.374719580788586 + ], + [ + 8.540947437286377, + 47.37471594800088 + ], + [ + 8.540960848331451, + 47.37480131844597 + ], + [ + 8.540880382061005, + 47.374808584009386 + ], + [ + 8.540861606597899, + 47.374719580788586 + ] + ] + ],"type": "Polygon"},[8.540960848331451,47.37480131844597],"Random Test in Zurich","https://test.ch","open",1552031070000,"2019-03-08T07:44:30Z"]]}' + +echo '\n\ninsert data 12\n' + + curl -sS -H 'Content-Type: application/json' \ + -X POST 'localhost:4200/_sql' \ + -H 'Default-Schema: doc' \ + -d '{"stmt": "INSERT INTO example (address,availablespotnumber,entity_id,entity_type,fiware_servicepath,license,location,location_centroid,name,source,status,time_index,timeinstant) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", "bulk_args": [[{"addressCountry": "Switzerland","streetAddress": "Liedenhofstrasse 4","addressLocality": "Zurich"},1,"urn:ngsi-ld:OffStreetParking:l4","OffStreetParking","/ParkingManagement","https://creativecommons.org/publicdomain/zero/1.0/",{"coordinates":[ + [ + [ + 8.54099839925766, + 47.37471231521293 + ], + [ + 8.541092276573181, + 47.374708682424696 + ], + [ + 8.5411137342453, + 47.374799502054955 + ], + [ + 8.541017174720764, + 47.37480131844597 + ], + [ + 8.54099839925766, + 47.37471231521293 + ] + ] + ],"type": "Polygon"},[8.541092276573181,47.374708682424696],"Random Test in Zurich","https://test.ch","open",1552031070000,"2019-03-08T07:44:30Z"]]}' + + +echo '\n\ndone\n' + + + diff --git a/deploy/grafana-map-plugin/dashboards/map.json b/deploy/grafana-map-plugin/dashboards/map.json new file mode 100755 index 0000000..2fba37d --- /dev/null +++ b/deploy/grafana-map-plugin/dashboards/map.json @@ -0,0 +1,276 @@ +{ + "dashboard": { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "links": [], + "panels": [ + { + "circleMaxSize": 30, + "circleMinSize": 2, + "cityEnvVariable": "", + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "datasource": "example", + "decimals": 0, + "esMetric": "Count", + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 0 + }, + "hideEmpty": false, + "hideZero": false, + "id": 2, + "initialZoom": "11", + "layersColors": { + "OffStreetParking": "blue" + }, + "layersIcons": { + "OffStreetParking": "car" + }, + "links": [], + "mapCenter": "Custom", + "mapCenterLatitude": "47.3655761", + "mapCenterLongitude": "8.546587188888887", + "maxDataPoints": 1, + "metrics": [], + "renderChart": false, + "showLegend": true, + "stickyLabels": false, + "targets": [ + { + "format": "time_series", + "group": [], + "groupByAliases": [ + "type" + ], + "groupByColumns": [ + "entity_type" + ], + "hide": false, + "metricAggs": [ + { + "alias": "id", + "column": "entity_id", + "type": "raw" + }, + { + "alias": "value", + "column": "availablespotnumber", + "type": "raw" + }, + { + "alias": "longitude", + "column": "longitude(location_centroid)", + "type": "raw" + }, + { + "alias": "latitude", + "column": "latitude(location_centroid)", + "type": "raw" + }, + { + "alias": "created_at", + "column": "time_index", + "type": "raw" + } + ], + "metricColumn": "none", + "rawQuery": false, + "rawSql": "SELECT\n $__time(time_column),\n value1\nFROM\n metric_table\nWHERE\n $__timeFilter(time_column)\n", + "refId": "A", + "resultFormat": "table", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "column" + } + ] + ], + "timeColumn": "time", + "timeInterval": "auto_gf", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ], + "whereClauses": [] + } + ], + "thresholds": "0,10", + "title": "Map Points", + "type": "grafana-traffic-env-panel", + "unitPlural": "", + "unitSingle": "", + "valueName": "total" + }, + { + "circleMaxSize": 30, + "circleMinSize": 2, + "cityEnvVariable": "", + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "datasource": "example", + "decimals": 0, + "esMetric": "Count", + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 9 + }, + "hideEmpty": false, + "hideZero": false, + "id": 3, + "initialZoom": "11", + "layersColors": { + "OffStreetParking": "blue" + }, + "layersIcons": { + "OffStreetParking": "car" + }, + "links": [], + "mapCenter": "Custom", + "mapCenterLatitude": "47.3655761", + "mapCenterLongitude": "8.546587188888887", + "maxDataPoints": 1, + "metrics": [], + "renderChart": false, + "showLegend": true, + "stickyLabels": false, + "targets": [ + { + "format": "time_series", + "group": [], + "groupByAliases": [ + "type" + ], + "groupByColumns": [ + "entity_type" + ], + "hide": false, + "metricAggs": [ + { + "alias": "id", + "column": "entity_id", + "type": "raw" + }, + { + "alias": "value", + "column": "availablespotnumber", + "type": "raw" + }, + { + "alias": "geojson", + "column": "location", + "type": "raw" + }, + { + "alias": "created_at", + "column": "time_index", + "type": "raw" + } + ], + "metricColumn": "none", + "rawQuery": false, + "rawSql": "SELECT\n $__time(time_column),\n value1\nFROM\n metric_table\nWHERE\n $__timeFilter(time_column)\n", + "refId": "A", + "resultFormat": "table", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "column" + } + ] + ], + "timeColumn": "time", + "timeInterval": "auto_gf", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ], + "whereClauses": [] + } + ], + "thresholds": "0,10", + "title": "Map GeoJson", + "type": "grafana-traffic-env-panel", + "unitPlural": "", + "unitSingle": "", + "valueName": "total" + } + ], + "schemaVersion": 16, + "style": "dark", + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-5y", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "", + "title": "Map Dashboard", + "version": 3 + }, + "folderId": 0, + "overwrite": true +} \ No newline at end of file diff --git a/deploy/grafana-map-plugin/data_sources/crate.json b/deploy/grafana-map-plugin/data_sources/crate.json new file mode 100755 index 0000000..cf49ed0 --- /dev/null +++ b/deploy/grafana-map-plugin/data_sources/crate.json @@ -0,0 +1,23 @@ +{ + "id": 3, + "orgId": 1, + "name": "example", + "type": "crate-datasource", + "typeLogoUrl": "public/plugins/crate-datasource/img/crate_logo.png", + "access": "proxy", + "url": "http://crate:4200", + "password": "", + "user": "", + "database": "", + "basicAuth": false, + "isDefault": false, + "jsonData": { + "keepCookies": [], + "schema": "doc", + "table": "example", + "timeColumn": "time_index", + "timeInterval": "auto_gf", + "tlsSkipVerify": true + }, + "readOnly": false +} \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/CHANGELOG.md b/deploy/grafana-map-plugin/dist/CHANGELOG.md new file mode 100755 index 0000000..72456e8 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/CHANGELOG.md @@ -0,0 +1,118 @@ +# Changelog + +## v1.3.1 +- Map centered at location updated when changing coordinates. + +## v1.3.0 +- New option for centering map at user geolocation + +## v1.2.0 +- Suport for leaflet markercluster +- Suport for leaflet sleep to avoid auto scroll when hover big dashboards. +- Resize panel improvements for mobile. +- min zoom level set to 3. + +## v1.1.0 +- In the editor metrics tab, a query result can be 'format as' 'table' + +## v1.0.0 + +### New features / Fix +- Changed the plugin's working process. Any datasource query with a group by clause will result in layers. +- Map rendering faster. +- Removal of polylines for data point of type traffic flow observed. +- Data points of type air quality, traffic flow and other have now distinct shapes (circle, square and triangle). +- Added missing snapshot functionality (Not tested). +- New option on editor for cityenv variable support. If we choose this option the map centers on the selected city. +- Fix problem with multiple map panels in the same dashboard. +- Ability to change the icon associated to the layer (with leaflet.awesome-markers). +- When adding this panel for the first time to a dashboard, metrics are filled with predefined values. +- Dark theme improvements. + +### Development +- Improvements based on grafana development guide best practices. +- New project structure. Improved DRY. +- Updated project packages. Leaflet version updated from 0.7 to 1.3. +- Updated project packages. Highcharts updated from 5.0.15 to 6.1.0. +- Fix app bugs introduced by Leaflet update. +- Gruntfile improvements. + +## v0.1.0 + +- Project structure improvements. Leaflet and highstock went out from project src and are now a dependency. +- Support for light and dark themes. +- From now on this file contents are reverse ordered to get last features on top. + +## v0.0.2 + +- Fixes bug where time series with a country code not found in the country data crashes the panel. +- Adds some extra country codes to the country data to be more similar to the MaxMind Country database. + +## v0.0.3 + +- Support for lowercase country codes for non-elasticsearch datasources. + +## v0.0.4 + +- Fixes snapshotting. + +## v.0.0.5 + +- Adds support for json and jsonp endpoints for location data. + +## v.0.0.6 + +- Adds decimal places option for data values in circle popovers. + +## v.0.0.7 + +- Updates tile map urls to https to avoid mixed content warnings on https sites. + +## v.0.0.8 + +- Saves location data in the dashboard json when snapshotting. This means snapshots should work even when using a custom endpoint for returning a location data json file. + +## v.0.0.9 + +- Fixes bug that meant location data did not refresh after being changed in the editor. It required the page to be refreshed to reload it. + +## v.0.0.10 + +- Performance fix for snapshotting. Sets maxdatapoints to 1 to minimize data that needs to be saved in the snapshot. + +## v.0.0.11 + +- Zoom issue fix and adds a states options for USA states location data. + +## v.0.0.12 + +- Fixes [issue with the JSON endpoint not working](https://github.com/grafana/worldmap-panel/issues/22) + +## v.0.0.13 + +- New location data option -> table data. Location data can now come from data sources other than graphite and Elasticsearch (InfluxDb for example). See table data instructions above on how to use it. + +## v.0.0.14 + +- Various [bug](https://github.com/grafana/worldmap-panel/pull/31) [fixes](https://github.com/grafana/worldmap-panel/pull/32) provided by [linkslice](https://github.com/linkslice) (Thank you!) + +## v.0.0.15 + +- Fix for change in Grafana that [breaks Worldmap panels using Geohash or Table Data](https://github.com/grafana/worldmap-panel/issues/45). + +## v.0.0.16 + +- Option for sticky labels. Fix for https://github.com/grafana/worldmap-panel/issues/27 + +- Ability to hide null or 0 values. Fix for https://github.com/grafana/worldmap-panel/issues/13 + +- Background color change. Fixes https://github.com/grafana/worldmap-panel/issues/36 + +- Dynamic thresholds implemented by [Sam Hatchett](https://github.com/samhatchett). Can now have more than 2 threshold values. Thanks! Fixes https://github.com/grafana/worldmap-panel/issues/25 + +- Validation and default values for option fields. Fixes https://github.com/grafana/worldmap-panel/issues/29 + +## v.0.0.17 + +- Adds Country data with 3-letter country codes. + diff --git a/deploy/grafana-map-plugin/dist/LICENSE b/deploy/grafana-map-plugin/dist/LICENSE new file mode 100755 index 0000000..4644c8c --- /dev/null +++ b/deploy/grafana-map-plugin/dist/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Grafana + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/deploy/grafana-map-plugin/dist/README.md b/deploy/grafana-map-plugin/dist/README.md new file mode 100755 index 0000000..7f32a7c --- /dev/null +++ b/deploy/grafana-map-plugin/dist/README.md @@ -0,0 +1,8 @@ +# Grafana Map Plugin + +Map views of your Time Series datasources. + +Use this plugin if you want: + +- A representation of your geolocated data in one map panel with your points represented as markers. +- Analyse the historical timeline data using a line chart. \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/css/worldmap-panel.css b/deploy/grafana-map-plugin/dist/css/worldmap-panel.css new file mode 100755 index 0000000..030714f --- /dev/null +++ b/deploy/grafana-map-plugin/dist/css/worldmap-panel.css @@ -0,0 +1,291 @@ +/*do not show at start*/ +.map-panel .hidden { + display: none; +} + + +@font-face { + font-family:Font Awesome\ 5 Free; + font-style:normal; + font-weight:900; + src:url(../vendor/fontawesome-free/webfonts/fa-solid-900.eot?v=5.11.2); + src:url(../vendor/fontawesome-free/webfonts/fa-solid-900.eot?#iefix&v=5.11.2) format("embedded-opentype"), + url(../vendor/fontawesome-free/webfonts/fa-solid-900.woff2?v=5.11.2) format("woff2"), + url(../vendor/fontawesome-free/webfonts/fa-solid-900.woff?v=5.11.2) format("woff"), + url(../vendor/fontawesome-free/webfonts/fa-solid-900.ttf?v=5.11.2) format("truetype"), + url(../vendor/fontawesome-free/webfonts/fa-solid-900.svg?v=5.11.2#fontawesomeregular) format("svg"); +} + +.fas { + font-family:Font Awesome\ 5 Free; + font-weight:900; + font-style:normal; +} + +.map-container { + /*height: 500px;*/ +} + +.map-container .info { + padding: 6px 8px; + font: 14px/16px Arial, Helvetica, sans-serif; + /* + background: white; + background: rgba(255,255,255,0.8); + */ + box-shadow: 0 0 15px rgba(0,0,0,0.2); + border-radius: 5px; +} +.map-container .info h4 { + margin: 0 0 5px; + color: #777; +} + +.map-container .legend { + line-height: 18px; + color: #555; +} +.map-container .legend i { + width: 18px; + height: 18px; + float: left; + margin-right: 8px; + opacity: 0.7; +} + +/*Leaflet map*/ +.map-container .worldmap-popup .leaflet-popup-content-wrapper, .worldmap-popup .leaflet-popup-tip { + border-radius: 3px; +} +.map-container .leaflet-top.leaflet-left, .leaflet-bottom.leaflet-left, .leaflet-bottom.leaflet-right { + z-index: 100; +} + +.map-container .worldmap-popup .stycky-popup-info { + display: table; +} + +.map-container .worldmap-popup .stycky-popup-info .head { + font-weight: bolder; + margin-bottom: 5px; + font-size: 15px; + text-align: center; +} + +.map-container .worldmap-popup .stycky-popup-info .body div { + display: table-row; +} +.map-container .worldmap-popup .stycky-popup-info .body div span { + display: table-cell; +} + +.map-container .worldmap-popup .stycky-popup-info .body div span:nth-child(1) { + font-weight: bolder; + font-style: italic; + padding-right: 10px; +} +/*---------------------------ADDED-------------------------------------*/ + +.map-container .map-container-popups > div { + z-index: 1000; +} + +.map-container .values-ranges-legend { + right: 10px; + bottom: 10px; + position: absolute; + border-radius: 2px; +} + +.map-container .measures-table { + width: 200px; + height: auto; + max-height: 350px; + position: absolute; + bottom: 10px; + left: 10px; + overflow-y: auto; + border-radius: 2px; +} +.map-container .health-concerns-wrapper { + border-radius: 2px; + width: 400px; + max-height: 110px; + height: auto; + position: absolute; + top: 10px; + left: 10px; +} +.map-container .health-concerns-wrapper > div.body { + width: 100%; + height: 100%; + overflow-y: auto; + padding: 2px; + border-radius: 2px; + text-align: justify; + padding: 5px; +} + +.map-container .health-risk { + padding-top: 3px; + font-size: 100%; +} + +.map-container table { + font-family: arial, sans-serif; + border-collapse: collapse; + width: 100%; +} + +.map-container td, .map-container th { + text-align: left; + padding: 8px; +/* color: black;*/ +} + +.map-container .map-container-popups .info-container>.header { + text-align: center; + /*color: black;*/ + font-weight: bold; + padding: 6px; +} +.map-container .map-container-popups .info-container>.header-left { + text-align: left !important; +} +.map-container .map-container-popups .info-container>.header>span { + float: right; +} +.map-container .map-container-popups .info-container>.header>span>span.color { + padding: 3px; +} + +.map-container .map-container-popups table.intensity-scale tr > td { + padding: 6px 8px; +} +.map-container .map-container-popups table.intensity-scale tr > td > span { + padding: 8px 3px; +} +.map-container .map-container-popups table.intensity-scale tr > td > span:nth-child(1) { + margin-right: 3px; +} + +/*levels of intensity*/ +.map-marker-level-0, .map-container .map-container-popups table.intensity-scale tr.level-0 > td:nth-child(2) > span:nth-child(1) { + background-color: #00e400; +} +.map-marker-level-1, .map-container .map-container-popups table.intensity-scale tr.level-1 > td:nth-child(2) > span:nth-child(1) { + background-color: #fdca92; +} +.map-marker-level-2, .map-container .map-container-popups table.intensity-scale tr.level-2 > td:nth-child(2) > span:nth-child(1) { + background-color: #ff7e00; +} +.map-marker-level-3, .map-container .map-container-popups table.intensity-scale tr.level-3 > td:nth-child(2) > span:nth-child(1) { + background-color: #d41c32; +} +.map-marker-level-4, .map-container .map-container-popups table.intensity-scale tr.level-4 > td:nth-child(2) > span:nth-child(1) { + background-color: #7e0023; +} +.map-marker-level-5, .map-container .map-container-popups table.intensity-scale tr.level-5 > td:nth-child(2) > span:nth-child(1) { + background-color: #8f3f97; +} + +.map-marker-default { + background-color: #00e400; +} + +.stycky-popup-info .body{ + display: table; + width: 100%; +} + +.stycky-popup-info .body .popup-single-value .name { + display: none !important; +} + +.stycky-popup-info .body .popup-single-value .value { + font-size: 40px; + display: inline-block !important; +} + +.stycky-popup-info .body .popup-single-value .unit { + font-size: 15px; + display: inline-block !important; +} + +.stycky-popup-info .body .name { + margin-left: 5px; + margin-right: 5px; +} + +.stycky-popup-info .body .value { + margin-left: 5px; + margin-right: 5px; +} + +.stycky-popup-info .body .unit { + margin-left: 5px; + margin-right: 5px; +} + +.stycky-popup-info .body .popup-single-value { + text-align: center; + display: block !important; +} + +.stycky-popup-info .body .popup-multi-value { + text-align: center; +} + +.map-container .worldmap-popup .stycky-popup-info .foot { + font-weight: bolder; + text-align: right; + margin-top: 5px; +} + +.stycky-popup-info .foot .name { + display: none !important; +} + +.stycky-popup-info .foot .unit { + display: none !important; +} + +.chart-container { + width: 100%; + /*height: 360px;*/ + margin-top: 1%; + z-index: 100; + position: relative; +} +.chart-container .data-details { +/* margin-bottom: 5px;*/ +} + +.empty-space-margin { + margin-right:3px; +} + +.oc-cluster { + background-clip: padding-box; + border-radius: 20px; +} + +.oc-cluster div { + width: 40px; + height: 40px; + margin-left: 5px; + margin-top: 5px; + + text-align: center; + border-radius: 20px; + font: 12px "Helvetica Neue", Arial, Helvetica, sans-serif; + color: white; +} + +.oc-cluster span.double { + line-height: 20px; +} + +.oc-cluster span.single { + line-height: 40px; +} \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/css/worldmap.dark.css b/deploy/grafana-map-plugin/dist/css/worldmap.dark.css new file mode 100755 index 0000000..299b11b --- /dev/null +++ b/deploy/grafana-map-plugin/dist/css/worldmap.dark.css @@ -0,0 +1,79 @@ +/*Leaflet Specific*/ +.map-container .map-darken img.leaflet-tile { + -webkit-filter: brightness(1.6) grayscale(1) contrast(1); + filter: brightness(1.6) grayscale(1) contrast(1); +} + +.map-container .leaflet-container .leaflet-control-attribution, +.map-container .leaflet-control-scale-line, +/*.map-container .leaflet-div-icon,*/ +.map-container .leaflet-control-layers-expanded { + background-color: #333; +} + +.map-container .worldmap-popup .leaflet-popup-content-wrapper, +.map-container .worldmap-popup .leaflet-popup-tip, +.map-container .leaflet-control-layers, +.map-container .leaflet-control-zoom a { + background-color: #333; + color: white; +} + +.leaflet-touch .leaflet-control-layers, +.leaflet-touch .leaflet-bar { + border: 1px solid black !important; +} + +/*map popups specific*/ +.map-container table tr, +.map-container .info-container { + color: white; +} + +.map-container table.stripes tbody > tr:nth-child(odd) { + background-color: #181819; +} +.map-container table.stripes tbody > tr:nth-child(even) { + background-color: #212124; +} + +.map-container .info-container { + border: grey solid 1px; +} + +.map-container thead > tr, +.map-container .info-container { + background-color: #212124; +} + +.map-container .info-container .header { +} +.map-container .info-container .body { +} + + +/*highcharts customization*/ +.chart-container .highcharts-button-box { + color: white; + fill: #333; + stroke: #181819; +} +.chart-container .highcharts-reset-zoom > text { + /*color: white;*/ + fill: white !important; +/* stroke: white;*/ +} + +.chart-container .highcharts-menu { + box-shadow: none !important; + background-color: #181819 !important; +} + +.chart-container .highcharts-menu .highcharts-menu-item { + color: white !important; +} + +.chart-container .parameters-dropdown { + /*border: 1px solid #171819;*/ + background-color: #181819; +} diff --git a/deploy/grafana-map-plugin/dist/css/worldmap.light.css b/deploy/grafana-map-plugin/dist/css/worldmap.light.css new file mode 100755 index 0000000..e234850 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/css/worldmap.light.css @@ -0,0 +1,21 @@ +.map-container .worldmap-popup .leaflet-popup-content-wrapper, .worldmap-popup .leaflet-popup-tip { + background-color: #ECECEC; +} + +.map-container table.stripes tbody tr:nth-child(odd) { + background-color: #E6E6E6; +} +.map-container table.stripes tbody > tr:nth-child(even) { + background-color: white; +} + +.map-container .info-container { + border: grey solid 1px; +} + +.map-container table.stripes tbody > tr { + color: black; +} +.map-container thead > tr, .map-container .info-container .header, .map-container .info-container .body { + background-color: white; +} diff --git a/deploy/grafana-map-plugin/dist/definitions.js b/deploy/grafana-map-plugin/dist/definitions.js new file mode 100755 index 0000000..07caf94 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/definitions.js @@ -0,0 +1,158 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.CLUSTER_TYPES = exports.COLOR_TYPES = exports.MARKER_COLORS = exports.ICON_TYPES = exports.MAP_LOCATIONS = exports.DEFAULT_METRICS = exports.TILE_SERVERS = exports.NOMINATIM_ADDRESS = exports.PANEL_DEFAULTS = exports.PLUGIN_PATH = void 0; +var PLUGIN_PATH = 'public/plugins/grafana-traffic-env-panel/'; +exports.PLUGIN_PATH = PLUGIN_PATH; +var MARKER_COLORS = ['red', 'blue', 'green', 'purple', 'orange', 'darkred', 'lightred', 'beige', 'darkblue', 'darkgreen', 'cadetblue', 'darkpurple', 'white', 'pink', 'lightblue', 'lightgreen', 'gray', 'black', 'lightgray']; +exports.MARKER_COLORS = MARKER_COLORS; +var DEFAULT_MARKER_COLORS_RANGE = { + range: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180], + markerColor: MARKER_COLORS +}; +var TILE_SERVERS = { + 'CartoDB Positron': { + url: 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png', + attribution: '© OpenStreetMap © CartoDB', + subdomains: 'abcd' + }, + 'CartoDB Dark': { + url: 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png', + attribution: '© OpenStreetMap © CartoDB', + subdomains: 'abcd' + } +}; +exports.TILE_SERVERS = TILE_SERVERS; +var COLOR_TYPES = ['fix', 'threshold']; +exports.COLOR_TYPES = COLOR_TYPES; +var CLUSTER_TYPES = ['none', 'count', 'average', 'total']; +exports.CLUSTER_TYPES = CLUSTER_TYPES; +var ICON_TYPES = ['none', 'address-book', 'address-book-o', 'address-card', 'address-card-o', 'adjust', 'adn', 'align-center', 'align-justify', 'align-left', 'align-right', 'amazon', 'ambulance', 'american-sign-language-interpreting', 'anchor', 'android', 'angellist', 'angle-double-down', 'angle-double-left', 'angle-double-right', 'angle-double-up', 'angle-down', 'angle-left', 'angle-right', 'angle-up', 'apple', 'archive', 'area-chart', 'arrow-circle-down', 'arrow-circle-left', 'arrow-circle-o-down', 'arrow-circle-o-left', 'arrow-circle-o-right', 'arrow-circle-o-up', 'arrow-circle-right', 'arrow-circle-up', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-up', 'arrows', 'arrows-alt', 'arrows-h', 'arrows-v', 'asl-interpreting', 'assistive-listening-systems', 'asterisk', 'at', 'audio-description', 'automobile', 'backward', 'balance-scale', 'ban', 'bandcamp', 'bank', 'bar-chart', 'bar-chart-o', 'barcode', 'bars', 'bath', 'bathtub', 'battery', 'battery-0', 'battery-1', 'battery-2', 'battery-3', 'battery-4', 'battery-empty', 'battery-full', 'battery-half', 'battery-quarter', 'battery-three-quarters', 'bed', 'beer', 'behance', 'behance-square', 'bell', 'bell-o', 'bell-slash', 'bell-slash-o', 'bicycle', 'binoculars', 'birthday-cake', 'bitbucket', 'bitbucket-square', 'bitcoin', 'black-tie', 'blind', 'bluetooth', 'bluetooth-b', 'bold', 'bolt', 'bomb', 'book', 'bookmark', 'bookmark-o', 'braille', 'briefcase', 'btc', 'bug', 'building', 'building-o', 'bullhorn', 'bullseye', 'bus', 'buysellads', 'cab', 'calculator', 'calendar', 'calendar-check-o', 'calendar-minus-o', 'calendar-o', 'calendar-plus-o', 'calendar-times-o', 'camera', 'camera-retro', 'car', 'caret-down', 'caret-left', 'caret-right', 'caret-square-o-down', 'caret-square-o-left', 'caret-square-o-right', 'caret-square-o-up', 'caret-up', 'cart-arrow-down', 'cart-plus', 'cc', 'cc-amex', 'cc-diners-club', 'cc-discover', 'cc-jcb', 'cc-mastercard', 'cc-paypal', 'cc-stripe', 'cc-visa', 'certificate', 'chain', 'chain-broken', 'check', 'check-circle', 'check-circle-o', 'check-square', 'check-square-o', 'chevron-circle-down', 'chevron-circle-left', 'chevron-circle-right', 'chevron-circle-up', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'child', 'chrome', 'circle', 'circle-o', 'circle-o-notch', 'circle-thin', 'clipboard', 'clock-o', 'clone', 'close', 'cloud', 'cloud-download', 'cloud-upload', 'cny', 'code', 'code-fork', 'codepen', 'codiepie', 'coffee', 'cog', 'cogs', 'columns', 'comment', 'comment-o', 'commenting', 'commenting-o', 'comments', 'comments-o', 'compass', 'compress', 'connectdevelop', 'contao', 'copy', 'copyright', 'creative-commons', 'credit-card', 'credit-card-alt', 'crop', 'crosshairs', 'css3', 'cube', 'cubes', 'cut', 'cutlery', 'dashboard', 'dashcube', 'database', 'deaf', 'deafness', 'dedent', 'delicious', 'desktop', 'deviantart', 'diamond', 'digg', 'dollar', 'dot-circle-o', 'download', 'dribbble', 'drivers-license', 'drivers-license-o', 'dropbox', 'drupal', 'edge', 'edit', 'eercast', 'eject', 'ellipsis-h', 'ellipsis-v', 'empire', 'envelope', 'envelope-o', 'envelope-open', 'envelope-open-o', 'envelope-square', 'envira', 'eraser', 'etsy', 'eur', 'euro', 'exchange', 'exclamation', 'exclamation-circle', 'exclamation-triangle', 'expand', 'expeditedssl', 'external-link', 'external-link-square', 'eye', 'eye-slash', 'eyedropper', 'fa', 'facebook', 'facebook-f', 'facebook-official', 'facebook-square', 'fast-backward', 'fast-forward', 'fax', 'feed', 'female', 'fighter-jet', 'file', 'file-archive-o', 'file-audio-o', 'file-code-o', 'file-excel-o', 'file-image-o', 'file-movie-o', 'file-o', 'file-pdf-o', 'file-photo-o', 'file-picture-o', 'file-powerpoint-o', 'file-sound-o', 'file-text', 'file-text-o', 'file-video-o', 'file-word-o', 'file-zip-o', 'files-o', 'film', 'filter', 'fire', 'fire-extinguisher', 'firefox', 'first-order', 'flag', 'flag-checkered', 'flag-o', 'flash', 'flask', 'flickr', 'floppy-o', 'folder', 'folder-o', 'folder-open', 'folder-open-o', 'font', 'font-awesome', 'fonticons', 'fort-awesome', 'forumbee', 'forward', 'foursquare', 'free-code-camp', 'frown-o', 'futbol-o', 'gamepad', 'gavel', 'gbp', 'ge', 'gear', 'gears', 'genderless', 'get-pocket', 'gg', 'gg-circle', 'gift', 'git', 'git-square', 'github', 'github-alt', 'github-square', 'gitlab', 'gittip', 'glass', 'glide', 'glide-g', 'globe', 'google', 'google-plus', 'google-plus-circle', 'google-plus-official', 'google-plus-square', 'google-wallet', 'graduation-cap', 'gratipay', 'grav', 'group', 'h-square', 'hacker-news', 'hand-grab-o', 'hand-lizard-o', 'hand-o-down', 'hand-o-left', 'hand-o-right', 'hand-o-up', 'hand-paper-o', 'hand-peace-o', 'hand-pointer-o', 'hand-rock-o', 'hand-scissors-o', 'hand-spock-o', 'hand-stop-o', 'handshake-o', 'hard-of-hearing', 'hashtag', 'hdd-o', 'header', 'headphones', 'heart', 'heart-o', 'heartbeat', 'history', 'home', 'hospital-o', 'hotel', 'hourglass', 'hourglass-1', 'hourglass-2', 'hourglass-3', 'hourglass-end', 'hourglass-half', 'hourglass-o', 'hourglass-start', 'houzz', 'html5', 'i-cursor', 'id-badge', 'id-card', 'id-card-o', 'ils', 'image', 'imdb', 'inbox', 'indent', 'industry', 'info', 'info-circle', 'inr', 'instagram', 'institution', 'internet-explorer', 'intersex', 'ioxhost', 'italic', 'joomla', 'jpy', 'jsfiddle', 'key', 'keyboard-o', 'krw', 'language', 'laptop', 'lastfm', 'lastfm-square', 'leaf', 'leanpub', 'legal', 'lemon-o', 'level-down', 'level-up', 'life-bouy', 'life-buoy', 'life-ring', 'life-saver', 'lightbulb-o', 'line-chart', 'link', 'linkedin', 'linkedin-square', 'linode', 'linux', 'list', 'list-alt', 'list-ol', 'list-ul', 'location-arrow', 'lock', 'long-arrow-down', 'long-arrow-left', 'long-arrow-right', 'long-arrow-up', 'low-vision', 'magic', 'magnet', 'mail-forward', 'mail-reply', 'mail-reply-all', 'male', 'map', 'map-marker', 'map-o', 'map-pin', 'map-signs', 'mars', 'mars-double', 'mars-stroke', 'mars-stroke-h', 'mars-stroke-v', 'maxcdn', 'meanpath', 'medium', 'medkit', 'meetup', 'meh-o', 'mercury', 'microchip', 'microphone', 'microphone-slash', 'minus', 'minus-circle', 'minus-square', 'minus-square-o', 'mixcloud', 'mobile', 'mobile-phone', 'modx', 'money', 'moon-o', 'mortar-board', 'motorcycle', 'mouse-pointer', 'music', 'navicon', 'neuter', 'number', 'newspaper-o', 'object-group', 'object-ungroup', 'odnoklassniki', 'odnoklassniki-square', 'opencart', 'openid', 'opera', 'optin-monster', 'outdent', 'pagelines', 'paint-brush', 'paper-plane', 'paper-plane-o', 'paperclip', 'paragraph', 'paste', 'pause', 'pause-circle', 'pause-circle-o', 'paw', 'paypal', 'pencil', 'pencil-square', 'pencil-square-o', 'percent', 'phone', 'phone-square', 'photo', 'picture-o', 'pie-chart', 'pied-piper', 'pied-piper-alt', 'pied-piper-pp', 'pinterest', 'pinterest-p', 'pinterest-square', 'plane', 'play', 'play-circle', 'play-circle-o', 'plug', 'plus', 'plus-circle', 'plus-square', 'plus-square-o', 'podcast', 'power-off', 'print', 'product-hunt', 'puzzle-piece', 'qq', 'qrcode', 'question', 'question-circle', 'question-circle-o', 'quora', 'quote-left', 'quote-right', 'ra', 'random', 'ravelry', 'rebel', 'recycle', 'reddit', 'reddit-alien', 'reddit-square', 'refresh', 'registered', 'remove', 'renren', 'reorder', 'repeat', 'reply', 'reply-all', 'resistance', 'retweet', 'rmb', 'road', 'rocket', 'rotate-left', 'rotate-right', 'rouble', 'rss', 'rss-square', 'rub', 'ruble', 'rupee', 's15', 'safari', 'save', 'scissors', 'scribd', 'search', 'search-minus', 'search-plus', 'sellsy', 'send', 'send-o', 'server', 'share', 'share-alt', 'share-alt-square', 'share-square', 'share-square-o', 'shekel', 'sheqel', 'shield', 'ship', 'shirtsinbulk', 'shopping-bag', 'shopping-basket', 'shopping-cart', 'shower', 'sign-in', 'sign-language', 'sign-out', 'signal', 'signing', 'simplybuilt', 'sitemap', 'skyatlas', 'skype', 'slack', 'sliders', 'slideshare', 'smile-o', 'snapchat', 'snapchat-ghost', 'snapchat-square', 'snowflake-o', 'soccer-ball-o', 'sort', 'sort-alpha-asc', 'sort-alpha-desc', 'sort-amount-asc', 'sort-amount-desc', 'sort-asc', 'sort-desc', 'sort-down', 'sort-numeric-asc', 'sort-numeric-desc', 'sort-up', 'soundcloud', 'space-shuttle', 'spinner', 'spoon', 'spotify', 'square', 'square-o', 'stack-exchange', 'stack-overflow', 'star', 'star-half', 'star-half-empty', 'star-half-full', 'star-half-o', 'star-o', 'steam', 'steam-square', 'step-backward', 'step-forward', 'stethoscope', 'sticky-note', 'sticky-note-o', 'stop', 'stop-circle', 'stop-circle-o', 'street-view', 'strikethrough', 'stumbleupon', 'stumbleupon-circle', 'subscript', 'subway', 'suitcase', 'sun-o', 'superpowers', 'superscript', 'support', 'table', 'tablet', 'tachometer', 'tag', 'tags', 'tasks', 'taxi', 'telegram', 'television', 'tencent-weibo', 'terminal', 'text-height', 'text-width', 'th', 'th-large', 'th-list', 'themeisle', 'thermometer', 'thermometer-0', 'thermometer-1', 'thermometer-2', 'thermometer-3', 'thermometer-4', 'thermometer-empty', 'thermometer-full', 'thermometer-half', 'thermometer-quarter', 'thermometer-three-quarters', 'thumb-tack', 'thumbs-down', 'thumbs-o-down', 'thumbs-o-up', 'thumbs-up', 'ticket', 'times', 'times-circle', 'times-circle-o', 'times-rectangle', 'times-rectangle-o', 'tint', 'toggle-down', 'toggle-left', 'toggle-off', 'toggle-on', 'toggle-right', 'toggle-up', 'trademark', 'train', 'transgender', 'transgender-alt', 'trash', 'trash-o', 'tree', 'trello', 'tripadvisor', 'trophy', 'truck', 'try', 'tty', 'tumblr', 'tumblr-square', 'turkish-lira', 'tv', 'twitch', 'twitter', 'twitter-square', 'umbrella', 'underline', 'undo', 'universal-access', 'university', 'unlink', 'unlock', 'unlock-alt', 'unsorted', 'upload', 'usb', 'usd', 'user', 'user-circle', 'user-circle-o', 'user-md', 'user-o', 'user-plus', 'user-secret', 'user-times', 'users', 'vcard', 'vcard-o', 'venus', 'venus-double', 'venus-mars', 'viacoin', 'viadeo', 'viadeo-square', 'video-camera', 'vimeo', 'vimeo-square', 'vine', 'vk', 'volume-control-phone', 'volume-down', 'volume-off', 'volume-up', 'warning', 'wechat', 'weibo', 'weixin', 'whatsapp', 'wheelchair', 'wheelchair-alt', 'wifi', 'wikipedia-w', 'window-close', 'window-close-o', 'window-maximize', 'window-minimize', 'window-restore', 'windows', 'won', 'wordpress', 'wpbeginner', 'wpexplorer', 'wpforms', 'wrench', 'xing', 'xing-square', 'y-combinator', 'y-combinator-square', 'yahoo', 'yc', 'yc-square', 'yelp', 'yen', 'yoast', 'youtube', 'youtube-play']; +exports.ICON_TYPES = ICON_TYPES; +var PANEL_DEFAULTS = { + maxDataPoints: 1, + mapCenter: '(0°, 0°)', + mapCenterLatitude: 0, + mapCenterLongitude: 0, + initialZoom: 1, + disableClusterLevel: 21, + valueName: 'total', + circleMinSize: 2, + circleMaxSize: 30, + thresholds: '0,10', + colors: ['rgba(245, 54, 54, 0.9)', 'rgba(237, 129, 40, 0.89)', 'rgba(50, 172, 45, 0.97)'], + unitSingle: '', + unitPlural: '', + showLegend: true, + esMetric: 'Count', + decimals: 0, + hideEmpty: false, + hideZero: false, + stickyLabels: false, + minZoomShapes: 12, + metrics: [], + targets: [{ + refId: 'A', + resultFormat: 'table', + groupByAliases: ['type'], + groupByColumns: ['entity_type'], + whereClauses: [], + metricAggs: [{ + alias: 'id', + column: 'entity_id', + type: 'raw' + }, { + alias: 'value', + column: 'availablespotnumber', + type: 'raw' + }, { + alias: 'geojson', + column: 'location', + type: 'raw' + }, { + alias: 'created_at', + column: 'time_index', + type: 'raw' + }] + }], + layersIcons: {}, + layersColors: {}, + layersColorType: {}, + layersClusterType: {}, + layersColorsHigh: {}, + layersColorsMedium: {}, + layersColorsLow: {}, + layersColorsThresholds: {}, + layersColorsBinding: {}, + layersVariables: {}, + cityEnvVariable: '', + buildings: false +}; +exports.PANEL_DEFAULTS = PANEL_DEFAULTS; +var DEFAULT_METRICS = { + 'aqi': { + 'name': 'Air Quality Index', + 'unit': '' + }, + 'h': { + 'name': 'Hydrogen', + 'unit': '' + }, + 'no2': { + 'name': 'Nitrogen Dioxide', + 'unit': 'µg/m3' + }, + 'p': { + 'name': 'Pressure', + 'unit': 'hPa' + }, + 'pm10': { + 'name': 'PM10', + 'unit': 'ug/m3' + }, + 'pm25': { + 'name': 'PM25', + 'unit': 'ug/m3' + }, + 't': { + 'name': 'Temperature', + 'unit': 'ºC' + }, + 'co': { + 'name': 'CO2', + 'unit': '' + }, + 'intensity': { + 'name': 'Intensity', + 'unit': '' + } +}; +exports.DEFAULT_METRICS = DEFAULT_METRICS; +var MAP_LOCATIONS = { + '(0°, 0°)': { + mapCenterLatitude: 0.0, + mapCenterLongitude: 0.0 + }, + 'North America': { + mapCenterLatitude: 40, + mapCenterLongitude: -100 + }, + 'Europe': { + mapCenterLatitude: 46, + mapCenterLongitude: 14 + }, + 'West Asia': { + mapCenterLatitude: 26, + mapCenterLongitude: 53 + }, + 'SE Asia': { + mapCenterLatitude: 10, + mapCenterLongitude: 106 + } +}; +exports.MAP_LOCATIONS = MAP_LOCATIONS; +var NOMINATIM_ADDRESS = 'https://nominatim.openstreetmap.org/search/?format=json&addressdetails=0&limit=1&polygon_svg=0'; +exports.NOMINATIM_ADDRESS = NOMINATIM_ADDRESS; +//# sourceMappingURL=definitions.js.map diff --git a/deploy/grafana-map-plugin/dist/definitions.js.map b/deploy/grafana-map-plugin/dist/definitions.js.map new file mode 100755 index 0000000..417db6c --- /dev/null +++ b/deploy/grafana-map-plugin/dist/definitions.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/definitions.js"],"names":["PLUGIN_PATH","MARKER_COLORS","DEFAULT_MARKER_COLORS_RANGE","range","markerColor","TILE_SERVERS","url","attribution","subdomains","COLOR_TYPES","CLUSTER_TYPES","ICON_TYPES","PANEL_DEFAULTS","maxDataPoints","mapCenter","mapCenterLatitude","mapCenterLongitude","initialZoom","disableClusterLevel","valueName","circleMinSize","circleMaxSize","thresholds","colors","unitSingle","unitPlural","showLegend","esMetric","decimals","hideEmpty","hideZero","stickyLabels","minZoomShapes","metrics","targets","refId","resultFormat","groupByAliases","groupByColumns","whereClauses","metricAggs","alias","column","type","layersIcons","layersColors","layersColorType","layersClusterType","layersColorsHigh","layersColorsMedium","layersColorsLow","layersColorsThresholds","layersColorsBinding","layersVariables","cityEnvVariable","buildings","DEFAULT_METRICS","MAP_LOCATIONS","NOMINATIM_ADDRESS"],"mappings":"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","sourcesContent":["const PLUGIN_PATH = 'public/plugins/grafana-traffic-env-panel/';\n\nconst MARKER_COLORS = ['red', 'blue', 'green', 'purple', 'orange', 'darkred', 'lightred', 'beige',\n 'darkblue', 'darkgreen', 'cadetblue', 'darkpurple', 'white', 'pink', 'lightblue', 'lightgreen', 'gray', 'black', 'lightgray'];\n\nconst DEFAULT_MARKER_COLORS_RANGE = {\n range: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180],\n markerColor: MARKER_COLORS\n};\n\nconst TILE_SERVERS = {\n 'CartoDB Positron': { url: 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png', attribution: '© OpenStreetMap © CartoDB', subdomains: 'abcd'},\n 'CartoDB Dark': {url: 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png', attribution: '© OpenStreetMap © CartoDB', subdomains: 'abcd'}\n};\n\nconst COLOR_TYPES = [\n 'fix',\n 'threshold'\n];\n\nconst CLUSTER_TYPES = [\n 'none',\n 'count',\n 'average',\n 'total'\n];\n\nconst ICON_TYPES = [\n 'none',\n 'address-book',\n 'address-book-o',\n 'address-card',\n 'address-card-o',\n 'adjust',\n 'adn',\n 'align-center',\n 'align-justify',\n 'align-left',\n 'align-right',\n 'amazon',\n 'ambulance',\n 'american-sign-language-interpreting',\n 'anchor',\n 'android',\n 'angellist',\n 'angle-double-down',\n 'angle-double-left',\n 'angle-double-right',\n 'angle-double-up',\n 'angle-down',\n 'angle-left',\n 'angle-right',\n 'angle-up',\n 'apple',\n 'archive',\n 'area-chart',\n 'arrow-circle-down',\n 'arrow-circle-left',\n 'arrow-circle-o-down',\n 'arrow-circle-o-left',\n 'arrow-circle-o-right',\n 'arrow-circle-o-up',\n 'arrow-circle-right',\n 'arrow-circle-up',\n 'arrow-down',\n 'arrow-left',\n 'arrow-right',\n 'arrow-up',\n 'arrows',\n 'arrows-alt',\n 'arrows-h',\n 'arrows-v',\n 'asl-interpreting',\n 'assistive-listening-systems',\n 'asterisk',\n 'at',\n 'audio-description',\n 'automobile',\n 'backward',\n 'balance-scale',\n 'ban',\n 'bandcamp',\n 'bank',\n 'bar-chart',\n 'bar-chart-o',\n 'barcode',\n 'bars',\n 'bath',\n 'bathtub',\n 'battery',\n 'battery-0',\n 'battery-1',\n 'battery-2',\n 'battery-3',\n 'battery-4',\n 'battery-empty',\n 'battery-full',\n 'battery-half',\n 'battery-quarter',\n 'battery-three-quarters',\n 'bed',\n 'beer',\n 'behance',\n 'behance-square',\n 'bell',\n 'bell-o',\n 'bell-slash',\n 'bell-slash-o',\n 'bicycle',\n 'binoculars',\n 'birthday-cake',\n 'bitbucket',\n 'bitbucket-square',\n 'bitcoin',\n 'black-tie',\n 'blind',\n 'bluetooth',\n 'bluetooth-b',\n 'bold',\n 'bolt',\n 'bomb',\n 'book',\n 'bookmark',\n 'bookmark-o',\n 'braille',\n 'briefcase',\n 'btc',\n 'bug',\n 'building',\n 'building-o',\n 'bullhorn',\n 'bullseye',\n 'bus',\n 'buysellads',\n 'cab',\n 'calculator',\n 'calendar',\n 'calendar-check-o',\n 'calendar-minus-o',\n 'calendar-o',\n 'calendar-plus-o',\n 'calendar-times-o',\n 'camera',\n 'camera-retro',\n 'car',\n 'caret-down',\n 'caret-left',\n 'caret-right',\n 'caret-square-o-down',\n 'caret-square-o-left',\n 'caret-square-o-right',\n 'caret-square-o-up',\n 'caret-up',\n 'cart-arrow-down',\n 'cart-plus',\n 'cc',\n 'cc-amex',\n 'cc-diners-club',\n 'cc-discover',\n 'cc-jcb',\n 'cc-mastercard',\n 'cc-paypal',\n 'cc-stripe',\n 'cc-visa',\n 'certificate',\n 'chain',\n 'chain-broken',\n 'check',\n 'check-circle',\n 'check-circle-o',\n 'check-square',\n 'check-square-o',\n 'chevron-circle-down',\n 'chevron-circle-left',\n 'chevron-circle-right',\n 'chevron-circle-up',\n 'chevron-down',\n 'chevron-left',\n 'chevron-right',\n 'chevron-up',\n 'child',\n 'chrome',\n 'circle',\n 'circle-o',\n 'circle-o-notch',\n 'circle-thin',\n 'clipboard',\n 'clock-o',\n 'clone',\n 'close',\n 'cloud',\n 'cloud-download',\n 'cloud-upload',\n 'cny',\n 'code',\n 'code-fork',\n 'codepen',\n 'codiepie',\n 'coffee',\n 'cog',\n 'cogs',\n 'columns',\n 'comment',\n 'comment-o',\n 'commenting',\n 'commenting-o',\n 'comments',\n 'comments-o',\n 'compass',\n 'compress',\n 'connectdevelop',\n 'contao',\n 'copy',\n 'copyright',\n 'creative-commons',\n 'credit-card',\n 'credit-card-alt',\n 'crop',\n 'crosshairs',\n 'css3',\n 'cube',\n 'cubes',\n 'cut',\n 'cutlery',\n 'dashboard',\n 'dashcube',\n 'database',\n 'deaf',\n 'deafness',\n 'dedent',\n 'delicious',\n 'desktop',\n 'deviantart',\n 'diamond',\n 'digg',\n 'dollar',\n 'dot-circle-o',\n 'download',\n 'dribbble',\n 'drivers-license',\n 'drivers-license-o',\n 'dropbox',\n 'drupal',\n 'edge',\n 'edit',\n 'eercast',\n 'eject',\n 'ellipsis-h',\n 'ellipsis-v',\n 'empire',\n 'envelope',\n 'envelope-o',\n 'envelope-open',\n 'envelope-open-o',\n 'envelope-square',\n 'envira',\n 'eraser',\n 'etsy',\n 'eur',\n 'euro',\n 'exchange',\n 'exclamation',\n 'exclamation-circle',\n 'exclamation-triangle',\n 'expand',\n 'expeditedssl',\n 'external-link',\n 'external-link-square',\n 'eye',\n 'eye-slash',\n 'eyedropper',\n 'fa',\n 'facebook',\n 'facebook-f',\n 'facebook-official',\n 'facebook-square',\n 'fast-backward',\n 'fast-forward',\n 'fax',\n 'feed',\n 'female',\n 'fighter-jet',\n 'file',\n 'file-archive-o',\n 'file-audio-o',\n 'file-code-o',\n 'file-excel-o',\n 'file-image-o',\n 'file-movie-o',\n 'file-o',\n 'file-pdf-o',\n 'file-photo-o',\n 'file-picture-o',\n 'file-powerpoint-o',\n 'file-sound-o',\n 'file-text',\n 'file-text-o',\n 'file-video-o',\n 'file-word-o',\n 'file-zip-o',\n 'files-o',\n 'film',\n 'filter',\n 'fire',\n 'fire-extinguisher',\n 'firefox',\n 'first-order',\n 'flag',\n 'flag-checkered',\n 'flag-o',\n 'flash',\n 'flask',\n 'flickr',\n 'floppy-o',\n 'folder',\n 'folder-o',\n 'folder-open',\n 'folder-open-o',\n 'font',\n 'font-awesome',\n 'fonticons',\n 'fort-awesome',\n 'forumbee',\n 'forward',\n 'foursquare',\n 'free-code-camp',\n 'frown-o',\n 'futbol-o',\n 'gamepad',\n 'gavel',\n 'gbp',\n 'ge',\n 'gear',\n 'gears',\n 'genderless',\n 'get-pocket',\n 'gg',\n 'gg-circle',\n 'gift',\n 'git',\n 'git-square',\n 'github',\n 'github-alt',\n 'github-square',\n 'gitlab',\n 'gittip',\n 'glass',\n 'glide',\n 'glide-g',\n 'globe',\n 'google',\n 'google-plus',\n 'google-plus-circle',\n 'google-plus-official',\n 'google-plus-square',\n 'google-wallet',\n 'graduation-cap',\n 'gratipay',\n 'grav',\n 'group',\n 'h-square',\n 'hacker-news',\n 'hand-grab-o',\n 'hand-lizard-o',\n 'hand-o-down',\n 'hand-o-left',\n 'hand-o-right',\n 'hand-o-up',\n 'hand-paper-o',\n 'hand-peace-o',\n 'hand-pointer-o',\n 'hand-rock-o',\n 'hand-scissors-o',\n 'hand-spock-o',\n 'hand-stop-o',\n 'handshake-o',\n 'hard-of-hearing',\n 'hashtag',\n 'hdd-o',\n 'header',\n 'headphones',\n 'heart',\n 'heart-o',\n 'heartbeat',\n 'history',\n 'home',\n 'hospital-o',\n 'hotel',\n 'hourglass',\n 'hourglass-1',\n 'hourglass-2',\n 'hourglass-3',\n 'hourglass-end',\n 'hourglass-half',\n 'hourglass-o',\n 'hourglass-start',\n 'houzz',\n 'html5',\n 'i-cursor',\n 'id-badge',\n 'id-card',\n 'id-card-o',\n 'ils',\n 'image',\n 'imdb',\n 'inbox',\n 'indent',\n 'industry',\n 'info',\n 'info-circle',\n 'inr',\n 'instagram',\n 'institution',\n 'internet-explorer',\n 'intersex',\n 'ioxhost',\n 'italic',\n 'joomla',\n 'jpy',\n 'jsfiddle',\n 'key',\n 'keyboard-o',\n 'krw',\n 'language',\n 'laptop',\n 'lastfm',\n 'lastfm-square',\n 'leaf',\n 'leanpub',\n 'legal',\n 'lemon-o',\n 'level-down',\n 'level-up',\n 'life-bouy',\n 'life-buoy',\n 'life-ring',\n 'life-saver',\n 'lightbulb-o',\n 'line-chart',\n 'link',\n 'linkedin',\n 'linkedin-square',\n 'linode',\n 'linux',\n 'list',\n 'list-alt',\n 'list-ol',\n 'list-ul',\n 'location-arrow',\n 'lock',\n 'long-arrow-down',\n 'long-arrow-left',\n 'long-arrow-right',\n 'long-arrow-up',\n 'low-vision',\n 'magic',\n 'magnet',\n 'mail-forward',\n 'mail-reply',\n 'mail-reply-all',\n 'male',\n 'map',\n 'map-marker',\n 'map-o',\n 'map-pin',\n 'map-signs',\n 'mars',\n 'mars-double',\n 'mars-stroke',\n 'mars-stroke-h',\n 'mars-stroke-v',\n 'maxcdn',\n 'meanpath',\n 'medium',\n 'medkit',\n 'meetup',\n 'meh-o',\n 'mercury',\n 'microchip',\n 'microphone',\n 'microphone-slash',\n 'minus',\n 'minus-circle',\n 'minus-square',\n 'minus-square-o',\n 'mixcloud',\n 'mobile',\n 'mobile-phone',\n 'modx',\n 'money',\n 'moon-o',\n 'mortar-board',\n 'motorcycle',\n 'mouse-pointer',\n 'music',\n 'navicon',\n 'neuter',\n 'number',\n 'newspaper-o',\n 'object-group',\n 'object-ungroup',\n 'odnoklassniki',\n 'odnoklassniki-square',\n 'opencart',\n 'openid',\n 'opera',\n 'optin-monster',\n 'outdent',\n 'pagelines',\n 'paint-brush',\n 'paper-plane',\n 'paper-plane-o',\n 'paperclip',\n 'paragraph',\n 'paste',\n 'pause',\n 'pause-circle',\n 'pause-circle-o',\n 'paw',\n 'paypal',\n 'pencil',\n 'pencil-square',\n 'pencil-square-o',\n 'percent',\n 'phone',\n 'phone-square',\n 'photo',\n 'picture-o',\n 'pie-chart',\n 'pied-piper',\n 'pied-piper-alt',\n 'pied-piper-pp',\n 'pinterest',\n 'pinterest-p',\n 'pinterest-square',\n 'plane',\n 'play',\n 'play-circle',\n 'play-circle-o',\n 'plug',\n 'plus',\n 'plus-circle',\n 'plus-square',\n 'plus-square-o',\n 'podcast',\n 'power-off',\n 'print',\n 'product-hunt',\n 'puzzle-piece',\n 'qq',\n 'qrcode',\n 'question',\n 'question-circle',\n 'question-circle-o',\n 'quora',\n 'quote-left',\n 'quote-right',\n 'ra',\n 'random',\n 'ravelry',\n 'rebel',\n 'recycle',\n 'reddit',\n 'reddit-alien',\n 'reddit-square',\n 'refresh',\n 'registered',\n 'remove',\n 'renren',\n 'reorder',\n 'repeat',\n 'reply',\n 'reply-all',\n 'resistance',\n 'retweet',\n 'rmb',\n 'road',\n 'rocket',\n 'rotate-left',\n 'rotate-right',\n 'rouble',\n 'rss',\n 'rss-square',\n 'rub',\n 'ruble',\n 'rupee',\n 's15',\n 'safari',\n 'save',\n 'scissors',\n 'scribd',\n 'search',\n 'search-minus',\n 'search-plus',\n 'sellsy',\n 'send',\n 'send-o',\n 'server',\n 'share',\n 'share-alt',\n 'share-alt-square',\n 'share-square',\n 'share-square-o',\n 'shekel',\n 'sheqel',\n 'shield',\n 'ship',\n 'shirtsinbulk',\n 'shopping-bag',\n 'shopping-basket',\n 'shopping-cart',\n 'shower',\n 'sign-in',\n 'sign-language',\n 'sign-out',\n 'signal',\n 'signing',\n 'simplybuilt',\n 'sitemap',\n 'skyatlas',\n 'skype',\n 'slack',\n 'sliders',\n 'slideshare',\n 'smile-o',\n 'snapchat',\n 'snapchat-ghost',\n 'snapchat-square',\n 'snowflake-o',\n 'soccer-ball-o',\n 'sort',\n 'sort-alpha-asc',\n 'sort-alpha-desc',\n 'sort-amount-asc',\n 'sort-amount-desc',\n 'sort-asc',\n 'sort-desc',\n 'sort-down',\n 'sort-numeric-asc',\n 'sort-numeric-desc',\n 'sort-up',\n 'soundcloud',\n 'space-shuttle',\n 'spinner',\n 'spoon',\n 'spotify',\n 'square',\n 'square-o',\n 'stack-exchange',\n 'stack-overflow',\n 'star',\n 'star-half',\n 'star-half-empty',\n 'star-half-full',\n 'star-half-o',\n 'star-o',\n 'steam',\n 'steam-square',\n 'step-backward',\n 'step-forward',\n 'stethoscope',\n 'sticky-note',\n 'sticky-note-o',\n 'stop',\n 'stop-circle',\n 'stop-circle-o',\n 'street-view',\n 'strikethrough',\n 'stumbleupon',\n 'stumbleupon-circle',\n 'subscript',\n 'subway',\n 'suitcase',\n 'sun-o',\n 'superpowers',\n 'superscript',\n 'support',\n 'table',\n 'tablet',\n 'tachometer',\n 'tag',\n 'tags',\n 'tasks',\n 'taxi',\n 'telegram',\n 'television',\n 'tencent-weibo',\n 'terminal',\n 'text-height',\n 'text-width',\n 'th',\n 'th-large',\n 'th-list',\n 'themeisle',\n 'thermometer',\n 'thermometer-0',\n 'thermometer-1',\n 'thermometer-2',\n 'thermometer-3',\n 'thermometer-4',\n 'thermometer-empty',\n 'thermometer-full',\n 'thermometer-half',\n 'thermometer-quarter',\n 'thermometer-three-quarters',\n 'thumb-tack',\n 'thumbs-down',\n 'thumbs-o-down',\n 'thumbs-o-up',\n 'thumbs-up',\n 'ticket',\n 'times',\n 'times-circle',\n 'times-circle-o',\n 'times-rectangle',\n 'times-rectangle-o',\n 'tint',\n 'toggle-down',\n 'toggle-left',\n 'toggle-off',\n 'toggle-on',\n 'toggle-right',\n 'toggle-up',\n 'trademark',\n 'train',\n 'transgender',\n 'transgender-alt',\n 'trash',\n 'trash-o',\n 'tree',\n 'trello',\n 'tripadvisor',\n 'trophy',\n 'truck',\n 'try',\n 'tty',\n 'tumblr',\n 'tumblr-square',\n 'turkish-lira',\n 'tv',\n 'twitch',\n 'twitter',\n 'twitter-square',\n 'umbrella',\n 'underline',\n 'undo',\n 'universal-access',\n 'university',\n 'unlink',\n 'unlock',\n 'unlock-alt',\n 'unsorted',\n 'upload',\n 'usb',\n 'usd',\n 'user',\n 'user-circle',\n 'user-circle-o',\n 'user-md',\n 'user-o',\n 'user-plus',\n 'user-secret',\n 'user-times',\n 'users',\n 'vcard',\n 'vcard-o',\n 'venus',\n 'venus-double',\n 'venus-mars',\n 'viacoin',\n 'viadeo',\n 'viadeo-square',\n 'video-camera',\n 'vimeo',\n 'vimeo-square',\n 'vine',\n 'vk',\n 'volume-control-phone',\n 'volume-down',\n 'volume-off',\n 'volume-up',\n 'warning',\n 'wechat',\n 'weibo',\n 'weixin',\n 'whatsapp',\n 'wheelchair',\n 'wheelchair-alt',\n 'wifi',\n 'wikipedia-w',\n 'window-close',\n 'window-close-o',\n 'window-maximize',\n 'window-minimize',\n 'window-restore',\n 'windows',\n 'won',\n 'wordpress',\n 'wpbeginner',\n 'wpexplorer',\n 'wpforms',\n 'wrench',\n 'xing',\n 'xing-square',\n 'y-combinator',\n 'y-combinator-square',\n 'yahoo',\n 'yc',\n 'yc-square',\n 'yelp',\n 'yen',\n 'yoast',\n 'youtube',\n 'youtube-play'];\n\nconst PANEL_DEFAULTS = {\n maxDataPoints: 1,\n mapCenter: '(0°, 0°)',\n mapCenterLatitude: 0,\n mapCenterLongitude: 0,\n initialZoom: 1,\n disableClusterLevel: 21,\n valueName: 'total',\n circleMinSize: 2,\n circleMaxSize: 30,\n thresholds: '0,10',\n colors: ['rgba(245, 54, 54, 0.9)', 'rgba(237, 129, 40, 0.89)', 'rgba(50, 172, 45, 0.97)'],\n unitSingle: '',\n unitPlural: '',\n showLegend: true,\n esMetric: 'Count',\n decimals: 0,\n hideEmpty: false,\n hideZero: false,\n stickyLabels: false,\n minZoomShapes: 12,\n\n metrics: [],\n targets: [{\n refId: 'A',\n resultFormat: 'table',\n groupByAliases: ['type'],\n groupByColumns: ['entity_type'],\n whereClauses: [],\n metricAggs: [\n {alias: 'id', column: 'entity_id', type: 'raw'},\n {alias: 'value', column: 'availablespotnumber', type: 'raw'},\n {alias: 'geojson', column: 'location', type: 'raw'},\n {alias: 'created_at', column: 'time_index', type: 'raw'}\n ]\n }],\n layersIcons: {},\n layersColors: {},\n layersColorType: {},\n layersClusterType: {},\n layersColorsHigh: {},\n layersColorsMedium: {},\n layersColorsLow: {},\n layersColorsThresholds: {},\n layersColorsBinding: {},\n layersVariables: {},\n cityEnvVariable: '',\n buildings: false\n};\n\nconst DEFAULT_METRICS = {\n 'aqi': {'name': 'Air Quality Index', 'unit': ''},\n 'h': {'name': 'Hydrogen', 'unit': ''},\n 'no2': {'name': 'Nitrogen Dioxide', 'unit': 'µg/m3'},\n 'p': {'name': 'Pressure', 'unit': 'hPa'},\n 'pm10': {'name': 'PM10', 'unit': 'ug/m3'},\n 'pm25': {'name': 'PM25', 'unit': 'ug/m3'},\n 't': {'name': 'Temperature', 'unit': 'ºC'},\n 'co': {'name': 'CO2', 'unit': ''},\n 'intensity': {'name': 'Intensity', 'unit': ''}\n};\n\nconst MAP_LOCATIONS = {\n '(0°, 0°)': {mapCenterLatitude: 0.0, mapCenterLongitude: 0.0},\n 'North America': {mapCenterLatitude: 40, mapCenterLongitude: -100},\n 'Europe': {mapCenterLatitude: 46, mapCenterLongitude: 14},\n 'West Asia': {mapCenterLatitude: 26, mapCenterLongitude: 53},\n 'SE Asia': {mapCenterLatitude: 10, mapCenterLongitude: 106}\n};\n\nconst NOMINATIM_ADDRESS = 'https://nominatim.openstreetmap.org/search/?format=json&addressdetails=0&limit=1&polygon_svg=0';\n\nexport {\n PLUGIN_PATH, PANEL_DEFAULTS,\n NOMINATIM_ADDRESS, TILE_SERVERS,\n DEFAULT_METRICS, MAP_LOCATIONS, ICON_TYPES, MARKER_COLORS, COLOR_TYPES, CLUSTER_TYPES\n};\n"],"file":"definitions.js"} \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/automobile.svg b/deploy/grafana-map-plugin/dist/img/fa/automobile.svg new file mode 100755 index 0000000..11b8b79 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/automobile.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/ban.svg b/deploy/grafana-map-plugin/dist/img/fa/ban.svg new file mode 100755 index 0000000..7b3c3df --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/ban.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/battery-empty.svg b/deploy/grafana-map-plugin/dist/img/fa/battery-empty.svg new file mode 100755 index 0000000..918c9d0 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/battery-empty.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/bell-o.svg b/deploy/grafana-map-plugin/dist/img/fa/bell-o.svg new file mode 100755 index 0000000..fd59c84 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/bell-o.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/bell-slash-o.svg b/deploy/grafana-map-plugin/dist/img/fa/bell-slash-o.svg new file mode 100755 index 0000000..934d828 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/bell-slash-o.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/bell-slash.svg b/deploy/grafana-map-plugin/dist/img/fa/bell-slash.svg new file mode 100755 index 0000000..77c1805 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/bell-slash.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/bell.svg b/deploy/grafana-map-plugin/dist/img/fa/bell.svg new file mode 100755 index 0000000..4858117 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/bell.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/bicycle.svg b/deploy/grafana-map-plugin/dist/img/fa/bicycle.svg new file mode 100755 index 0000000..aa6d494 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/bicycle.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/bus.svg b/deploy/grafana-map-plugin/dist/img/fa/bus.svg new file mode 100755 index 0000000..5a46db5 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/bus.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/car.svg b/deploy/grafana-map-plugin/dist/img/fa/car.svg new file mode 100755 index 0000000..11b8b79 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/car.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/clock-o.svg b/deploy/grafana-map-plugin/dist/img/fa/clock-o.svg new file mode 100755 index 0000000..2f102fa --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/clock-o.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/close.svg b/deploy/grafana-map-plugin/dist/img/fa/close.svg new file mode 100755 index 0000000..3e9c065 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/close.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/info-circle.svg b/deploy/grafana-map-plugin/dist/img/fa/info-circle.svg new file mode 100755 index 0000000..281f426 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/info-circle.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/question-circle.svg b/deploy/grafana-map-plugin/dist/img/fa/question-circle.svg new file mode 100755 index 0000000..6b7d7cf --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/question-circle.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/question.svg b/deploy/grafana-map-plugin/dist/img/fa/question.svg new file mode 100755 index 0000000..7fbcd22 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/question.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/trash-o.svg b/deploy/grafana-map-plugin/dist/img/fa/trash-o.svg new file mode 100755 index 0000000..3a2d079 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/trash-o.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/trash.svg b/deploy/grafana-map-plugin/dist/img/fa/trash.svg new file mode 100755 index 0000000..c8c3aa6 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/trash.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/tree.svg b/deploy/grafana-map-plugin/dist/img/fa/tree.svg new file mode 100755 index 0000000..bf935fa --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/tree.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/truck.svg b/deploy/grafana-map-plugin/dist/img/fa/truck.svg new file mode 100755 index 0000000..028cf34 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/truck.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/umbrella.svg b/deploy/grafana-map-plugin/dist/img/fa/umbrella.svg new file mode 100755 index 0000000..80c67b4 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/umbrella.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/video-camera.svg b/deploy/grafana-map-plugin/dist/img/fa/video-camera.svg new file mode 100755 index 0000000..8cb3a48 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/video-camera.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/volume-down.svg b/deploy/grafana-map-plugin/dist/img/fa/volume-down.svg new file mode 100755 index 0000000..0267f9a --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/volume-down.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/volume-off.svg b/deploy/grafana-map-plugin/dist/img/fa/volume-off.svg new file mode 100755 index 0000000..53ea769 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/volume-off.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/volume-up.svg b/deploy/grafana-map-plugin/dist/img/fa/volume-up.svg new file mode 100755 index 0000000..138fc69 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/volume-up.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/fa/warning.svg b/deploy/grafana-map-plugin/dist/img/fa/warning.svg new file mode 100755 index 0000000..56e2698 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/fa/warning.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/icon.svg b/deploy/grafana-map-plugin/dist/img/icon.svg new file mode 100755 index 0000000..49d5121 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/img/icon.svg @@ -0,0 +1 @@ +ic-map \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/img/map_marker.png b/deploy/grafana-map-plugin/dist/img/map_marker.png new file mode 100755 index 0000000000000000000000000000000000000000..6f8b216b15d7d2136167f908df6ce78a7632bc68 GIT binary patch literal 4172 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 render());\n\n function render() {\n if (!ctrl.data) return;\n\n // map is initializing\n if (!ctrl.worldMap) {\n ctrl.worldMap = new WorldMap(ctrl, mapContainer);\n console.debug('creating worldMap');\n\n if (ctrl.panel.mapCenter === 'User Geolocation') {\n ctrl.setLocationByUserGeolocation();\n } /* else\n detect city change when using Location Variable\n if (ctrl.panel.mapCenter === 'Location Variable') { // && this.ctrl.isADiferentCity()\n console.log('centering at city');\n ctrl.setNewCoords();\n } */ else ctrl.mapCenterMoved = true;\n\n ctrl.worldMap.createMap();\n } /* else\n if (ctrl.panel.mapCenter === 'Location Variable' && ctrl.isADiferentCity()) {\n console.log('centering at new city');\n ctrl.setNewCoords();\n } */\n\n if (layersChanged()) {\n console.log('layers had changed!');\n ctrl.worldMap.map.remove();\n ctrl.worldMap.createMap();\n }\n\n ctrl.worldMap.resize();\n\n if (ctrl.mapCenterMoved) {\n ctrl.worldMap.panToMapCenter();\n }\n\n ctrl.worldMap.clearLayers();\n\n\n // ctrl.worldMap.filterEmptyData();\n ctrl.worldMap.drawPoints();\n\n /**\n * popups and graph display\n */\n\n ctrl.renderingCompleted();\n }\n\n // if users add new metrics we must verify if layers are the same or if we must recreate the map\n function layersChanged() {\n return !_.isEqual(ctrl.layerNames, Object.keys(ctrl.worldMap.overlayMaps));\n }\n}\n"],"file":"map_renderer.js"} \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/module.js b/deploy/grafana-map-plugin/dist/module.js new file mode 100755 index 0000000..c28bd15 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/module.js @@ -0,0 +1,25 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "PanelCtrl", { + enumerable: true, + get: function get() { + return _worldmap_ctrl["default"]; + } +}); + +var _sdk = require("app/plugins/sdk"); + +var _worldmap_ctrl = _interopRequireDefault(require("./worldmap_ctrl")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +/* eslint import/no-extraneous-dependencies: 0 */ +(0, _sdk.loadPluginCss)({ + dark: 'plugins/grafana-traffic-env-panel/css/worldmap.dark.css', + light: 'plugins/grafana-traffic-env-panel/css/worldmap.light.css' +}); +/* eslint import/prefer-default-export: 0 */ +//# sourceMappingURL=module.js.map diff --git a/deploy/grafana-map-plugin/dist/module.js.map b/deploy/grafana-map-plugin/dist/module.js.map new file mode 100755 index 0000000..fb6c6ad --- /dev/null +++ b/deploy/grafana-map-plugin/dist/module.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/module.js"],"names":["dark","light"],"mappings":";;;;;;;;;;;;AACA;;AACA;;;;AAFA;AAIA,wBAAc;AACZA,EAAAA,IAAI,EAAE,yDADM;AAEZC,EAAAA,KAAK,EAAE;AAFK,CAAd;AAKA","sourcesContent":["/* eslint import/no-extraneous-dependencies: 0 */\nimport { loadPluginCss } from 'app/plugins/sdk';\nimport WorldmapCtrl from './worldmap_ctrl';\n\nloadPluginCss({\n dark: 'plugins/grafana-traffic-env-panel/css/worldmap.dark.css',\n light: 'plugins/grafana-traffic-env-panel/css/worldmap.light.css'\n});\n\n/* eslint import/prefer-default-export: 0 */\nexport {\n WorldmapCtrl as PanelCtrl\n};\n"],"file":"module.js"} \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/partials/editor.html b/deploy/grafana-map-plugin/dist/partials/editor.html new file mode 100755 index 0000000..50774ec --- /dev/null +++ b/deploy/grafana-map-plugin/dist/partials/editor.html @@ -0,0 +1,259 @@ +
+
Map Layout
+ +
+ +
+ +
+
+ +
+
+ + + +
+
+ + + +
+
+ + + + +
+ + +
+ +
+ + +
+ +
+ + +
+ + + +
+ +
+
+ Map Metrics Details +
+ +
+
Parameter
+
Alias
+
Units
+
+ +
+
+ + + + + + + + + + +
+
+
+ +
+
+ +
+
Map Layers
+
+
{{layerName}}
+
+
+ Icon + +
+ - {{iconType}} +
+
+
+ + +
+ +
+ Cluster Type + +
+
+ Color Type + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ +
+
Help
+

- Adding this panel for the first time to your dashboard will pre-fill Metrics fields.
+ Replace empty fieldname with the field you want to use as the default for map render

+

- You have to select a default datasource or select one from the availables in metrics tab.

+

- You can replace your query fieldnames by something more intuitive. (Section Field Mappings/Units)

+
diff --git a/deploy/grafana-map-plugin/dist/partials/module.html b/deploy/grafana-map-plugin/dist/partials/module.html new file mode 100755 index 0000000..e7e37bd --- /dev/null +++ b/deploy/grafana-map-plugin/dist/partials/module.html @@ -0,0 +1,16 @@ +
+
+
+ + +
+
+ +
\ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/plugin.json b/deploy/grafana-map-plugin/dist/plugin.json new file mode 100755 index 0000000..abf1a49 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/plugin.json @@ -0,0 +1,28 @@ +{ + "type": "panel", + "name": "Map Panel", + "id": "grafana-traffic-env-panel", + + "info": { + "description": "Grafana Map panel for analysing timeseries geolocated data (eg.traffic and environment data)", + "author": { + "name": "Ubiwhere", + "url": "" + }, + "keywords": ["map", "panel", "geoJSON"], + "logos": { + "small": "img/icon.svg", + "large": "img/icon.svg" + }, + "links": [ + {"name": "Project site", "url": ""}, + {"name": "MIT License", "url": ""} + ], + "version": "1.3.4" + }, + + "dependencies": { + "grafanaVersion": "5.x.x", + "plugins": [ ] + } +} diff --git a/deploy/grafana-map-plugin/dist/utils/data_utils.js b/deploy/grafana-map-plugin/dist/utils/data_utils.js new file mode 100755 index 0000000..1c9195b --- /dev/null +++ b/deploy/grafana-map-plugin/dist/utils/data_utils.js @@ -0,0 +1,178 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.DataFormatter = void 0; + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } + +function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } + +function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +// import { isEqual, reduce, filter, transform, isObject } from 'lodash'; +var DataFormatter = +/*#__PURE__*/ +function () { + function DataFormatter() { + _classCallCheck(this, DataFormatter); + } + + _createClass(DataFormatter, [{ + key: "getValues", + value: function getValues(series) { + if (!series || series.length === 0) return {}; + + var seriesType = this._getSeriesType(series); + + return seriesType === 'table' ? this._getSeries(series) : this._getSeriesTimeSeries(series); + } + }, { + key: "isJsonString", + value: function isJsonString(item) { + if (typeof item !== "string") { + return false; + } + + try { + item = JSON.parse(item); + } catch (e) { + return false; + } + + if (_typeof(item) === "object" && item !== null) { + return true; + } + + return false; + } + }, { + key: "fixType", + value: function fixType(item) { + if (this.isJsonString(item)) { + return JSON.parse(item); + } else { + return item; + } + } + }, { + key: "_getSeries", + value: function _getSeries(series) { + var _this = this; + + var hashSeriesByLayerByKey = {}; + var seriesLayer = null; + var id = null; + series.forEach(function (series_elem) { + var columns = series_elem.columns.map(function (elem) { + return elem.text; + }); + var type_index = columns.length - 1; + var id_index = 1; + + if (columns.indexOf("type") < 0) { + console.warn("Missing type alias in the query (required to define layers)"); + } else { + type_index = columns.indexOf("type"); + } + + if (columns.indexOf("id") < 0) { + console.warn("Missing id alias in the query"); + } else { + id_index = columns.indexOf("id"); + } + + series_elem.rows.forEach(function (series_elem_row) { + seriesLayer = series_elem_row[type_index]; + + if (!hashSeriesByLayerByKey[seriesLayer]) { + hashSeriesByLayerByKey[seriesLayer] = {}; + } + + id = series_elem_row[id_index]; + + if (!hashSeriesByLayerByKey[seriesLayer][id]) { + hashSeriesByLayerByKey[seriesLayer][id] = []; + } + + var hashWithValues = {}; + columns.forEach(function (elem, i) { + if (i !== columns.indexOf("time") && i !== columns.length - 1) // do not insert grafana field 'time' and the group by field + { + hashWithValues[elem] = _this.fixType(series_elem_row[i]); + } + }); + hashSeriesByLayerByKey[seriesLayer][id].push(hashWithValues); + }); + }); + return hashSeriesByLayerByKey; + } + }, { + key: "_getSeriesTimeSeries", + value: function _getSeriesTimeSeries(series) { + var setSeries = {}; + var setSeriesByLayer = {}; + series.forEach(function (series_elem) { + var _series_elem$target$s = series_elem.target.split(': '), + _series_elem$target$s2 = _slicedToArray(_series_elem$target$s, 2), + seriesLayer = _series_elem$target$s2[0], + seriesFieldName = _series_elem$target$s2[1]; + + if (!setSeriesByLayer[seriesLayer]) { + setSeriesByLayer[seriesLayer] = []; + } + + setSeriesByLayer[seriesLayer].push([seriesFieldName].concat(_toConsumableArray(series_elem.datapoints.map(function (elem) { + return elem[0]; + })))); + }); // get one array and transform into a hash + + var hashSeriesByLayerByKey = {}; + Object.keys(setSeriesByLayer).forEach(function (layerName) { + if (!hashSeriesByLayerByKey[layerName]) hashSeriesByLayerByKey[layerName] = {}; + var superArray = setSeriesByLayer[layerName]; + + for (var column = 1; column < superArray[0].length; column++) { + var result = {}; + + for (var line = 0; line < superArray.length; line++) { + result[superArray[line][0]] = superArray[line][column]; + } + + if (!hashSeriesByLayerByKey[layerName][result.id]) hashSeriesByLayerByKey[layerName][result.id] = []; + hashSeriesByLayerByKey[layerName][result.id].push(result); + } + }); + return hashSeriesByLayerByKey; + } + }, { + key: "_getSeriesType", + value: function _getSeriesType(series) { + return series[0].type; + } + }]); + + return DataFormatter; +}(); + +exports.DataFormatter = DataFormatter; +//# sourceMappingURL=data_utils.js.map diff --git a/deploy/grafana-map-plugin/dist/utils/data_utils.js.map b/deploy/grafana-map-plugin/dist/utils/data_utils.js.map new file mode 100755 index 0000000..f6a24fc --- /dev/null +++ b/deploy/grafana-map-plugin/dist/utils/data_utils.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/utils/data_utils.js"],"names":["DataFormatter","series","length","seriesType","_getSeriesType","_getSeries","_getSeriesTimeSeries","item","JSON","parse","e","isJsonString","hashSeriesByLayerByKey","seriesLayer","id","forEach","series_elem","columns","map","elem","text","type_index","id_index","indexOf","console","warn","rows","series_elem_row","hashWithValues","i","fixType","push","setSeries","setSeriesByLayer","target","split","seriesFieldName","datapoints","Object","keys","layerName","superArray","column","result","line","type"],"mappings":"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","sourcesContent":["// import { isEqual, reduce, filter, transform, isObject } from 'lodash';\n\nclass DataFormatter {\n getValues(series) {\n if (!series || series.length === 0) return {};\n\n const seriesType = this._getSeriesType(series);\n\n return (seriesType === 'table') ? this._getSeries(series) : this._getSeriesTimeSeries(series);\n }\n\n\n isJsonString(item) {\n if (typeof item !== \"string\") {\n return false;\n }\n\n try {\n item = JSON.parse(item);\n } catch (e) {\n return false;\n }\n\n if (typeof item === \"object\" && item !== null) {\n return true;\n }\n\n return false;\n }\n\n fixType(item) {\n if (this.isJsonString(item)) {\n return JSON.parse(item);\n } else {\n return item;\n }\n }\n\n _getSeries(series) {\n const hashSeriesByLayerByKey = {};\n let seriesLayer = null;\n let id = null;\n\n series.forEach((series_elem) => {\n const columns = series_elem.columns.map((elem) => elem.text);\n var type_index = columns.length - 1;\n var id_index = 1;\n\n if(columns.indexOf(\"type\") < 0){\n console.warn(\"Missing type alias in the query (required to define layers)\");\n } else {\n type_index = columns.indexOf(\"type\");\n }\n\n if(columns.indexOf(\"id\") < 0 ){\n console.warn(\"Missing id alias in the query\");\n } else {\n id_index = columns.indexOf(\"id\");\n }\n\n series_elem.rows.forEach((series_elem_row) => {\n seriesLayer = series_elem_row[type_index];\n\n if (!(hashSeriesByLayerByKey[seriesLayer])) {\n hashSeriesByLayerByKey[seriesLayer] = {};\n }\n\n id = series_elem_row[id_index];\n if (!(hashSeriesByLayerByKey[seriesLayer][id])) {\n hashSeriesByLayerByKey[seriesLayer][id] = [];\n }\n\n const hashWithValues = {};\n columns.forEach((elem, i) => {\n if (i !== columns.indexOf(\"time\") && i !== columns.length - 1) // do not insert grafana field 'time' and the group by field\n { hashWithValues[elem] = this.fixType(series_elem_row[i]); }\n });\n hashSeriesByLayerByKey[seriesLayer][id].push(hashWithValues);\n });\n });\n\n return hashSeriesByLayerByKey;\n }\n\n _getSeriesTimeSeries(series) {\n const setSeries = {};\n const setSeriesByLayer = {};\n\n series.forEach((series_elem) => {\n const [seriesLayer, seriesFieldName] = series_elem.target.split(': ');\n\n if (!(setSeriesByLayer[seriesLayer])) {\n setSeriesByLayer[seriesLayer] = [];\n }\n\n setSeriesByLayer[seriesLayer].push([seriesFieldName, ...series_elem.datapoints.map((elem) => elem[0])]);\n });\n\n\n // get one array and transform into a hash\n const hashSeriesByLayerByKey = {};\n\n Object.keys(setSeriesByLayer).forEach((layerName) => {\n if (!hashSeriesByLayerByKey[layerName]) hashSeriesByLayerByKey[layerName] = {};\n\n const superArray = setSeriesByLayer[layerName];\n\n for (let column = 1; column < superArray[0].length; column++) {\n const result = {};\n for (let line = 0; line < superArray.length; line++) {\n result[superArray[line][0]] = superArray[line][column];\n }\n\n if (!hashSeriesByLayerByKey[layerName][result.id]) hashSeriesByLayerByKey[layerName][result.id] = [];\n\n hashSeriesByLayerByKey[layerName][result.id].push(result);\n }\n });\n\n return hashSeriesByLayerByKey;\n }\n\n _getSeriesType(series) {\n return series[0].type;\n }\n}\n\nexport { DataFormatter };\n"],"file":"data_utils.js"} \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/utils/datasource.js b/deploy/grafana-map-plugin/dist/utils/datasource.js new file mode 100755 index 0000000..f22ab66 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/utils/datasource.js @@ -0,0 +1,26 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.getDatasources = getDatasources; +exports.getValidDatasources = getValidDatasources; + +function getDatasources(targets) { + return targets.map(function (elem) { + return { + 'name': elem.datasource + }; + }); +} + +function getValidDatasources(targets) { + return targets.filter(function (elem) { + return elem.metricAggs.filter(function (elem) { + return elem.alias === 'latitude' || elem.alias === 'longitude'; + }); + }).map(function (elem) { + return elem.datasource; + }); +} +//# sourceMappingURL=datasource.js.map diff --git a/deploy/grafana-map-plugin/dist/utils/datasource.js.map b/deploy/grafana-map-plugin/dist/utils/datasource.js.map new file mode 100755 index 0000000..669baf2 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/utils/datasource.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/utils/datasource.js"],"names":["getDatasources","targets","map","elem","datasource","getValidDatasources","filter","metricAggs","alias"],"mappings":";;;;;;;;AAAA,SAASA,cAAT,CAAwBC,OAAxB,EAAiC;AAC/B,SAAOA,OAAO,CAACC,GAAR,CAAY,UAACC,IAAD,EAAU;AAAE,WAAO;AAAE,cAAQA,IAAI,CAACC;AAAf,KAAP;AAAqC,GAA7D,CAAP;AACD;;AAED,SAASC,mBAAT,CAA6BJ,OAA7B,EAAsC;AACpC,SAAOA,OAAO,CAACK,MAAR,CAAe,UAACH,IAAD;AAAA,WAAUA,IAAI,CAACI,UAAL,CAAgBD,MAAhB,CAAuB,UAACH,IAAD;AAAA,aAAUA,IAAI,CAACK,KAAL,KAAe,UAAf,IAA6BL,IAAI,CAACK,KAAL,KAAe,WAAtD;AAAA,KAAvB,CAAV;AAAA,GAAf,EAAoHN,GAApH,CAAwH,UAACC,IAAD;AAAA,WAAUA,IAAI,CAACC,UAAf;AAAA,GAAxH,CAAP;AACD","sourcesContent":["function getDatasources(targets) {\n return targets.map((elem) => { return { 'name': elem.datasource }; });\n}\n\nfunction getValidDatasources(targets) {\n return targets.filter((elem) => elem.metricAggs.filter((elem) => elem.alias === 'latitude' || elem.alias === 'longitude')).map((elem) => elem.datasource);\n}\n\nexport {\n getDatasources, getValidDatasources\n};\n"],"file":"datasource.js"} \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/utils/map_utils.js b/deploy/grafana-map-plugin/dist/utils/map_utils.js new file mode 100755 index 0000000..6b94a7f --- /dev/null +++ b/deploy/grafana-map-plugin/dist/utils/map_utils.js @@ -0,0 +1,159 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.getCityCoordinates = getCityCoordinates; +exports.getDataPointStickyInfo = getDataPointStickyInfo; +exports.getSelectedCity = getSelectedCity; +exports.geolocationOptions = void 0; + +var _lodash = require("lodash"); + +var _config = _interopRequireDefault(require("app/core/config")); + +var _string = require("./string"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +/** +* private functions +*/ +function getDataPointStickyInfo(dataPoint, metricsTranslations) { + var stickyInfo = '
'; + var bodyData = getDataPointDetails(dataPoint, ['geojson', 'id', 'type', 'created_at', 'longitude', 'latitude', 'name'], false); + + if (dataPoint.name && Object.keys(bodyData).length > 1) { + stickyInfo += '
' + dataPoint.name + '
'; + } else if (dataPoint.id && Object.keys(bodyData).length > 1) { + stickyInfo += '
' + dataPoint.id + '
'; + } else if (Object.keys(bodyData).length === 1) { + stickyInfo += '
' + Object.keys(bodyData)[0] + '
'; + } + + var bodyClass = 'popup-single-value'; + + if (Object.keys(bodyData).length > 1) { + bodyClass = 'popup-multiple-value'; + } // body + + + stickyInfo += '
'; + stickyInfo += translate(bodyData, metricsTranslations, bodyClass).join(''); + stickyInfo += '
'; // foot + + var footData; + + if (Object.keys(bodyData).length === 1 && dataPoint.name) { + footData = getDataPointDetails(dataPoint, ['created_at', 'name'], true); + } else { + footData = getDataPointDetails(dataPoint, ['created_at'], true); + } + + var footClass = ''; + stickyInfo += '
'; + stickyInfo += translate(footData, metricsTranslations, footClass).join(''); + stickyInfo += '
'; + return stickyInfo; +} + +function getDataPointDetails(dataPoint, skipkey, include) { + return include ? Object.keys(dataPoint).filter(function (key) { + return skipkey.includes(key); + }).reduce(function (obj, key) { + obj[key] = dataPoint[key]; + return obj; + }, {}) : Object.keys(dataPoint).filter(function (key) { + return !skipkey.includes(key); + }).reduce(function (obj, key) { + obj[key] = dataPoint[key]; + return obj; + }, {}); +} + +function objToString(obj) { + var str = '
'; + + for (var p in obj) { + if (obj.hasOwnProperty(p)) { + if (_typeof(obj[p]) === 'object') { + str += p + ': ' + objToString(obj[p]) + '
'; + } else { + str += p + ': ' + obj[p] + '
'; + } + } + } + + str += '
'; + return str; +} + +function translate(filteredData, metricsTranslations, cssClass) { + var keys = Object.keys(filteredData); + var translatedValues = keys.map(function (dpKey) { + var dP = dpKey === 'created_at' ? new Date(filteredData[dpKey]).toLocaleString() : _typeof(filteredData[dpKey]) === 'object' ? objToString(filteredData[dpKey]) : typeof filteredData[dpKey] === 'boolean' ? filteredData[dpKey] : isNaN(filteredData[dpKey]) ? filteredData[dpKey] : Number.isInteger(filteredData[dpKey]) ? filteredData[dpKey] : parseFloat(filteredData[dpKey].toFixed(2)); + var trans = metricsTranslations.filter(function (elem) { + return elem[0] === dpKey; + }); + return { + 'name': trans.length > 0 && trans[0][1] ? trans[0][1] : (0, _string.titleize)(dpKey), + 'value': dP || '-', + 'unit': trans.length > 0 ? trans[0][2] : '' + }; + }); + return translatedValues.map(function (translatedValue) { + return "
").concat(translatedValue.name, "").concat(translatedValue.value, "").concat(translatedValue.unit || '', "
"); + }); +} // Given vars passed as param, retrieves the selected city + + +function getSelectedCity(vars, selectedVarName) { + var cityEnv = vars.filter(function (elem) { + return elem.name === selectedVarName; + }); + var city = null; + if (cityEnv && cityEnv.length === 1) city = cityEnv[0].current.value; + return city; +} // Access remote api and gives the coordinates from a city center based on NOMINATIM url server + + +function getCityCoordinates(city_name) { + var url = NOMINATIM_ADDRESS.replace('', city_name); + return fetch(url).then(function (response) { + return response.json(); + }).then(function (data) { + return { + latitude: data[0].lat, + longitude: data[0].lon + }; + })["catch"](function (error) { + return console.error(error); + }); +} +/* +* Auxiliar functions +*/ +// just for improve DRY + + +function convertDate(time_) { + var time = new Date(time_); + var day = time.getDate(); + var month = time.getMonth(); + var year = time.getFullYear(); + var hour = time.getHours() - 1; + var minutes = time.getMinutes(); + var seconds = time.getSeconds(); + var milliseconds = time.getMilliseconds(); + return Date.UTC(year, month, day, hour + 1, minutes, seconds, milliseconds); +} + +var geolocationOptions = { + enableHighAccuracy: true, + timeout: 5000, + maximumAge: 110 +}; +exports.geolocationOptions = geolocationOptions; +//# sourceMappingURL=map_utils.js.map diff --git a/deploy/grafana-map-plugin/dist/utils/map_utils.js.map b/deploy/grafana-map-plugin/dist/utils/map_utils.js.map new file mode 100755 index 0000000..ff77b42 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/utils/map_utils.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/utils/map_utils.js"],"names":["getDataPointStickyInfo","dataPoint","metricsTranslations","stickyInfo","bodyData","getDataPointDetails","name","Object","keys","length","id","bodyClass","translate","join","footData","footClass","skipkey","include","filter","key","includes","reduce","obj","objToString","str","p","hasOwnProperty","filteredData","cssClass","translatedValues","map","dpKey","dP","Date","toLocaleString","isNaN","Number","isInteger","parseFloat","toFixed","trans","elem","translatedValue","value","unit","getSelectedCity","vars","selectedVarName","cityEnv","city","current","getCityCoordinates","city_name","url","NOMINATIM_ADDRESS","replace","fetch","then","response","json","data","latitude","lat","longitude","lon","error","console","convertDate","time_","time","day","getDate","month","getMonth","year","getFullYear","hour","getHours","minutes","getMinutes","seconds","getSeconds","milliseconds","getMilliseconds","UTC","geolocationOptions","enableHighAccuracy","timeout","maximumAge"],"mappings":"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","sourcesContent":["// draw components in the map\n/* Vendor specific */\nimport { defaults, isEqual } from 'lodash';\n\nimport config from 'app/core/config';\n\n/* Grafana Specific */\n\nimport { titleize } from './string';\n\n\n/**\n* private functions\n*/\n\nfunction getDataPointStickyInfo(dataPoint, metricsTranslations) {\n let stickyInfo = '
';\n\n var bodyData = getDataPointDetails(dataPoint, ['geojson', 'id', 'type', 'created_at', 'longitude', 'latitude' , 'name'], false);\n\n if (dataPoint.name && Object.keys(bodyData).length > 1){\n stickyInfo += '
' + dataPoint.name + '
';\n } else if (dataPoint.id && Object.keys(bodyData).length > 1) {\n stickyInfo += '
' + dataPoint.id + '
';\n } else if (Object.keys(bodyData).length === 1){\n stickyInfo += '
' + Object.keys(bodyData)[0] + '
';\n }\n\n var bodyClass = 'popup-single-value';\n if (Object.keys(bodyData).length > 1){\n bodyClass = 'popup-multiple-value';\n }\n\n // body\n stickyInfo += '
';\n stickyInfo += translate(bodyData, metricsTranslations, bodyClass).join('');\n stickyInfo += '
';\n\n // foot\n var footData;\n if (Object.keys(bodyData).length === 1 && dataPoint.name){\n footData = getDataPointDetails(dataPoint, ['created_at', 'name'], true);\n } else {\n footData = getDataPointDetails(dataPoint, ['created_at'], true);\n }\n\n\n var footClass = '';\n\n stickyInfo += '
';\n stickyInfo+= translate(footData, metricsTranslations, footClass).join('');\n stickyInfo += '
';\n return stickyInfo;\n}\n\nfunction getDataPointDetails(dataPoint, skipkey, include) {\n return include? Object.keys(dataPoint).filter(key => skipkey.includes(key)).reduce((obj, key) => { obj[key] = dataPoint[key]; return obj; }, {}) : Object.keys(dataPoint).filter(key => !skipkey.includes(key)).reduce((obj, key) => { obj[key] = dataPoint[key]; return obj; }, {});\n}\n\n\nfunction objToString (obj) {\n var str = '
';\n for (var p in obj) {\n if (obj.hasOwnProperty(p)) {\n if(typeof obj[p] === 'object'){\n str += p + ': ' + objToString(obj[p]) + '
';\n } else {\n str += p + ': ' + obj[p] + '
';\n }\n }\n }\n str += '
';\n return str;\n}\n\nfunction translate(filteredData, metricsTranslations, cssClass){\n const keys = Object.keys(filteredData);\n const translatedValues = keys.map((dpKey) => {\n const dP = (dpKey === 'created_at' ? new Date(filteredData[dpKey]).toLocaleString() : typeof filteredData[dpKey] === 'object' ? objToString(filteredData[dpKey]) : typeof filteredData[dpKey] === 'boolean' ? filteredData[dpKey] : isNaN(filteredData[dpKey]) ? filteredData[dpKey] : Number.isInteger(filteredData[dpKey]) ? filteredData[dpKey] : parseFloat(filteredData[dpKey].toFixed(2)) );\n const trans = metricsTranslations.filter((elem) => elem[0] === dpKey);\n return { 'name': (trans.length > 0 && trans[0][1] ? trans[0][1] : titleize(dpKey)), 'value': dP || '-', 'unit': (trans.length > 0 ? trans[0][2] : '') };\n });\n return translatedValues.map((translatedValue) => `
${translatedValue.name}${translatedValue.value}${translatedValue.unit || ''}
`);\n}\n\n// Given vars passed as param, retrieves the selected city\nfunction getSelectedCity(vars, selectedVarName) {\n const cityEnv = vars.filter((elem) => elem.name === selectedVarName);\n\n let city = null;\n if (cityEnv && cityEnv.length === 1) city = cityEnv[0].current.value;\n\n return city;\n}\n\n// Access remote api and gives the coordinates from a city center based on NOMINATIM url server\nfunction getCityCoordinates(city_name) {\n const url = NOMINATIM_ADDRESS.replace('', city_name);\n return fetch(url)\n .then((response) => response.json())\n .then((data) => { return { latitude: data[0].lat, longitude: data[0].lon }; })\n .catch((error) => console.error(error));\n}\n/*\n* Auxiliar functions\n*/\n// just for improve DRY\nfunction convertDate(time_) {\n const time = new Date(time_);\n const day = time.getDate();\n const month = time.getMonth();\n const year = time.getFullYear();\n const hour = time.getHours() - 1;\n const minutes = time.getMinutes();\n const seconds = time.getSeconds();\n const milliseconds = time.getMilliseconds();\n return Date.UTC(year, month, day, hour + 1, minutes, seconds, milliseconds);\n}\n\nconst geolocationOptions = {\n enableHighAccuracy: true,\n timeout: 5000,\n maximumAge: 110\n};\n\nexport {\n\n getCityCoordinates,\n\n getDataPointStickyInfo,\n\n getSelectedCity,\n\n geolocationOptions\n};\n"],"file":"map_utils.js"} \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/utils/string.js b/deploy/grafana-map-plugin/dist/utils/string.js new file mode 100755 index 0000000..366d396 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/utils/string.js @@ -0,0 +1,30 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.capitalize = capitalize; +exports.titleize = titleize; + +function capitalize(str) { + return str.charAt(0).toUpperCase() + str.slice(1); +} + +function titleize(str) { + return str.split('_').map(function (elem) { + return capitalize(elem); + }).join(' '); +} + +String.prototype.capitalize = function () { + this.charAt(0).toUpperCase() + this.slice(1); +}; + +String.prototype.titleize = function () { + var _this = this; + + this.split('_').map(function (elem) { + return _this.capitalize(elem); + }).join(' '); +}; +//# sourceMappingURL=string.js.map diff --git a/deploy/grafana-map-plugin/dist/utils/string.js.map b/deploy/grafana-map-plugin/dist/utils/string.js.map new file mode 100755 index 0000000..296ce38 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/utils/string.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/utils/string.js"],"names":["capitalize","str","charAt","toUpperCase","slice","titleize","split","map","elem","join","String","prototype"],"mappings":";;;;;;;;AAAO,SAASA,UAAT,CAAoBC,GAApB,EAAyB;AAC9B,SAAOA,GAAG,CAACC,MAAJ,CAAW,CAAX,EAAcC,WAAd,KAA8BF,GAAG,CAACG,KAAJ,CAAU,CAAV,CAArC;AACD;;AAEM,SAASC,QAAT,CAAkBJ,GAAlB,EAAuB;AAC5B,SAAOA,GAAG,CAACK,KAAJ,CAAU,GAAV,EAAeC,GAAf,CAAmB,UAACC,IAAD;AAAA,WAAUR,UAAU,CAACQ,IAAD,CAApB;AAAA,GAAnB,EAA+CC,IAA/C,CAAoD,GAApD,CAAP;AACD;;AAGDC,MAAM,CAACC,SAAP,CAAiBX,UAAjB,GAA8B,YAAY;AACxC,OAAKE,MAAL,CAAY,CAAZ,EAAeC,WAAf,KAA+B,KAAKC,KAAL,CAAW,CAAX,CAA/B;AACD,CAFD;;AAGAM,MAAM,CAACC,SAAP,CAAiBN,QAAjB,GAA4B,YAAY;AAAA;;AACtC,OAAKC,KAAL,CAAW,GAAX,EAAgBC,GAAhB,CAAoB,UAACC,IAAD;AAAA,WAAU,KAAI,CAACR,UAAL,CAAgBQ,IAAhB,CAAV;AAAA,GAApB,EAAqDC,IAArD,CAA0D,GAA1D;AACD,CAFD","sourcesContent":["export function capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport function titleize(str) {\n return str.split('_').map((elem) => capitalize(elem)).join(' ');\n}\n\n\nString.prototype.capitalize = function () {\n this.charAt(0).toUpperCase() + this.slice(1);\n};\nString.prototype.titleize = function () {\n this.split('_').map((elem) => this.capitalize(elem)).join(' ');\n};\n"],"file":"string.js"} \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/all.css b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/all.css new file mode 100755 index 0000000..ba15e19 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/all.css @@ -0,0 +1,4463 @@ +/*! + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa, +.fas, +.far, +.fal, +.fad, +.fab { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; } + +.fa-lg { + font-size: 1.33333em; + line-height: 0.75em; + vertical-align: -.0667em; } + +.fa-xs { + font-size: .75em; } + +.fa-sm { + font-size: .875em; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: 2.5em; + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: -2em; + position: absolute; + text-align: center; + width: 2em; + line-height: inherit; } + +.fa-border { + border: solid 0.08em #eee; + border-radius: .1em; + padding: .2em .25em .15em; } + +.fa-pull-left { + float: left; } + +.fa-pull-right { + float: right; } + +.fa.fa-pull-left, +.fas.fa-pull-left, +.far.fa-pull-left, +.fal.fa-pull-left, +.fab.fa-pull-left { + margin-right: .3em; } + +.fa.fa-pull-right, +.fas.fa-pull-right, +.far.fa-pull-right, +.fal.fa-pull-right, +.fab.fa-pull-right { + margin-left: .3em; } + +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; } + +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); } + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical, +:root .fa-flip-both { + -webkit-filter: none; + filter: none; } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: #fff; } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ +.fa-500px:before { + content: "\f26e"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-acquisitions-incorporated:before { + content: "\f6af"; } + +.fa-ad:before { + content: "\f641"; } + +.fa-address-book:before { + content: "\f2b9"; } + +.fa-address-card:before { + content: "\f2bb"; } + +.fa-adjust:before { + content: "\f042"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-adobe:before { + content: "\f778"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-air-freshener:before { + content: "\f5d0"; } + +.fa-airbnb:before { + content: "\f834"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-align-center:before { + content: "\f037"; } + +.fa-align-justify:before { + content: "\f039"; } + +.fa-align-left:before { + content: "\f036"; } + +.fa-align-right:before { + content: "\f038"; } + +.fa-alipay:before { + content: "\f642"; } + +.fa-allergies:before { + content: "\f461"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-ambulance:before { + content: "\f0f9"; } + +.fa-american-sign-language-interpreting:before { + content: "\f2a3"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-anchor:before { + content: "\f13d"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-angle-double-down:before { + content: "\f103"; } + +.fa-angle-double-left:before { + content: "\f100"; } + +.fa-angle-double-right:before { + content: "\f101"; } + +.fa-angle-double-up:before { + content: "\f102"; } + +.fa-angle-down:before { + content: "\f107"; } + +.fa-angle-left:before { + content: "\f104"; } + +.fa-angle-right:before { + content: "\f105"; } + +.fa-angle-up:before { + content: "\f106"; } + +.fa-angry:before { + content: "\f556"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-ankh:before { + content: "\f644"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-apple-alt:before { + content: "\f5d1"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-archive:before { + content: "\f187"; } + +.fa-archway:before { + content: "\f557"; } + +.fa-arrow-alt-circle-down:before { + content: "\f358"; } + +.fa-arrow-alt-circle-left:before { + content: "\f359"; } + +.fa-arrow-alt-circle-right:before { + content: "\f35a"; } + +.fa-arrow-alt-circle-up:before { + content: "\f35b"; } + +.fa-arrow-circle-down:before { + content: "\f0ab"; } + +.fa-arrow-circle-left:before { + content: "\f0a8"; } + +.fa-arrow-circle-right:before { + content: "\f0a9"; } + +.fa-arrow-circle-up:before { + content: "\f0aa"; } + +.fa-arrow-down:before { + content: "\f063"; } + +.fa-arrow-left:before { + content: "\f060"; } + +.fa-arrow-right:before { + content: "\f061"; } + +.fa-arrow-up:before { + content: "\f062"; } + +.fa-arrows-alt:before { + content: "\f0b2"; } + +.fa-arrows-alt-h:before { + content: "\f337"; } + +.fa-arrows-alt-v:before { + content: "\f338"; } + +.fa-artstation:before { + content: "\f77a"; } + +.fa-assistive-listening-systems:before { + content: "\f2a2"; } + +.fa-asterisk:before { + content: "\f069"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-at:before { + content: "\f1fa"; } + +.fa-atlas:before { + content: "\f558"; } + +.fa-atlassian:before { + content: "\f77b"; } + +.fa-atom:before { + content: "\f5d2"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-audio-description:before { + content: "\f29e"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-award:before { + content: "\f559"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-baby:before { + content: "\f77c"; } + +.fa-baby-carriage:before { + content: "\f77d"; } + +.fa-backspace:before { + content: "\f55a"; } + +.fa-backward:before { + content: "\f04a"; } + +.fa-bacon:before { + content: "\f7e5"; } + +.fa-bahai:before { + content: "\f666"; } + +.fa-balance-scale:before { + content: "\f24e"; } + +.fa-balance-scale-left:before { + content: "\f515"; } + +.fa-balance-scale-right:before { + content: "\f516"; } + +.fa-ban:before { + content: "\f05e"; } + +.fa-band-aid:before { + content: "\f462"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-barcode:before { + content: "\f02a"; } + +.fa-bars:before { + content: "\f0c9"; } + +.fa-baseball-ball:before { + content: "\f433"; } + +.fa-basketball-ball:before { + content: "\f434"; } + +.fa-bath:before { + content: "\f2cd"; } + +.fa-battery-empty:before { + content: "\f244"; } + +.fa-battery-full:before { + content: "\f240"; } + +.fa-battery-half:before { + content: "\f242"; } + +.fa-battery-quarter:before { + content: "\f243"; } + +.fa-battery-three-quarters:before { + content: "\f241"; } + +.fa-battle-net:before { + content: "\f835"; } + +.fa-bed:before { + content: "\f236"; } + +.fa-beer:before { + content: "\f0fc"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-bell:before { + content: "\f0f3"; } + +.fa-bell-slash:before { + content: "\f1f6"; } + +.fa-bezier-curve:before { + content: "\f55b"; } + +.fa-bible:before { + content: "\f647"; } + +.fa-bicycle:before { + content: "\f206"; } + +.fa-biking:before { + content: "\f84a"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-binoculars:before { + content: "\f1e5"; } + +.fa-biohazard:before { + content: "\f780"; } + +.fa-birthday-cake:before { + content: "\f1fd"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-blender:before { + content: "\f517"; } + +.fa-blender-phone:before { + content: "\f6b6"; } + +.fa-blind:before { + content: "\f29d"; } + +.fa-blog:before { + content: "\f781"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-bold:before { + content: "\f032"; } + +.fa-bolt:before { + content: "\f0e7"; } + +.fa-bomb:before { + content: "\f1e2"; } + +.fa-bone:before { + content: "\f5d7"; } + +.fa-bong:before { + content: "\f55c"; } + +.fa-book:before { + content: "\f02d"; } + +.fa-book-dead:before { + content: "\f6b7"; } + +.fa-book-medical:before { + content: "\f7e6"; } + +.fa-book-open:before { + content: "\f518"; } + +.fa-book-reader:before { + content: "\f5da"; } + +.fa-bookmark:before { + content: "\f02e"; } + +.fa-bootstrap:before { + content: "\f836"; } + +.fa-border-all:before { + content: "\f84c"; } + +.fa-border-none:before { + content: "\f850"; } + +.fa-border-style:before { + content: "\f853"; } + +.fa-bowling-ball:before { + content: "\f436"; } + +.fa-box:before { + content: "\f466"; } + +.fa-box-open:before { + content: "\f49e"; } + +.fa-boxes:before { + content: "\f468"; } + +.fa-braille:before { + content: "\f2a1"; } + +.fa-brain:before { + content: "\f5dc"; } + +.fa-bread-slice:before { + content: "\f7ec"; } + +.fa-briefcase:before { + content: "\f0b1"; } + +.fa-briefcase-medical:before { + content: "\f469"; } + +.fa-broadcast-tower:before { + content: "\f519"; } + +.fa-broom:before { + content: "\f51a"; } + +.fa-brush:before { + content: "\f55d"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-buffer:before { + content: "\f837"; } + +.fa-bug:before { + content: "\f188"; } + +.fa-building:before { + content: "\f1ad"; } + +.fa-bullhorn:before { + content: "\f0a1"; } + +.fa-bullseye:before { + content: "\f140"; } + +.fa-burn:before { + content: "\f46a"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-bus:before { + content: "\f207"; } + +.fa-bus-alt:before { + content: "\f55e"; } + +.fa-business-time:before { + content: "\f64a"; } + +.fa-buy-n-large:before { + content: "\f8a6"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-calculator:before { + content: "\f1ec"; } + +.fa-calendar:before { + content: "\f133"; } + +.fa-calendar-alt:before { + content: "\f073"; } + +.fa-calendar-check:before { + content: "\f274"; } + +.fa-calendar-day:before { + content: "\f783"; } + +.fa-calendar-minus:before { + content: "\f272"; } + +.fa-calendar-plus:before { + content: "\f271"; } + +.fa-calendar-times:before { + content: "\f273"; } + +.fa-calendar-week:before { + content: "\f784"; } + +.fa-camera:before { + content: "\f030"; } + +.fa-camera-retro:before { + content: "\f083"; } + +.fa-campground:before { + content: "\f6bb"; } + +.fa-canadian-maple-leaf:before { + content: "\f785"; } + +.fa-candy-cane:before { + content: "\f786"; } + +.fa-cannabis:before { + content: "\f55f"; } + +.fa-capsules:before { + content: "\f46b"; } + +.fa-car:before { + content: "\f1b9"; } + +.fa-car-alt:before { + content: "\f5de"; } + +.fa-car-battery:before { + content: "\f5df"; } + +.fa-car-crash:before { + content: "\f5e1"; } + +.fa-car-side:before { + content: "\f5e4"; } + +.fa-caravan:before { + content: "\f8ff"; } + +.fa-caret-down:before { + content: "\f0d7"; } + +.fa-caret-left:before { + content: "\f0d9"; } + +.fa-caret-right:before { + content: "\f0da"; } + +.fa-caret-square-down:before { + content: "\f150"; } + +.fa-caret-square-left:before { + content: "\f191"; } + +.fa-caret-square-right:before { + content: "\f152"; } + +.fa-caret-square-up:before { + content: "\f151"; } + +.fa-caret-up:before { + content: "\f0d8"; } + +.fa-carrot:before { + content: "\f787"; } + +.fa-cart-arrow-down:before { + content: "\f218"; } + +.fa-cart-plus:before { + content: "\f217"; } + +.fa-cash-register:before { + content: "\f788"; } + +.fa-cat:before { + content: "\f6be"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-centos:before { + content: "\f789"; } + +.fa-certificate:before { + content: "\f0a3"; } + +.fa-chair:before { + content: "\f6c0"; } + +.fa-chalkboard:before { + content: "\f51b"; } + +.fa-chalkboard-teacher:before { + content: "\f51c"; } + +.fa-charging-station:before { + content: "\f5e7"; } + +.fa-chart-area:before { + content: "\f1fe"; } + +.fa-chart-bar:before { + content: "\f080"; } + +.fa-chart-line:before { + content: "\f201"; } + +.fa-chart-pie:before { + content: "\f200"; } + +.fa-check:before { + content: "\f00c"; } + +.fa-check-circle:before { + content: "\f058"; } + +.fa-check-double:before { + content: "\f560"; } + +.fa-check-square:before { + content: "\f14a"; } + +.fa-cheese:before { + content: "\f7ef"; } + +.fa-chess:before { + content: "\f439"; } + +.fa-chess-bishop:before { + content: "\f43a"; } + +.fa-chess-board:before { + content: "\f43c"; } + +.fa-chess-king:before { + content: "\f43f"; } + +.fa-chess-knight:before { + content: "\f441"; } + +.fa-chess-pawn:before { + content: "\f443"; } + +.fa-chess-queen:before { + content: "\f445"; } + +.fa-chess-rook:before { + content: "\f447"; } + +.fa-chevron-circle-down:before { + content: "\f13a"; } + +.fa-chevron-circle-left:before { + content: "\f137"; } + +.fa-chevron-circle-right:before { + content: "\f138"; } + +.fa-chevron-circle-up:before { + content: "\f139"; } + +.fa-chevron-down:before { + content: "\f078"; } + +.fa-chevron-left:before { + content: "\f053"; } + +.fa-chevron-right:before { + content: "\f054"; } + +.fa-chevron-up:before { + content: "\f077"; } + +.fa-child:before { + content: "\f1ae"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-chromecast:before { + content: "\f838"; } + +.fa-church:before { + content: "\f51d"; } + +.fa-circle:before { + content: "\f111"; } + +.fa-circle-notch:before { + content: "\f1ce"; } + +.fa-city:before { + content: "\f64f"; } + +.fa-clinic-medical:before { + content: "\f7f2"; } + +.fa-clipboard:before { + content: "\f328"; } + +.fa-clipboard-check:before { + content: "\f46c"; } + +.fa-clipboard-list:before { + content: "\f46d"; } + +.fa-clock:before { + content: "\f017"; } + +.fa-clone:before { + content: "\f24d"; } + +.fa-closed-captioning:before { + content: "\f20a"; } + +.fa-cloud:before { + content: "\f0c2"; } + +.fa-cloud-download-alt:before { + content: "\f381"; } + +.fa-cloud-meatball:before { + content: "\f73b"; } + +.fa-cloud-moon:before { + content: "\f6c3"; } + +.fa-cloud-moon-rain:before { + content: "\f73c"; } + +.fa-cloud-rain:before { + content: "\f73d"; } + +.fa-cloud-showers-heavy:before { + content: "\f740"; } + +.fa-cloud-sun:before { + content: "\f6c4"; } + +.fa-cloud-sun-rain:before { + content: "\f743"; } + +.fa-cloud-upload-alt:before { + content: "\f382"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-cocktail:before { + content: "\f561"; } + +.fa-code:before { + content: "\f121"; } + +.fa-code-branch:before { + content: "\f126"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-coffee:before { + content: "\f0f4"; } + +.fa-cog:before { + content: "\f013"; } + +.fa-cogs:before { + content: "\f085"; } + +.fa-coins:before { + content: "\f51e"; } + +.fa-columns:before { + content: "\f0db"; } + +.fa-comment:before { + content: "\f075"; } + +.fa-comment-alt:before { + content: "\f27a"; } + +.fa-comment-dollar:before { + content: "\f651"; } + +.fa-comment-dots:before { + content: "\f4ad"; } + +.fa-comment-medical:before { + content: "\f7f5"; } + +.fa-comment-slash:before { + content: "\f4b3"; } + +.fa-comments:before { + content: "\f086"; } + +.fa-comments-dollar:before { + content: "\f653"; } + +.fa-compact-disc:before { + content: "\f51f"; } + +.fa-compass:before { + content: "\f14e"; } + +.fa-compress:before { + content: "\f066"; } + +.fa-compress-alt:before { + content: "\f422"; } + +.fa-compress-arrows-alt:before { + content: "\f78c"; } + +.fa-concierge-bell:before { + content: "\f562"; } + +.fa-confluence:before { + content: "\f78d"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-cookie:before { + content: "\f563"; } + +.fa-cookie-bite:before { + content: "\f564"; } + +.fa-copy:before { + content: "\f0c5"; } + +.fa-copyright:before { + content: "\f1f9"; } + +.fa-cotton-bureau:before { + content: "\f89e"; } + +.fa-couch:before { + content: "\f4b8"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-creative-commons-by:before { + content: "\f4e7"; } + +.fa-creative-commons-nc:before { + content: "\f4e8"; } + +.fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + +.fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + +.fa-creative-commons-nd:before { + content: "\f4eb"; } + +.fa-creative-commons-pd:before { + content: "\f4ec"; } + +.fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + +.fa-creative-commons-remix:before { + content: "\f4ee"; } + +.fa-creative-commons-sa:before { + content: "\f4ef"; } + +.fa-creative-commons-sampling:before { + content: "\f4f0"; } + +.fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + +.fa-creative-commons-share:before { + content: "\f4f2"; } + +.fa-creative-commons-zero:before { + content: "\f4f3"; } + +.fa-credit-card:before { + content: "\f09d"; } + +.fa-critical-role:before { + content: "\f6c9"; } + +.fa-crop:before { + content: "\f125"; } + +.fa-crop-alt:before { + content: "\f565"; } + +.fa-cross:before { + content: "\f654"; } + +.fa-crosshairs:before { + content: "\f05b"; } + +.fa-crow:before { + content: "\f520"; } + +.fa-crown:before { + content: "\f521"; } + +.fa-crutch:before { + content: "\f7f7"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-cube:before { + content: "\f1b2"; } + +.fa-cubes:before { + content: "\f1b3"; } + +.fa-cut:before { + content: "\f0c4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-d-and-d-beyond:before { + content: "\f6ca"; } + +.fa-dailymotion:before { + content: "\f952"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-database:before { + content: "\f1c0"; } + +.fa-deaf:before { + content: "\f2a4"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-democrat:before { + content: "\f747"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-desktop:before { + content: "\f108"; } + +.fa-dev:before { + content: "\f6cc"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-dharmachakra:before { + content: "\f655"; } + +.fa-dhl:before { + content: "\f790"; } + +.fa-diagnoses:before { + content: "\f470"; } + +.fa-diaspora:before { + content: "\f791"; } + +.fa-dice:before { + content: "\f522"; } + +.fa-dice-d20:before { + content: "\f6cf"; } + +.fa-dice-d6:before { + content: "\f6d1"; } + +.fa-dice-five:before { + content: "\f523"; } + +.fa-dice-four:before { + content: "\f524"; } + +.fa-dice-one:before { + content: "\f525"; } + +.fa-dice-six:before { + content: "\f526"; } + +.fa-dice-three:before { + content: "\f527"; } + +.fa-dice-two:before { + content: "\f528"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-digital-tachograph:before { + content: "\f566"; } + +.fa-directions:before { + content: "\f5eb"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-divide:before { + content: "\f529"; } + +.fa-dizzy:before { + content: "\f567"; } + +.fa-dna:before { + content: "\f471"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-dog:before { + content: "\f6d3"; } + +.fa-dollar-sign:before { + content: "\f155"; } + +.fa-dolly:before { + content: "\f472"; } + +.fa-dolly-flatbed:before { + content: "\f474"; } + +.fa-donate:before { + content: "\f4b9"; } + +.fa-door-closed:before { + content: "\f52a"; } + +.fa-door-open:before { + content: "\f52b"; } + +.fa-dot-circle:before { + content: "\f192"; } + +.fa-dove:before { + content: "\f4ba"; } + +.fa-download:before { + content: "\f019"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-drafting-compass:before { + content: "\f568"; } + +.fa-dragon:before { + content: "\f6d5"; } + +.fa-draw-polygon:before { + content: "\f5ee"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-drum:before { + content: "\f569"; } + +.fa-drum-steelpan:before { + content: "\f56a"; } + +.fa-drumstick-bite:before { + content: "\f6d7"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-dumbbell:before { + content: "\f44b"; } + +.fa-dumpster:before { + content: "\f793"; } + +.fa-dumpster-fire:before { + content: "\f794"; } + +.fa-dungeon:before { + content: "\f6d9"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-ebay:before { + content: "\f4f4"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-edit:before { + content: "\f044"; } + +.fa-egg:before { + content: "\f7fb"; } + +.fa-eject:before { + content: "\f052"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-ellipsis-h:before { + content: "\f141"; } + +.fa-ellipsis-v:before { + content: "\f142"; } + +.fa-ello:before { + content: "\f5f1"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envelope:before { + content: "\f0e0"; } + +.fa-envelope-open:before { + content: "\f2b6"; } + +.fa-envelope-open-text:before { + content: "\f658"; } + +.fa-envelope-square:before { + content: "\f199"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-equals:before { + content: "\f52c"; } + +.fa-eraser:before { + content: "\f12d"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-ethernet:before { + content: "\f796"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-euro-sign:before { + content: "\f153"; } + +.fa-evernote:before { + content: "\f839"; } + +.fa-exchange-alt:before { + content: "\f362"; } + +.fa-exclamation:before { + content: "\f12a"; } + +.fa-exclamation-circle:before { + content: "\f06a"; } + +.fa-exclamation-triangle:before { + content: "\f071"; } + +.fa-expand:before { + content: "\f065"; } + +.fa-expand-alt:before { + content: "\f424"; } + +.fa-expand-arrows-alt:before { + content: "\f31e"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-external-link-alt:before { + content: "\f35d"; } + +.fa-external-link-square-alt:before { + content: "\f360"; } + +.fa-eye:before { + content: "\f06e"; } + +.fa-eye-dropper:before { + content: "\f1fb"; } + +.fa-eye-slash:before { + content: "\f070"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-fan:before { + content: "\f863"; } + +.fa-fantasy-flight-games:before { + content: "\f6dc"; } + +.fa-fast-backward:before { + content: "\f049"; } + +.fa-fast-forward:before { + content: "\f050"; } + +.fa-fax:before { + content: "\f1ac"; } + +.fa-feather:before { + content: "\f52d"; } + +.fa-feather-alt:before { + content: "\f56b"; } + +.fa-fedex:before { + content: "\f797"; } + +.fa-fedora:before { + content: "\f798"; } + +.fa-female:before { + content: "\f182"; } + +.fa-fighter-jet:before { + content: "\f0fb"; } + +.fa-figma:before { + content: "\f799"; } + +.fa-file:before { + content: "\f15b"; } + +.fa-file-alt:before { + content: "\f15c"; } + +.fa-file-archive:before { + content: "\f1c6"; } + +.fa-file-audio:before { + content: "\f1c7"; } + +.fa-file-code:before { + content: "\f1c9"; } + +.fa-file-contract:before { + content: "\f56c"; } + +.fa-file-csv:before { + content: "\f6dd"; } + +.fa-file-download:before { + content: "\f56d"; } + +.fa-file-excel:before { + content: "\f1c3"; } + +.fa-file-export:before { + content: "\f56e"; } + +.fa-file-image:before { + content: "\f1c5"; } + +.fa-file-import:before { + content: "\f56f"; } + +.fa-file-invoice:before { + content: "\f570"; } + +.fa-file-invoice-dollar:before { + content: "\f571"; } + +.fa-file-medical:before { + content: "\f477"; } + +.fa-file-medical-alt:before { + content: "\f478"; } + +.fa-file-pdf:before { + content: "\f1c1"; } + +.fa-file-powerpoint:before { + content: "\f1c4"; } + +.fa-file-prescription:before { + content: "\f572"; } + +.fa-file-signature:before { + content: "\f573"; } + +.fa-file-upload:before { + content: "\f574"; } + +.fa-file-video:before { + content: "\f1c8"; } + +.fa-file-word:before { + content: "\f1c2"; } + +.fa-fill:before { + content: "\f575"; } + +.fa-fill-drip:before { + content: "\f576"; } + +.fa-film:before { + content: "\f008"; } + +.fa-filter:before { + content: "\f0b0"; } + +.fa-fingerprint:before { + content: "\f577"; } + +.fa-fire:before { + content: "\f06d"; } + +.fa-fire-alt:before { + content: "\f7e4"; } + +.fa-fire-extinguisher:before { + content: "\f134"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-firefox-browser:before { + content: "\f907"; } + +.fa-first-aid:before { + content: "\f479"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-first-order-alt:before { + content: "\f50a"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-fish:before { + content: "\f578"; } + +.fa-fist-raised:before { + content: "\f6de"; } + +.fa-flag:before { + content: "\f024"; } + +.fa-flag-checkered:before { + content: "\f11e"; } + +.fa-flag-usa:before { + content: "\f74d"; } + +.fa-flask:before { + content: "\f0c3"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-flushed:before { + content: "\f579"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-folder:before { + content: "\f07b"; } + +.fa-folder-minus:before { + content: "\f65d"; } + +.fa-folder-open:before { + content: "\f07c"; } + +.fa-folder-plus:before { + content: "\f65e"; } + +.fa-font:before { + content: "\f031"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-font-awesome-flag:before { + content: "\f425"; } + +.fa-font-awesome-logo-full:before { + content: "\f4e6"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-football-ball:before { + content: "\f44e"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-forward:before { + content: "\f04e"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-frog:before { + content: "\f52e"; } + +.fa-frown:before { + content: "\f119"; } + +.fa-frown-open:before { + content: "\f57a"; } + +.fa-fulcrum:before { + content: "\f50b"; } + +.fa-funnel-dollar:before { + content: "\f662"; } + +.fa-futbol:before { + content: "\f1e3"; } + +.fa-galactic-republic:before { + content: "\f50c"; } + +.fa-galactic-senate:before { + content: "\f50d"; } + +.fa-gamepad:before { + content: "\f11b"; } + +.fa-gas-pump:before { + content: "\f52f"; } + +.fa-gavel:before { + content: "\f0e3"; } + +.fa-gem:before { + content: "\f3a5"; } + +.fa-genderless:before { + content: "\f22d"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-ghost:before { + content: "\f6e2"; } + +.fa-gift:before { + content: "\f06b"; } + +.fa-gifts:before { + content: "\f79c"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-git-alt:before { + content: "\f841"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-glass-cheers:before { + content: "\f79f"; } + +.fa-glass-martini:before { + content: "\f000"; } + +.fa-glass-martini-alt:before { + content: "\f57b"; } + +.fa-glass-whiskey:before { + content: "\f7a0"; } + +.fa-glasses:before { + content: "\f530"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-globe:before { + content: "\f0ac"; } + +.fa-globe-africa:before { + content: "\f57c"; } + +.fa-globe-americas:before { + content: "\f57d"; } + +.fa-globe-asia:before { + content: "\f57e"; } + +.fa-globe-europe:before { + content: "\f7a2"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-golf-ball:before { + content: "\f450"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-gopuram:before { + content: "\f664"; } + +.fa-graduation-cap:before { + content: "\f19d"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-greater-than:before { + content: "\f531"; } + +.fa-greater-than-equal:before { + content: "\f532"; } + +.fa-grimace:before { + content: "\f57f"; } + +.fa-grin:before { + content: "\f580"; } + +.fa-grin-alt:before { + content: "\f581"; } + +.fa-grin-beam:before { + content: "\f582"; } + +.fa-grin-beam-sweat:before { + content: "\f583"; } + +.fa-grin-hearts:before { + content: "\f584"; } + +.fa-grin-squint:before { + content: "\f585"; } + +.fa-grin-squint-tears:before { + content: "\f586"; } + +.fa-grin-stars:before { + content: "\f587"; } + +.fa-grin-tears:before { + content: "\f588"; } + +.fa-grin-tongue:before { + content: "\f589"; } + +.fa-grin-tongue-squint:before { + content: "\f58a"; } + +.fa-grin-tongue-wink:before { + content: "\f58b"; } + +.fa-grin-wink:before { + content: "\f58c"; } + +.fa-grip-horizontal:before { + content: "\f58d"; } + +.fa-grip-lines:before { + content: "\f7a4"; } + +.fa-grip-lines-vertical:before { + content: "\f7a5"; } + +.fa-grip-vertical:before { + content: "\f58e"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-guitar:before { + content: "\f7a6"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-h-square:before { + content: "\f0fd"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-hackerrank:before { + content: "\f5f7"; } + +.fa-hamburger:before { + content: "\f805"; } + +.fa-hammer:before { + content: "\f6e3"; } + +.fa-hamsa:before { + content: "\f665"; } + +.fa-hand-holding:before { + content: "\f4bd"; } + +.fa-hand-holding-heart:before { + content: "\f4be"; } + +.fa-hand-holding-usd:before { + content: "\f4c0"; } + +.fa-hand-lizard:before { + content: "\f258"; } + +.fa-hand-middle-finger:before { + content: "\f806"; } + +.fa-hand-paper:before { + content: "\f256"; } + +.fa-hand-peace:before { + content: "\f25b"; } + +.fa-hand-point-down:before { + content: "\f0a7"; } + +.fa-hand-point-left:before { + content: "\f0a5"; } + +.fa-hand-point-right:before { + content: "\f0a4"; } + +.fa-hand-point-up:before { + content: "\f0a6"; } + +.fa-hand-pointer:before { + content: "\f25a"; } + +.fa-hand-rock:before { + content: "\f255"; } + +.fa-hand-scissors:before { + content: "\f257"; } + +.fa-hand-spock:before { + content: "\f259"; } + +.fa-hands:before { + content: "\f4c2"; } + +.fa-hands-helping:before { + content: "\f4c4"; } + +.fa-handshake:before { + content: "\f2b5"; } + +.fa-hanukiah:before { + content: "\f6e6"; } + +.fa-hard-hat:before { + content: "\f807"; } + +.fa-hashtag:before { + content: "\f292"; } + +.fa-hat-cowboy:before { + content: "\f8c0"; } + +.fa-hat-cowboy-side:before { + content: "\f8c1"; } + +.fa-hat-wizard:before { + content: "\f6e8"; } + +.fa-hdd:before { + content: "\f0a0"; } + +.fa-heading:before { + content: "\f1dc"; } + +.fa-headphones:before { + content: "\f025"; } + +.fa-headphones-alt:before { + content: "\f58f"; } + +.fa-headset:before { + content: "\f590"; } + +.fa-heart:before { + content: "\f004"; } + +.fa-heart-broken:before { + content: "\f7a9"; } + +.fa-heartbeat:before { + content: "\f21e"; } + +.fa-helicopter:before { + content: "\f533"; } + +.fa-highlighter:before { + content: "\f591"; } + +.fa-hiking:before { + content: "\f6ec"; } + +.fa-hippo:before { + content: "\f6ed"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-history:before { + content: "\f1da"; } + +.fa-hockey-puck:before { + content: "\f453"; } + +.fa-holly-berry:before { + content: "\f7aa"; } + +.fa-home:before { + content: "\f015"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-hornbill:before { + content: "\f592"; } + +.fa-horse:before { + content: "\f6f0"; } + +.fa-horse-head:before { + content: "\f7ab"; } + +.fa-hospital:before { + content: "\f0f8"; } + +.fa-hospital-alt:before { + content: "\f47d"; } + +.fa-hospital-symbol:before { + content: "\f47e"; } + +.fa-hot-tub:before { + content: "\f593"; } + +.fa-hotdog:before { + content: "\f80f"; } + +.fa-hotel:before { + content: "\f594"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-hourglass:before { + content: "\f254"; } + +.fa-hourglass-end:before { + content: "\f253"; } + +.fa-hourglass-half:before { + content: "\f252"; } + +.fa-hourglass-start:before { + content: "\f251"; } + +.fa-house-damage:before { + content: "\f6f1"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-hryvnia:before { + content: "\f6f2"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-i-cursor:before { + content: "\f246"; } + +.fa-ice-cream:before { + content: "\f810"; } + +.fa-icicles:before { + content: "\f7ad"; } + +.fa-icons:before { + content: "\f86d"; } + +.fa-id-badge:before { + content: "\f2c1"; } + +.fa-id-card:before { + content: "\f2c2"; } + +.fa-id-card-alt:before { + content: "\f47f"; } + +.fa-ideal:before { + content: "\f913"; } + +.fa-igloo:before { + content: "\f7ae"; } + +.fa-image:before { + content: "\f03e"; } + +.fa-images:before { + content: "\f302"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-inbox:before { + content: "\f01c"; } + +.fa-indent:before { + content: "\f03c"; } + +.fa-industry:before { + content: "\f275"; } + +.fa-infinity:before { + content: "\f534"; } + +.fa-info:before { + content: "\f129"; } + +.fa-info-circle:before { + content: "\f05a"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-instagram-square:before { + content: "\f955"; } + +.fa-intercom:before { + content: "\f7af"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-invision:before { + content: "\f7b0"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-italic:before { + content: "\f033"; } + +.fa-itch-io:before { + content: "\f83a"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-java:before { + content: "\f4e4"; } + +.fa-jedi:before { + content: "\f669"; } + +.fa-jedi-order:before { + content: "\f50e"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-jira:before { + content: "\f7b1"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-joint:before { + content: "\f595"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-journal-whills:before { + content: "\f66a"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-kaaba:before { + content: "\f66b"; } + +.fa-kaggle:before { + content: "\f5fa"; } + +.fa-key:before { + content: "\f084"; } + +.fa-keybase:before { + content: "\f4f5"; } + +.fa-keyboard:before { + content: "\f11c"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-khanda:before { + content: "\f66d"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-kiss:before { + content: "\f596"; } + +.fa-kiss-beam:before { + content: "\f597"; } + +.fa-kiss-wink-heart:before { + content: "\f598"; } + +.fa-kiwi-bird:before { + content: "\f535"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-landmark:before { + content: "\f66f"; } + +.fa-language:before { + content: "\f1ab"; } + +.fa-laptop:before { + content: "\f109"; } + +.fa-laptop-code:before { + content: "\f5fc"; } + +.fa-laptop-medical:before { + content: "\f812"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-laugh:before { + content: "\f599"; } + +.fa-laugh-beam:before { + content: "\f59a"; } + +.fa-laugh-squint:before { + content: "\f59b"; } + +.fa-laugh-wink:before { + content: "\f59c"; } + +.fa-layer-group:before { + content: "\f5fd"; } + +.fa-leaf:before { + content: "\f06c"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-lemon:before { + content: "\f094"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-less-than:before { + content: "\f536"; } + +.fa-less-than-equal:before { + content: "\f537"; } + +.fa-level-down-alt:before { + content: "\f3be"; } + +.fa-level-up-alt:before { + content: "\f3bf"; } + +.fa-life-ring:before { + content: "\f1cd"; } + +.fa-lightbulb:before { + content: "\f0eb"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-link:before { + content: "\f0c1"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-lira-sign:before { + content: "\f195"; } + +.fa-list:before { + content: "\f03a"; } + +.fa-list-alt:before { + content: "\f022"; } + +.fa-list-ol:before { + content: "\f0cb"; } + +.fa-list-ul:before { + content: "\f0ca"; } + +.fa-location-arrow:before { + content: "\f124"; } + +.fa-lock:before { + content: "\f023"; } + +.fa-lock-open:before { + content: "\f3c1"; } + +.fa-long-arrow-alt-down:before { + content: "\f309"; } + +.fa-long-arrow-alt-left:before { + content: "\f30a"; } + +.fa-long-arrow-alt-right:before { + content: "\f30b"; } + +.fa-long-arrow-alt-up:before { + content: "\f30c"; } + +.fa-low-vision:before { + content: "\f2a8"; } + +.fa-luggage-cart:before { + content: "\f59d"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-magic:before { + content: "\f0d0"; } + +.fa-magnet:before { + content: "\f076"; } + +.fa-mail-bulk:before { + content: "\f674"; } + +.fa-mailchimp:before { + content: "\f59e"; } + +.fa-male:before { + content: "\f183"; } + +.fa-mandalorian:before { + content: "\f50f"; } + +.fa-map:before { + content: "\f279"; } + +.fa-map-marked:before { + content: "\f59f"; } + +.fa-map-marked-alt:before { + content: "\f5a0"; } + +.fa-map-marker:before { + content: "\f041"; } + +.fa-map-marker-alt:before { + content: "\f3c5"; } + +.fa-map-pin:before { + content: "\f276"; } + +.fa-map-signs:before { + content: "\f277"; } + +.fa-markdown:before { + content: "\f60f"; } + +.fa-marker:before { + content: "\f5a1"; } + +.fa-mars:before { + content: "\f222"; } + +.fa-mars-double:before { + content: "\f227"; } + +.fa-mars-stroke:before { + content: "\f229"; } + +.fa-mars-stroke-h:before { + content: "\f22b"; } + +.fa-mars-stroke-v:before { + content: "\f22a"; } + +.fa-mask:before { + content: "\f6fa"; } + +.fa-mastodon:before { + content: "\f4f6"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-mdb:before { + content: "\f8ca"; } + +.fa-medal:before { + content: "\f5a2"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f3c7"; } + +.fa-medkit:before { + content: "\f0fa"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-megaport:before { + content: "\f5a3"; } + +.fa-meh:before { + content: "\f11a"; } + +.fa-meh-blank:before { + content: "\f5a4"; } + +.fa-meh-rolling-eyes:before { + content: "\f5a5"; } + +.fa-memory:before { + content: "\f538"; } + +.fa-mendeley:before { + content: "\f7b3"; } + +.fa-menorah:before { + content: "\f676"; } + +.fa-mercury:before { + content: "\f223"; } + +.fa-meteor:before { + content: "\f753"; } + +.fa-microblog:before { + content: "\f91a"; } + +.fa-microchip:before { + content: "\f2db"; } + +.fa-microphone:before { + content: "\f130"; } + +.fa-microphone-alt:before { + content: "\f3c9"; } + +.fa-microphone-alt-slash:before { + content: "\f539"; } + +.fa-microphone-slash:before { + content: "\f131"; } + +.fa-microscope:before { + content: "\f610"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-minus:before { + content: "\f068"; } + +.fa-minus-circle:before { + content: "\f056"; } + +.fa-minus-square:before { + content: "\f146"; } + +.fa-mitten:before { + content: "\f7b5"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-mixer:before { + content: "\f956"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-mobile:before { + content: "\f10b"; } + +.fa-mobile-alt:before { + content: "\f3cd"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-money-bill:before { + content: "\f0d6"; } + +.fa-money-bill-alt:before { + content: "\f3d1"; } + +.fa-money-bill-wave:before { + content: "\f53a"; } + +.fa-money-bill-wave-alt:before { + content: "\f53b"; } + +.fa-money-check:before { + content: "\f53c"; } + +.fa-money-check-alt:before { + content: "\f53d"; } + +.fa-monument:before { + content: "\f5a6"; } + +.fa-moon:before { + content: "\f186"; } + +.fa-mortar-pestle:before { + content: "\f5a7"; } + +.fa-mosque:before { + content: "\f678"; } + +.fa-motorcycle:before { + content: "\f21c"; } + +.fa-mountain:before { + content: "\f6fc"; } + +.fa-mouse:before { + content: "\f8cc"; } + +.fa-mouse-pointer:before { + content: "\f245"; } + +.fa-mug-hot:before { + content: "\f7b6"; } + +.fa-music:before { + content: "\f001"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-neos:before { + content: "\f612"; } + +.fa-network-wired:before { + content: "\f6ff"; } + +.fa-neuter:before { + content: "\f22c"; } + +.fa-newspaper:before { + content: "\f1ea"; } + +.fa-nimblr:before { + content: "\f5a8"; } + +.fa-node:before { + content: "\f419"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-not-equal:before { + content: "\f53e"; } + +.fa-notes-medical:before { + content: "\f481"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-object-group:before { + content: "\f247"; } + +.fa-object-ungroup:before { + content: "\f248"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-oil-can:before { + content: "\f613"; } + +.fa-old-republic:before { + content: "\f510"; } + +.fa-om:before { + content: "\f679"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-orcid:before { + content: "\f8d2"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-otter:before { + content: "\f700"; } + +.fa-outdent:before { + content: "\f03b"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-pager:before { + content: "\f815"; } + +.fa-paint-brush:before { + content: "\f1fc"; } + +.fa-paint-roller:before { + content: "\f5aa"; } + +.fa-palette:before { + content: "\f53f"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-pallet:before { + content: "\f482"; } + +.fa-paper-plane:before { + content: "\f1d8"; } + +.fa-paperclip:before { + content: "\f0c6"; } + +.fa-parachute-box:before { + content: "\f4cd"; } + +.fa-paragraph:before { + content: "\f1dd"; } + +.fa-parking:before { + content: "\f540"; } + +.fa-passport:before { + content: "\f5ab"; } + +.fa-pastafarianism:before { + content: "\f67b"; } + +.fa-paste:before { + content: "\f0ea"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-pause:before { + content: "\f04c"; } + +.fa-pause-circle:before { + content: "\f28b"; } + +.fa-paw:before { + content: "\f1b0"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-peace:before { + content: "\f67c"; } + +.fa-pen:before { + content: "\f304"; } + +.fa-pen-alt:before { + content: "\f305"; } + +.fa-pen-fancy:before { + content: "\f5ac"; } + +.fa-pen-nib:before { + content: "\f5ad"; } + +.fa-pen-square:before { + content: "\f14b"; } + +.fa-pencil-alt:before { + content: "\f303"; } + +.fa-pencil-ruler:before { + content: "\f5ae"; } + +.fa-penny-arcade:before { + content: "\f704"; } + +.fa-people-carry:before { + content: "\f4ce"; } + +.fa-pepper-hot:before { + content: "\f816"; } + +.fa-percent:before { + content: "\f295"; } + +.fa-percentage:before { + content: "\f541"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-person-booth:before { + content: "\f756"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-phoenix-squadron:before { + content: "\f511"; } + +.fa-phone:before { + content: "\f095"; } + +.fa-phone-alt:before { + content: "\f879"; } + +.fa-phone-slash:before { + content: "\f3dd"; } + +.fa-phone-square:before { + content: "\f098"; } + +.fa-phone-square-alt:before { + content: "\f87b"; } + +.fa-phone-volume:before { + content: "\f2a0"; } + +.fa-photo-video:before { + content: "\f87c"; } + +.fa-php:before { + content: "\f457"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-pied-piper-hat:before { + content: "\f4e5"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-pied-piper-square:before { + content: "\f91e"; } + +.fa-piggy-bank:before { + content: "\f4d3"; } + +.fa-pills:before { + content: "\f484"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-pizza-slice:before { + content: "\f818"; } + +.fa-place-of-worship:before { + content: "\f67f"; } + +.fa-plane:before { + content: "\f072"; } + +.fa-plane-arrival:before { + content: "\f5af"; } + +.fa-plane-departure:before { + content: "\f5b0"; } + +.fa-play:before { + content: "\f04b"; } + +.fa-play-circle:before { + content: "\f144"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-plug:before { + content: "\f1e6"; } + +.fa-plus:before { + content: "\f067"; } + +.fa-plus-circle:before { + content: "\f055"; } + +.fa-plus-square:before { + content: "\f0fe"; } + +.fa-podcast:before { + content: "\f2ce"; } + +.fa-poll:before { + content: "\f681"; } + +.fa-poll-h:before { + content: "\f682"; } + +.fa-poo:before { + content: "\f2fe"; } + +.fa-poo-storm:before { + content: "\f75a"; } + +.fa-poop:before { + content: "\f619"; } + +.fa-portrait:before { + content: "\f3e0"; } + +.fa-pound-sign:before { + content: "\f154"; } + +.fa-power-off:before { + content: "\f011"; } + +.fa-pray:before { + content: "\f683"; } + +.fa-praying-hands:before { + content: "\f684"; } + +.fa-prescription:before { + content: "\f5b1"; } + +.fa-prescription-bottle:before { + content: "\f485"; } + +.fa-prescription-bottle-alt:before { + content: "\f486"; } + +.fa-print:before { + content: "\f02f"; } + +.fa-procedures:before { + content: "\f487"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-project-diagram:before { + content: "\f542"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-puzzle-piece:before { + content: "\f12e"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-qrcode:before { + content: "\f029"; } + +.fa-question:before { + content: "\f128"; } + +.fa-question-circle:before { + content: "\f059"; } + +.fa-quidditch:before { + content: "\f458"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-quote-left:before { + content: "\f10d"; } + +.fa-quote-right:before { + content: "\f10e"; } + +.fa-quran:before { + content: "\f687"; } + +.fa-r-project:before { + content: "\f4f7"; } + +.fa-radiation:before { + content: "\f7b9"; } + +.fa-radiation-alt:before { + content: "\f7ba"; } + +.fa-rainbow:before { + content: "\f75b"; } + +.fa-random:before { + content: "\f074"; } + +.fa-raspberry-pi:before { + content: "\f7bb"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-reacteurope:before { + content: "\f75d"; } + +.fa-readme:before { + content: "\f4d5"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-receipt:before { + content: "\f543"; } + +.fa-record-vinyl:before { + content: "\f8d9"; } + +.fa-recycle:before { + content: "\f1b8"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-redhat:before { + content: "\f7bc"; } + +.fa-redo:before { + content: "\f01e"; } + +.fa-redo-alt:before { + content: "\f2f9"; } + +.fa-registered:before { + content: "\f25d"; } + +.fa-remove-format:before { + content: "\f87d"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-reply:before { + content: "\f3e5"; } + +.fa-reply-all:before { + content: "\f122"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-republican:before { + content: "\f75e"; } + +.fa-researchgate:before { + content: "\f4f8"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-restroom:before { + content: "\f7bd"; } + +.fa-retweet:before { + content: "\f079"; } + +.fa-rev:before { + content: "\f5b2"; } + +.fa-ribbon:before { + content: "\f4d6"; } + +.fa-ring:before { + content: "\f70b"; } + +.fa-road:before { + content: "\f018"; } + +.fa-robot:before { + content: "\f544"; } + +.fa-rocket:before { + content: "\f135"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-route:before { + content: "\f4d7"; } + +.fa-rss:before { + content: "\f09e"; } + +.fa-rss-square:before { + content: "\f143"; } + +.fa-ruble-sign:before { + content: "\f158"; } + +.fa-ruler:before { + content: "\f545"; } + +.fa-ruler-combined:before { + content: "\f546"; } + +.fa-ruler-horizontal:before { + content: "\f547"; } + +.fa-ruler-vertical:before { + content: "\f548"; } + +.fa-running:before { + content: "\f70c"; } + +.fa-rupee-sign:before { + content: "\f156"; } + +.fa-sad-cry:before { + content: "\f5b3"; } + +.fa-sad-tear:before { + content: "\f5b4"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-salesforce:before { + content: "\f83b"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-satellite:before { + content: "\f7bf"; } + +.fa-satellite-dish:before { + content: "\f7c0"; } + +.fa-save:before { + content: "\f0c7"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-school:before { + content: "\f549"; } + +.fa-screwdriver:before { + content: "\f54a"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-scroll:before { + content: "\f70e"; } + +.fa-sd-card:before { + content: "\f7c2"; } + +.fa-search:before { + content: "\f002"; } + +.fa-search-dollar:before { + content: "\f688"; } + +.fa-search-location:before { + content: "\f689"; } + +.fa-search-minus:before { + content: "\f010"; } + +.fa-search-plus:before { + content: "\f00e"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-seedling:before { + content: "\f4d8"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-server:before { + content: "\f233"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-shapes:before { + content: "\f61f"; } + +.fa-share:before { + content: "\f064"; } + +.fa-share-alt:before { + content: "\f1e0"; } + +.fa-share-alt-square:before { + content: "\f1e1"; } + +.fa-share-square:before { + content: "\f14d"; } + +.fa-shekel-sign:before { + content: "\f20b"; } + +.fa-shield-alt:before { + content: "\f3ed"; } + +.fa-ship:before { + content: "\f21a"; } + +.fa-shipping-fast:before { + content: "\f48b"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-shoe-prints:before { + content: "\f54b"; } + +.fa-shopify:before { + content: "\f957"; } + +.fa-shopping-bag:before { + content: "\f290"; } + +.fa-shopping-basket:before { + content: "\f291"; } + +.fa-shopping-cart:before { + content: "\f07a"; } + +.fa-shopware:before { + content: "\f5b5"; } + +.fa-shower:before { + content: "\f2cc"; } + +.fa-shuttle-van:before { + content: "\f5b6"; } + +.fa-sign:before { + content: "\f4d9"; } + +.fa-sign-in-alt:before { + content: "\f2f6"; } + +.fa-sign-language:before { + content: "\f2a7"; } + +.fa-sign-out-alt:before { + content: "\f2f5"; } + +.fa-signal:before { + content: "\f012"; } + +.fa-signature:before { + content: "\f5b7"; } + +.fa-sim-card:before { + content: "\f7c4"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-sitemap:before { + content: "\f0e8"; } + +.fa-sith:before { + content: "\f512"; } + +.fa-skating:before { + content: "\f7c5"; } + +.fa-sketch:before { + content: "\f7c6"; } + +.fa-skiing:before { + content: "\f7c9"; } + +.fa-skiing-nordic:before { + content: "\f7ca"; } + +.fa-skull:before { + content: "\f54c"; } + +.fa-skull-crossbones:before { + content: "\f714"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f3ef"; } + +.fa-slash:before { + content: "\f715"; } + +.fa-sleigh:before { + content: "\f7cc"; } + +.fa-sliders-h:before { + content: "\f1de"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-smile:before { + content: "\f118"; } + +.fa-smile-beam:before { + content: "\f5b8"; } + +.fa-smile-wink:before { + content: "\f4da"; } + +.fa-smog:before { + content: "\f75f"; } + +.fa-smoking:before { + content: "\f48d"; } + +.fa-smoking-ban:before { + content: "\f54d"; } + +.fa-sms:before { + content: "\f7cd"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ac"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-snowboarding:before { + content: "\f7ce"; } + +.fa-snowflake:before { + content: "\f2dc"; } + +.fa-snowman:before { + content: "\f7d0"; } + +.fa-snowplow:before { + content: "\f7d2"; } + +.fa-socks:before { + content: "\f696"; } + +.fa-solar-panel:before { + content: "\f5ba"; } + +.fa-sort:before { + content: "\f0dc"; } + +.fa-sort-alpha-down:before { + content: "\f15d"; } + +.fa-sort-alpha-down-alt:before { + content: "\f881"; } + +.fa-sort-alpha-up:before { + content: "\f15e"; } + +.fa-sort-alpha-up-alt:before { + content: "\f882"; } + +.fa-sort-amount-down:before { + content: "\f160"; } + +.fa-sort-amount-down-alt:before { + content: "\f884"; } + +.fa-sort-amount-up:before { + content: "\f161"; } + +.fa-sort-amount-up-alt:before { + content: "\f885"; } + +.fa-sort-down:before { + content: "\f0dd"; } + +.fa-sort-numeric-down:before { + content: "\f162"; } + +.fa-sort-numeric-down-alt:before { + content: "\f886"; } + +.fa-sort-numeric-up:before { + content: "\f163"; } + +.fa-sort-numeric-up-alt:before { + content: "\f887"; } + +.fa-sort-up:before { + content: "\f0de"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-sourcetree:before { + content: "\f7d3"; } + +.fa-spa:before { + content: "\f5bb"; } + +.fa-space-shuttle:before { + content: "\f197"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-speaker-deck:before { + content: "\f83c"; } + +.fa-spell-check:before { + content: "\f891"; } + +.fa-spider:before { + content: "\f717"; } + +.fa-spinner:before { + content: "\f110"; } + +.fa-splotch:before { + content: "\f5bc"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-spray-can:before { + content: "\f5bd"; } + +.fa-square:before { + content: "\f0c8"; } + +.fa-square-full:before { + content: "\f45c"; } + +.fa-square-root-alt:before { + content: "\f698"; } + +.fa-squarespace:before { + content: "\f5be"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-stackpath:before { + content: "\f842"; } + +.fa-stamp:before { + content: "\f5bf"; } + +.fa-star:before { + content: "\f005"; } + +.fa-star-and-crescent:before { + content: "\f699"; } + +.fa-star-half:before { + content: "\f089"; } + +.fa-star-half-alt:before { + content: "\f5c0"; } + +.fa-star-of-david:before { + content: "\f69a"; } + +.fa-star-of-life:before { + content: "\f621"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } + +.fa-step-backward:before { + content: "\f048"; } + +.fa-step-forward:before { + content: "\f051"; } + +.fa-stethoscope:before { + content: "\f0f1"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-sticky-note:before { + content: "\f249"; } + +.fa-stop:before { + content: "\f04d"; } + +.fa-stop-circle:before { + content: "\f28d"; } + +.fa-stopwatch:before { + content: "\f2f2"; } + +.fa-store:before { + content: "\f54e"; } + +.fa-store-alt:before { + content: "\f54f"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-stream:before { + content: "\f550"; } + +.fa-street-view:before { + content: "\f21d"; } + +.fa-strikethrough:before { + content: "\f0cc"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-stroopwafel:before { + content: "\f551"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-subscript:before { + content: "\f12c"; } + +.fa-subway:before { + content: "\f239"; } + +.fa-suitcase:before { + content: "\f0f2"; } + +.fa-suitcase-rolling:before { + content: "\f5c1"; } + +.fa-sun:before { + content: "\f185"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-superscript:before { + content: "\f12b"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-surprise:before { + content: "\f5c2"; } + +.fa-suse:before { + content: "\f7d6"; } + +.fa-swatchbook:before { + content: "\f5c3"; } + +.fa-swift:before { + content: "\f8e1"; } + +.fa-swimmer:before { + content: "\f5c4"; } + +.fa-swimming-pool:before { + content: "\f5c5"; } + +.fa-symfony:before { + content: "\f83d"; } + +.fa-synagogue:before { + content: "\f69b"; } + +.fa-sync:before { + content: "\f021"; } + +.fa-sync-alt:before { + content: "\f2f1"; } + +.fa-syringe:before { + content: "\f48e"; } + +.fa-table:before { + content: "\f0ce"; } + +.fa-table-tennis:before { + content: "\f45d"; } + +.fa-tablet:before { + content: "\f10a"; } + +.fa-tablet-alt:before { + content: "\f3fa"; } + +.fa-tablets:before { + content: "\f490"; } + +.fa-tachometer-alt:before { + content: "\f3fd"; } + +.fa-tag:before { + content: "\f02b"; } + +.fa-tags:before { + content: "\f02c"; } + +.fa-tape:before { + content: "\f4db"; } + +.fa-tasks:before { + content: "\f0ae"; } + +.fa-taxi:before { + content: "\f1ba"; } + +.fa-teamspeak:before { + content: "\f4f9"; } + +.fa-teeth:before { + content: "\f62e"; } + +.fa-teeth-open:before { + content: "\f62f"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f3fe"; } + +.fa-temperature-high:before { + content: "\f769"; } + +.fa-temperature-low:before { + content: "\f76b"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-tenge:before { + content: "\f7d7"; } + +.fa-terminal:before { + content: "\f120"; } + +.fa-text-height:before { + content: "\f034"; } + +.fa-text-width:before { + content: "\f035"; } + +.fa-th:before { + content: "\f00a"; } + +.fa-th-large:before { + content: "\f009"; } + +.fa-th-list:before { + content: "\f00b"; } + +.fa-the-red-yeti:before { + content: "\f69d"; } + +.fa-theater-masks:before { + content: "\f630"; } + +.fa-themeco:before { + content: "\f5c6"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-thermometer:before { + content: "\f491"; } + +.fa-thermometer-empty:before { + content: "\f2cb"; } + +.fa-thermometer-full:before { + content: "\f2c7"; } + +.fa-thermometer-half:before { + content: "\f2c9"; } + +.fa-thermometer-quarter:before { + content: "\f2ca"; } + +.fa-thermometer-three-quarters:before { + content: "\f2c8"; } + +.fa-think-peaks:before { + content: "\f731"; } + +.fa-thumbs-down:before { + content: "\f165"; } + +.fa-thumbs-up:before { + content: "\f164"; } + +.fa-thumbtack:before { + content: "\f08d"; } + +.fa-ticket-alt:before { + content: "\f3ff"; } + +.fa-times:before { + content: "\f00d"; } + +.fa-times-circle:before { + content: "\f057"; } + +.fa-tint:before { + content: "\f043"; } + +.fa-tint-slash:before { + content: "\f5c7"; } + +.fa-tired:before { + content: "\f5c8"; } + +.fa-toggle-off:before { + content: "\f204"; } + +.fa-toggle-on:before { + content: "\f205"; } + +.fa-toilet:before { + content: "\f7d8"; } + +.fa-toilet-paper:before { + content: "\f71e"; } + +.fa-toolbox:before { + content: "\f552"; } + +.fa-tools:before { + content: "\f7d9"; } + +.fa-tooth:before { + content: "\f5c9"; } + +.fa-torah:before { + content: "\f6a0"; } + +.fa-torii-gate:before { + content: "\f6a1"; } + +.fa-tractor:before { + content: "\f722"; } + +.fa-trade-federation:before { + content: "\f513"; } + +.fa-trademark:before { + content: "\f25c"; } + +.fa-traffic-light:before { + content: "\f637"; } + +.fa-trailer:before { + content: "\f941"; } + +.fa-train:before { + content: "\f238"; } + +.fa-tram:before { + content: "\f7da"; } + +.fa-transgender:before { + content: "\f224"; } + +.fa-transgender-alt:before { + content: "\f225"; } + +.fa-trash:before { + content: "\f1f8"; } + +.fa-trash-alt:before { + content: "\f2ed"; } + +.fa-trash-restore:before { + content: "\f829"; } + +.fa-trash-restore-alt:before { + content: "\f82a"; } + +.fa-tree:before { + content: "\f1bb"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-tripadvisor:before { + content: "\f262"; } + +.fa-trophy:before { + content: "\f091"; } + +.fa-truck:before { + content: "\f0d1"; } + +.fa-truck-loading:before { + content: "\f4de"; } + +.fa-truck-monster:before { + content: "\f63b"; } + +.fa-truck-moving:before { + content: "\f4df"; } + +.fa-truck-pickup:before { + content: "\f63c"; } + +.fa-tshirt:before { + content: "\f553"; } + +.fa-tty:before { + content: "\f1e4"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-tv:before { + content: "\f26c"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-ubuntu:before { + content: "\f7df"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-umbraco:before { + content: "\f8e8"; } + +.fa-umbrella:before { + content: "\f0e9"; } + +.fa-umbrella-beach:before { + content: "\f5ca"; } + +.fa-underline:before { + content: "\f0cd"; } + +.fa-undo:before { + content: "\f0e2"; } + +.fa-undo-alt:before { + content: "\f2ea"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-unity:before { + content: "\f949"; } + +.fa-universal-access:before { + content: "\f29a"; } + +.fa-university:before { + content: "\f19c"; } + +.fa-unlink:before { + content: "\f127"; } + +.fa-unlock:before { + content: "\f09c"; } + +.fa-unlock-alt:before { + content: "\f13e"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-upload:before { + content: "\f093"; } + +.fa-ups:before { + content: "\f7e0"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-user:before { + content: "\f007"; } + +.fa-user-alt:before { + content: "\f406"; } + +.fa-user-alt-slash:before { + content: "\f4fa"; } + +.fa-user-astronaut:before { + content: "\f4fb"; } + +.fa-user-check:before { + content: "\f4fc"; } + +.fa-user-circle:before { + content: "\f2bd"; } + +.fa-user-clock:before { + content: "\f4fd"; } + +.fa-user-cog:before { + content: "\f4fe"; } + +.fa-user-edit:before { + content: "\f4ff"; } + +.fa-user-friends:before { + content: "\f500"; } + +.fa-user-graduate:before { + content: "\f501"; } + +.fa-user-injured:before { + content: "\f728"; } + +.fa-user-lock:before { + content: "\f502"; } + +.fa-user-md:before { + content: "\f0f0"; } + +.fa-user-minus:before { + content: "\f503"; } + +.fa-user-ninja:before { + content: "\f504"; } + +.fa-user-nurse:before { + content: "\f82f"; } + +.fa-user-plus:before { + content: "\f234"; } + +.fa-user-secret:before { + content: "\f21b"; } + +.fa-user-shield:before { + content: "\f505"; } + +.fa-user-slash:before { + content: "\f506"; } + +.fa-user-tag:before { + content: "\f507"; } + +.fa-user-tie:before { + content: "\f508"; } + +.fa-user-times:before { + content: "\f235"; } + +.fa-users:before { + content: "\f0c0"; } + +.fa-users-cog:before { + content: "\f509"; } + +.fa-usps:before { + content: "\f7e1"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-utensil-spoon:before { + content: "\f2e5"; } + +.fa-utensils:before { + content: "\f2e7"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-vector-square:before { + content: "\f5cb"; } + +.fa-venus:before { + content: "\f221"; } + +.fa-venus-double:before { + content: "\f226"; } + +.fa-venus-mars:before { + content: "\f228"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-vial:before { + content: "\f492"; } + +.fa-vials:before { + content: "\f493"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-video:before { + content: "\f03d"; } + +.fa-video-slash:before { + content: "\f4e2"; } + +.fa-vihara:before { + content: "\f6a7"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-voicemail:before { + content: "\f897"; } + +.fa-volleyball-ball:before { + content: "\f45f"; } + +.fa-volume-down:before { + content: "\f027"; } + +.fa-volume-mute:before { + content: "\f6a9"; } + +.fa-volume-off:before { + content: "\f026"; } + +.fa-volume-up:before { + content: "\f028"; } + +.fa-vote-yea:before { + content: "\f772"; } + +.fa-vr-cardboard:before { + content: "\f729"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-walking:before { + content: "\f554"; } + +.fa-wallet:before { + content: "\f555"; } + +.fa-warehouse:before { + content: "\f494"; } + +.fa-water:before { + content: "\f773"; } + +.fa-wave-square:before { + content: "\f83e"; } + +.fa-waze:before { + content: "\f83f"; } + +.fa-weebly:before { + content: "\f5cc"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-weight:before { + content: "\f496"; } + +.fa-weight-hanging:before { + content: "\f5cd"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-wheelchair:before { + content: "\f193"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-wifi:before { + content: "\f1eb"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-wind:before { + content: "\f72e"; } + +.fa-window-close:before { + content: "\f410"; } + +.fa-window-maximize:before { + content: "\f2d0"; } + +.fa-window-minimize:before { + content: "\f2d1"; } + +.fa-window-restore:before { + content: "\f2d2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-wine-bottle:before { + content: "\f72f"; } + +.fa-wine-glass:before { + content: "\f4e3"; } + +.fa-wine-glass-alt:before { + content: "\f5ce"; } + +.fa-wix:before { + content: "\f5cf"; } + +.fa-wizards-of-the-coast:before { + content: "\f730"; } + +.fa-wolf-pack-battalion:before { + content: "\f514"; } + +.fa-won-sign:before { + content: "\f159"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-wpressr:before { + content: "\f3e4"; } + +.fa-wrench:before { + content: "\f0ad"; } + +.fa-x-ray:before { + content: "\f497"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-yammer:before { + content: "\f840"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-yarn:before { + content: "\f7e3"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-yen-sign:before { + content: "\f157"; } + +.fa-yin-yang:before { + content: "\f6ad"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.fa-zhihu:before { + content: "\f63f"; } + +.sr-only { + border: 0; + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; } + +.sr-only-focusable:active, .sr-only-focusable:focus { + clip: auto; + height: auto; + margin: 0; + overflow: visible; + position: static; + width: auto; } +@font-face { + font-family: 'Font Awesome 5 Brands'; + font-style: normal; + font-weight: 400; + font-display: auto; + src: url("../webfonts/fa-brands-400.eot"); + src: url("../webfonts/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.woff") format("woff"), url("../webfonts/fa-brands-400.ttf") format("truetype"), url("../webfonts/fa-brands-400.svg#fontawesome") format("svg"); } + +.fab { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } +@font-face { + font-family: 'Font Awesome 5 Free'; + font-style: normal; + font-weight: 400; + font-display: auto; + src: url("../webfonts/fa-regular-400.eot"); + src: url("../webfonts/fa-regular-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.woff") format("woff"), url("../webfonts/fa-regular-400.ttf") format("truetype"), url("../webfonts/fa-regular-400.svg#fontawesome") format("svg"); } + +.far { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } +@font-face { + font-family: 'Font Awesome 5 Free'; + font-style: normal; + font-weight: 900; + font-display: auto; + src: url("../webfonts/fa-solid-900.eot"); + src: url("../webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.woff") format("woff"), url("../webfonts/fa-solid-900.ttf") format("truetype"), url("../webfonts/fa-solid-900.svg#fontawesome") format("svg"); } + +.fa, +.fas { + font-family: 'Font Awesome 5 Free'; + font-weight: 900; } diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/all.min.css b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/all.min.css new file mode 100755 index 0000000..d16a4d5 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/all.min.css @@ -0,0 +1,5 @@ +/*! + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\f952"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\f907"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\f913"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\f955"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\f91a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\f956"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\f91e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\f957"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\f941"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\f949"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.fab,.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900} \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/brands.css b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/brands.css new file mode 100755 index 0000000..46f4266 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/brands.css @@ -0,0 +1,15 @@ +/*! + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +@font-face { + font-family: 'Font Awesome 5 Brands'; + font-style: normal; + font-weight: 400; + font-display: auto; + src: url("../webfonts/fa-brands-400.eot"); + src: url("../webfonts/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.woff") format("woff"), url("../webfonts/fa-brands-400.ttf") format("truetype"), url("../webfonts/fa-brands-400.svg#fontawesome") format("svg"); } + +.fab { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/brands.min.css b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/brands.min.css new file mode 100755 index 0000000..1455bae --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/brands.min.css @@ -0,0 +1,5 @@ +/*! + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands";font-weight:400} \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/fontawesome.css b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/fontawesome.css new file mode 100755 index 0000000..b3e0c53 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/fontawesome.css @@ -0,0 +1,4429 @@ +/*! + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa, +.fas, +.far, +.fal, +.fad, +.fab { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; } + +.fa-lg { + font-size: 1.33333em; + line-height: 0.75em; + vertical-align: -.0667em; } + +.fa-xs { + font-size: .75em; } + +.fa-sm { + font-size: .875em; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: 2.5em; + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: -2em; + position: absolute; + text-align: center; + width: 2em; + line-height: inherit; } + +.fa-border { + border: solid 0.08em #eee; + border-radius: .1em; + padding: .2em .25em .15em; } + +.fa-pull-left { + float: left; } + +.fa-pull-right { + float: right; } + +.fa.fa-pull-left, +.fas.fa-pull-left, +.far.fa-pull-left, +.fal.fa-pull-left, +.fab.fa-pull-left { + margin-right: .3em; } + +.fa.fa-pull-right, +.fas.fa-pull-right, +.far.fa-pull-right, +.fal.fa-pull-right, +.fab.fa-pull-right { + margin-left: .3em; } + +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; } + +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); } + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical, +:root .fa-flip-both { + -webkit-filter: none; + filter: none; } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: #fff; } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ +.fa-500px:before { + content: "\f26e"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-acquisitions-incorporated:before { + content: "\f6af"; } + +.fa-ad:before { + content: "\f641"; } + +.fa-address-book:before { + content: "\f2b9"; } + +.fa-address-card:before { + content: "\f2bb"; } + +.fa-adjust:before { + content: "\f042"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-adobe:before { + content: "\f778"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-air-freshener:before { + content: "\f5d0"; } + +.fa-airbnb:before { + content: "\f834"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-align-center:before { + content: "\f037"; } + +.fa-align-justify:before { + content: "\f039"; } + +.fa-align-left:before { + content: "\f036"; } + +.fa-align-right:before { + content: "\f038"; } + +.fa-alipay:before { + content: "\f642"; } + +.fa-allergies:before { + content: "\f461"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-ambulance:before { + content: "\f0f9"; } + +.fa-american-sign-language-interpreting:before { + content: "\f2a3"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-anchor:before { + content: "\f13d"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-angle-double-down:before { + content: "\f103"; } + +.fa-angle-double-left:before { + content: "\f100"; } + +.fa-angle-double-right:before { + content: "\f101"; } + +.fa-angle-double-up:before { + content: "\f102"; } + +.fa-angle-down:before { + content: "\f107"; } + +.fa-angle-left:before { + content: "\f104"; } + +.fa-angle-right:before { + content: "\f105"; } + +.fa-angle-up:before { + content: "\f106"; } + +.fa-angry:before { + content: "\f556"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-ankh:before { + content: "\f644"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-apple-alt:before { + content: "\f5d1"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-archive:before { + content: "\f187"; } + +.fa-archway:before { + content: "\f557"; } + +.fa-arrow-alt-circle-down:before { + content: "\f358"; } + +.fa-arrow-alt-circle-left:before { + content: "\f359"; } + +.fa-arrow-alt-circle-right:before { + content: "\f35a"; } + +.fa-arrow-alt-circle-up:before { + content: "\f35b"; } + +.fa-arrow-circle-down:before { + content: "\f0ab"; } + +.fa-arrow-circle-left:before { + content: "\f0a8"; } + +.fa-arrow-circle-right:before { + content: "\f0a9"; } + +.fa-arrow-circle-up:before { + content: "\f0aa"; } + +.fa-arrow-down:before { + content: "\f063"; } + +.fa-arrow-left:before { + content: "\f060"; } + +.fa-arrow-right:before { + content: "\f061"; } + +.fa-arrow-up:before { + content: "\f062"; } + +.fa-arrows-alt:before { + content: "\f0b2"; } + +.fa-arrows-alt-h:before { + content: "\f337"; } + +.fa-arrows-alt-v:before { + content: "\f338"; } + +.fa-artstation:before { + content: "\f77a"; } + +.fa-assistive-listening-systems:before { + content: "\f2a2"; } + +.fa-asterisk:before { + content: "\f069"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-at:before { + content: "\f1fa"; } + +.fa-atlas:before { + content: "\f558"; } + +.fa-atlassian:before { + content: "\f77b"; } + +.fa-atom:before { + content: "\f5d2"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-audio-description:before { + content: "\f29e"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-award:before { + content: "\f559"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-baby:before { + content: "\f77c"; } + +.fa-baby-carriage:before { + content: "\f77d"; } + +.fa-backspace:before { + content: "\f55a"; } + +.fa-backward:before { + content: "\f04a"; } + +.fa-bacon:before { + content: "\f7e5"; } + +.fa-bahai:before { + content: "\f666"; } + +.fa-balance-scale:before { + content: "\f24e"; } + +.fa-balance-scale-left:before { + content: "\f515"; } + +.fa-balance-scale-right:before { + content: "\f516"; } + +.fa-ban:before { + content: "\f05e"; } + +.fa-band-aid:before { + content: "\f462"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-barcode:before { + content: "\f02a"; } + +.fa-bars:before { + content: "\f0c9"; } + +.fa-baseball-ball:before { + content: "\f433"; } + +.fa-basketball-ball:before { + content: "\f434"; } + +.fa-bath:before { + content: "\f2cd"; } + +.fa-battery-empty:before { + content: "\f244"; } + +.fa-battery-full:before { + content: "\f240"; } + +.fa-battery-half:before { + content: "\f242"; } + +.fa-battery-quarter:before { + content: "\f243"; } + +.fa-battery-three-quarters:before { + content: "\f241"; } + +.fa-battle-net:before { + content: "\f835"; } + +.fa-bed:before { + content: "\f236"; } + +.fa-beer:before { + content: "\f0fc"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-bell:before { + content: "\f0f3"; } + +.fa-bell-slash:before { + content: "\f1f6"; } + +.fa-bezier-curve:before { + content: "\f55b"; } + +.fa-bible:before { + content: "\f647"; } + +.fa-bicycle:before { + content: "\f206"; } + +.fa-biking:before { + content: "\f84a"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-binoculars:before { + content: "\f1e5"; } + +.fa-biohazard:before { + content: "\f780"; } + +.fa-birthday-cake:before { + content: "\f1fd"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-blender:before { + content: "\f517"; } + +.fa-blender-phone:before { + content: "\f6b6"; } + +.fa-blind:before { + content: "\f29d"; } + +.fa-blog:before { + content: "\f781"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-bold:before { + content: "\f032"; } + +.fa-bolt:before { + content: "\f0e7"; } + +.fa-bomb:before { + content: "\f1e2"; } + +.fa-bone:before { + content: "\f5d7"; } + +.fa-bong:before { + content: "\f55c"; } + +.fa-book:before { + content: "\f02d"; } + +.fa-book-dead:before { + content: "\f6b7"; } + +.fa-book-medical:before { + content: "\f7e6"; } + +.fa-book-open:before { + content: "\f518"; } + +.fa-book-reader:before { + content: "\f5da"; } + +.fa-bookmark:before { + content: "\f02e"; } + +.fa-bootstrap:before { + content: "\f836"; } + +.fa-border-all:before { + content: "\f84c"; } + +.fa-border-none:before { + content: "\f850"; } + +.fa-border-style:before { + content: "\f853"; } + +.fa-bowling-ball:before { + content: "\f436"; } + +.fa-box:before { + content: "\f466"; } + +.fa-box-open:before { + content: "\f49e"; } + +.fa-boxes:before { + content: "\f468"; } + +.fa-braille:before { + content: "\f2a1"; } + +.fa-brain:before { + content: "\f5dc"; } + +.fa-bread-slice:before { + content: "\f7ec"; } + +.fa-briefcase:before { + content: "\f0b1"; } + +.fa-briefcase-medical:before { + content: "\f469"; } + +.fa-broadcast-tower:before { + content: "\f519"; } + +.fa-broom:before { + content: "\f51a"; } + +.fa-brush:before { + content: "\f55d"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-buffer:before { + content: "\f837"; } + +.fa-bug:before { + content: "\f188"; } + +.fa-building:before { + content: "\f1ad"; } + +.fa-bullhorn:before { + content: "\f0a1"; } + +.fa-bullseye:before { + content: "\f140"; } + +.fa-burn:before { + content: "\f46a"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-bus:before { + content: "\f207"; } + +.fa-bus-alt:before { + content: "\f55e"; } + +.fa-business-time:before { + content: "\f64a"; } + +.fa-buy-n-large:before { + content: "\f8a6"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-calculator:before { + content: "\f1ec"; } + +.fa-calendar:before { + content: "\f133"; } + +.fa-calendar-alt:before { + content: "\f073"; } + +.fa-calendar-check:before { + content: "\f274"; } + +.fa-calendar-day:before { + content: "\f783"; } + +.fa-calendar-minus:before { + content: "\f272"; } + +.fa-calendar-plus:before { + content: "\f271"; } + +.fa-calendar-times:before { + content: "\f273"; } + +.fa-calendar-week:before { + content: "\f784"; } + +.fa-camera:before { + content: "\f030"; } + +.fa-camera-retro:before { + content: "\f083"; } + +.fa-campground:before { + content: "\f6bb"; } + +.fa-canadian-maple-leaf:before { + content: "\f785"; } + +.fa-candy-cane:before { + content: "\f786"; } + +.fa-cannabis:before { + content: "\f55f"; } + +.fa-capsules:before { + content: "\f46b"; } + +.fa-car:before { + content: "\f1b9"; } + +.fa-car-alt:before { + content: "\f5de"; } + +.fa-car-battery:before { + content: "\f5df"; } + +.fa-car-crash:before { + content: "\f5e1"; } + +.fa-car-side:before { + content: "\f5e4"; } + +.fa-caravan:before { + content: "\f8ff"; } + +.fa-caret-down:before { + content: "\f0d7"; } + +.fa-caret-left:before { + content: "\f0d9"; } + +.fa-caret-right:before { + content: "\f0da"; } + +.fa-caret-square-down:before { + content: "\f150"; } + +.fa-caret-square-left:before { + content: "\f191"; } + +.fa-caret-square-right:before { + content: "\f152"; } + +.fa-caret-square-up:before { + content: "\f151"; } + +.fa-caret-up:before { + content: "\f0d8"; } + +.fa-carrot:before { + content: "\f787"; } + +.fa-cart-arrow-down:before { + content: "\f218"; } + +.fa-cart-plus:before { + content: "\f217"; } + +.fa-cash-register:before { + content: "\f788"; } + +.fa-cat:before { + content: "\f6be"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-centos:before { + content: "\f789"; } + +.fa-certificate:before { + content: "\f0a3"; } + +.fa-chair:before { + content: "\f6c0"; } + +.fa-chalkboard:before { + content: "\f51b"; } + +.fa-chalkboard-teacher:before { + content: "\f51c"; } + +.fa-charging-station:before { + content: "\f5e7"; } + +.fa-chart-area:before { + content: "\f1fe"; } + +.fa-chart-bar:before { + content: "\f080"; } + +.fa-chart-line:before { + content: "\f201"; } + +.fa-chart-pie:before { + content: "\f200"; } + +.fa-check:before { + content: "\f00c"; } + +.fa-check-circle:before { + content: "\f058"; } + +.fa-check-double:before { + content: "\f560"; } + +.fa-check-square:before { + content: "\f14a"; } + +.fa-cheese:before { + content: "\f7ef"; } + +.fa-chess:before { + content: "\f439"; } + +.fa-chess-bishop:before { + content: "\f43a"; } + +.fa-chess-board:before { + content: "\f43c"; } + +.fa-chess-king:before { + content: "\f43f"; } + +.fa-chess-knight:before { + content: "\f441"; } + +.fa-chess-pawn:before { + content: "\f443"; } + +.fa-chess-queen:before { + content: "\f445"; } + +.fa-chess-rook:before { + content: "\f447"; } + +.fa-chevron-circle-down:before { + content: "\f13a"; } + +.fa-chevron-circle-left:before { + content: "\f137"; } + +.fa-chevron-circle-right:before { + content: "\f138"; } + +.fa-chevron-circle-up:before { + content: "\f139"; } + +.fa-chevron-down:before { + content: "\f078"; } + +.fa-chevron-left:before { + content: "\f053"; } + +.fa-chevron-right:before { + content: "\f054"; } + +.fa-chevron-up:before { + content: "\f077"; } + +.fa-child:before { + content: "\f1ae"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-chromecast:before { + content: "\f838"; } + +.fa-church:before { + content: "\f51d"; } + +.fa-circle:before { + content: "\f111"; } + +.fa-circle-notch:before { + content: "\f1ce"; } + +.fa-city:before { + content: "\f64f"; } + +.fa-clinic-medical:before { + content: "\f7f2"; } + +.fa-clipboard:before { + content: "\f328"; } + +.fa-clipboard-check:before { + content: "\f46c"; } + +.fa-clipboard-list:before { + content: "\f46d"; } + +.fa-clock:before { + content: "\f017"; } + +.fa-clone:before { + content: "\f24d"; } + +.fa-closed-captioning:before { + content: "\f20a"; } + +.fa-cloud:before { + content: "\f0c2"; } + +.fa-cloud-download-alt:before { + content: "\f381"; } + +.fa-cloud-meatball:before { + content: "\f73b"; } + +.fa-cloud-moon:before { + content: "\f6c3"; } + +.fa-cloud-moon-rain:before { + content: "\f73c"; } + +.fa-cloud-rain:before { + content: "\f73d"; } + +.fa-cloud-showers-heavy:before { + content: "\f740"; } + +.fa-cloud-sun:before { + content: "\f6c4"; } + +.fa-cloud-sun-rain:before { + content: "\f743"; } + +.fa-cloud-upload-alt:before { + content: "\f382"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-cocktail:before { + content: "\f561"; } + +.fa-code:before { + content: "\f121"; } + +.fa-code-branch:before { + content: "\f126"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-coffee:before { + content: "\f0f4"; } + +.fa-cog:before { + content: "\f013"; } + +.fa-cogs:before { + content: "\f085"; } + +.fa-coins:before { + content: "\f51e"; } + +.fa-columns:before { + content: "\f0db"; } + +.fa-comment:before { + content: "\f075"; } + +.fa-comment-alt:before { + content: "\f27a"; } + +.fa-comment-dollar:before { + content: "\f651"; } + +.fa-comment-dots:before { + content: "\f4ad"; } + +.fa-comment-medical:before { + content: "\f7f5"; } + +.fa-comment-slash:before { + content: "\f4b3"; } + +.fa-comments:before { + content: "\f086"; } + +.fa-comments-dollar:before { + content: "\f653"; } + +.fa-compact-disc:before { + content: "\f51f"; } + +.fa-compass:before { + content: "\f14e"; } + +.fa-compress:before { + content: "\f066"; } + +.fa-compress-alt:before { + content: "\f422"; } + +.fa-compress-arrows-alt:before { + content: "\f78c"; } + +.fa-concierge-bell:before { + content: "\f562"; } + +.fa-confluence:before { + content: "\f78d"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-cookie:before { + content: "\f563"; } + +.fa-cookie-bite:before { + content: "\f564"; } + +.fa-copy:before { + content: "\f0c5"; } + +.fa-copyright:before { + content: "\f1f9"; } + +.fa-cotton-bureau:before { + content: "\f89e"; } + +.fa-couch:before { + content: "\f4b8"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-creative-commons-by:before { + content: "\f4e7"; } + +.fa-creative-commons-nc:before { + content: "\f4e8"; } + +.fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + +.fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + +.fa-creative-commons-nd:before { + content: "\f4eb"; } + +.fa-creative-commons-pd:before { + content: "\f4ec"; } + +.fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + +.fa-creative-commons-remix:before { + content: "\f4ee"; } + +.fa-creative-commons-sa:before { + content: "\f4ef"; } + +.fa-creative-commons-sampling:before { + content: "\f4f0"; } + +.fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + +.fa-creative-commons-share:before { + content: "\f4f2"; } + +.fa-creative-commons-zero:before { + content: "\f4f3"; } + +.fa-credit-card:before { + content: "\f09d"; } + +.fa-critical-role:before { + content: "\f6c9"; } + +.fa-crop:before { + content: "\f125"; } + +.fa-crop-alt:before { + content: "\f565"; } + +.fa-cross:before { + content: "\f654"; } + +.fa-crosshairs:before { + content: "\f05b"; } + +.fa-crow:before { + content: "\f520"; } + +.fa-crown:before { + content: "\f521"; } + +.fa-crutch:before { + content: "\f7f7"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-cube:before { + content: "\f1b2"; } + +.fa-cubes:before { + content: "\f1b3"; } + +.fa-cut:before { + content: "\f0c4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-d-and-d-beyond:before { + content: "\f6ca"; } + +.fa-dailymotion:before { + content: "\f952"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-database:before { + content: "\f1c0"; } + +.fa-deaf:before { + content: "\f2a4"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-democrat:before { + content: "\f747"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-desktop:before { + content: "\f108"; } + +.fa-dev:before { + content: "\f6cc"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-dharmachakra:before { + content: "\f655"; } + +.fa-dhl:before { + content: "\f790"; } + +.fa-diagnoses:before { + content: "\f470"; } + +.fa-diaspora:before { + content: "\f791"; } + +.fa-dice:before { + content: "\f522"; } + +.fa-dice-d20:before { + content: "\f6cf"; } + +.fa-dice-d6:before { + content: "\f6d1"; } + +.fa-dice-five:before { + content: "\f523"; } + +.fa-dice-four:before { + content: "\f524"; } + +.fa-dice-one:before { + content: "\f525"; } + +.fa-dice-six:before { + content: "\f526"; } + +.fa-dice-three:before { + content: "\f527"; } + +.fa-dice-two:before { + content: "\f528"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-digital-tachograph:before { + content: "\f566"; } + +.fa-directions:before { + content: "\f5eb"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-divide:before { + content: "\f529"; } + +.fa-dizzy:before { + content: "\f567"; } + +.fa-dna:before { + content: "\f471"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-dog:before { + content: "\f6d3"; } + +.fa-dollar-sign:before { + content: "\f155"; } + +.fa-dolly:before { + content: "\f472"; } + +.fa-dolly-flatbed:before { + content: "\f474"; } + +.fa-donate:before { + content: "\f4b9"; } + +.fa-door-closed:before { + content: "\f52a"; } + +.fa-door-open:before { + content: "\f52b"; } + +.fa-dot-circle:before { + content: "\f192"; } + +.fa-dove:before { + content: "\f4ba"; } + +.fa-download:before { + content: "\f019"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-drafting-compass:before { + content: "\f568"; } + +.fa-dragon:before { + content: "\f6d5"; } + +.fa-draw-polygon:before { + content: "\f5ee"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-drum:before { + content: "\f569"; } + +.fa-drum-steelpan:before { + content: "\f56a"; } + +.fa-drumstick-bite:before { + content: "\f6d7"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-dumbbell:before { + content: "\f44b"; } + +.fa-dumpster:before { + content: "\f793"; } + +.fa-dumpster-fire:before { + content: "\f794"; } + +.fa-dungeon:before { + content: "\f6d9"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-ebay:before { + content: "\f4f4"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-edit:before { + content: "\f044"; } + +.fa-egg:before { + content: "\f7fb"; } + +.fa-eject:before { + content: "\f052"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-ellipsis-h:before { + content: "\f141"; } + +.fa-ellipsis-v:before { + content: "\f142"; } + +.fa-ello:before { + content: "\f5f1"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envelope:before { + content: "\f0e0"; } + +.fa-envelope-open:before { + content: "\f2b6"; } + +.fa-envelope-open-text:before { + content: "\f658"; } + +.fa-envelope-square:before { + content: "\f199"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-equals:before { + content: "\f52c"; } + +.fa-eraser:before { + content: "\f12d"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-ethernet:before { + content: "\f796"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-euro-sign:before { + content: "\f153"; } + +.fa-evernote:before { + content: "\f839"; } + +.fa-exchange-alt:before { + content: "\f362"; } + +.fa-exclamation:before { + content: "\f12a"; } + +.fa-exclamation-circle:before { + content: "\f06a"; } + +.fa-exclamation-triangle:before { + content: "\f071"; } + +.fa-expand:before { + content: "\f065"; } + +.fa-expand-alt:before { + content: "\f424"; } + +.fa-expand-arrows-alt:before { + content: "\f31e"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-external-link-alt:before { + content: "\f35d"; } + +.fa-external-link-square-alt:before { + content: "\f360"; } + +.fa-eye:before { + content: "\f06e"; } + +.fa-eye-dropper:before { + content: "\f1fb"; } + +.fa-eye-slash:before { + content: "\f070"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-fan:before { + content: "\f863"; } + +.fa-fantasy-flight-games:before { + content: "\f6dc"; } + +.fa-fast-backward:before { + content: "\f049"; } + +.fa-fast-forward:before { + content: "\f050"; } + +.fa-fax:before { + content: "\f1ac"; } + +.fa-feather:before { + content: "\f52d"; } + +.fa-feather-alt:before { + content: "\f56b"; } + +.fa-fedex:before { + content: "\f797"; } + +.fa-fedora:before { + content: "\f798"; } + +.fa-female:before { + content: "\f182"; } + +.fa-fighter-jet:before { + content: "\f0fb"; } + +.fa-figma:before { + content: "\f799"; } + +.fa-file:before { + content: "\f15b"; } + +.fa-file-alt:before { + content: "\f15c"; } + +.fa-file-archive:before { + content: "\f1c6"; } + +.fa-file-audio:before { + content: "\f1c7"; } + +.fa-file-code:before { + content: "\f1c9"; } + +.fa-file-contract:before { + content: "\f56c"; } + +.fa-file-csv:before { + content: "\f6dd"; } + +.fa-file-download:before { + content: "\f56d"; } + +.fa-file-excel:before { + content: "\f1c3"; } + +.fa-file-export:before { + content: "\f56e"; } + +.fa-file-image:before { + content: "\f1c5"; } + +.fa-file-import:before { + content: "\f56f"; } + +.fa-file-invoice:before { + content: "\f570"; } + +.fa-file-invoice-dollar:before { + content: "\f571"; } + +.fa-file-medical:before { + content: "\f477"; } + +.fa-file-medical-alt:before { + content: "\f478"; } + +.fa-file-pdf:before { + content: "\f1c1"; } + +.fa-file-powerpoint:before { + content: "\f1c4"; } + +.fa-file-prescription:before { + content: "\f572"; } + +.fa-file-signature:before { + content: "\f573"; } + +.fa-file-upload:before { + content: "\f574"; } + +.fa-file-video:before { + content: "\f1c8"; } + +.fa-file-word:before { + content: "\f1c2"; } + +.fa-fill:before { + content: "\f575"; } + +.fa-fill-drip:before { + content: "\f576"; } + +.fa-film:before { + content: "\f008"; } + +.fa-filter:before { + content: "\f0b0"; } + +.fa-fingerprint:before { + content: "\f577"; } + +.fa-fire:before { + content: "\f06d"; } + +.fa-fire-alt:before { + content: "\f7e4"; } + +.fa-fire-extinguisher:before { + content: "\f134"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-firefox-browser:before { + content: "\f907"; } + +.fa-first-aid:before { + content: "\f479"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-first-order-alt:before { + content: "\f50a"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-fish:before { + content: "\f578"; } + +.fa-fist-raised:before { + content: "\f6de"; } + +.fa-flag:before { + content: "\f024"; } + +.fa-flag-checkered:before { + content: "\f11e"; } + +.fa-flag-usa:before { + content: "\f74d"; } + +.fa-flask:before { + content: "\f0c3"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-flushed:before { + content: "\f579"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-folder:before { + content: "\f07b"; } + +.fa-folder-minus:before { + content: "\f65d"; } + +.fa-folder-open:before { + content: "\f07c"; } + +.fa-folder-plus:before { + content: "\f65e"; } + +.fa-font:before { + content: "\f031"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-font-awesome-flag:before { + content: "\f425"; } + +.fa-font-awesome-logo-full:before { + content: "\f4e6"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-football-ball:before { + content: "\f44e"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-forward:before { + content: "\f04e"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-frog:before { + content: "\f52e"; } + +.fa-frown:before { + content: "\f119"; } + +.fa-frown-open:before { + content: "\f57a"; } + +.fa-fulcrum:before { + content: "\f50b"; } + +.fa-funnel-dollar:before { + content: "\f662"; } + +.fa-futbol:before { + content: "\f1e3"; } + +.fa-galactic-republic:before { + content: "\f50c"; } + +.fa-galactic-senate:before { + content: "\f50d"; } + +.fa-gamepad:before { + content: "\f11b"; } + +.fa-gas-pump:before { + content: "\f52f"; } + +.fa-gavel:before { + content: "\f0e3"; } + +.fa-gem:before { + content: "\f3a5"; } + +.fa-genderless:before { + content: "\f22d"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-ghost:before { + content: "\f6e2"; } + +.fa-gift:before { + content: "\f06b"; } + +.fa-gifts:before { + content: "\f79c"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-git-alt:before { + content: "\f841"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-glass-cheers:before { + content: "\f79f"; } + +.fa-glass-martini:before { + content: "\f000"; } + +.fa-glass-martini-alt:before { + content: "\f57b"; } + +.fa-glass-whiskey:before { + content: "\f7a0"; } + +.fa-glasses:before { + content: "\f530"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-globe:before { + content: "\f0ac"; } + +.fa-globe-africa:before { + content: "\f57c"; } + +.fa-globe-americas:before { + content: "\f57d"; } + +.fa-globe-asia:before { + content: "\f57e"; } + +.fa-globe-europe:before { + content: "\f7a2"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-golf-ball:before { + content: "\f450"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-gopuram:before { + content: "\f664"; } + +.fa-graduation-cap:before { + content: "\f19d"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-greater-than:before { + content: "\f531"; } + +.fa-greater-than-equal:before { + content: "\f532"; } + +.fa-grimace:before { + content: "\f57f"; } + +.fa-grin:before { + content: "\f580"; } + +.fa-grin-alt:before { + content: "\f581"; } + +.fa-grin-beam:before { + content: "\f582"; } + +.fa-grin-beam-sweat:before { + content: "\f583"; } + +.fa-grin-hearts:before { + content: "\f584"; } + +.fa-grin-squint:before { + content: "\f585"; } + +.fa-grin-squint-tears:before { + content: "\f586"; } + +.fa-grin-stars:before { + content: "\f587"; } + +.fa-grin-tears:before { + content: "\f588"; } + +.fa-grin-tongue:before { + content: "\f589"; } + +.fa-grin-tongue-squint:before { + content: "\f58a"; } + +.fa-grin-tongue-wink:before { + content: "\f58b"; } + +.fa-grin-wink:before { + content: "\f58c"; } + +.fa-grip-horizontal:before { + content: "\f58d"; } + +.fa-grip-lines:before { + content: "\f7a4"; } + +.fa-grip-lines-vertical:before { + content: "\f7a5"; } + +.fa-grip-vertical:before { + content: "\f58e"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-guitar:before { + content: "\f7a6"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-h-square:before { + content: "\f0fd"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-hackerrank:before { + content: "\f5f7"; } + +.fa-hamburger:before { + content: "\f805"; } + +.fa-hammer:before { + content: "\f6e3"; } + +.fa-hamsa:before { + content: "\f665"; } + +.fa-hand-holding:before { + content: "\f4bd"; } + +.fa-hand-holding-heart:before { + content: "\f4be"; } + +.fa-hand-holding-usd:before { + content: "\f4c0"; } + +.fa-hand-lizard:before { + content: "\f258"; } + +.fa-hand-middle-finger:before { + content: "\f806"; } + +.fa-hand-paper:before { + content: "\f256"; } + +.fa-hand-peace:before { + content: "\f25b"; } + +.fa-hand-point-down:before { + content: "\f0a7"; } + +.fa-hand-point-left:before { + content: "\f0a5"; } + +.fa-hand-point-right:before { + content: "\f0a4"; } + +.fa-hand-point-up:before { + content: "\f0a6"; } + +.fa-hand-pointer:before { + content: "\f25a"; } + +.fa-hand-rock:before { + content: "\f255"; } + +.fa-hand-scissors:before { + content: "\f257"; } + +.fa-hand-spock:before { + content: "\f259"; } + +.fa-hands:before { + content: "\f4c2"; } + +.fa-hands-helping:before { + content: "\f4c4"; } + +.fa-handshake:before { + content: "\f2b5"; } + +.fa-hanukiah:before { + content: "\f6e6"; } + +.fa-hard-hat:before { + content: "\f807"; } + +.fa-hashtag:before { + content: "\f292"; } + +.fa-hat-cowboy:before { + content: "\f8c0"; } + +.fa-hat-cowboy-side:before { + content: "\f8c1"; } + +.fa-hat-wizard:before { + content: "\f6e8"; } + +.fa-hdd:before { + content: "\f0a0"; } + +.fa-heading:before { + content: "\f1dc"; } + +.fa-headphones:before { + content: "\f025"; } + +.fa-headphones-alt:before { + content: "\f58f"; } + +.fa-headset:before { + content: "\f590"; } + +.fa-heart:before { + content: "\f004"; } + +.fa-heart-broken:before { + content: "\f7a9"; } + +.fa-heartbeat:before { + content: "\f21e"; } + +.fa-helicopter:before { + content: "\f533"; } + +.fa-highlighter:before { + content: "\f591"; } + +.fa-hiking:before { + content: "\f6ec"; } + +.fa-hippo:before { + content: "\f6ed"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-history:before { + content: "\f1da"; } + +.fa-hockey-puck:before { + content: "\f453"; } + +.fa-holly-berry:before { + content: "\f7aa"; } + +.fa-home:before { + content: "\f015"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-hornbill:before { + content: "\f592"; } + +.fa-horse:before { + content: "\f6f0"; } + +.fa-horse-head:before { + content: "\f7ab"; } + +.fa-hospital:before { + content: "\f0f8"; } + +.fa-hospital-alt:before { + content: "\f47d"; } + +.fa-hospital-symbol:before { + content: "\f47e"; } + +.fa-hot-tub:before { + content: "\f593"; } + +.fa-hotdog:before { + content: "\f80f"; } + +.fa-hotel:before { + content: "\f594"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-hourglass:before { + content: "\f254"; } + +.fa-hourglass-end:before { + content: "\f253"; } + +.fa-hourglass-half:before { + content: "\f252"; } + +.fa-hourglass-start:before { + content: "\f251"; } + +.fa-house-damage:before { + content: "\f6f1"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-hryvnia:before { + content: "\f6f2"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-i-cursor:before { + content: "\f246"; } + +.fa-ice-cream:before { + content: "\f810"; } + +.fa-icicles:before { + content: "\f7ad"; } + +.fa-icons:before { + content: "\f86d"; } + +.fa-id-badge:before { + content: "\f2c1"; } + +.fa-id-card:before { + content: "\f2c2"; } + +.fa-id-card-alt:before { + content: "\f47f"; } + +.fa-ideal:before { + content: "\f913"; } + +.fa-igloo:before { + content: "\f7ae"; } + +.fa-image:before { + content: "\f03e"; } + +.fa-images:before { + content: "\f302"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-inbox:before { + content: "\f01c"; } + +.fa-indent:before { + content: "\f03c"; } + +.fa-industry:before { + content: "\f275"; } + +.fa-infinity:before { + content: "\f534"; } + +.fa-info:before { + content: "\f129"; } + +.fa-info-circle:before { + content: "\f05a"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-instagram-square:before { + content: "\f955"; } + +.fa-intercom:before { + content: "\f7af"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-invision:before { + content: "\f7b0"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-italic:before { + content: "\f033"; } + +.fa-itch-io:before { + content: "\f83a"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-java:before { + content: "\f4e4"; } + +.fa-jedi:before { + content: "\f669"; } + +.fa-jedi-order:before { + content: "\f50e"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-jira:before { + content: "\f7b1"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-joint:before { + content: "\f595"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-journal-whills:before { + content: "\f66a"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-kaaba:before { + content: "\f66b"; } + +.fa-kaggle:before { + content: "\f5fa"; } + +.fa-key:before { + content: "\f084"; } + +.fa-keybase:before { + content: "\f4f5"; } + +.fa-keyboard:before { + content: "\f11c"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-khanda:before { + content: "\f66d"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-kiss:before { + content: "\f596"; } + +.fa-kiss-beam:before { + content: "\f597"; } + +.fa-kiss-wink-heart:before { + content: "\f598"; } + +.fa-kiwi-bird:before { + content: "\f535"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-landmark:before { + content: "\f66f"; } + +.fa-language:before { + content: "\f1ab"; } + +.fa-laptop:before { + content: "\f109"; } + +.fa-laptop-code:before { + content: "\f5fc"; } + +.fa-laptop-medical:before { + content: "\f812"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-laugh:before { + content: "\f599"; } + +.fa-laugh-beam:before { + content: "\f59a"; } + +.fa-laugh-squint:before { + content: "\f59b"; } + +.fa-laugh-wink:before { + content: "\f59c"; } + +.fa-layer-group:before { + content: "\f5fd"; } + +.fa-leaf:before { + content: "\f06c"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-lemon:before { + content: "\f094"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-less-than:before { + content: "\f536"; } + +.fa-less-than-equal:before { + content: "\f537"; } + +.fa-level-down-alt:before { + content: "\f3be"; } + +.fa-level-up-alt:before { + content: "\f3bf"; } + +.fa-life-ring:before { + content: "\f1cd"; } + +.fa-lightbulb:before { + content: "\f0eb"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-link:before { + content: "\f0c1"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-lira-sign:before { + content: "\f195"; } + +.fa-list:before { + content: "\f03a"; } + +.fa-list-alt:before { + content: "\f022"; } + +.fa-list-ol:before { + content: "\f0cb"; } + +.fa-list-ul:before { + content: "\f0ca"; } + +.fa-location-arrow:before { + content: "\f124"; } + +.fa-lock:before { + content: "\f023"; } + +.fa-lock-open:before { + content: "\f3c1"; } + +.fa-long-arrow-alt-down:before { + content: "\f309"; } + +.fa-long-arrow-alt-left:before { + content: "\f30a"; } + +.fa-long-arrow-alt-right:before { + content: "\f30b"; } + +.fa-long-arrow-alt-up:before { + content: "\f30c"; } + +.fa-low-vision:before { + content: "\f2a8"; } + +.fa-luggage-cart:before { + content: "\f59d"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-magic:before { + content: "\f0d0"; } + +.fa-magnet:before { + content: "\f076"; } + +.fa-mail-bulk:before { + content: "\f674"; } + +.fa-mailchimp:before { + content: "\f59e"; } + +.fa-male:before { + content: "\f183"; } + +.fa-mandalorian:before { + content: "\f50f"; } + +.fa-map:before { + content: "\f279"; } + +.fa-map-marked:before { + content: "\f59f"; } + +.fa-map-marked-alt:before { + content: "\f5a0"; } + +.fa-map-marker:before { + content: "\f041"; } + +.fa-map-marker-alt:before { + content: "\f3c5"; } + +.fa-map-pin:before { + content: "\f276"; } + +.fa-map-signs:before { + content: "\f277"; } + +.fa-markdown:before { + content: "\f60f"; } + +.fa-marker:before { + content: "\f5a1"; } + +.fa-mars:before { + content: "\f222"; } + +.fa-mars-double:before { + content: "\f227"; } + +.fa-mars-stroke:before { + content: "\f229"; } + +.fa-mars-stroke-h:before { + content: "\f22b"; } + +.fa-mars-stroke-v:before { + content: "\f22a"; } + +.fa-mask:before { + content: "\f6fa"; } + +.fa-mastodon:before { + content: "\f4f6"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-mdb:before { + content: "\f8ca"; } + +.fa-medal:before { + content: "\f5a2"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f3c7"; } + +.fa-medkit:before { + content: "\f0fa"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-megaport:before { + content: "\f5a3"; } + +.fa-meh:before { + content: "\f11a"; } + +.fa-meh-blank:before { + content: "\f5a4"; } + +.fa-meh-rolling-eyes:before { + content: "\f5a5"; } + +.fa-memory:before { + content: "\f538"; } + +.fa-mendeley:before { + content: "\f7b3"; } + +.fa-menorah:before { + content: "\f676"; } + +.fa-mercury:before { + content: "\f223"; } + +.fa-meteor:before { + content: "\f753"; } + +.fa-microblog:before { + content: "\f91a"; } + +.fa-microchip:before { + content: "\f2db"; } + +.fa-microphone:before { + content: "\f130"; } + +.fa-microphone-alt:before { + content: "\f3c9"; } + +.fa-microphone-alt-slash:before { + content: "\f539"; } + +.fa-microphone-slash:before { + content: "\f131"; } + +.fa-microscope:before { + content: "\f610"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-minus:before { + content: "\f068"; } + +.fa-minus-circle:before { + content: "\f056"; } + +.fa-minus-square:before { + content: "\f146"; } + +.fa-mitten:before { + content: "\f7b5"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-mixer:before { + content: "\f956"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-mobile:before { + content: "\f10b"; } + +.fa-mobile-alt:before { + content: "\f3cd"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-money-bill:before { + content: "\f0d6"; } + +.fa-money-bill-alt:before { + content: "\f3d1"; } + +.fa-money-bill-wave:before { + content: "\f53a"; } + +.fa-money-bill-wave-alt:before { + content: "\f53b"; } + +.fa-money-check:before { + content: "\f53c"; } + +.fa-money-check-alt:before { + content: "\f53d"; } + +.fa-monument:before { + content: "\f5a6"; } + +.fa-moon:before { + content: "\f186"; } + +.fa-mortar-pestle:before { + content: "\f5a7"; } + +.fa-mosque:before { + content: "\f678"; } + +.fa-motorcycle:before { + content: "\f21c"; } + +.fa-mountain:before { + content: "\f6fc"; } + +.fa-mouse:before { + content: "\f8cc"; } + +.fa-mouse-pointer:before { + content: "\f245"; } + +.fa-mug-hot:before { + content: "\f7b6"; } + +.fa-music:before { + content: "\f001"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-neos:before { + content: "\f612"; } + +.fa-network-wired:before { + content: "\f6ff"; } + +.fa-neuter:before { + content: "\f22c"; } + +.fa-newspaper:before { + content: "\f1ea"; } + +.fa-nimblr:before { + content: "\f5a8"; } + +.fa-node:before { + content: "\f419"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-not-equal:before { + content: "\f53e"; } + +.fa-notes-medical:before { + content: "\f481"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-object-group:before { + content: "\f247"; } + +.fa-object-ungroup:before { + content: "\f248"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-oil-can:before { + content: "\f613"; } + +.fa-old-republic:before { + content: "\f510"; } + +.fa-om:before { + content: "\f679"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-orcid:before { + content: "\f8d2"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-otter:before { + content: "\f700"; } + +.fa-outdent:before { + content: "\f03b"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-pager:before { + content: "\f815"; } + +.fa-paint-brush:before { + content: "\f1fc"; } + +.fa-paint-roller:before { + content: "\f5aa"; } + +.fa-palette:before { + content: "\f53f"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-pallet:before { + content: "\f482"; } + +.fa-paper-plane:before { + content: "\f1d8"; } + +.fa-paperclip:before { + content: "\f0c6"; } + +.fa-parachute-box:before { + content: "\f4cd"; } + +.fa-paragraph:before { + content: "\f1dd"; } + +.fa-parking:before { + content: "\f540"; } + +.fa-passport:before { + content: "\f5ab"; } + +.fa-pastafarianism:before { + content: "\f67b"; } + +.fa-paste:before { + content: "\f0ea"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-pause:before { + content: "\f04c"; } + +.fa-pause-circle:before { + content: "\f28b"; } + +.fa-paw:before { + content: "\f1b0"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-peace:before { + content: "\f67c"; } + +.fa-pen:before { + content: "\f304"; } + +.fa-pen-alt:before { + content: "\f305"; } + +.fa-pen-fancy:before { + content: "\f5ac"; } + +.fa-pen-nib:before { + content: "\f5ad"; } + +.fa-pen-square:before { + content: "\f14b"; } + +.fa-pencil-alt:before { + content: "\f303"; } + +.fa-pencil-ruler:before { + content: "\f5ae"; } + +.fa-penny-arcade:before { + content: "\f704"; } + +.fa-people-carry:before { + content: "\f4ce"; } + +.fa-pepper-hot:before { + content: "\f816"; } + +.fa-percent:before { + content: "\f295"; } + +.fa-percentage:before { + content: "\f541"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-person-booth:before { + content: "\f756"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-phoenix-squadron:before { + content: "\f511"; } + +.fa-phone:before { + content: "\f095"; } + +.fa-phone-alt:before { + content: "\f879"; } + +.fa-phone-slash:before { + content: "\f3dd"; } + +.fa-phone-square:before { + content: "\f098"; } + +.fa-phone-square-alt:before { + content: "\f87b"; } + +.fa-phone-volume:before { + content: "\f2a0"; } + +.fa-photo-video:before { + content: "\f87c"; } + +.fa-php:before { + content: "\f457"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-pied-piper-hat:before { + content: "\f4e5"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-pied-piper-square:before { + content: "\f91e"; } + +.fa-piggy-bank:before { + content: "\f4d3"; } + +.fa-pills:before { + content: "\f484"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-pizza-slice:before { + content: "\f818"; } + +.fa-place-of-worship:before { + content: "\f67f"; } + +.fa-plane:before { + content: "\f072"; } + +.fa-plane-arrival:before { + content: "\f5af"; } + +.fa-plane-departure:before { + content: "\f5b0"; } + +.fa-play:before { + content: "\f04b"; } + +.fa-play-circle:before { + content: "\f144"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-plug:before { + content: "\f1e6"; } + +.fa-plus:before { + content: "\f067"; } + +.fa-plus-circle:before { + content: "\f055"; } + +.fa-plus-square:before { + content: "\f0fe"; } + +.fa-podcast:before { + content: "\f2ce"; } + +.fa-poll:before { + content: "\f681"; } + +.fa-poll-h:before { + content: "\f682"; } + +.fa-poo:before { + content: "\f2fe"; } + +.fa-poo-storm:before { + content: "\f75a"; } + +.fa-poop:before { + content: "\f619"; } + +.fa-portrait:before { + content: "\f3e0"; } + +.fa-pound-sign:before { + content: "\f154"; } + +.fa-power-off:before { + content: "\f011"; } + +.fa-pray:before { + content: "\f683"; } + +.fa-praying-hands:before { + content: "\f684"; } + +.fa-prescription:before { + content: "\f5b1"; } + +.fa-prescription-bottle:before { + content: "\f485"; } + +.fa-prescription-bottle-alt:before { + content: "\f486"; } + +.fa-print:before { + content: "\f02f"; } + +.fa-procedures:before { + content: "\f487"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-project-diagram:before { + content: "\f542"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-puzzle-piece:before { + content: "\f12e"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-qrcode:before { + content: "\f029"; } + +.fa-question:before { + content: "\f128"; } + +.fa-question-circle:before { + content: "\f059"; } + +.fa-quidditch:before { + content: "\f458"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-quote-left:before { + content: "\f10d"; } + +.fa-quote-right:before { + content: "\f10e"; } + +.fa-quran:before { + content: "\f687"; } + +.fa-r-project:before { + content: "\f4f7"; } + +.fa-radiation:before { + content: "\f7b9"; } + +.fa-radiation-alt:before { + content: "\f7ba"; } + +.fa-rainbow:before { + content: "\f75b"; } + +.fa-random:before { + content: "\f074"; } + +.fa-raspberry-pi:before { + content: "\f7bb"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-reacteurope:before { + content: "\f75d"; } + +.fa-readme:before { + content: "\f4d5"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-receipt:before { + content: "\f543"; } + +.fa-record-vinyl:before { + content: "\f8d9"; } + +.fa-recycle:before { + content: "\f1b8"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-redhat:before { + content: "\f7bc"; } + +.fa-redo:before { + content: "\f01e"; } + +.fa-redo-alt:before { + content: "\f2f9"; } + +.fa-registered:before { + content: "\f25d"; } + +.fa-remove-format:before { + content: "\f87d"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-reply:before { + content: "\f3e5"; } + +.fa-reply-all:before { + content: "\f122"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-republican:before { + content: "\f75e"; } + +.fa-researchgate:before { + content: "\f4f8"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-restroom:before { + content: "\f7bd"; } + +.fa-retweet:before { + content: "\f079"; } + +.fa-rev:before { + content: "\f5b2"; } + +.fa-ribbon:before { + content: "\f4d6"; } + +.fa-ring:before { + content: "\f70b"; } + +.fa-road:before { + content: "\f018"; } + +.fa-robot:before { + content: "\f544"; } + +.fa-rocket:before { + content: "\f135"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-route:before { + content: "\f4d7"; } + +.fa-rss:before { + content: "\f09e"; } + +.fa-rss-square:before { + content: "\f143"; } + +.fa-ruble-sign:before { + content: "\f158"; } + +.fa-ruler:before { + content: "\f545"; } + +.fa-ruler-combined:before { + content: "\f546"; } + +.fa-ruler-horizontal:before { + content: "\f547"; } + +.fa-ruler-vertical:before { + content: "\f548"; } + +.fa-running:before { + content: "\f70c"; } + +.fa-rupee-sign:before { + content: "\f156"; } + +.fa-sad-cry:before { + content: "\f5b3"; } + +.fa-sad-tear:before { + content: "\f5b4"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-salesforce:before { + content: "\f83b"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-satellite:before { + content: "\f7bf"; } + +.fa-satellite-dish:before { + content: "\f7c0"; } + +.fa-save:before { + content: "\f0c7"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-school:before { + content: "\f549"; } + +.fa-screwdriver:before { + content: "\f54a"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-scroll:before { + content: "\f70e"; } + +.fa-sd-card:before { + content: "\f7c2"; } + +.fa-search:before { + content: "\f002"; } + +.fa-search-dollar:before { + content: "\f688"; } + +.fa-search-location:before { + content: "\f689"; } + +.fa-search-minus:before { + content: "\f010"; } + +.fa-search-plus:before { + content: "\f00e"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-seedling:before { + content: "\f4d8"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-server:before { + content: "\f233"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-shapes:before { + content: "\f61f"; } + +.fa-share:before { + content: "\f064"; } + +.fa-share-alt:before { + content: "\f1e0"; } + +.fa-share-alt-square:before { + content: "\f1e1"; } + +.fa-share-square:before { + content: "\f14d"; } + +.fa-shekel-sign:before { + content: "\f20b"; } + +.fa-shield-alt:before { + content: "\f3ed"; } + +.fa-ship:before { + content: "\f21a"; } + +.fa-shipping-fast:before { + content: "\f48b"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-shoe-prints:before { + content: "\f54b"; } + +.fa-shopify:before { + content: "\f957"; } + +.fa-shopping-bag:before { + content: "\f290"; } + +.fa-shopping-basket:before { + content: "\f291"; } + +.fa-shopping-cart:before { + content: "\f07a"; } + +.fa-shopware:before { + content: "\f5b5"; } + +.fa-shower:before { + content: "\f2cc"; } + +.fa-shuttle-van:before { + content: "\f5b6"; } + +.fa-sign:before { + content: "\f4d9"; } + +.fa-sign-in-alt:before { + content: "\f2f6"; } + +.fa-sign-language:before { + content: "\f2a7"; } + +.fa-sign-out-alt:before { + content: "\f2f5"; } + +.fa-signal:before { + content: "\f012"; } + +.fa-signature:before { + content: "\f5b7"; } + +.fa-sim-card:before { + content: "\f7c4"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-sitemap:before { + content: "\f0e8"; } + +.fa-sith:before { + content: "\f512"; } + +.fa-skating:before { + content: "\f7c5"; } + +.fa-sketch:before { + content: "\f7c6"; } + +.fa-skiing:before { + content: "\f7c9"; } + +.fa-skiing-nordic:before { + content: "\f7ca"; } + +.fa-skull:before { + content: "\f54c"; } + +.fa-skull-crossbones:before { + content: "\f714"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f3ef"; } + +.fa-slash:before { + content: "\f715"; } + +.fa-sleigh:before { + content: "\f7cc"; } + +.fa-sliders-h:before { + content: "\f1de"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-smile:before { + content: "\f118"; } + +.fa-smile-beam:before { + content: "\f5b8"; } + +.fa-smile-wink:before { + content: "\f4da"; } + +.fa-smog:before { + content: "\f75f"; } + +.fa-smoking:before { + content: "\f48d"; } + +.fa-smoking-ban:before { + content: "\f54d"; } + +.fa-sms:before { + content: "\f7cd"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ac"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-snowboarding:before { + content: "\f7ce"; } + +.fa-snowflake:before { + content: "\f2dc"; } + +.fa-snowman:before { + content: "\f7d0"; } + +.fa-snowplow:before { + content: "\f7d2"; } + +.fa-socks:before { + content: "\f696"; } + +.fa-solar-panel:before { + content: "\f5ba"; } + +.fa-sort:before { + content: "\f0dc"; } + +.fa-sort-alpha-down:before { + content: "\f15d"; } + +.fa-sort-alpha-down-alt:before { + content: "\f881"; } + +.fa-sort-alpha-up:before { + content: "\f15e"; } + +.fa-sort-alpha-up-alt:before { + content: "\f882"; } + +.fa-sort-amount-down:before { + content: "\f160"; } + +.fa-sort-amount-down-alt:before { + content: "\f884"; } + +.fa-sort-amount-up:before { + content: "\f161"; } + +.fa-sort-amount-up-alt:before { + content: "\f885"; } + +.fa-sort-down:before { + content: "\f0dd"; } + +.fa-sort-numeric-down:before { + content: "\f162"; } + +.fa-sort-numeric-down-alt:before { + content: "\f886"; } + +.fa-sort-numeric-up:before { + content: "\f163"; } + +.fa-sort-numeric-up-alt:before { + content: "\f887"; } + +.fa-sort-up:before { + content: "\f0de"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-sourcetree:before { + content: "\f7d3"; } + +.fa-spa:before { + content: "\f5bb"; } + +.fa-space-shuttle:before { + content: "\f197"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-speaker-deck:before { + content: "\f83c"; } + +.fa-spell-check:before { + content: "\f891"; } + +.fa-spider:before { + content: "\f717"; } + +.fa-spinner:before { + content: "\f110"; } + +.fa-splotch:before { + content: "\f5bc"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-spray-can:before { + content: "\f5bd"; } + +.fa-square:before { + content: "\f0c8"; } + +.fa-square-full:before { + content: "\f45c"; } + +.fa-square-root-alt:before { + content: "\f698"; } + +.fa-squarespace:before { + content: "\f5be"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-stackpath:before { + content: "\f842"; } + +.fa-stamp:before { + content: "\f5bf"; } + +.fa-star:before { + content: "\f005"; } + +.fa-star-and-crescent:before { + content: "\f699"; } + +.fa-star-half:before { + content: "\f089"; } + +.fa-star-half-alt:before { + content: "\f5c0"; } + +.fa-star-of-david:before { + content: "\f69a"; } + +.fa-star-of-life:before { + content: "\f621"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } + +.fa-step-backward:before { + content: "\f048"; } + +.fa-step-forward:before { + content: "\f051"; } + +.fa-stethoscope:before { + content: "\f0f1"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-sticky-note:before { + content: "\f249"; } + +.fa-stop:before { + content: "\f04d"; } + +.fa-stop-circle:before { + content: "\f28d"; } + +.fa-stopwatch:before { + content: "\f2f2"; } + +.fa-store:before { + content: "\f54e"; } + +.fa-store-alt:before { + content: "\f54f"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-stream:before { + content: "\f550"; } + +.fa-street-view:before { + content: "\f21d"; } + +.fa-strikethrough:before { + content: "\f0cc"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-stroopwafel:before { + content: "\f551"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-subscript:before { + content: "\f12c"; } + +.fa-subway:before { + content: "\f239"; } + +.fa-suitcase:before { + content: "\f0f2"; } + +.fa-suitcase-rolling:before { + content: "\f5c1"; } + +.fa-sun:before { + content: "\f185"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-superscript:before { + content: "\f12b"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-surprise:before { + content: "\f5c2"; } + +.fa-suse:before { + content: "\f7d6"; } + +.fa-swatchbook:before { + content: "\f5c3"; } + +.fa-swift:before { + content: "\f8e1"; } + +.fa-swimmer:before { + content: "\f5c4"; } + +.fa-swimming-pool:before { + content: "\f5c5"; } + +.fa-symfony:before { + content: "\f83d"; } + +.fa-synagogue:before { + content: "\f69b"; } + +.fa-sync:before { + content: "\f021"; } + +.fa-sync-alt:before { + content: "\f2f1"; } + +.fa-syringe:before { + content: "\f48e"; } + +.fa-table:before { + content: "\f0ce"; } + +.fa-table-tennis:before { + content: "\f45d"; } + +.fa-tablet:before { + content: "\f10a"; } + +.fa-tablet-alt:before { + content: "\f3fa"; } + +.fa-tablets:before { + content: "\f490"; } + +.fa-tachometer-alt:before { + content: "\f3fd"; } + +.fa-tag:before { + content: "\f02b"; } + +.fa-tags:before { + content: "\f02c"; } + +.fa-tape:before { + content: "\f4db"; } + +.fa-tasks:before { + content: "\f0ae"; } + +.fa-taxi:before { + content: "\f1ba"; } + +.fa-teamspeak:before { + content: "\f4f9"; } + +.fa-teeth:before { + content: "\f62e"; } + +.fa-teeth-open:before { + content: "\f62f"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f3fe"; } + +.fa-temperature-high:before { + content: "\f769"; } + +.fa-temperature-low:before { + content: "\f76b"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-tenge:before { + content: "\f7d7"; } + +.fa-terminal:before { + content: "\f120"; } + +.fa-text-height:before { + content: "\f034"; } + +.fa-text-width:before { + content: "\f035"; } + +.fa-th:before { + content: "\f00a"; } + +.fa-th-large:before { + content: "\f009"; } + +.fa-th-list:before { + content: "\f00b"; } + +.fa-the-red-yeti:before { + content: "\f69d"; } + +.fa-theater-masks:before { + content: "\f630"; } + +.fa-themeco:before { + content: "\f5c6"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-thermometer:before { + content: "\f491"; } + +.fa-thermometer-empty:before { + content: "\f2cb"; } + +.fa-thermometer-full:before { + content: "\f2c7"; } + +.fa-thermometer-half:before { + content: "\f2c9"; } + +.fa-thermometer-quarter:before { + content: "\f2ca"; } + +.fa-thermometer-three-quarters:before { + content: "\f2c8"; } + +.fa-think-peaks:before { + content: "\f731"; } + +.fa-thumbs-down:before { + content: "\f165"; } + +.fa-thumbs-up:before { + content: "\f164"; } + +.fa-thumbtack:before { + content: "\f08d"; } + +.fa-ticket-alt:before { + content: "\f3ff"; } + +.fa-times:before { + content: "\f00d"; } + +.fa-times-circle:before { + content: "\f057"; } + +.fa-tint:before { + content: "\f043"; } + +.fa-tint-slash:before { + content: "\f5c7"; } + +.fa-tired:before { + content: "\f5c8"; } + +.fa-toggle-off:before { + content: "\f204"; } + +.fa-toggle-on:before { + content: "\f205"; } + +.fa-toilet:before { + content: "\f7d8"; } + +.fa-toilet-paper:before { + content: "\f71e"; } + +.fa-toolbox:before { + content: "\f552"; } + +.fa-tools:before { + content: "\f7d9"; } + +.fa-tooth:before { + content: "\f5c9"; } + +.fa-torah:before { + content: "\f6a0"; } + +.fa-torii-gate:before { + content: "\f6a1"; } + +.fa-tractor:before { + content: "\f722"; } + +.fa-trade-federation:before { + content: "\f513"; } + +.fa-trademark:before { + content: "\f25c"; } + +.fa-traffic-light:before { + content: "\f637"; } + +.fa-trailer:before { + content: "\f941"; } + +.fa-train:before { + content: "\f238"; } + +.fa-tram:before { + content: "\f7da"; } + +.fa-transgender:before { + content: "\f224"; } + +.fa-transgender-alt:before { + content: "\f225"; } + +.fa-trash:before { + content: "\f1f8"; } + +.fa-trash-alt:before { + content: "\f2ed"; } + +.fa-trash-restore:before { + content: "\f829"; } + +.fa-trash-restore-alt:before { + content: "\f82a"; } + +.fa-tree:before { + content: "\f1bb"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-tripadvisor:before { + content: "\f262"; } + +.fa-trophy:before { + content: "\f091"; } + +.fa-truck:before { + content: "\f0d1"; } + +.fa-truck-loading:before { + content: "\f4de"; } + +.fa-truck-monster:before { + content: "\f63b"; } + +.fa-truck-moving:before { + content: "\f4df"; } + +.fa-truck-pickup:before { + content: "\f63c"; } + +.fa-tshirt:before { + content: "\f553"; } + +.fa-tty:before { + content: "\f1e4"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-tv:before { + content: "\f26c"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-ubuntu:before { + content: "\f7df"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-umbraco:before { + content: "\f8e8"; } + +.fa-umbrella:before { + content: "\f0e9"; } + +.fa-umbrella-beach:before { + content: "\f5ca"; } + +.fa-underline:before { + content: "\f0cd"; } + +.fa-undo:before { + content: "\f0e2"; } + +.fa-undo-alt:before { + content: "\f2ea"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-unity:before { + content: "\f949"; } + +.fa-universal-access:before { + content: "\f29a"; } + +.fa-university:before { + content: "\f19c"; } + +.fa-unlink:before { + content: "\f127"; } + +.fa-unlock:before { + content: "\f09c"; } + +.fa-unlock-alt:before { + content: "\f13e"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-upload:before { + content: "\f093"; } + +.fa-ups:before { + content: "\f7e0"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-user:before { + content: "\f007"; } + +.fa-user-alt:before { + content: "\f406"; } + +.fa-user-alt-slash:before { + content: "\f4fa"; } + +.fa-user-astronaut:before { + content: "\f4fb"; } + +.fa-user-check:before { + content: "\f4fc"; } + +.fa-user-circle:before { + content: "\f2bd"; } + +.fa-user-clock:before { + content: "\f4fd"; } + +.fa-user-cog:before { + content: "\f4fe"; } + +.fa-user-edit:before { + content: "\f4ff"; } + +.fa-user-friends:before { + content: "\f500"; } + +.fa-user-graduate:before { + content: "\f501"; } + +.fa-user-injured:before { + content: "\f728"; } + +.fa-user-lock:before { + content: "\f502"; } + +.fa-user-md:before { + content: "\f0f0"; } + +.fa-user-minus:before { + content: "\f503"; } + +.fa-user-ninja:before { + content: "\f504"; } + +.fa-user-nurse:before { + content: "\f82f"; } + +.fa-user-plus:before { + content: "\f234"; } + +.fa-user-secret:before { + content: "\f21b"; } + +.fa-user-shield:before { + content: "\f505"; } + +.fa-user-slash:before { + content: "\f506"; } + +.fa-user-tag:before { + content: "\f507"; } + +.fa-user-tie:before { + content: "\f508"; } + +.fa-user-times:before { + content: "\f235"; } + +.fa-users:before { + content: "\f0c0"; } + +.fa-users-cog:before { + content: "\f509"; } + +.fa-usps:before { + content: "\f7e1"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-utensil-spoon:before { + content: "\f2e5"; } + +.fa-utensils:before { + content: "\f2e7"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-vector-square:before { + content: "\f5cb"; } + +.fa-venus:before { + content: "\f221"; } + +.fa-venus-double:before { + content: "\f226"; } + +.fa-venus-mars:before { + content: "\f228"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-vial:before { + content: "\f492"; } + +.fa-vials:before { + content: "\f493"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-video:before { + content: "\f03d"; } + +.fa-video-slash:before { + content: "\f4e2"; } + +.fa-vihara:before { + content: "\f6a7"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-voicemail:before { + content: "\f897"; } + +.fa-volleyball-ball:before { + content: "\f45f"; } + +.fa-volume-down:before { + content: "\f027"; } + +.fa-volume-mute:before { + content: "\f6a9"; } + +.fa-volume-off:before { + content: "\f026"; } + +.fa-volume-up:before { + content: "\f028"; } + +.fa-vote-yea:before { + content: "\f772"; } + +.fa-vr-cardboard:before { + content: "\f729"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-walking:before { + content: "\f554"; } + +.fa-wallet:before { + content: "\f555"; } + +.fa-warehouse:before { + content: "\f494"; } + +.fa-water:before { + content: "\f773"; } + +.fa-wave-square:before { + content: "\f83e"; } + +.fa-waze:before { + content: "\f83f"; } + +.fa-weebly:before { + content: "\f5cc"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-weight:before { + content: "\f496"; } + +.fa-weight-hanging:before { + content: "\f5cd"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-wheelchair:before { + content: "\f193"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-wifi:before { + content: "\f1eb"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-wind:before { + content: "\f72e"; } + +.fa-window-close:before { + content: "\f410"; } + +.fa-window-maximize:before { + content: "\f2d0"; } + +.fa-window-minimize:before { + content: "\f2d1"; } + +.fa-window-restore:before { + content: "\f2d2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-wine-bottle:before { + content: "\f72f"; } + +.fa-wine-glass:before { + content: "\f4e3"; } + +.fa-wine-glass-alt:before { + content: "\f5ce"; } + +.fa-wix:before { + content: "\f5cf"; } + +.fa-wizards-of-the-coast:before { + content: "\f730"; } + +.fa-wolf-pack-battalion:before { + content: "\f514"; } + +.fa-won-sign:before { + content: "\f159"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-wpressr:before { + content: "\f3e4"; } + +.fa-wrench:before { + content: "\f0ad"; } + +.fa-x-ray:before { + content: "\f497"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-yammer:before { + content: "\f840"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-yarn:before { + content: "\f7e3"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-yen-sign:before { + content: "\f157"; } + +.fa-yin-yang:before { + content: "\f6ad"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.fa-zhihu:before { + content: "\f63f"; } + +.sr-only { + border: 0; + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; } + +.sr-only-focusable:active, .sr-only-focusable:focus { + clip: auto; + height: auto; + margin: 0; + overflow: visible; + position: static; + width: auto; } diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/fontawesome.min.css b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/fontawesome.min.css new file mode 100755 index 0000000..e00f0ed --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/fontawesome.min.css @@ -0,0 +1,5 @@ +/*! + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\f952"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\f907"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\f913"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\f955"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\f91a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\f956"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\f91e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\f957"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\f941"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\f949"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto} \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/regular.css b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/regular.css new file mode 100755 index 0000000..7e70f66 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/regular.css @@ -0,0 +1,15 @@ +/*! + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +@font-face { + font-family: 'Font Awesome 5 Free'; + font-style: normal; + font-weight: 400; + font-display: auto; + src: url("../webfonts/fa-regular-400.eot"); + src: url("../webfonts/fa-regular-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.woff") format("woff"), url("../webfonts/fa-regular-400.ttf") format("truetype"), url("../webfonts/fa-regular-400.svg#fontawesome") format("svg"); } + +.far { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/regular.min.css b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/regular.min.css new file mode 100755 index 0000000..0d04bb8 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/regular.min.css @@ -0,0 +1,5 @@ +/*! + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-family:"Font Awesome 5 Free";font-weight:400} \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/solid.css b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/solid.css new file mode 100755 index 0000000..6ff136a --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/solid.css @@ -0,0 +1,16 @@ +/*! + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +@font-face { + font-family: 'Font Awesome 5 Free'; + font-style: normal; + font-weight: 900; + font-display: auto; + src: url("../webfonts/fa-solid-900.eot"); + src: url("../webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.woff") format("woff"), url("../webfonts/fa-solid-900.ttf") format("truetype"), url("../webfonts/fa-solid-900.svg#fontawesome") format("svg"); } + +.fa, +.fas { + font-family: 'Font Awesome 5 Free'; + font-weight: 900; } diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/solid.min.css b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/solid.min.css new file mode 100755 index 0000000..d80a5ca --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/solid.min.css @@ -0,0 +1,5 @@ +/*! + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:"Font Awesome 5 Free";font-weight:900} \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/svg-with-js.css b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/svg-with-js.css new file mode 100755 index 0000000..9a7be4a --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/svg-with-js.css @@ -0,0 +1,371 @@ +/*! + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +svg:not(:root).svg-inline--fa { + overflow: visible; } + +.svg-inline--fa { + display: inline-block; + font-size: inherit; + height: 1em; + overflow: visible; + vertical-align: -.125em; } + .svg-inline--fa.fa-lg { + vertical-align: -.225em; } + .svg-inline--fa.fa-w-1 { + width: 0.0625em; } + .svg-inline--fa.fa-w-2 { + width: 0.125em; } + .svg-inline--fa.fa-w-3 { + width: 0.1875em; } + .svg-inline--fa.fa-w-4 { + width: 0.25em; } + .svg-inline--fa.fa-w-5 { + width: 0.3125em; } + .svg-inline--fa.fa-w-6 { + width: 0.375em; } + .svg-inline--fa.fa-w-7 { + width: 0.4375em; } + .svg-inline--fa.fa-w-8 { + width: 0.5em; } + .svg-inline--fa.fa-w-9 { + width: 0.5625em; } + .svg-inline--fa.fa-w-10 { + width: 0.625em; } + .svg-inline--fa.fa-w-11 { + width: 0.6875em; } + .svg-inline--fa.fa-w-12 { + width: 0.75em; } + .svg-inline--fa.fa-w-13 { + width: 0.8125em; } + .svg-inline--fa.fa-w-14 { + width: 0.875em; } + .svg-inline--fa.fa-w-15 { + width: 0.9375em; } + .svg-inline--fa.fa-w-16 { + width: 1em; } + .svg-inline--fa.fa-w-17 { + width: 1.0625em; } + .svg-inline--fa.fa-w-18 { + width: 1.125em; } + .svg-inline--fa.fa-w-19 { + width: 1.1875em; } + .svg-inline--fa.fa-w-20 { + width: 1.25em; } + .svg-inline--fa.fa-pull-left { + margin-right: .3em; + width: auto; } + .svg-inline--fa.fa-pull-right { + margin-left: .3em; + width: auto; } + .svg-inline--fa.fa-border { + height: 1.5em; } + .svg-inline--fa.fa-li { + width: 2em; } + .svg-inline--fa.fa-fw { + width: 1.25em; } + +.fa-layers svg.svg-inline--fa { + bottom: 0; + left: 0; + margin: auto; + position: absolute; + right: 0; + top: 0; } + +.fa-layers { + display: inline-block; + height: 1em; + position: relative; + text-align: center; + vertical-align: -.125em; + width: 1em; } + .fa-layers svg.svg-inline--fa { + -webkit-transform-origin: center center; + transform-origin: center center; } + +.fa-layers-text, .fa-layers-counter { + display: inline-block; + position: absolute; + text-align: center; } + +.fa-layers-text { + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + -webkit-transform-origin: center center; + transform-origin: center center; } + +.fa-layers-counter { + background-color: #ff253a; + border-radius: 1em; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #fff; + height: 1.5em; + line-height: 1; + max-width: 5em; + min-width: 1.5em; + overflow: hidden; + padding: .25em; + right: 0; + text-overflow: ellipsis; + top: 0; + -webkit-transform: scale(0.25); + transform: scale(0.25); + -webkit-transform-origin: top right; + transform-origin: top right; } + +.fa-layers-bottom-right { + bottom: 0; + right: 0; + top: auto; + -webkit-transform: scale(0.25); + transform: scale(0.25); + -webkit-transform-origin: bottom right; + transform-origin: bottom right; } + +.fa-layers-bottom-left { + bottom: 0; + left: 0; + right: auto; + top: auto; + -webkit-transform: scale(0.25); + transform: scale(0.25); + -webkit-transform-origin: bottom left; + transform-origin: bottom left; } + +.fa-layers-top-right { + right: 0; + top: 0; + -webkit-transform: scale(0.25); + transform: scale(0.25); + -webkit-transform-origin: top right; + transform-origin: top right; } + +.fa-layers-top-left { + left: 0; + right: auto; + top: 0; + -webkit-transform: scale(0.25); + transform: scale(0.25); + -webkit-transform-origin: top left; + transform-origin: top left; } + +.fa-lg { + font-size: 1.33333em; + line-height: 0.75em; + vertical-align: -.0667em; } + +.fa-xs { + font-size: .75em; } + +.fa-sm { + font-size: .875em; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: 2.5em; + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: -2em; + position: absolute; + text-align: center; + width: 2em; + line-height: inherit; } + +.fa-border { + border: solid 0.08em #eee; + border-radius: .1em; + padding: .2em .25em .15em; } + +.fa-pull-left { + float: left; } + +.fa-pull-right { + float: right; } + +.fa.fa-pull-left, +.fas.fa-pull-left, +.far.fa-pull-left, +.fal.fa-pull-left, +.fab.fa-pull-left { + margin-right: .3em; } + +.fa.fa-pull-right, +.fas.fa-pull-right, +.far.fa-pull-right, +.fal.fa-pull-right, +.fab.fa-pull-right { + margin-left: .3em; } + +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; } + +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); } + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical, +:root .fa-flip-both { + -webkit-filter: none; + filter: none; } + +.fa-stack { + display: inline-block; + height: 2em; + position: relative; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + bottom: 0; + left: 0; + margin: auto; + position: absolute; + right: 0; + top: 0; } + +.svg-inline--fa.fa-stack-1x { + height: 1em; + width: 1.25em; } + +.svg-inline--fa.fa-stack-2x { + height: 2em; + width: 2.5em; } + +.fa-inverse { + color: #fff; } + +.sr-only { + border: 0; + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; } + +.sr-only-focusable:active, .sr-only-focusable:focus { + clip: auto; + height: auto; + margin: 0; + overflow: visible; + position: static; + width: auto; } + +.svg-inline--fa .fa-primary { + fill: var(--fa-primary-color, currentColor); + opacity: 1; + opacity: var(--fa-primary-opacity, 1); } + +.svg-inline--fa .fa-secondary { + fill: var(--fa-secondary-color, currentColor); + opacity: 0.4; + opacity: var(--fa-secondary-opacity, 0.4); } + +.svg-inline--fa.fa-swap-opacity .fa-primary { + opacity: 0.4; + opacity: var(--fa-secondary-opacity, 0.4); } + +.svg-inline--fa.fa-swap-opacity .fa-secondary { + opacity: 1; + opacity: var(--fa-primary-opacity, 1); } + +.svg-inline--fa mask .fa-primary, +.svg-inline--fa mask .fa-secondary { + fill: black; } + +.fad.fa-inverse { + color: #fff; } diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/svg-with-js.min.css b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/svg-with-js.min.css new file mode 100755 index 0000000..5e158fa --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/svg-with-js.min.css @@ -0,0 +1,5 @@ +/*! + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.svg-inline--fa,svg:not(:root).svg-inline--fa{overflow:visible}.svg-inline--fa{display:inline-block;font-size:inherit;height:1em;vertical-align:-.125em}.svg-inline--fa.fa-lg{vertical-align:-.225em}.svg-inline--fa.fa-w-1{width:.0625em}.svg-inline--fa.fa-w-2{width:.125em}.svg-inline--fa.fa-w-3{width:.1875em}.svg-inline--fa.fa-w-4{width:.25em}.svg-inline--fa.fa-w-5{width:.3125em}.svg-inline--fa.fa-w-6{width:.375em}.svg-inline--fa.fa-w-7{width:.4375em}.svg-inline--fa.fa-w-8{width:.5em}.svg-inline--fa.fa-w-9{width:.5625em}.svg-inline--fa.fa-w-10{width:.625em}.svg-inline--fa.fa-w-11{width:.6875em}.svg-inline--fa.fa-w-12{width:.75em}.svg-inline--fa.fa-w-13{width:.8125em}.svg-inline--fa.fa-w-14{width:.875em}.svg-inline--fa.fa-w-15{width:.9375em}.svg-inline--fa.fa-w-16{width:1em}.svg-inline--fa.fa-w-17{width:1.0625em}.svg-inline--fa.fa-w-18{width:1.125em}.svg-inline--fa.fa-w-19{width:1.1875em}.svg-inline--fa.fa-w-20{width:1.25em}.svg-inline--fa.fa-pull-left{margin-right:.3em;width:auto}.svg-inline--fa.fa-pull-right{margin-left:.3em;width:auto}.svg-inline--fa.fa-border{height:1.5em}.svg-inline--fa.fa-li{width:2em}.svg-inline--fa.fa-fw{width:1.25em}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers-text{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter{background-color:#ff253a;border-radius:1em;-webkit-box-sizing:border-box;box-sizing:border-box;color:#fff;height:1.5em;line-height:1;max-width:5em;min-width:1.5em;overflow:hidden;padding:.25em;right:0;text-overflow:ellipsis;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-bottom-right{bottom:0;right:0;top:auto;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:bottom right;transform-origin:bottom right}.fa-layers-bottom-left{bottom:0;left:0;right:auto;top:auto;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:bottom left;transform-origin:bottom left}.fa-layers-top-right{right:0;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-top-left{left:0;right:auto;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top left;transform-origin:top left}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;position:relative;width:2.5em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.svg-inline--fa.fa-stack-1x{height:1em;width:1.25em}.svg-inline--fa.fa-stack-2x{height:2em;width:2.5em}.fa-inverse{color:#fff}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.svg-inline--fa .fa-primary{fill:var(--fa-primary-color,currentColor);opacity:1;opacity:var(--fa-primary-opacity,1)}.svg-inline--fa .fa-secondary{fill:var(--fa-secondary-color,currentColor)}.svg-inline--fa .fa-secondary,.svg-inline--fa.fa-swap-opacity .fa-primary{opacity:.4;opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-secondary{opacity:1;opacity:var(--fa-primary-opacity,1)}.svg-inline--fa mask .fa-primary,.svg-inline--fa mask .fa-secondary{fill:#000}.fad.fa-inverse{color:#fff} \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/v4-shims.css b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/v4-shims.css new file mode 100755 index 0000000..9e07742 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/v4-shims.css @@ -0,0 +1,2172 @@ +/*! + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa.fa-glass:before { + content: "\f000"; } + +.fa.fa-meetup { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-star-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-star-o:before { + content: "\f005"; } + +.fa.fa-remove:before { + content: "\f00d"; } + +.fa.fa-close:before { + content: "\f00d"; } + +.fa.fa-gear:before { + content: "\f013"; } + +.fa.fa-trash-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-trash-o:before { + content: "\f2ed"; } + +.fa.fa-file-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-o:before { + content: "\f15b"; } + +.fa.fa-clock-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-clock-o:before { + content: "\f017"; } + +.fa.fa-arrow-circle-o-down { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-down:before { + content: "\f358"; } + +.fa.fa-arrow-circle-o-up { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-up:before { + content: "\f35b"; } + +.fa.fa-play-circle-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-play-circle-o:before { + content: "\f144"; } + +.fa.fa-repeat:before { + content: "\f01e"; } + +.fa.fa-rotate-right:before { + content: "\f01e"; } + +.fa.fa-refresh:before { + content: "\f021"; } + +.fa.fa-list-alt { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-dedent:before { + content: "\f03b"; } + +.fa.fa-video-camera:before { + content: "\f03d"; } + +.fa.fa-picture-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-picture-o:before { + content: "\f03e"; } + +.fa.fa-photo { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-photo:before { + content: "\f03e"; } + +.fa.fa-image { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-image:before { + content: "\f03e"; } + +.fa.fa-pencil:before { + content: "\f303"; } + +.fa.fa-map-marker:before { + content: "\f3c5"; } + +.fa.fa-pencil-square-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-pencil-square-o:before { + content: "\f044"; } + +.fa.fa-share-square-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-share-square-o:before { + content: "\f14d"; } + +.fa.fa-check-square-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-check-square-o:before { + content: "\f14a"; } + +.fa.fa-arrows:before { + content: "\f0b2"; } + +.fa.fa-times-circle-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-times-circle-o:before { + content: "\f057"; } + +.fa.fa-check-circle-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-check-circle-o:before { + content: "\f058"; } + +.fa.fa-mail-forward:before { + content: "\f064"; } + +.fa.fa-expand:before { + content: "\f424"; } + +.fa.fa-compress:before { + content: "\f422"; } + +.fa.fa-eye { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-eye-slash { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-warning:before { + content: "\f071"; } + +.fa.fa-calendar:before { + content: "\f073"; } + +.fa.fa-arrows-v:before { + content: "\f338"; } + +.fa.fa-arrows-h:before { + content: "\f337"; } + +.fa.fa-bar-chart { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-bar-chart:before { + content: "\f080"; } + +.fa.fa-bar-chart-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-bar-chart-o:before { + content: "\f080"; } + +.fa.fa-twitter-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-facebook-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-gears:before { + content: "\f085"; } + +.fa.fa-thumbs-o-up { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-thumbs-o-up:before { + content: "\f164"; } + +.fa.fa-thumbs-o-down { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-thumbs-o-down:before { + content: "\f165"; } + +.fa.fa-heart-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-heart-o:before { + content: "\f004"; } + +.fa.fa-sign-out:before { + content: "\f2f5"; } + +.fa.fa-linkedin-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-linkedin-square:before { + content: "\f08c"; } + +.fa.fa-thumb-tack:before { + content: "\f08d"; } + +.fa.fa-external-link:before { + content: "\f35d"; } + +.fa.fa-sign-in:before { + content: "\f2f6"; } + +.fa.fa-github-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-lemon-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-lemon-o:before { + content: "\f094"; } + +.fa.fa-square-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-square-o:before { + content: "\f0c8"; } + +.fa.fa-bookmark-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-bookmark-o:before { + content: "\f02e"; } + +.fa.fa-twitter { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-facebook { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-facebook:before { + content: "\f39e"; } + +.fa.fa-facebook-f { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-facebook-f:before { + content: "\f39e"; } + +.fa.fa-github { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-credit-card { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-feed:before { + content: "\f09e"; } + +.fa.fa-hdd-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hdd-o:before { + content: "\f0a0"; } + +.fa.fa-hand-o-right { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-o-right:before { + content: "\f0a4"; } + +.fa.fa-hand-o-left { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-o-left:before { + content: "\f0a5"; } + +.fa.fa-hand-o-up { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-o-up:before { + content: "\f0a6"; } + +.fa.fa-hand-o-down { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-o-down:before { + content: "\f0a7"; } + +.fa.fa-arrows-alt:before { + content: "\f31e"; } + +.fa.fa-group:before { + content: "\f0c0"; } + +.fa.fa-chain:before { + content: "\f0c1"; } + +.fa.fa-scissors:before { + content: "\f0c4"; } + +.fa.fa-files-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-files-o:before { + content: "\f0c5"; } + +.fa.fa-floppy-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-floppy-o:before { + content: "\f0c7"; } + +.fa.fa-navicon:before { + content: "\f0c9"; } + +.fa.fa-reorder:before { + content: "\f0c9"; } + +.fa.fa-pinterest { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-pinterest-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-google-plus { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-google-plus:before { + content: "\f0d5"; } + +.fa.fa-money { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-money:before { + content: "\f3d1"; } + +.fa.fa-unsorted:before { + content: "\f0dc"; } + +.fa.fa-sort-desc:before { + content: "\f0dd"; } + +.fa.fa-sort-asc:before { + content: "\f0de"; } + +.fa.fa-linkedin { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-linkedin:before { + content: "\f0e1"; } + +.fa.fa-rotate-left:before { + content: "\f0e2"; } + +.fa.fa-legal:before { + content: "\f0e3"; } + +.fa.fa-tachometer:before { + content: "\f3fd"; } + +.fa.fa-dashboard:before { + content: "\f3fd"; } + +.fa.fa-comment-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-comment-o:before { + content: "\f075"; } + +.fa.fa-comments-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-comments-o:before { + content: "\f086"; } + +.fa.fa-flash:before { + content: "\f0e7"; } + +.fa.fa-clipboard { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-paste { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-paste:before { + content: "\f328"; } + +.fa.fa-lightbulb-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-lightbulb-o:before { + content: "\f0eb"; } + +.fa.fa-exchange:before { + content: "\f362"; } + +.fa.fa-cloud-download:before { + content: "\f381"; } + +.fa.fa-cloud-upload:before { + content: "\f382"; } + +.fa.fa-bell-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-bell-o:before { + content: "\f0f3"; } + +.fa.fa-cutlery:before { + content: "\f2e7"; } + +.fa.fa-file-text-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-text-o:before { + content: "\f15c"; } + +.fa.fa-building-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-building-o:before { + content: "\f1ad"; } + +.fa.fa-hospital-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hospital-o:before { + content: "\f0f8"; } + +.fa.fa-tablet:before { + content: "\f3fa"; } + +.fa.fa-mobile:before { + content: "\f3cd"; } + +.fa.fa-mobile-phone:before { + content: "\f3cd"; } + +.fa.fa-circle-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-circle-o:before { + content: "\f111"; } + +.fa.fa-mail-reply:before { + content: "\f3e5"; } + +.fa.fa-github-alt { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-folder-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-folder-o:before { + content: "\f07b"; } + +.fa.fa-folder-open-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-folder-open-o:before { + content: "\f07c"; } + +.fa.fa-smile-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-smile-o:before { + content: "\f118"; } + +.fa.fa-frown-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-frown-o:before { + content: "\f119"; } + +.fa.fa-meh-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-meh-o:before { + content: "\f11a"; } + +.fa.fa-keyboard-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-keyboard-o:before { + content: "\f11c"; } + +.fa.fa-flag-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-flag-o:before { + content: "\f024"; } + +.fa.fa-mail-reply-all:before { + content: "\f122"; } + +.fa.fa-star-half-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-star-half-o:before { + content: "\f089"; } + +.fa.fa-star-half-empty { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-star-half-empty:before { + content: "\f089"; } + +.fa.fa-star-half-full { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-star-half-full:before { + content: "\f089"; } + +.fa.fa-code-fork:before { + content: "\f126"; } + +.fa.fa-chain-broken:before { + content: "\f127"; } + +.fa.fa-shield:before { + content: "\f3ed"; } + +.fa.fa-calendar-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-calendar-o:before { + content: "\f133"; } + +.fa.fa-maxcdn { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-html5 { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-css3 { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-ticket:before { + content: "\f3ff"; } + +.fa.fa-minus-square-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-minus-square-o:before { + content: "\f146"; } + +.fa.fa-level-up:before { + content: "\f3bf"; } + +.fa.fa-level-down:before { + content: "\f3be"; } + +.fa.fa-pencil-square:before { + content: "\f14b"; } + +.fa.fa-external-link-square:before { + content: "\f360"; } + +.fa.fa-compass { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-down { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-down:before { + content: "\f150"; } + +.fa.fa-toggle-down { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-toggle-down:before { + content: "\f150"; } + +.fa.fa-caret-square-o-up { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-up:before { + content: "\f151"; } + +.fa.fa-toggle-up { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-toggle-up:before { + content: "\f151"; } + +.fa.fa-caret-square-o-right { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-right:before { + content: "\f152"; } + +.fa.fa-toggle-right { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-toggle-right:before { + content: "\f152"; } + +.fa.fa-eur:before { + content: "\f153"; } + +.fa.fa-euro:before { + content: "\f153"; } + +.fa.fa-gbp:before { + content: "\f154"; } + +.fa.fa-usd:before { + content: "\f155"; } + +.fa.fa-dollar:before { + content: "\f155"; } + +.fa.fa-inr:before { + content: "\f156"; } + +.fa.fa-rupee:before { + content: "\f156"; } + +.fa.fa-jpy:before { + content: "\f157"; } + +.fa.fa-cny:before { + content: "\f157"; } + +.fa.fa-rmb:before { + content: "\f157"; } + +.fa.fa-yen:before { + content: "\f157"; } + +.fa.fa-rub:before { + content: "\f158"; } + +.fa.fa-ruble:before { + content: "\f158"; } + +.fa.fa-rouble:before { + content: "\f158"; } + +.fa.fa-krw:before { + content: "\f159"; } + +.fa.fa-won:before { + content: "\f159"; } + +.fa.fa-btc { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-bitcoin { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-bitcoin:before { + content: "\f15a"; } + +.fa.fa-file-text:before { + content: "\f15c"; } + +.fa.fa-sort-alpha-asc:before { + content: "\f15d"; } + +.fa.fa-sort-alpha-desc:before { + content: "\f881"; } + +.fa.fa-sort-amount-asc:before { + content: "\f160"; } + +.fa.fa-sort-amount-desc:before { + content: "\f884"; } + +.fa.fa-sort-numeric-asc:before { + content: "\f162"; } + +.fa.fa-sort-numeric-desc:before { + content: "\f886"; } + +.fa.fa-youtube-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-youtube { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-xing { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-xing-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-youtube-play { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-youtube-play:before { + content: "\f167"; } + +.fa.fa-dropbox { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-stack-overflow { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-instagram { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-flickr { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-adn { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket-square:before { + content: "\f171"; } + +.fa.fa-tumblr { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-tumblr-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-long-arrow-down:before { + content: "\f309"; } + +.fa.fa-long-arrow-up:before { + content: "\f30c"; } + +.fa.fa-long-arrow-left:before { + content: "\f30a"; } + +.fa.fa-long-arrow-right:before { + content: "\f30b"; } + +.fa.fa-apple { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-windows { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-android { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-linux { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-dribbble { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-skype { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-foursquare { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-trello { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-gratipay { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-gittip { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-gittip:before { + content: "\f184"; } + +.fa.fa-sun-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-sun-o:before { + content: "\f185"; } + +.fa.fa-moon-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-moon-o:before { + content: "\f186"; } + +.fa.fa-vk { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-weibo { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-renren { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-pagelines { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-stack-exchange { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-right { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-right:before { + content: "\f35a"; } + +.fa.fa-arrow-circle-o-left { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-left:before { + content: "\f359"; } + +.fa.fa-caret-square-o-left { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-left:before { + content: "\f191"; } + +.fa.fa-toggle-left { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-toggle-left:before { + content: "\f191"; } + +.fa.fa-dot-circle-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-dot-circle-o:before { + content: "\f192"; } + +.fa.fa-vimeo-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-try:before { + content: "\f195"; } + +.fa.fa-turkish-lira:before { + content: "\f195"; } + +.fa.fa-plus-square-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-plus-square-o:before { + content: "\f0fe"; } + +.fa.fa-slack { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-wordpress { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-openid { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-institution:before { + content: "\f19c"; } + +.fa.fa-bank:before { + content: "\f19c"; } + +.fa.fa-mortar-board:before { + content: "\f19d"; } + +.fa.fa-yahoo { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-google { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-reddit { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-reddit-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-stumbleupon-circle { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-stumbleupon { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-delicious { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-digg { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-pied-piper-pp { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-pied-piper-alt { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-drupal { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-joomla { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-spoon:before { + content: "\f2e5"; } + +.fa.fa-behance { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-behance-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-steam { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-steam-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-automobile:before { + content: "\f1b9"; } + +.fa.fa-envelope-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-envelope-o:before { + content: "\f0e0"; } + +.fa.fa-spotify { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-deviantart { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-soundcloud { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-file-pdf-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-pdf-o:before { + content: "\f1c1"; } + +.fa.fa-file-word-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-word-o:before { + content: "\f1c2"; } + +.fa.fa-file-excel-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-excel-o:before { + content: "\f1c3"; } + +.fa.fa-file-powerpoint-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-powerpoint-o:before { + content: "\f1c4"; } + +.fa.fa-file-image-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-image-o:before { + content: "\f1c5"; } + +.fa.fa-file-photo-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-photo-o:before { + content: "\f1c5"; } + +.fa.fa-file-picture-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-picture-o:before { + content: "\f1c5"; } + +.fa.fa-file-archive-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-archive-o:before { + content: "\f1c6"; } + +.fa.fa-file-zip-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-zip-o:before { + content: "\f1c6"; } + +.fa.fa-file-audio-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-audio-o:before { + content: "\f1c7"; } + +.fa.fa-file-sound-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-sound-o:before { + content: "\f1c7"; } + +.fa.fa-file-video-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-video-o:before { + content: "\f1c8"; } + +.fa.fa-file-movie-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-movie-o:before { + content: "\f1c8"; } + +.fa.fa-file-code-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-code-o:before { + content: "\f1c9"; } + +.fa.fa-vine { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-codepen { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-jsfiddle { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-life-ring { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-life-bouy { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-life-bouy:before { + content: "\f1cd"; } + +.fa.fa-life-buoy { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-life-buoy:before { + content: "\f1cd"; } + +.fa.fa-life-saver { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-life-saver:before { + content: "\f1cd"; } + +.fa.fa-support { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-support:before { + content: "\f1cd"; } + +.fa.fa-circle-o-notch:before { + content: "\f1ce"; } + +.fa.fa-rebel { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-ra { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-ra:before { + content: "\f1d0"; } + +.fa.fa-resistance { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-resistance:before { + content: "\f1d0"; } + +.fa.fa-empire { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-ge { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-ge:before { + content: "\f1d1"; } + +.fa.fa-git-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-git { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-hacker-news { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator-square:before { + content: "\f1d4"; } + +.fa.fa-yc-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-yc-square:before { + content: "\f1d4"; } + +.fa.fa-tencent-weibo { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-qq { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-weixin { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-wechat { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-wechat:before { + content: "\f1d7"; } + +.fa.fa-send:before { + content: "\f1d8"; } + +.fa.fa-paper-plane-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-paper-plane-o:before { + content: "\f1d8"; } + +.fa.fa-send-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-send-o:before { + content: "\f1d8"; } + +.fa.fa-circle-thin { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-circle-thin:before { + content: "\f111"; } + +.fa.fa-header:before { + content: "\f1dc"; } + +.fa.fa-sliders:before { + content: "\f1de"; } + +.fa.fa-futbol-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-futbol-o:before { + content: "\f1e3"; } + +.fa.fa-soccer-ball-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-soccer-ball-o:before { + content: "\f1e3"; } + +.fa.fa-slideshare { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-twitch { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-yelp { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-newspaper-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-newspaper-o:before { + content: "\f1ea"; } + +.fa.fa-paypal { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-google-wallet { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-cc-visa { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-cc-mastercard { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-cc-discover { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-cc-amex { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-cc-paypal { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-cc-stripe { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-bell-slash-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-bell-slash-o:before { + content: "\f1f6"; } + +.fa.fa-trash:before { + content: "\f2ed"; } + +.fa.fa-copyright { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-eyedropper:before { + content: "\f1fb"; } + +.fa.fa-area-chart:before { + content: "\f1fe"; } + +.fa.fa-pie-chart:before { + content: "\f200"; } + +.fa.fa-line-chart:before { + content: "\f201"; } + +.fa.fa-lastfm { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-lastfm-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-ioxhost { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-angellist { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-cc { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-cc:before { + content: "\f20a"; } + +.fa.fa-ils:before { + content: "\f20b"; } + +.fa.fa-shekel:before { + content: "\f20b"; } + +.fa.fa-sheqel:before { + content: "\f20b"; } + +.fa.fa-meanpath { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-meanpath:before { + content: "\f2b4"; } + +.fa.fa-buysellads { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-connectdevelop { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-dashcube { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-forumbee { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-leanpub { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-sellsy { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-shirtsinbulk { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-simplybuilt { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-skyatlas { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-diamond { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-diamond:before { + content: "\f3a5"; } + +.fa.fa-intersex:before { + content: "\f224"; } + +.fa.fa-facebook-official { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-facebook-official:before { + content: "\f09a"; } + +.fa.fa-pinterest-p { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-whatsapp { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-hotel:before { + content: "\f236"; } + +.fa.fa-viacoin { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-medium { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-yc { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-yc:before { + content: "\f23b"; } + +.fa.fa-optin-monster { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-opencart { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-expeditedssl { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-battery-4:before { + content: "\f240"; } + +.fa.fa-battery:before { + content: "\f240"; } + +.fa.fa-battery-3:before { + content: "\f241"; } + +.fa.fa-battery-2:before { + content: "\f242"; } + +.fa.fa-battery-1:before { + content: "\f243"; } + +.fa.fa-battery-0:before { + content: "\f244"; } + +.fa.fa-object-group { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-object-ungroup { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-sticky-note-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-sticky-note-o:before { + content: "\f249"; } + +.fa.fa-cc-jcb { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-cc-diners-club { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-clone { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hourglass-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hourglass-o:before { + content: "\f254"; } + +.fa.fa-hourglass-1:before { + content: "\f251"; } + +.fa.fa-hourglass-2:before { + content: "\f252"; } + +.fa.fa-hourglass-3:before { + content: "\f253"; } + +.fa.fa-hand-rock-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-rock-o:before { + content: "\f255"; } + +.fa.fa-hand-grab-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-grab-o:before { + content: "\f255"; } + +.fa.fa-hand-paper-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-paper-o:before { + content: "\f256"; } + +.fa.fa-hand-stop-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-stop-o:before { + content: "\f256"; } + +.fa.fa-hand-scissors-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-scissors-o:before { + content: "\f257"; } + +.fa.fa-hand-lizard-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-lizard-o:before { + content: "\f258"; } + +.fa.fa-hand-spock-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-spock-o:before { + content: "\f259"; } + +.fa.fa-hand-pointer-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-pointer-o:before { + content: "\f25a"; } + +.fa.fa-hand-peace-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-peace-o:before { + content: "\f25b"; } + +.fa.fa-registered { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-creative-commons { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-gg { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-gg-circle { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-tripadvisor { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-get-pocket { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-wikipedia-w { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-safari { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-chrome { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-firefox { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-opera { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-internet-explorer { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-television:before { + content: "\f26c"; } + +.fa.fa-contao { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-500px { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-amazon { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-calendar-plus-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-calendar-plus-o:before { + content: "\f271"; } + +.fa.fa-calendar-minus-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-calendar-minus-o:before { + content: "\f272"; } + +.fa.fa-calendar-times-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-calendar-times-o:before { + content: "\f273"; } + +.fa.fa-calendar-check-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-calendar-check-o:before { + content: "\f274"; } + +.fa.fa-map-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-map-o:before { + content: "\f279"; } + +.fa.fa-commenting:before { + content: "\f4ad"; } + +.fa.fa-commenting-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-commenting-o:before { + content: "\f4ad"; } + +.fa.fa-houzz { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-vimeo { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-vimeo:before { + content: "\f27d"; } + +.fa.fa-black-tie { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-fonticons { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-reddit-alien { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-edge { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-credit-card-alt:before { + content: "\f09d"; } + +.fa.fa-codiepie { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-modx { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-fort-awesome { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-usb { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-product-hunt { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-mixcloud { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-scribd { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-pause-circle-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-pause-circle-o:before { + content: "\f28b"; } + +.fa.fa-stop-circle-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-stop-circle-o:before { + content: "\f28d"; } + +.fa.fa-bluetooth { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-bluetooth-b { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-gitlab { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-wpbeginner { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-wpforms { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-envira { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-wheelchair-alt { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-wheelchair-alt:before { + content: "\f368"; } + +.fa.fa-question-circle-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-question-circle-o:before { + content: "\f059"; } + +.fa.fa-volume-control-phone:before { + content: "\f2a0"; } + +.fa.fa-asl-interpreting:before { + content: "\f2a3"; } + +.fa.fa-deafness:before { + content: "\f2a4"; } + +.fa.fa-hard-of-hearing:before { + content: "\f2a4"; } + +.fa.fa-glide { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-glide-g { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-signing:before { + content: "\f2a7"; } + +.fa.fa-viadeo { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-viadeo-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-snapchat { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-ghost { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-pied-piper { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-first-order { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-yoast { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-themeisle { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-official { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-official:before { + content: "\f2b3"; } + +.fa.fa-google-plus-circle { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-circle:before { + content: "\f2b3"; } + +.fa.fa-font-awesome { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-fa { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-fa:before { + content: "\f2b4"; } + +.fa.fa-handshake-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-handshake-o:before { + content: "\f2b5"; } + +.fa.fa-envelope-open-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-envelope-open-o:before { + content: "\f2b6"; } + +.fa.fa-linode { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-address-book-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-address-book-o:before { + content: "\f2b9"; } + +.fa.fa-vcard:before { + content: "\f2bb"; } + +.fa.fa-address-card-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-address-card-o:before { + content: "\f2bb"; } + +.fa.fa-vcard-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-vcard-o:before { + content: "\f2bb"; } + +.fa.fa-user-circle-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-user-circle-o:before { + content: "\f2bd"; } + +.fa.fa-user-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-user-o:before { + content: "\f007"; } + +.fa.fa-id-badge { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-drivers-license:before { + content: "\f2c2"; } + +.fa.fa-id-card-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-id-card-o:before { + content: "\f2c2"; } + +.fa.fa-drivers-license-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-drivers-license-o:before { + content: "\f2c2"; } + +.fa.fa-quora { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-free-code-camp { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-telegram { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-thermometer-4:before { + content: "\f2c7"; } + +.fa.fa-thermometer:before { + content: "\f2c7"; } + +.fa.fa-thermometer-3:before { + content: "\f2c8"; } + +.fa.fa-thermometer-2:before { + content: "\f2c9"; } + +.fa.fa-thermometer-1:before { + content: "\f2ca"; } + +.fa.fa-thermometer-0:before { + content: "\f2cb"; } + +.fa.fa-bathtub:before { + content: "\f2cd"; } + +.fa.fa-s15:before { + content: "\f2cd"; } + +.fa.fa-window-maximize { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-window-restore { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-times-rectangle:before { + content: "\f410"; } + +.fa.fa-window-close-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-window-close-o:before { + content: "\f410"; } + +.fa.fa-times-rectangle-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-times-rectangle-o:before { + content: "\f410"; } + +.fa.fa-bandcamp { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-grav { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-etsy { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-imdb { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-ravelry { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-eercast { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-eercast:before { + content: "\f2da"; } + +.fa.fa-snowflake-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-snowflake-o:before { + content: "\f2dc"; } + +.fa.fa-superpowers { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-wpexplorer { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-cab:before { + content: "\f1ba"; } diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/v4-shims.min.css b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/v4-shims.min.css new file mode 100755 index 0000000..7942cea --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/css/v4-shims.min.css @@ -0,0 +1,5 @@ +/*! + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa.fa-glass:before{content:"\f000"}.fa.fa-meetup{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-star-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-file-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-pencil:before{content:"\f303"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-share-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-expand:before{content:"\f424"}.fa.fa-compress:before{content:"\f422"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart:before{content:"\f080"}.fa.fa-bar-chart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart-o:before{content:"\f080"}.fa.fa-facebook-square,.fa.fa-twitter-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-lemon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-scissors:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-google-plus,.fa.fa-google-plus-square,.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f3fd"}.fa.fa-comment-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard,.fa.fa-paste{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paste:before{content:"\f328"}.fa.fa-lightbulb-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f381"}.fa.fa-cloud-upload:before{content:"\f382"}.fa.fa-bell-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f089"}.fa.fa-star-half-empty{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f089"}.fa.fa-star-half-full{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f089"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before{content:"\f127"}.fa.fa-shield:before{content:"\f3ed"}.fa.fa-calendar-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ticket:before{content:"\f3ff"}.fa.fa-minus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\f155"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\f156"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f881"}.fa.fa-sort-amount-asc:before{content:"\f160"}.fa.fa-sort-amount-desc:before{content:"\f884"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f886"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube,.fa.fa-youtube-play,.fa.fa-youtube-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\f195"}.fa.fa-plus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-google,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle,.fa.fa-yahoo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-spoon:before{content:"\f2e5"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-envelope-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-deviantart,.fa.fa-soundcloud,.fa.fa-spotify{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-life-bouy,.fa.fa-life-ring{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-bouy:before{content:"\f1cd"}.fa.fa-life-buoy{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-buoy:before{content:"\f1cd"}.fa.fa-life-saver{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-saver:before{content:"\f1cd"}.fa.fa-support{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git,.fa.fa-git-square,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-sliders:before{content:"\f1de"}.fa.fa-futbol-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-angellist,.fa.fa-ioxhost,.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-meanpath{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-meanpath:before{content:"\f2b4"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before{content:"\f224"}.fa.fa-facebook-official{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-clone,.fa.fa-hourglass-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-chrome,.fa.fa-creative-commons,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-internet-explorer,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square,.fa.fa-opera,.fa.fa-safari,.fa.fa-tripadvisor,.fa.fa-wikipedia-w{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-snapchat,.fa.fa-snapchat-ghost,.fa.fa-snapchat-square,.fa.fa-themeisle,.fa.fa-viadeo,.fa.fa-viadeo-square,.fa.fa-yoast{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-cab:before{content:"\f1ba"} \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-brands-400.eot b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-brands-400.eot new file mode 100755 index 0000000000000000000000000000000000000000..e4ccce2d5c2355fd80f8a3fa48ca66d0dee2c1f5 GIT binary patch literal 133034 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

;N&Lo3J|S=;BLZ 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 literal 0 HcmV?d00001 diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-brands-400.svg b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-brands-400.svg new file mode 100755 index 0000000..eb0f26f --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-brands-400.svg @@ -0,0 +1,3570 @@ + + + + + +Created by FontForge 20190801 at Tue Feb 4 18:05:39 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-brands-400.ttf b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-brands-400.ttf new file mode 100755 index 0000000000000000000000000000000000000000..08622a3b0fdea1ed16bdfd38f66f19d781fcc7e3 GIT binary patch literal 132728 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

iBe0QriI(hOQ0Q2gUk6!v~U}929 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

w`Ao`B8FfP>nd2WTiT*&L> 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�d261qc>pomd%U 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�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 MYknY2PJsjYKZ}NvDF6Tf literal 0 HcmV?d00001 diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-regular-400.eot b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-regular-400.eot new file mode 100755 index 0000000000000000000000000000000000000000..dbc06a4a3397b3b20c5109b616e725d473d047f7 GIT binary patch literal 34390 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 TzBl^| + + + + +Created by FontForge 20190801 at Tue Feb 4 18:05:39 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-regular-400.ttf b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-regular-400.ttf new file mode 100755 index 0000000000000000000000000000000000000000..4b6fdef613a07bf2ca1300d33281ef4483a7d9e2 GIT binary patch literal 34092 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 literal 0 HcmV?d00001 diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-regular-400.woff b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-regular-400.woff new file mode 100755 index 0000000000000000000000000000000000000000..f17953a79f9bbcf310e3b94da4d50d25575e74b3 GIT binary patch literal 16800 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

HoX$&PY%1k<*T((0L}; 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%0DX;<-WUJTP$yrR$TlG7`Kgt79QO> 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 literal 0 HcmV?d00001 diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-solid-900.eot b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-solid-900.eot new file mode 100755 index 0000000000000000000000000000000000000000..550f8f021fa5c28451051def8cf50be4672e0d7b GIT binary patch literal 194078 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�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 Q&cAcx2PiK%{T}^)0E}_arvLx| literal 0 HcmV?d00001 diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-solid-900.svg b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-solid-900.svg new file mode 100755 index 0000000..6933b2b --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-solid-900.svg @@ -0,0 +1,4700 @@ + + + + + +Created by FontForge 20190801 at Tue Feb 4 18:05:39 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-solid-900.ttf b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-solid-900.ttf new file mode 100755 index 0000000000000000000000000000000000000000..9dd8c7fd781711897b57043c79015cecb8e810ad GIT binary patch literal 193792 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�A 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 y!_zeM#LWuge}| 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 WFhlXd+8F0xGv)sQb}Lbr0001igO;)Y literal 0 HcmV?d00001 diff --git a/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-solid-900.woff2 b/deploy/grafana-map-plugin/dist/vendor/fontawesome-free/webfonts/fa-solid-900.woff2 new file mode 100755 index 0000000000000000000000000000000000000000..ba7507b18d866705904ec0b95a710ed931754660 GIT binary patch literal 76120 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

_ZUKmAWoX*-|Zw1??L4>IUe(RZT;>Bk_j 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 Us_rf<`hN8uMrLIs2ndM(0UlSfz5oCK literal 0 HcmV?d00001 diff --git a/deploy/grafana-map-plugin/dist/vendor/leaflet-sleep/Leaflet.Sleep.js b/deploy/grafana-map-plugin/dist/vendor/leaflet-sleep/Leaflet.Sleep.js new file mode 100755 index 0000000..5178fd7 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/leaflet-sleep/Leaflet.Sleep.js @@ -0,0 +1,235 @@ +/* + * Leaflet.Sleep + */ + +/* + * Default Button (touch devices only) + */ + +L.Control.SleepMapControl = L.Control.extend({ + + initialize: function(opts){ + L.setOptions(this,opts); + }, + + options: { + position: 'topright', + prompt: 'disable map', + styles: { + 'backgroundColor': 'white', + 'padding': '5px', + 'border': '2px solid gray' + } + }, + + buildContainer: function(){ + var self = this; + var container = L.DomUtil.create('p', 'sleep-button'); + var boundEvent = this._nonBoundEvent.bind(this); + container.appendChild( document.createTextNode( this.options.prompt )); + L.DomEvent.addListener(container, 'click', boundEvent); + L.DomEvent.addListener(container, 'touchstart', boundEvent); + + Object.keys(this.options.styles).map(function(key) { + container.style[key] = self.options.styles[key]; + }); + + return (this._container = container); + }, + + onAdd: function () { + return this._container || this.buildContainer(); + }, + + _nonBoundEvent: function(e) { + L.DomEvent.stop(e); + if (this._map) this._map.sleep._sleepMap(); + return false; + } + +}); + +L.Control.sleepMapControl = function(){ + return new L.Control.SleepMapControl(); +}; + + +/* + * The Sleep Handler + */ + +L.Map.mergeOptions({ + sleep: true, + sleepTime: 750, + wakeTime: 750, + wakeMessageTouch: 'Touch to Wake', + sleepNote: true, + hoverToWake: true, + sleepOpacity:.7, + sleepButton: L.Control.sleepMapControl +}); + +L.Map.Sleep = L.Handler.extend({ + + addHooks: function () { + var self = this; + this.sleepNote = L.DomUtil.create('p', 'sleep-note', this._map._container); + this._enterTimeout = null; + this._exitTimeout = null; + + /* + * If the device has only a touchscreen we will never get + * a mouseout event, so we add an extra button to put the map + * back to sleep manually. + * + * a custom control/button can be provided by the user + * with the map's `sleepButton` option + */ + this._sleepButton = this._map.options.sleepButton(); + + if (this._map.tap) { + this._map.addControl(this._sleepButton); + } + + var mapStyle = this._map._container.style; + mapStyle.WebkitTransition += 'opacity .5s'; + mapStyle.MozTransition += 'opacity .5s'; + + this._setSleepNoteStyle(); + this._sleepMap(); + }, + + removeHooks: function () { + if (!this._map.scrollWheelZoom.enabled()){ + this._map.scrollWheelZoom.enable(); + } + L.DomUtil.setOpacity( this._map._container, 1); + L.DomUtil.setOpacity( this.sleepNote, 0); + this._removeSleepingListeners(); + this._removeAwakeListeners(); + }, + + _setSleepNoteStyle: function() { + var noteString = ''; + var style = this.sleepNote.style; + + if(this._map.tap) { + noteString = this._map.options.wakeMessageTouch; + } else if (this._map.options.wakeMessage) { + noteString = this._map.options.wakeMessage; + } else if (this._map.options.hoverToWake) { + noteString = 'click or hover to wake'; + } else { + noteString = 'click to wake'; + } + + if( this._map.options.sleepNote ){ + this.sleepNote.appendChild(document.createTextNode( noteString )); + style.pointerEvents = 'none'; + style.maxWidth = '150px'; + style.transitionDuration = '.2s'; + style.zIndex = 5000; + style.opacity = '.6'; + style.margin = 'auto'; + style.textAlign = 'center'; + style.borderRadius = '4px'; + style.top = '50%'; + style.position = 'relative'; + style.padding = '5px'; + style.border = 'solid 2px black'; + style.background = 'white'; + + if(this._map.options.sleepNoteStyle) { + var noteStyleOverrides = this._map.options.sleepNoteStyle; + Object.keys(noteStyleOverrides).map(function(key) { + style[key] = noteStyleOverrides[key]; + }); + } + } + }, + + _wakeMap: function (e) { + this._stopWaiting(); + this._map.scrollWheelZoom.enable(); + if (this._map.tap) { + this._map.touchZoom.enable(); + this._map.dragging.enable(); + this._map.tap.enable(); + this._map.addControl(this._sleepButton); + } + L.DomUtil.setOpacity( this._map._container, 1); + this.sleepNote.style.opacity = 0; + this._addAwakeListeners(); + }, + + _sleepMap: function () { + this._stopWaiting(); + this._map.scrollWheelZoom.disable(); + + if (this._map.tap) { + this._map.touchZoom.disable(); + this._map.dragging.disable(); + this._map.tap.disable(); + this._map.removeControl(this._sleepButton); + } + + L.DomUtil.setOpacity( this._map._container, this._map.options.sleepOpacity); + this.sleepNote.style.opacity = .4; + this._addSleepingListeners(); + }, + + _wakePending: function () { + this._map.once('mousedown', this._wakeMap, this); + if (this._map.options.hoverToWake){ + var self = this; + this._map.once('mouseout', this._sleepMap, this); + self._enterTimeout = setTimeout(function(){ + self._map.off('mouseout', self._sleepMap, self); + self._wakeMap(); + } , self._map.options.wakeTime); + } + }, + + _sleepPending: function () { + var self = this; + self._map.once('mouseover', self._wakeMap, self); + self._exitTimeout = setTimeout(function(){ + self._map.off('mouseover', self._wakeMap, self); + self._sleepMap(); + } , self._map.options.sleepTime); + }, + + _addSleepingListeners: function(){ + this._map.once('mouseover', this._wakePending, this); + this._map.tap && + this._map.once('click', this._wakeMap, this); + }, + + _addAwakeListeners: function(){ + this._map.once('mouseout', this._sleepPending, this); + }, + + _removeSleepingListeners: function(){ + this._map.options.hoverToWake && + this._map.off('mouseover', this._wakePending, this); + this._map.off('mousedown', this._wakeMap, this); + this._map.tap && + this._map.off('click', this._wakeMap, this); + }, + + _removeAwakeListeners: function(){ + this._map.off('mouseout', this._sleepPending, this); + }, + + _stopWaiting: function () { + this._removeSleepingListeners(); + this._removeAwakeListeners(); + var self = this; + if(this._enterTimeout) clearTimeout(self._enterTimeout); + if(this._exitTimeout) clearTimeout(self._exitTimeout); + this._enterTimeout = null; + this._exitTimeout = null; + } +}); + +L.Map.addInitHook('addHandler', 'sleep', L.Map.Sleep); diff --git a/deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/images/markers-matte.png b/deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/images/markers-matte.png new file mode 100755 index 0000000000000000000000000000000000000000..178258665dd06a9e387d85d48553beef8161650c GIT binary patch literal 14323 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 literal 0 HcmV?d00001 diff --git a/deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/images/markers-matte@2x.png b/deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/images/markers-matte@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..c981244dd3bba2fa7eb186253fdad64d8a2fdc06 GIT binary patch literal 31113 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 O1I&%BPZk-vNBs{Ev@NLs literal 0 HcmV?d00001 diff --git a/deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/images/markers-shadow.png b/deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/images/markers-shadow.png new file mode 100755 index 0000000000000000000000000000000000000000..33cf95504706aa9d06ad40dbcd2fa168cbd43d13 GIT binary patch literal 535 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 literal 0 HcmV?d00001 diff --git a/deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/images/markers-soft@2x.png b/deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/images/markers-soft@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..b3acfbf93154c0b0bed08c4ed11e3426fa610912 GIT binary patch literal 165517 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 literal 0 HcmV?d00001 diff --git a/deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/leaflet.awesome-markers.css b/deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/leaflet.awesome-markers.css new file mode 100755 index 0000000..c2ae6c6 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/leaflet.awesome-markers.css @@ -0,0 +1,128 @@ +/* +Author: L. Voogdt +License: MIT +Version: 1.0 +*/ + +/* Marker setup */ +.awesome-marker { + background: url('images/markers-soft.png') no-repeat 0 0; + width: 35px; + height: 46px; + position:absolute; + left:0; + top:0; + display: block; + text-align: center; +} + +.awesome-marker-shadow { + background: url('images/markers-shadow.png') no-repeat 0 0; + width: 36px; + height: 16px; +} + +/* Retina displays */ +@media (min--moz-device-pixel-ratio: 1.5),(-o-min-device-pixel-ratio: 3/2), +(-webkit-min-device-pixel-ratio: 1.5),(min-device-pixel-ratio: 1.5),(min-resolution: 1.5dppx) { + .awesome-marker { + background-image: url('images/markers-soft@2x.png'); + background-size: 720px 92px; + } + .awesome-marker-shadow { + background-image: url('images/markers-shadow@2x.png'); + background-size: 35px 16px; + } +} + +.awesome-marker i { + color: #333; + margin-top: 10px; + display: inline-block; + font-size: 14px; +} + +.awesome-marker .icon-white { + color: #fff; +} + +/* Colors */ +.awesome-marker-icon-red { + background-position: 0 0; +} + +.awesome-marker-icon-darkred { + background-position: -180px 0; +} + +.awesome-marker-icon-lightred { + background-position: -360px 0; +} + +.awesome-marker-icon-orange { + background-position: -36px 0; +} + +.awesome-marker-icon-beige { + background-position: -396px 0; +} + +.awesome-marker-icon-green { + background-position: -72px 0; +} + +.awesome-marker-icon-darkgreen { + background-position: -252px 0; +} + +.awesome-marker-icon-lightgreen { + background-position: -432px 0; +} + +.awesome-marker-icon-blue { + background-position: -108px 0; +} + +.awesome-marker-icon-darkblue { + background-position: -216px 0; +} + +.awesome-marker-icon-lightblue { + background-position: -468px 0; +} + +.awesome-marker-icon-purple { + background-position: -144px 0; +} + +.awesome-marker-icon-darkpurple { + background-position: -288px 0; +} + +.awesome-marker-icon-pink { + background-position: -504px 0; +} + +.awesome-marker-icon-cadetblue { + background-position: -324px 0; +} + +.awesome-marker-icon-white { + background-position: -574px 0; +} + +.awesome-marker-icon-gray { + background-position: -648px 0; +} + +.awesome-marker-icon-lightgray { + background-position: -612px 0; +} + +.awesome-marker-icon-black { + background-position: -682px 0; +} + +.awesome-marker-square { + background-position-y: -46px; +} diff --git a/deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/leaflet.awesome-markers.js b/deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/leaflet.awesome-markers.js new file mode 100755 index 0000000..7505b6f --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/leaflet.awesome-markers.js @@ -0,0 +1,125 @@ +/* + Leaflet.AwesomeMarkers, a plugin that adds colorful iconic markers for Leaflet, based on the Font Awesome icons + (c) 2012-2013, Lennard Voogdt + + http://leafletjs.com + https://github.com/lvoogdt +*/ + +/*global L*/ + +(function (window, document, undefined) { + "use strict"; + /* + * Leaflet.AwesomeMarkers assumes that you have already included the Leaflet library. + */ + + L.AwesomeMarkers = {}; + + L.AwesomeMarkers.version = '2.0.1'; + + L.AwesomeMarkers.Icon = L.Icon.extend({ + options: { + iconSize: [35, 45], + iconAnchor: [17, 42], + popupAnchor: [1, -32], + shadowAnchor: [10, 12], + shadowSize: [36, 16], + className: 'awesome-marker', + prefix: 'glyphicon', + spinClass: 'fa-spin', + extraClasses: '', + icon: 'home', + markerColor: 'blue', + iconColor: 'white' + }, + + initialize: function (options) { + options = L.Util.setOptions(this, options); + }, + + createIcon: function () { + var div = document.createElement('div'), + options = this.options; + + if (options.icon) { + div.innerHTML = this._createInner(); + } + + if (options.bgPos) { + div.style.backgroundPosition = + (-options.bgPos.x) + 'px ' + (-options.bgPos.y) + 'px'; + } + + this._setIconStyles(div, 'icon-' + options.markerColor); + return div; + }, + + _createInner: function() { + var iconClass, iconSpinClass = "", iconColorClass = "", iconColorStyle = "", options = this.options; + + if(options.icon.slice(0,options.prefix.length+1) === options.prefix + "-") { + iconClass = options.icon; + } else { + iconClass = options.prefix + "-" + options.icon; + } + + if(options.spin && typeof options.spinClass === "string") { + iconSpinClass = options.spinClass; + } + + if(options.iconColor) { + if(options.iconColor === 'white' || options.iconColor === 'black') { + iconColorClass = "icon-" + options.iconColor; + } else { + iconColorStyle = "style='color: " + options.iconColor + "' "; + } + } + + return ""; + }, + + _setIconStyles: function (img, name) { + var options = this.options, + size = L.point(options[name === 'shadow' ? 'shadowSize' : 'iconSize']), + anchor; + + if (name === 'shadow') { + anchor = L.point(options.shadowAnchor || options.iconAnchor); + } else { + anchor = L.point(options.iconAnchor); + } + + if (!anchor && size) { + anchor = size.divideBy(2, true); + } + + img.className = 'awesome-marker-' + name + ' ' + options.className; + + if (anchor) { + img.style.marginLeft = (-anchor.x) + 'px'; + img.style.marginTop = (-anchor.y) + 'px'; + } + + if (size) { + img.style.width = size.x + 'px'; + img.style.height = size.y + 'px'; + } + }, + + createShadow: function () { + var div = document.createElement('div'); + + this._setIconStyles(div, 'shadow'); + return div; + } + }); + + L.AwesomeMarkers.icon = function (options) { + return new L.AwesomeMarkers.Icon(options); + }; + +}(this, document)); + + + diff --git a/deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/leaflet.awesome-markers.min.js b/deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/leaflet.awesome-markers.min.js new file mode 100755 index 0000000..376e57e --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/leaflet.awesome-markers/leaflet.awesome-markers.min.js @@ -0,0 +1,7 @@ +/* + Leaflet.AwesomeMarkers, a plugin that adds colorful iconic markers for Leaflet, based on the Font Awesome icons + (c) 2012-2013, Lennard Voogdt + + http://leafletjs.com + https://github.com/lvoogdt +*//*global L*/(function(e,t,n){"use strict";L.AwesomeMarkers={};L.AwesomeMarkers.version="2.0.1";L.AwesomeMarkers.Icon=L.Icon.extend({options:{iconSize:[35,45],iconAnchor:[17,42],popupAnchor:[1,-32],shadowAnchor:[10,12],shadowSize:[36,16],className:"awesome-marker",prefix:"glyphicon",spinClass:"fa-spin",icon:"home",markerColor:"blue",iconColor:"white"},initialize:function(e){e=L.Util.setOptions(this,e)},createIcon:function(){var e=t.createElement("div"),n=this.options;n.icon&&(e.innerHTML=this._createInner());n.bgPos&&(e.style.backgroundPosition=-n.bgPos.x+"px "+ -n.bgPos.y+"px");this._setIconStyles(e,"icon-"+n.markerColor);return e},_createInner:function(){var e,t="",n="",r="",i=this.options;i.icon.slice(0,i.prefix.length+1)===i.prefix+"-"?e=i.icon:e=i.prefix+"-"+i.icon;i.spin&&typeof i.spinClass=="string"&&(t=i.spinClass);i.iconColor&&(i.iconColor==="white"||i.iconColor==="black"?n="icon-"+i.iconColor:r="style='color: "+i.iconColor+"' ");return""},_setIconStyles:function(e,t){var n=this.options,r=L.point(n[t==="shadow"?"shadowSize":"iconSize"]),i;t==="shadow"?i=L.point(n.shadowAnchor||n.iconAnchor):i=L.point(n.iconAnchor);!i&&r&&(i=r.divideBy(2,!0));e.className="awesome-marker-"+t+" "+n.className;if(i){e.style.marginLeft=-i.x+"px";e.style.marginTop=-i.y+"px"}if(r){e.style.width=r.x+"px";e.style.height=r.y+"px"}},createShadow:function(){var e=t.createElement("div");this._setIconStyles(e,"shadow");return e}});L.AwesomeMarkers.icon=function(e){return new L.AwesomeMarkers.Icon(e)}})(this,document); diff --git a/deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/MarkerCluster.Default.css b/deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/MarkerCluster.Default.css new file mode 100755 index 0000000..da330ca --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/MarkerCluster.Default.css @@ -0,0 +1,60 @@ +.marker-cluster-small { + background-color: rgba(181, 226, 140, 0.6); + } +.marker-cluster-small div { + background-color: rgba(110, 204, 57, 0.6); + } + +.marker-cluster-medium { + background-color: rgba(241, 211, 87, 0.6); + } +.marker-cluster-medium div { + background-color: rgba(240, 194, 12, 0.6); + } + +.marker-cluster-large { + background-color: rgba(253, 156, 115, 0.6); + } +.marker-cluster-large div { + background-color: rgba(241, 128, 23, 0.6); + } + + /* IE 6-8 fallback colors */ +.leaflet-oldie .marker-cluster-small { + background-color: rgb(181, 226, 140); + } +.leaflet-oldie .marker-cluster-small div { + background-color: rgb(110, 204, 57); + } + +.leaflet-oldie .marker-cluster-medium { + background-color: rgb(241, 211, 87); + } +.leaflet-oldie .marker-cluster-medium div { + background-color: rgb(240, 194, 12); + } + +.leaflet-oldie .marker-cluster-large { + background-color: rgb(253, 156, 115); + } +.leaflet-oldie .marker-cluster-large div { + background-color: rgb(241, 128, 23); +} + +.marker-cluster { + background-clip: padding-box; + border-radius: 20px; + } +.marker-cluster div { + width: 30px; + height: 30px; + margin-left: 5px; + margin-top: 5px; + + text-align: center; + border-radius: 15px; + font: 12px "Helvetica Neue", Arial, Helvetica, sans-serif; + } +.marker-cluster span { + line-height: 30px; + } \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/MarkerCluster.css b/deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/MarkerCluster.css new file mode 100755 index 0000000..7ac0182 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/MarkerCluster.css @@ -0,0 +1,14 @@ +.leaflet-cluster-anim .leaflet-marker-icon, .leaflet-cluster-anim .leaflet-marker-shadow { + -webkit-transition: -webkit-transform 0.3s ease-out, opacity 0.3s ease-in; + -moz-transition: -moz-transform 0.3s ease-out, opacity 0.3s ease-in; + -o-transition: -o-transform 0.3s ease-out, opacity 0.3s ease-in; + transition: transform 0.3s ease-out, opacity 0.3s ease-in; +} + +.leaflet-cluster-spider-leg { + /* stroke-dashoffset (duration and function) should match with leaflet-marker-icon transform in order to track it exactly */ + -webkit-transition: -webkit-stroke-dashoffset 0.3s ease-out, -webkit-stroke-opacity 0.3s ease-in; + -moz-transition: -moz-stroke-dashoffset 0.3s ease-out, -moz-stroke-opacity 0.3s ease-in; + -o-transition: -o-stroke-dashoffset 0.3s ease-out, -o-stroke-opacity 0.3s ease-in; + transition: stroke-dashoffset 0.3s ease-out, stroke-opacity 0.3s ease-in; +} diff --git a/deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/WhereAreTheJavascriptFiles.txt b/deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/WhereAreTheJavascriptFiles.txt new file mode 100755 index 0000000..7145445 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/WhereAreTheJavascriptFiles.txt @@ -0,0 +1,5 @@ +We don't ship the .js files in the git master branch. +They are only present in version tags and in npm. + +See how to get the JS files here: https://github.com/Leaflet/Leaflet.markercluster#using-the-plugin +Or how to build them: https://github.com/Leaflet/Leaflet.markercluster#building-testing-and-linting-scripts diff --git a/deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/leaflet.markercluster-src.js b/deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/leaflet.markercluster-src.js new file mode 100755 index 0000000..055d6f9 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/leaflet.markercluster-src.js @@ -0,0 +1,2690 @@ +/* + * Leaflet.markercluster 1.4.1+master.94f9815, + * Provides Beautiful Animated Marker Clustering functionality for Leaflet, a JS library for interactive maps. + * https://github.com/Leaflet/Leaflet.markercluster + * (c) 2012-2017, Dave Leaver, smartrak + */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (factory((global.Leaflet = global.Leaflet || {}, global.Leaflet.markercluster = global.Leaflet.markercluster || {}))); +}(this, (function (exports) { 'use strict'; + +/* + * L.MarkerClusterGroup extends L.FeatureGroup by clustering the markers contained within + */ + +var MarkerClusterGroup = L.MarkerClusterGroup = L.FeatureGroup.extend({ + + options: { + maxClusterRadius: 80, //A cluster will cover at most this many pixels from its center + iconCreateFunction: null, + clusterPane: L.Marker.prototype.options.pane, + + spiderfyOnMaxZoom: true, + showCoverageOnHover: true, + zoomToBoundsOnClick: true, + singleMarkerMode: false, + + disableClusteringAtZoom: null, + + // Setting this to false prevents the removal of any clusters outside of the viewpoint, which + // is the default behaviour for performance reasons. + removeOutsideVisibleBounds: true, + + // Set to false to disable all animations (zoom and spiderfy). + // If false, option animateAddingMarkers below has no effect. + // If L.DomUtil.TRANSITION is falsy, this option has no effect. + animate: true, + + //Whether to animate adding markers after adding the MarkerClusterGroup to the map + // If you are adding individual markers set to true, if adding bulk markers leave false for massive performance gains. + animateAddingMarkers: false, + + //Increase to increase the distance away that spiderfied markers appear from the center + spiderfyDistanceMultiplier: 1, + + // Make it possible to specify a polyline options on a spider leg + spiderLegPolylineOptions: { weight: 1.5, color: '#222', opacity: 0.5 }, + + // When bulk adding layers, adds markers in chunks. Means addLayers may not add all the layers in the call, others will be loaded during setTimeouts + chunkedLoading: false, + chunkInterval: 200, // process markers for a maximum of ~ n milliseconds (then trigger the chunkProgress callback) + chunkDelay: 50, // at the end of each interval, give n milliseconds back to system/browser + chunkProgress: null, // progress callback: function(processed, total, elapsed) (e.g. for a progress indicator) + + //Options to pass to the L.Polygon constructor + polygonOptions: {} + }, + + initialize: function (options) { + L.Util.setOptions(this, options); + if (!this.options.iconCreateFunction) { + this.options.iconCreateFunction = this._defaultIconCreateFunction; + } + + this._featureGroup = L.featureGroup(); + this._featureGroup.addEventParent(this); + + this._nonPointGroup = L.featureGroup(); + this._nonPointGroup.addEventParent(this); + + this._inZoomAnimation = 0; + this._needsClustering = []; + this._needsRemoving = []; //Markers removed while we aren't on the map need to be kept track of + //The bounds of the currently shown area (from _getExpandedVisibleBounds) Updated on zoom/move + this._currentShownBounds = null; + + this._queue = []; + + this._childMarkerEventHandlers = { + 'dragstart': this._childMarkerDragStart, + 'move': this._childMarkerMoved, + 'dragend': this._childMarkerDragEnd, + }; + + // Hook the appropriate animation methods. + var animate = L.DomUtil.TRANSITION && this.options.animate; + L.extend(this, animate ? this._withAnimation : this._noAnimation); + // Remember which MarkerCluster class to instantiate (animated or not). + this._markerCluster = animate ? L.MarkerCluster : L.MarkerClusterNonAnimated; + }, + + addLayer: function (layer) { + + if (layer instanceof L.LayerGroup) { + return this.addLayers([layer]); + } + + //Don't cluster non point data + if (!layer.getLatLng) { + this._nonPointGroup.addLayer(layer); + this.fire('layeradd', { layer: layer }); + return this; + } + + if (!this._map) { + this._needsClustering.push(layer); + this.fire('layeradd', { layer: layer }); + return this; + } + + if (this.hasLayer(layer)) { + return this; + } + + + //If we have already clustered we'll need to add this one to a cluster + + if (this._unspiderfy) { + this._unspiderfy(); + } + + this._addLayer(layer, this._maxZoom); + this.fire('layeradd', { layer: layer }); + + // Refresh bounds and weighted positions. + this._topClusterLevel._recalculateBounds(); + + this._refreshClustersIcons(); + + //Work out what is visible + var visibleLayer = layer, + currentZoom = this._zoom; + if (layer.__parent) { + while (visibleLayer.__parent._zoom >= currentZoom) { + visibleLayer = visibleLayer.__parent; + } + } + + if (this._currentShownBounds.contains(visibleLayer.getLatLng())) { + if (this.options.animateAddingMarkers) { + this._animationAddLayer(layer, visibleLayer); + } else { + this._animationAddLayerNonAnimated(layer, visibleLayer); + } + } + return this; + }, + + removeLayer: function (layer) { + + if (layer instanceof L.LayerGroup) { + return this.removeLayers([layer]); + } + + //Non point layers + if (!layer.getLatLng) { + this._nonPointGroup.removeLayer(layer); + this.fire('layerremove', { layer: layer }); + return this; + } + + if (!this._map) { + if (!this._arraySplice(this._needsClustering, layer) && this.hasLayer(layer)) { + this._needsRemoving.push({ layer: layer, latlng: layer._latlng }); + } + this.fire('layerremove', { layer: layer }); + return this; + } + + if (!layer.__parent) { + return this; + } + + if (this._unspiderfy) { + this._unspiderfy(); + this._unspiderfyLayer(layer); + } + + //Remove the marker from clusters + this._removeLayer(layer, true); + this.fire('layerremove', { layer: layer }); + + // Refresh bounds and weighted positions. + this._topClusterLevel._recalculateBounds(); + + this._refreshClustersIcons(); + + layer.off(this._childMarkerEventHandlers, this); + + if (this._featureGroup.hasLayer(layer)) { + this._featureGroup.removeLayer(layer); + if (layer.clusterShow) { + layer.clusterShow(); + } + } + + return this; + }, + + //Takes an array of markers and adds them in bulk + addLayers: function (layersArray, skipLayerAddEvent) { + if (!L.Util.isArray(layersArray)) { + return this.addLayer(layersArray); + } + + var fg = this._featureGroup, + npg = this._nonPointGroup, + chunked = this.options.chunkedLoading, + chunkInterval = this.options.chunkInterval, + chunkProgress = this.options.chunkProgress, + l = layersArray.length, + offset = 0, + originalArray = true, + m; + + if (this._map) { + var started = (new Date()).getTime(); + var process = L.bind(function () { + var start = (new Date()).getTime(); + for (; offset < l; offset++) { + if (chunked && offset % 200 === 0) { + // every couple hundred markers, instrument the time elapsed since processing started: + var elapsed = (new Date()).getTime() - start; + if (elapsed > chunkInterval) { + break; // been working too hard, time to take a break :-) + } + } + + m = layersArray[offset]; + + // Group of layers, append children to layersArray and skip. + // Side effects: + // - Total increases, so chunkProgress ratio jumps backward. + // - Groups are not included in this group, only their non-group child layers (hasLayer). + // Changing array length while looping does not affect performance in current browsers: + // http://jsperf.com/for-loop-changing-length/6 + if (m instanceof L.LayerGroup) { + if (originalArray) { + layersArray = layersArray.slice(); + originalArray = false; + } + this._extractNonGroupLayers(m, layersArray); + l = layersArray.length; + continue; + } + + //Not point data, can't be clustered + if (!m.getLatLng) { + npg.addLayer(m); + if (!skipLayerAddEvent) { + this.fire('layeradd', { layer: m }); + } + continue; + } + + if (this.hasLayer(m)) { + continue; + } + + this._addLayer(m, this._maxZoom); + if (!skipLayerAddEvent) { + this.fire('layeradd', { layer: m }); + } + + //If we just made a cluster of size 2 then we need to remove the other marker from the map (if it is) or we never will + if (m.__parent) { + if (m.__parent.getChildCount() === 2) { + var markers = m.__parent.getAllChildMarkers(), + otherMarker = markers[0] === m ? markers[1] : markers[0]; + fg.removeLayer(otherMarker); + } + } + } + + if (chunkProgress) { + // report progress and time elapsed: + chunkProgress(offset, l, (new Date()).getTime() - started); + } + + // Completed processing all markers. + if (offset === l) { + + // Refresh bounds and weighted positions. + this._topClusterLevel._recalculateBounds(); + + this._refreshClustersIcons(); + + this._topClusterLevel._recursivelyAddChildrenToMap(null, this._zoom, this._currentShownBounds); + } else { + setTimeout(process, this.options.chunkDelay); + } + }, this); + + process(); + } else { + var needsClustering = this._needsClustering; + + for (; offset < l; offset++) { + m = layersArray[offset]; + + // Group of layers, append children to layersArray and skip. + if (m instanceof L.LayerGroup) { + if (originalArray) { + layersArray = layersArray.slice(); + originalArray = false; + } + this._extractNonGroupLayers(m, layersArray); + l = layersArray.length; + continue; + } + + //Not point data, can't be clustered + if (!m.getLatLng) { + npg.addLayer(m); + continue; + } + + if (this.hasLayer(m)) { + continue; + } + + needsClustering.push(m); + } + } + return this; + }, + + //Takes an array of markers and removes them in bulk + removeLayers: function (layersArray) { + var i, m, + l = layersArray.length, + fg = this._featureGroup, + npg = this._nonPointGroup, + originalArray = true; + + if (!this._map) { + for (i = 0; i < l; i++) { + m = layersArray[i]; + + // Group of layers, append children to layersArray and skip. + if (m instanceof L.LayerGroup) { + if (originalArray) { + layersArray = layersArray.slice(); + originalArray = false; + } + this._extractNonGroupLayers(m, layersArray); + l = layersArray.length; + continue; + } + + this._arraySplice(this._needsClustering, m); + npg.removeLayer(m); + if (this.hasLayer(m)) { + this._needsRemoving.push({ layer: m, latlng: m._latlng }); + } + this.fire('layerremove', { layer: m }); + } + return this; + } + + if (this._unspiderfy) { + this._unspiderfy(); + + // Work on a copy of the array, so that next loop is not affected. + var layersArray2 = layersArray.slice(), + l2 = l; + for (i = 0; i < l2; i++) { + m = layersArray2[i]; + + // Group of layers, append children to layersArray and skip. + if (m instanceof L.LayerGroup) { + this._extractNonGroupLayers(m, layersArray2); + l2 = layersArray2.length; + continue; + } + + this._unspiderfyLayer(m); + } + } + + for (i = 0; i < l; i++) { + m = layersArray[i]; + + // Group of layers, append children to layersArray and skip. + if (m instanceof L.LayerGroup) { + if (originalArray) { + layersArray = layersArray.slice(); + originalArray = false; + } + this._extractNonGroupLayers(m, layersArray); + l = layersArray.length; + continue; + } + + if (!m.__parent) { + npg.removeLayer(m); + this.fire('layerremove', { layer: m }); + continue; + } + + this._removeLayer(m, true, true); + this.fire('layerremove', { layer: m }); + + if (fg.hasLayer(m)) { + fg.removeLayer(m); + if (m.clusterShow) { + m.clusterShow(); + } + } + } + + // Refresh bounds and weighted positions. + this._topClusterLevel._recalculateBounds(); + + this._refreshClustersIcons(); + + //Fix up the clusters and markers on the map + this._topClusterLevel._recursivelyAddChildrenToMap(null, this._zoom, this._currentShownBounds); + + return this; + }, + + //Removes all layers from the MarkerClusterGroup + clearLayers: function () { + //Need our own special implementation as the LayerGroup one doesn't work for us + + //If we aren't on the map (yet), blow away the markers we know of + if (!this._map) { + this._needsClustering = []; + this._needsRemoving = []; + delete this._gridClusters; + delete this._gridUnclustered; + } + + if (this._noanimationUnspiderfy) { + this._noanimationUnspiderfy(); + } + + //Remove all the visible layers + this._featureGroup.clearLayers(); + this._nonPointGroup.clearLayers(); + + this.eachLayer(function (marker) { + marker.off(this._childMarkerEventHandlers, this); + delete marker.__parent; + }, this); + + if (this._map) { + //Reset _topClusterLevel and the DistanceGrids + this._generateInitialClusters(); + } + + return this; + }, + + //Override FeatureGroup.getBounds as it doesn't work + getBounds: function () { + var bounds = new L.LatLngBounds(); + + if (this._topClusterLevel) { + bounds.extend(this._topClusterLevel._bounds); + } + + for (var i = this._needsClustering.length - 1; i >= 0; i--) { + bounds.extend(this._needsClustering[i].getLatLng()); + } + + bounds.extend(this._nonPointGroup.getBounds()); + + return bounds; + }, + + //Overrides LayerGroup.eachLayer + eachLayer: function (method, context) { + var markers = this._needsClustering.slice(), + needsRemoving = this._needsRemoving, + thisNeedsRemoving, i, j; + + if (this._topClusterLevel) { + this._topClusterLevel.getAllChildMarkers(markers); + } + + for (i = markers.length - 1; i >= 0; i--) { + thisNeedsRemoving = true; + + for (j = needsRemoving.length - 1; j >= 0; j--) { + if (needsRemoving[j].layer === markers[i]) { + thisNeedsRemoving = false; + break; + } + } + + if (thisNeedsRemoving) { + method.call(context, markers[i]); + } + } + + this._nonPointGroup.eachLayer(method, context); + }, + + //Overrides LayerGroup.getLayers + getLayers: function () { + var layers = []; + this.eachLayer(function (l) { + layers.push(l); + }); + return layers; + }, + + //Overrides LayerGroup.getLayer, WARNING: Really bad performance + getLayer: function (id) { + var result = null; + + id = parseInt(id, 10); + + this.eachLayer(function (l) { + if (L.stamp(l) === id) { + result = l; + } + }); + + return result; + }, + + //Returns true if the given layer is in this MarkerClusterGroup + hasLayer: function (layer) { + if (!layer) { + return false; + } + + var i, anArray = this._needsClustering; + + for (i = anArray.length - 1; i >= 0; i--) { + if (anArray[i] === layer) { + return true; + } + } + + anArray = this._needsRemoving; + for (i = anArray.length - 1; i >= 0; i--) { + if (anArray[i].layer === layer) { + return false; + } + } + + return !!(layer.__parent && layer.__parent._group === this) || this._nonPointGroup.hasLayer(layer); + }, + + //Zoom down to show the given layer (spiderfying if necessary) then calls the callback + zoomToShowLayer: function (layer, callback) { + + if (typeof callback !== 'function') { + callback = function () {}; + } + + var showMarker = function () { + if ((layer._icon || layer.__parent._icon) && !this._inZoomAnimation) { + this._map.off('moveend', showMarker, this); + this.off('animationend', showMarker, this); + + if (layer._icon) { + callback(); + } else if (layer.__parent._icon) { + this.once('spiderfied', callback, this); + layer.__parent.spiderfy(); + } + } + }; + + if (layer._icon && this._map.getBounds().contains(layer.getLatLng())) { + //Layer is visible ond on screen, immediate return + callback(); + } else if (layer.__parent._zoom < Math.round(this._map._zoom)) { + //Layer should be visible at this zoom level. It must not be on screen so just pan over to it + this._map.on('moveend', showMarker, this); + this._map.panTo(layer.getLatLng()); + } else { + this._map.on('moveend', showMarker, this); + this.on('animationend', showMarker, this); + layer.__parent.zoomToBounds(); + } + }, + + //Overrides FeatureGroup.onAdd + onAdd: function (map) { + this._map = map; + var i, l, layer; + + if (!isFinite(this._map.getMaxZoom())) { + throw "Map has no maxZoom specified"; + } + + this._featureGroup.addTo(map); + this._nonPointGroup.addTo(map); + + if (!this._gridClusters) { + this._generateInitialClusters(); + } + + this._maxLat = map.options.crs.projection.MAX_LATITUDE; + + //Restore all the positions as they are in the MCG before removing them + for (i = 0, l = this._needsRemoving.length; i < l; i++) { + layer = this._needsRemoving[i]; + layer.newlatlng = layer.layer._latlng; + layer.layer._latlng = layer.latlng; + } + //Remove them, then restore their new positions + for (i = 0, l = this._needsRemoving.length; i < l; i++) { + layer = this._needsRemoving[i]; + this._removeLayer(layer.layer, true); + layer.layer._latlng = layer.newlatlng; + } + this._needsRemoving = []; + + //Remember the current zoom level and bounds + this._zoom = Math.round(this._map._zoom); + this._currentShownBounds = this._getExpandedVisibleBounds(); + + this._map.on('zoomend', this._zoomEnd, this); + this._map.on('moveend', this._moveEnd, this); + + if (this._spiderfierOnAdd) { //TODO FIXME: Not sure how to have spiderfier add something on here nicely + this._spiderfierOnAdd(); + } + + this._bindEvents(); + + //Actually add our markers to the map: + l = this._needsClustering; + this._needsClustering = []; + this.addLayers(l, true); + }, + + //Overrides FeatureGroup.onRemove + onRemove: function (map) { + map.off('zoomend', this._zoomEnd, this); + map.off('moveend', this._moveEnd, this); + + this._unbindEvents(); + + //In case we are in a cluster animation + this._map._mapPane.className = this._map._mapPane.className.replace(' leaflet-cluster-anim', ''); + + if (this._spiderfierOnRemove) { //TODO FIXME: Not sure how to have spiderfier add something on here nicely + this._spiderfierOnRemove(); + } + + delete this._maxLat; + + //Clean up all the layers we added to the map + this._hideCoverage(); + this._featureGroup.remove(); + this._nonPointGroup.remove(); + + this._featureGroup.clearLayers(); + + this._map = null; + }, + + getVisibleParent: function (marker) { + var vMarker = marker; + while (vMarker && !vMarker._icon) { + vMarker = vMarker.__parent; + } + return vMarker || null; + }, + + //Remove the given object from the given array + _arraySplice: function (anArray, obj) { + for (var i = anArray.length - 1; i >= 0; i--) { + if (anArray[i] === obj) { + anArray.splice(i, 1); + return true; + } + } + }, + + /** + * Removes a marker from all _gridUnclustered zoom levels, starting at the supplied zoom. + * @param marker to be removed from _gridUnclustered. + * @param z integer bottom start zoom level (included) + * @private + */ + _removeFromGridUnclustered: function (marker, z) { + var map = this._map, + gridUnclustered = this._gridUnclustered, + minZoom = Math.floor(this._map.getMinZoom()); + + for (; z >= minZoom; z--) { + if (!gridUnclustered[z].removeObject(marker, map.project(marker.getLatLng(), z))) { + break; + } + } + }, + + _childMarkerDragStart: function (e) { + e.target.__dragStart = e.target._latlng; + }, + + _childMarkerMoved: function (e) { + if (!this._ignoreMove && !e.target.__dragStart) { + var isPopupOpen = e.target._popup && e.target._popup.isOpen(); + + this._moveChild(e.target, e.oldLatLng, e.latlng); + + if (isPopupOpen) { + e.target.openPopup(); + } + } + }, + + _moveChild: function (layer, from, to) { + layer._latlng = from; + this.removeLayer(layer); + + layer._latlng = to; + this.addLayer(layer); + }, + + _childMarkerDragEnd: function (e) { + var dragStart = e.target.__dragStart; + delete e.target.__dragStart; + if (dragStart) { + this._moveChild(e.target, dragStart, e.target._latlng); + } + }, + + + //Internal function for removing a marker from everything. + //dontUpdateMap: set to true if you will handle updating the map manually (for bulk functions) + _removeLayer: function (marker, removeFromDistanceGrid, dontUpdateMap) { + var gridClusters = this._gridClusters, + gridUnclustered = this._gridUnclustered, + fg = this._featureGroup, + map = this._map, + minZoom = Math.floor(this._map.getMinZoom()); + + //Remove the marker from distance clusters it might be in + if (removeFromDistanceGrid) { + this._removeFromGridUnclustered(marker, this._maxZoom); + } + + //Work our way up the clusters removing them as we go if required + var cluster = marker.__parent, + markers = cluster._markers, + otherMarker; + + //Remove the marker from the immediate parents marker list + this._arraySplice(markers, marker); + + while (cluster) { + cluster._childCount--; + cluster._boundsNeedUpdate = true; + + if (cluster._zoom < minZoom) { + //Top level, do nothing + break; + } else if (removeFromDistanceGrid && cluster._childCount <= 1) { //Cluster no longer required + //We need to push the other marker up to the parent + otherMarker = cluster._markers[0] === marker ? cluster._markers[1] : cluster._markers[0]; + + //Update distance grid + gridClusters[cluster._zoom].removeObject(cluster, map.project(cluster._cLatLng, cluster._zoom)); + gridUnclustered[cluster._zoom].addObject(otherMarker, map.project(otherMarker.getLatLng(), cluster._zoom)); + + //Move otherMarker up to parent + this._arraySplice(cluster.__parent._childClusters, cluster); + cluster.__parent._markers.push(otherMarker); + otherMarker.__parent = cluster.__parent; + + if (cluster._icon) { + //Cluster is currently on the map, need to put the marker on the map instead + fg.removeLayer(cluster); + if (!dontUpdateMap) { + fg.addLayer(otherMarker); + } + } + } else { + cluster._iconNeedsUpdate = true; + } + + cluster = cluster.__parent; + } + + delete marker.__parent; + }, + + _isOrIsParent: function (el, oel) { + while (oel) { + if (el === oel) { + return true; + } + oel = oel.parentNode; + } + return false; + }, + + //Override L.Evented.fire + fire: function (type, data, propagate) { + if (data && data.layer instanceof L.MarkerCluster) { + //Prevent multiple clustermouseover/off events if the icon is made up of stacked divs (Doesn't work in ie <= 8, no relatedTarget) + if (data.originalEvent && this._isOrIsParent(data.layer._icon, data.originalEvent.relatedTarget)) { + return; + } + type = 'cluster' + type; + } + + L.FeatureGroup.prototype.fire.call(this, type, data, propagate); + }, + + //Override L.Evented.listens + listens: function (type, propagate) { + return L.FeatureGroup.prototype.listens.call(this, type, propagate) || L.FeatureGroup.prototype.listens.call(this, 'cluster' + type, propagate); + }, + + //Default functionality + _defaultIconCreateFunction: function (cluster) { + var childCount = cluster.getChildCount(); + + var c = ' marker-cluster-'; + if (childCount < 10) { + c += 'small'; + } else if (childCount < 100) { + c += 'medium'; + } else { + c += 'large'; + } + + return new L.DivIcon({ html: '

' + childCount + '
', className: 'marker-cluster' + c, iconSize: new L.Point(40, 40) }); + }, + + _bindEvents: function () { + var map = this._map, + spiderfyOnMaxZoom = this.options.spiderfyOnMaxZoom, + showCoverageOnHover = this.options.showCoverageOnHover, + zoomToBoundsOnClick = this.options.zoomToBoundsOnClick; + + //Zoom on cluster click or spiderfy if we are at the lowest level + if (spiderfyOnMaxZoom || zoomToBoundsOnClick) { + this.on('clusterclick', this._zoomOrSpiderfy, this); + } + + //Show convex hull (boundary) polygon on mouse over + if (showCoverageOnHover) { + this.on('clustermouseover', this._showCoverage, this); + this.on('clustermouseout', this._hideCoverage, this); + map.on('zoomend', this._hideCoverage, this); + } + }, + + _zoomOrSpiderfy: function (e) { + var cluster = e.layer, + bottomCluster = cluster; + + while (bottomCluster._childClusters.length === 1) { + bottomCluster = bottomCluster._childClusters[0]; + } + + if (bottomCluster._zoom === this._maxZoom && + bottomCluster._childCount === cluster._childCount && + this.options.spiderfyOnMaxZoom) { + + // All child markers are contained in a single cluster from this._maxZoom to this cluster. + cluster.spiderfy(); + } else if (this.options.zoomToBoundsOnClick) { + cluster.zoomToBounds(); + } + + // Focus the map again for keyboard users. + if (e.originalEvent && e.originalEvent.keyCode === 13) { + this._map._container.focus(); + } + }, + + _showCoverage: function (e) { + var map = this._map; + if (this._inZoomAnimation) { + return; + } + if (this._shownPolygon) { + map.removeLayer(this._shownPolygon); + } + if (e.layer.getChildCount() > 2 && e.layer !== this._spiderfied) { + this._shownPolygon = new L.Polygon(e.layer.getConvexHull(), this.options.polygonOptions); + map.addLayer(this._shownPolygon); + } + }, + + _hideCoverage: function () { + if (this._shownPolygon) { + this._map.removeLayer(this._shownPolygon); + this._shownPolygon = null; + } + }, + + _unbindEvents: function () { + var spiderfyOnMaxZoom = this.options.spiderfyOnMaxZoom, + showCoverageOnHover = this.options.showCoverageOnHover, + zoomToBoundsOnClick = this.options.zoomToBoundsOnClick, + map = this._map; + + if (spiderfyOnMaxZoom || zoomToBoundsOnClick) { + this.off('clusterclick', this._zoomOrSpiderfy, this); + } + if (showCoverageOnHover) { + this.off('clustermouseover', this._showCoverage, this); + this.off('clustermouseout', this._hideCoverage, this); + map.off('zoomend', this._hideCoverage, this); + } + }, + + _zoomEnd: function () { + if (!this._map) { //May have been removed from the map by a zoomEnd handler + return; + } + this._mergeSplitClusters(); + + this._zoom = Math.round(this._map._zoom); + this._currentShownBounds = this._getExpandedVisibleBounds(); + }, + + _moveEnd: function () { + if (this._inZoomAnimation) { + return; + } + + var newBounds = this._getExpandedVisibleBounds(); + + this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), this._zoom, newBounds); + this._topClusterLevel._recursivelyAddChildrenToMap(null, Math.round(this._map._zoom), newBounds); + + this._currentShownBounds = newBounds; + return; + }, + + _generateInitialClusters: function () { + var maxZoom = Math.ceil(this._map.getMaxZoom()), + minZoom = Math.floor(this._map.getMinZoom()), + radius = this.options.maxClusterRadius, + radiusFn = radius; + + //If we just set maxClusterRadius to a single number, we need to create + //a simple function to return that number. Otherwise, we just have to + //use the function we've passed in. + if (typeof radius !== "function") { + radiusFn = function () { return radius; }; + } + + if (this.options.disableClusteringAtZoom !== null) { + maxZoom = this.options.disableClusteringAtZoom - 1; + } + this._maxZoom = maxZoom; + this._gridClusters = {}; + this._gridUnclustered = {}; + + //Set up DistanceGrids for each zoom + for (var zoom = maxZoom; zoom >= minZoom; zoom--) { + this._gridClusters[zoom] = new L.DistanceGrid(radiusFn(zoom)); + this._gridUnclustered[zoom] = new L.DistanceGrid(radiusFn(zoom)); + } + + // Instantiate the appropriate L.MarkerCluster class (animated or not). + this._topClusterLevel = new this._markerCluster(this, minZoom - 1); + }, + + //Zoom: Zoom to start adding at (Pass this._maxZoom to start at the bottom) + _addLayer: function (layer, zoom) { + var gridClusters = this._gridClusters, + gridUnclustered = this._gridUnclustered, + minZoom = Math.floor(this._map.getMinZoom()), + markerPoint, z; + + if (this.options.singleMarkerMode) { + this._overrideMarkerIcon(layer); + } + + layer.on(this._childMarkerEventHandlers, this); + + //Find the lowest zoom level to slot this one in + for (; zoom >= minZoom; zoom--) { + markerPoint = this._map.project(layer.getLatLng(), zoom); // calculate pixel position + + //Try find a cluster close by + var closest = gridClusters[zoom].getNearObject(markerPoint); + if (closest) { + closest._addChild(layer); + layer.__parent = closest; + return; + } + + //Try find a marker close by to form a new cluster with + closest = gridUnclustered[zoom].getNearObject(markerPoint); + if (closest) { + var parent = closest.__parent; + if (parent) { + this._removeLayer(closest, false); + } + + //Create new cluster with these 2 in it + + var newCluster = new this._markerCluster(this, zoom, closest, layer); + gridClusters[zoom].addObject(newCluster, this._map.project(newCluster._cLatLng, zoom)); + closest.__parent = newCluster; + layer.__parent = newCluster; + + //First create any new intermediate parent clusters that don't exist + var lastParent = newCluster; + for (z = zoom - 1; z > parent._zoom; z--) { + lastParent = new this._markerCluster(this, z, lastParent); + gridClusters[z].addObject(lastParent, this._map.project(closest.getLatLng(), z)); + } + parent._addChild(lastParent); + + //Remove closest from this zoom level and any above that it is in, replace with newCluster + this._removeFromGridUnclustered(closest, zoom); + + return; + } + + //Didn't manage to cluster in at this zoom, record us as a marker here and continue upwards + gridUnclustered[zoom].addObject(layer, markerPoint); + } + + //Didn't get in anything, add us to the top + this._topClusterLevel._addChild(layer); + layer.__parent = this._topClusterLevel; + return; + }, + + /** + * Refreshes the icon of all "dirty" visible clusters. + * Non-visible "dirty" clusters will be updated when they are added to the map. + * @private + */ + _refreshClustersIcons: function () { + this._featureGroup.eachLayer(function (c) { + if (c instanceof L.MarkerCluster && c._iconNeedsUpdate) { + c._updateIcon(); + } + }); + }, + + //Enqueue code to fire after the marker expand/contract has happened + _enqueue: function (fn) { + this._queue.push(fn); + if (!this._queueTimeout) { + this._queueTimeout = setTimeout(L.bind(this._processQueue, this), 300); + } + }, + _processQueue: function () { + for (var i = 0; i < this._queue.length; i++) { + this._queue[i].call(this); + } + this._queue.length = 0; + clearTimeout(this._queueTimeout); + this._queueTimeout = null; + }, + + //Merge and split any existing clusters that are too big or small + _mergeSplitClusters: function () { + var mapZoom = Math.round(this._map._zoom); + + //In case we are starting to split before the animation finished + this._processQueue(); + + if (this._zoom < mapZoom && this._currentShownBounds.intersects(this._getExpandedVisibleBounds())) { //Zoom in, split + this._animationStart(); + //Remove clusters now off screen + this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), this._zoom, this._getExpandedVisibleBounds()); + + this._animationZoomIn(this._zoom, mapZoom); + + } else if (this._zoom > mapZoom) { //Zoom out, merge + this._animationStart(); + + this._animationZoomOut(this._zoom, mapZoom); + } else { + this._moveEnd(); + } + }, + + //Gets the maps visible bounds expanded in each direction by the size of the screen (so the user cannot see an area we do not cover in one pan) + _getExpandedVisibleBounds: function () { + if (!this.options.removeOutsideVisibleBounds) { + return this._mapBoundsInfinite; + } else if (L.Browser.mobile) { + return this._checkBoundsMaxLat(this._map.getBounds()); + } + + return this._checkBoundsMaxLat(this._map.getBounds().pad(1)); // Padding expands the bounds by its own dimensions but scaled with the given factor. + }, + + /** + * Expands the latitude to Infinity (or -Infinity) if the input bounds reach the map projection maximum defined latitude + * (in the case of Web/Spherical Mercator, it is 85.0511287798 / see https://en.wikipedia.org/wiki/Web_Mercator#Formulas). + * Otherwise, the removeOutsideVisibleBounds option will remove markers beyond that limit, whereas the same markers without + * this option (or outside MCG) will have their position floored (ceiled) by the projection and rendered at that limit, + * making the user think that MCG "eats" them and never displays them again. + * @param bounds L.LatLngBounds + * @returns {L.LatLngBounds} + * @private + */ + _checkBoundsMaxLat: function (bounds) { + var maxLat = this._maxLat; + + if (maxLat !== undefined) { + if (bounds.getNorth() >= maxLat) { + bounds._northEast.lat = Infinity; + } + if (bounds.getSouth() <= -maxLat) { + bounds._southWest.lat = -Infinity; + } + } + + return bounds; + }, + + //Shared animation code + _animationAddLayerNonAnimated: function (layer, newCluster) { + if (newCluster === layer) { + this._featureGroup.addLayer(layer); + } else if (newCluster._childCount === 2) { + newCluster._addToMap(); + + var markers = newCluster.getAllChildMarkers(); + this._featureGroup.removeLayer(markers[0]); + this._featureGroup.removeLayer(markers[1]); + } else { + newCluster._updateIcon(); + } + }, + + /** + * Extracts individual (i.e. non-group) layers from a Layer Group. + * @param group to extract layers from. + * @param output {Array} in which to store the extracted layers. + * @returns {*|Array} + * @private + */ + _extractNonGroupLayers: function (group, output) { + var layers = group.getLayers(), + i = 0, + layer; + + output = output || []; + + for (; i < layers.length; i++) { + layer = layers[i]; + + if (layer instanceof L.LayerGroup) { + this._extractNonGroupLayers(layer, output); + continue; + } + + output.push(layer); + } + + return output; + }, + + /** + * Implements the singleMarkerMode option. + * @param layer Marker to re-style using the Clusters iconCreateFunction. + * @returns {L.Icon} The newly created icon. + * @private + */ + _overrideMarkerIcon: function (layer) { + var icon = layer.options.icon = this.options.iconCreateFunction({ + getChildCount: function () { + return 1; + }, + getAllChildMarkers: function () { + return [layer]; + } + }); + + return icon; + } +}); + +// Constant bounds used in case option "removeOutsideVisibleBounds" is set to false. +L.MarkerClusterGroup.include({ + _mapBoundsInfinite: new L.LatLngBounds(new L.LatLng(-Infinity, -Infinity), new L.LatLng(Infinity, Infinity)) +}); + +L.MarkerClusterGroup.include({ + _noAnimation: { + //Non Animated versions of everything + _animationStart: function () { + //Do nothing... + }, + _animationZoomIn: function (previousZoomLevel, newZoomLevel) { + this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel); + this._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds()); + + //We didn't actually animate, but we use this event to mean "clustering animations have finished" + this.fire('animationend'); + }, + _animationZoomOut: function (previousZoomLevel, newZoomLevel) { + this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel); + this._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds()); + + //We didn't actually animate, but we use this event to mean "clustering animations have finished" + this.fire('animationend'); + }, + _animationAddLayer: function (layer, newCluster) { + this._animationAddLayerNonAnimated(layer, newCluster); + } + }, + + _withAnimation: { + //Animated versions here + _animationStart: function () { + this._map._mapPane.className += ' leaflet-cluster-anim'; + this._inZoomAnimation++; + }, + + _animationZoomIn: function (previousZoomLevel, newZoomLevel) { + var bounds = this._getExpandedVisibleBounds(), + fg = this._featureGroup, + minZoom = Math.floor(this._map.getMinZoom()), + i; + + this._ignoreMove = true; + + //Add all children of current clusters to map and remove those clusters from map + this._topClusterLevel._recursively(bounds, previousZoomLevel, minZoom, function (c) { + var startPos = c._latlng, + markers = c._markers, + m; + + if (!bounds.contains(startPos)) { + startPos = null; + } + + if (c._isSingleParent() && previousZoomLevel + 1 === newZoomLevel) { //Immediately add the new child and remove us + fg.removeLayer(c); + c._recursivelyAddChildrenToMap(null, newZoomLevel, bounds); + } else { + //Fade out old cluster + c.clusterHide(); + c._recursivelyAddChildrenToMap(startPos, newZoomLevel, bounds); + } + + //Remove all markers that aren't visible any more + //TODO: Do we actually need to do this on the higher levels too? + for (i = markers.length - 1; i >= 0; i--) { + m = markers[i]; + if (!bounds.contains(m._latlng)) { + fg.removeLayer(m); + } + } + + }); + + this._forceLayout(); + + //Update opacities + this._topClusterLevel._recursivelyBecomeVisible(bounds, newZoomLevel); + //TODO Maybe? Update markers in _recursivelyBecomeVisible + fg.eachLayer(function (n) { + if (!(n instanceof L.MarkerCluster) && n._icon) { + n.clusterShow(); + } + }); + + //update the positions of the just added clusters/markers + this._topClusterLevel._recursively(bounds, previousZoomLevel, newZoomLevel, function (c) { + c._recursivelyRestoreChildPositions(newZoomLevel); + }); + + this._ignoreMove = false; + + //Remove the old clusters and close the zoom animation + this._enqueue(function () { + //update the positions of the just added clusters/markers + this._topClusterLevel._recursively(bounds, previousZoomLevel, minZoom, function (c) { + fg.removeLayer(c); + c.clusterShow(); + }); + + this._animationEnd(); + }); + }, + + _animationZoomOut: function (previousZoomLevel, newZoomLevel) { + this._animationZoomOutSingle(this._topClusterLevel, previousZoomLevel - 1, newZoomLevel); + + //Need to add markers for those that weren't on the map before but are now + this._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds()); + //Remove markers that were on the map before but won't be now + this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel, this._getExpandedVisibleBounds()); + }, + + _animationAddLayer: function (layer, newCluster) { + var me = this, + fg = this._featureGroup; + + fg.addLayer(layer); + if (newCluster !== layer) { + if (newCluster._childCount > 2) { //Was already a cluster + + newCluster._updateIcon(); + this._forceLayout(); + this._animationStart(); + + layer._setPos(this._map.latLngToLayerPoint(newCluster.getLatLng())); + layer.clusterHide(); + + this._enqueue(function () { + fg.removeLayer(layer); + layer.clusterShow(); + + me._animationEnd(); + }); + + } else { //Just became a cluster + this._forceLayout(); + + me._animationStart(); + me._animationZoomOutSingle(newCluster, this._map.getMaxZoom(), this._zoom); + } + } + } + }, + + // Private methods for animated versions. + _animationZoomOutSingle: function (cluster, previousZoomLevel, newZoomLevel) { + var bounds = this._getExpandedVisibleBounds(), + minZoom = Math.floor(this._map.getMinZoom()); + + //Animate all of the markers in the clusters to move to their cluster center point + cluster._recursivelyAnimateChildrenInAndAddSelfToMap(bounds, minZoom, previousZoomLevel + 1, newZoomLevel); + + var me = this; + + //Update the opacity (If we immediately set it they won't animate) + this._forceLayout(); + cluster._recursivelyBecomeVisible(bounds, newZoomLevel); + + //TODO: Maybe use the transition timing stuff to make this more reliable + //When the animations are done, tidy up + this._enqueue(function () { + + //This cluster stopped being a cluster before the timeout fired + if (cluster._childCount === 1) { + var m = cluster._markers[0]; + //If we were in a cluster animation at the time then the opacity and position of our child could be wrong now, so fix it + this._ignoreMove = true; + m.setLatLng(m.getLatLng()); + this._ignoreMove = false; + if (m.clusterShow) { + m.clusterShow(); + } + } else { + cluster._recursively(bounds, newZoomLevel, minZoom, function (c) { + c._recursivelyRemoveChildrenFromMap(bounds, minZoom, previousZoomLevel + 1); + }); + } + me._animationEnd(); + }); + }, + + _animationEnd: function () { + if (this._map) { + this._map._mapPane.className = this._map._mapPane.className.replace(' leaflet-cluster-anim', ''); + } + this._inZoomAnimation--; + this.fire('animationend'); + }, + + //Force a browser layout of stuff in the map + // Should apply the current opacity and location to all elements so we can update them again for an animation + _forceLayout: function () { + //In my testing this works, infact offsetWidth of any element seems to work. + //Could loop all this._layers and do this for each _icon if it stops working + + L.Util.falseFn(document.body.offsetWidth); + } +}); + +L.markerClusterGroup = function (options) { + return new L.MarkerClusterGroup(options); +}; + +var MarkerCluster = L.MarkerCluster = L.Marker.extend({ + options: L.Icon.prototype.options, + + initialize: function (group, zoom, a, b) { + + L.Marker.prototype.initialize.call(this, a ? (a._cLatLng || a.getLatLng()) : new L.LatLng(0, 0), + { icon: this, pane: group.options.clusterPane }); + + this._group = group; + this._zoom = zoom; + + this._markers = []; + this._childClusters = []; + this._childCount = 0; + this._iconNeedsUpdate = true; + this._boundsNeedUpdate = true; + + this._bounds = new L.LatLngBounds(); + + if (a) { + this._addChild(a); + } + if (b) { + this._addChild(b); + } + }, + + //Recursively retrieve all child markers of this cluster + getAllChildMarkers: function (storageArray, ignoreDraggedMarker) { + storageArray = storageArray || []; + + for (var i = this._childClusters.length - 1; i >= 0; i--) { + this._childClusters[i].getAllChildMarkers(storageArray); + } + + for (var j = this._markers.length - 1; j >= 0; j--) { + if (ignoreDraggedMarker && this._markers[j].__dragStart) { + continue; + } + storageArray.push(this._markers[j]); + } + + return storageArray; + }, + + //Returns the count of how many child markers we have + getChildCount: function () { + return this._childCount; + }, + + //Zoom to the minimum of showing all of the child markers, or the extents of this cluster + zoomToBounds: function (fitBoundsOptions) { + var childClusters = this._childClusters.slice(), + map = this._group._map, + boundsZoom = map.getBoundsZoom(this._bounds), + zoom = this._zoom + 1, + mapZoom = map.getZoom(), + i; + + //calculate how far we need to zoom down to see all of the markers + while (childClusters.length > 0 && boundsZoom > zoom) { + zoom++; + var newClusters = []; + for (i = 0; i < childClusters.length; i++) { + newClusters = newClusters.concat(childClusters[i]._childClusters); + } + childClusters = newClusters; + } + + if (boundsZoom > zoom) { + this._group._map.setView(this._latlng, zoom); + } else if (boundsZoom <= mapZoom) { //If fitBounds wouldn't zoom us down, zoom us down instead + this._group._map.setView(this._latlng, mapZoom + 1); + } else { + this._group._map.fitBounds(this._bounds, fitBoundsOptions); + } + }, + + getBounds: function () { + var bounds = new L.LatLngBounds(); + bounds.extend(this._bounds); + return bounds; + }, + + _updateIcon: function () { + this._iconNeedsUpdate = true; + if (this._icon) { + this.setIcon(this); + } + }, + + //Cludge for Icon, we pretend to be an icon for performance + createIcon: function () { + if (this._iconNeedsUpdate) { + this._iconObj = this._group.options.iconCreateFunction(this); + this._iconNeedsUpdate = false; + } + return this._iconObj.createIcon(); + }, + createShadow: function () { + return this._iconObj.createShadow(); + }, + + + _addChild: function (new1, isNotificationFromChild) { + + this._iconNeedsUpdate = true; + + this._boundsNeedUpdate = true; + this._setClusterCenter(new1); + + if (new1 instanceof L.MarkerCluster) { + if (!isNotificationFromChild) { + this._childClusters.push(new1); + new1.__parent = this; + } + this._childCount += new1._childCount; + } else { + if (!isNotificationFromChild) { + this._markers.push(new1); + } + this._childCount++; + } + + if (this.__parent) { + this.__parent._addChild(new1, true); + } + }, + + /** + * Makes sure the cluster center is set. If not, uses the child center if it is a cluster, or the marker position. + * @param child L.MarkerCluster|L.Marker that will be used as cluster center if not defined yet. + * @private + */ + _setClusterCenter: function (child) { + if (!this._cLatLng) { + // when clustering, take position of the first point as the cluster center + this._cLatLng = child._cLatLng || child._latlng; + } + }, + + /** + * Assigns impossible bounding values so that the next extend entirely determines the new bounds. + * This method avoids having to trash the previous L.LatLngBounds object and to create a new one, which is much slower for this class. + * As long as the bounds are not extended, most other methods would probably fail, as they would with bounds initialized but not extended. + * @private + */ + _resetBounds: function () { + var bounds = this._bounds; + + if (bounds._southWest) { + bounds._southWest.lat = Infinity; + bounds._southWest.lng = Infinity; + } + if (bounds._northEast) { + bounds._northEast.lat = -Infinity; + bounds._northEast.lng = -Infinity; + } + }, + + _recalculateBounds: function () { + var markers = this._markers, + childClusters = this._childClusters, + latSum = 0, + lngSum = 0, + totalCount = this._childCount, + i, child, childLatLng, childCount; + + // Case where all markers are removed from the map and we are left with just an empty _topClusterLevel. + if (totalCount === 0) { + return; + } + + // Reset rather than creating a new object, for performance. + this._resetBounds(); + + // Child markers. + for (i = 0; i < markers.length; i++) { + childLatLng = markers[i]._latlng; + + this._bounds.extend(childLatLng); + + latSum += childLatLng.lat; + lngSum += childLatLng.lng; + } + + // Child clusters. + for (i = 0; i < childClusters.length; i++) { + child = childClusters[i]; + + // Re-compute child bounds and weighted position first if necessary. + if (child._boundsNeedUpdate) { + child._recalculateBounds(); + } + + this._bounds.extend(child._bounds); + + childLatLng = child._wLatLng; + childCount = child._childCount; + + latSum += childLatLng.lat * childCount; + lngSum += childLatLng.lng * childCount; + } + + this._latlng = this._wLatLng = new L.LatLng(latSum / totalCount, lngSum / totalCount); + + // Reset dirty flag. + this._boundsNeedUpdate = false; + }, + + //Set our markers position as given and add it to the map + _addToMap: function (startPos) { + if (startPos) { + this._backupLatlng = this._latlng; + this.setLatLng(startPos); + } + this._group._featureGroup.addLayer(this); + }, + + _recursivelyAnimateChildrenIn: function (bounds, center, maxZoom) { + this._recursively(bounds, this._group._map.getMinZoom(), maxZoom - 1, + function (c) { + var markers = c._markers, + i, m; + for (i = markers.length - 1; i >= 0; i--) { + m = markers[i]; + + //Only do it if the icon is still on the map + if (m._icon) { + m._setPos(center); + m.clusterHide(); + } + } + }, + function (c) { + var childClusters = c._childClusters, + j, cm; + for (j = childClusters.length - 1; j >= 0; j--) { + cm = childClusters[j]; + if (cm._icon) { + cm._setPos(center); + cm.clusterHide(); + } + } + } + ); + }, + + _recursivelyAnimateChildrenInAndAddSelfToMap: function (bounds, mapMinZoom, previousZoomLevel, newZoomLevel) { + this._recursively(bounds, newZoomLevel, mapMinZoom, + function (c) { + c._recursivelyAnimateChildrenIn(bounds, c._group._map.latLngToLayerPoint(c.getLatLng()).round(), previousZoomLevel); + + //TODO: depthToAnimateIn affects _isSingleParent, if there is a multizoom we may/may not be. + //As a hack we only do a animation free zoom on a single level zoom, if someone does multiple levels then we always animate + if (c._isSingleParent() && previousZoomLevel - 1 === newZoomLevel) { + c.clusterShow(); + c._recursivelyRemoveChildrenFromMap(bounds, mapMinZoom, previousZoomLevel); //Immediately remove our children as we are replacing them. TODO previousBounds not bounds + } else { + c.clusterHide(); + } + + c._addToMap(); + } + ); + }, + + _recursivelyBecomeVisible: function (bounds, zoomLevel) { + this._recursively(bounds, this._group._map.getMinZoom(), zoomLevel, null, function (c) { + c.clusterShow(); + }); + }, + + _recursivelyAddChildrenToMap: function (startPos, zoomLevel, bounds) { + this._recursively(bounds, this._group._map.getMinZoom() - 1, zoomLevel, + function (c) { + if (zoomLevel === c._zoom) { + return; + } + + //Add our child markers at startPos (so they can be animated out) + for (var i = c._markers.length - 1; i >= 0; i--) { + var nm = c._markers[i]; + + if (!bounds.contains(nm._latlng)) { + continue; + } + + if (startPos) { + nm._backupLatlng = nm.getLatLng(); + + nm.setLatLng(startPos); + if (nm.clusterHide) { + nm.clusterHide(); + } + } + + c._group._featureGroup.addLayer(nm); + } + }, + function (c) { + c._addToMap(startPos); + } + ); + }, + + _recursivelyRestoreChildPositions: function (zoomLevel) { + //Fix positions of child markers + for (var i = this._markers.length - 1; i >= 0; i--) { + var nm = this._markers[i]; + if (nm._backupLatlng) { + nm.setLatLng(nm._backupLatlng); + delete nm._backupLatlng; + } + } + + if (zoomLevel - 1 === this._zoom) { + //Reposition child clusters + for (var j = this._childClusters.length - 1; j >= 0; j--) { + this._childClusters[j]._restorePosition(); + } + } else { + for (var k = this._childClusters.length - 1; k >= 0; k--) { + this._childClusters[k]._recursivelyRestoreChildPositions(zoomLevel); + } + } + }, + + _restorePosition: function () { + if (this._backupLatlng) { + this.setLatLng(this._backupLatlng); + delete this._backupLatlng; + } + }, + + //exceptBounds: If set, don't remove any markers/clusters in it + _recursivelyRemoveChildrenFromMap: function (previousBounds, mapMinZoom, zoomLevel, exceptBounds) { + var m, i; + this._recursively(previousBounds, mapMinZoom - 1, zoomLevel - 1, + function (c) { + //Remove markers at every level + for (i = c._markers.length - 1; i >= 0; i--) { + m = c._markers[i]; + if (!exceptBounds || !exceptBounds.contains(m._latlng)) { + c._group._featureGroup.removeLayer(m); + if (m.clusterShow) { + m.clusterShow(); + } + } + } + }, + function (c) { + //Remove child clusters at just the bottom level + for (i = c._childClusters.length - 1; i >= 0; i--) { + m = c._childClusters[i]; + if (!exceptBounds || !exceptBounds.contains(m._latlng)) { + c._group._featureGroup.removeLayer(m); + if (m.clusterShow) { + m.clusterShow(); + } + } + } + } + ); + }, + + //Run the given functions recursively to this and child clusters + // boundsToApplyTo: a L.LatLngBounds representing the bounds of what clusters to recurse in to + // zoomLevelToStart: zoom level to start running functions (inclusive) + // zoomLevelToStop: zoom level to stop running functions (inclusive) + // runAtEveryLevel: function that takes an L.MarkerCluster as an argument that should be applied on every level + // runAtBottomLevel: function that takes an L.MarkerCluster as an argument that should be applied at only the bottom level + _recursively: function (boundsToApplyTo, zoomLevelToStart, zoomLevelToStop, runAtEveryLevel, runAtBottomLevel) { + var childClusters = this._childClusters, + zoom = this._zoom, + i, c; + + if (zoomLevelToStart <= zoom) { + if (runAtEveryLevel) { + runAtEveryLevel(this); + } + if (runAtBottomLevel && zoom === zoomLevelToStop) { + runAtBottomLevel(this); + } + } + + if (zoom < zoomLevelToStart || zoom < zoomLevelToStop) { + for (i = childClusters.length - 1; i >= 0; i--) { + c = childClusters[i]; + if (c._boundsNeedUpdate) { + c._recalculateBounds(); + } + if (boundsToApplyTo.intersects(c._bounds)) { + c._recursively(boundsToApplyTo, zoomLevelToStart, zoomLevelToStop, runAtEveryLevel, runAtBottomLevel); + } + } + } + }, + + //Returns true if we are the parent of only one cluster and that cluster is the same as us + _isSingleParent: function () { + //Don't need to check this._markers as the rest won't work if there are any + return this._childClusters.length > 0 && this._childClusters[0]._childCount === this._childCount; + } +}); + +/* +* Extends L.Marker to include two extra methods: clusterHide and clusterShow. +* +* They work as setOpacity(0) and setOpacity(1) respectively, but +* don't overwrite the options.opacity +* +*/ + +L.Marker.include({ + clusterHide: function () { + var backup = this.options.opacity; + this.setOpacity(0); + this.options.opacity = backup; + return this; + }, + + clusterShow: function () { + return this.setOpacity(this.options.opacity); + } +}); + +L.DistanceGrid = function (cellSize) { + this._cellSize = cellSize; + this._sqCellSize = cellSize * cellSize; + this._grid = {}; + this._objectPoint = { }; +}; + +L.DistanceGrid.prototype = { + + addObject: function (obj, point) { + var x = this._getCoord(point.x), + y = this._getCoord(point.y), + grid = this._grid, + row = grid[y] = grid[y] || {}, + cell = row[x] = row[x] || [], + stamp = L.Util.stamp(obj); + + this._objectPoint[stamp] = point; + + cell.push(obj); + }, + + updateObject: function (obj, point) { + this.removeObject(obj); + this.addObject(obj, point); + }, + + //Returns true if the object was found + removeObject: function (obj, point) { + var x = this._getCoord(point.x), + y = this._getCoord(point.y), + grid = this._grid, + row = grid[y] = grid[y] || {}, + cell = row[x] = row[x] || [], + i, len; + + delete this._objectPoint[L.Util.stamp(obj)]; + + for (i = 0, len = cell.length; i < len; i++) { + if (cell[i] === obj) { + + cell.splice(i, 1); + + if (len === 1) { + delete row[x]; + } + + return true; + } + } + + }, + + eachObject: function (fn, context) { + var i, j, k, len, row, cell, removed, + grid = this._grid; + + for (i in grid) { + row = grid[i]; + + for (j in row) { + cell = row[j]; + + for (k = 0, len = cell.length; k < len; k++) { + removed = fn.call(context, cell[k]); + if (removed) { + k--; + len--; + } + } + } + } + }, + + getNearObject: function (point) { + var x = this._getCoord(point.x), + y = this._getCoord(point.y), + i, j, k, row, cell, len, obj, dist, + objectPoint = this._objectPoint, + closestDistSq = this._sqCellSize, + closest = null; + + for (i = y - 1; i <= y + 1; i++) { + row = this._grid[i]; + if (row) { + + for (j = x - 1; j <= x + 1; j++) { + cell = row[j]; + if (cell) { + + for (k = 0, len = cell.length; k < len; k++) { + obj = cell[k]; + dist = this._sqDist(objectPoint[L.Util.stamp(obj)], point); + if (dist < closestDistSq || + dist <= closestDistSq && closest === null) { + closestDistSq = dist; + closest = obj; + } + } + } + } + } + } + return closest; + }, + + _getCoord: function (x) { + var coord = Math.floor(x / this._cellSize); + return isFinite(coord) ? coord : x; + }, + + _sqDist: function (p, p2) { + var dx = p2.x - p.x, + dy = p2.y - p.y; + return dx * dx + dy * dy; + } +}; + +/* Copyright (c) 2012 the authors listed at the following URL, and/or +the authors of referenced articles or incorporated external code: +http://en.literateprograms.org/Quickhull_(Javascript)?action=history&offset=20120410175256 + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Retrieved from: http://en.literateprograms.org/Quickhull_(Javascript)?oldid=18434 +*/ + +(function () { + L.QuickHull = { + + /* + * @param {Object} cpt a point to be measured from the baseline + * @param {Array} bl the baseline, as represented by a two-element + * array of latlng objects. + * @returns {Number} an approximate distance measure + */ + getDistant: function (cpt, bl) { + var vY = bl[1].lat - bl[0].lat, + vX = bl[0].lng - bl[1].lng; + return (vX * (cpt.lat - bl[0].lat) + vY * (cpt.lng - bl[0].lng)); + }, + + /* + * @param {Array} baseLine a two-element array of latlng objects + * representing the baseline to project from + * @param {Array} latLngs an array of latlng objects + * @returns {Object} the maximum point and all new points to stay + * in consideration for the hull. + */ + findMostDistantPointFromBaseLine: function (baseLine, latLngs) { + var maxD = 0, + maxPt = null, + newPoints = [], + i, pt, d; + + for (i = latLngs.length - 1; i >= 0; i--) { + pt = latLngs[i]; + d = this.getDistant(pt, baseLine); + + if (d > 0) { + newPoints.push(pt); + } else { + continue; + } + + if (d > maxD) { + maxD = d; + maxPt = pt; + } + } + + return { maxPoint: maxPt, newPoints: newPoints }; + }, + + + /* + * Given a baseline, compute the convex hull of latLngs as an array + * of latLngs. + * + * @param {Array} latLngs + * @returns {Array} + */ + buildConvexHull: function (baseLine, latLngs) { + var convexHullBaseLines = [], + t = this.findMostDistantPointFromBaseLine(baseLine, latLngs); + + if (t.maxPoint) { // if there is still a point "outside" the base line + convexHullBaseLines = + convexHullBaseLines.concat( + this.buildConvexHull([baseLine[0], t.maxPoint], t.newPoints) + ); + convexHullBaseLines = + convexHullBaseLines.concat( + this.buildConvexHull([t.maxPoint, baseLine[1]], t.newPoints) + ); + return convexHullBaseLines; + } else { // if there is no more point "outside" the base line, the current base line is part of the convex hull + return [baseLine[0]]; + } + }, + + /* + * Given an array of latlngs, compute a convex hull as an array + * of latlngs + * + * @param {Array} latLngs + * @returns {Array} + */ + getConvexHull: function (latLngs) { + // find first baseline + var maxLat = false, minLat = false, + maxLng = false, minLng = false, + maxLatPt = null, minLatPt = null, + maxLngPt = null, minLngPt = null, + maxPt = null, minPt = null, + i; + + for (i = latLngs.length - 1; i >= 0; i--) { + var pt = latLngs[i]; + if (maxLat === false || pt.lat > maxLat) { + maxLatPt = pt; + maxLat = pt.lat; + } + if (minLat === false || pt.lat < minLat) { + minLatPt = pt; + minLat = pt.lat; + } + if (maxLng === false || pt.lng > maxLng) { + maxLngPt = pt; + maxLng = pt.lng; + } + if (minLng === false || pt.lng < minLng) { + minLngPt = pt; + minLng = pt.lng; + } + } + + if (minLat !== maxLat) { + minPt = minLatPt; + maxPt = maxLatPt; + } else { + minPt = minLngPt; + maxPt = maxLngPt; + } + + var ch = [].concat(this.buildConvexHull([minPt, maxPt], latLngs), + this.buildConvexHull([maxPt, minPt], latLngs)); + return ch; + } + }; +}()); + +L.MarkerCluster.include({ + getConvexHull: function () { + var childMarkers = this.getAllChildMarkers(), + points = [], + p, i; + + for (i = childMarkers.length - 1; i >= 0; i--) { + p = childMarkers[i].getLatLng(); + points.push(p); + } + + return L.QuickHull.getConvexHull(points); + } +}); + +//This code is 100% based on https://github.com/jawj/OverlappingMarkerSpiderfier-Leaflet +//Huge thanks to jawj for implementing it first to make my job easy :-) + +L.MarkerCluster.include({ + + _2PI: Math.PI * 2, + _circleFootSeparation: 25, //related to circumference of circle + _circleStartAngle: 0, + + _spiralFootSeparation: 28, //related to size of spiral (experiment!) + _spiralLengthStart: 11, + _spiralLengthFactor: 5, + + _circleSpiralSwitchover: 9, //show spiral instead of circle from this marker count upwards. + // 0 -> always spiral; Infinity -> always circle + + spiderfy: function () { + if (this._group._spiderfied === this || this._group._inZoomAnimation) { + return; + } + + var childMarkers = this.getAllChildMarkers(null, true), + group = this._group, + map = group._map, + center = map.latLngToLayerPoint(this._latlng), + positions; + + this._group._unspiderfy(); + this._group._spiderfied = this; + + //TODO Maybe: childMarkers order by distance to center + + if (childMarkers.length >= this._circleSpiralSwitchover) { + positions = this._generatePointsSpiral(childMarkers.length, center); + } else { + center.y += 10; // Otherwise circles look wrong => hack for standard blue icon, renders differently for other icons. + positions = this._generatePointsCircle(childMarkers.length, center); + } + + this._animationSpiderfy(childMarkers, positions); + }, + + unspiderfy: function (zoomDetails) { + /// Argument from zoomanim if being called in a zoom animation or null otherwise + if (this._group._inZoomAnimation) { + return; + } + this._animationUnspiderfy(zoomDetails); + + this._group._spiderfied = null; + }, + + _generatePointsCircle: function (count, centerPt) { + var circumference = this._group.options.spiderfyDistanceMultiplier * this._circleFootSeparation * (2 + count), + legLength = circumference / this._2PI, //radius from circumference + angleStep = this._2PI / count, + res = [], + i, angle; + + legLength = Math.max(legLength, 35); // Minimum distance to get outside the cluster icon. + + res.length = count; + + for (i = 0; i < count; i++) { // Clockwise, like spiral. + angle = this._circleStartAngle + i * angleStep; + res[i] = new L.Point(centerPt.x + legLength * Math.cos(angle), centerPt.y + legLength * Math.sin(angle))._round(); + } + + return res; + }, + + _generatePointsSpiral: function (count, centerPt) { + var spiderfyDistanceMultiplier = this._group.options.spiderfyDistanceMultiplier, + legLength = spiderfyDistanceMultiplier * this._spiralLengthStart, + separation = spiderfyDistanceMultiplier * this._spiralFootSeparation, + lengthFactor = spiderfyDistanceMultiplier * this._spiralLengthFactor * this._2PI, + angle = 0, + res = [], + i; + + res.length = count; + + // Higher index, closer position to cluster center. + for (i = count; i >= 0; i--) { + // Skip the first position, so that we are already farther from center and we avoid + // being under the default cluster icon (especially important for Circle Markers). + if (i < count) { + res[i] = new L.Point(centerPt.x + legLength * Math.cos(angle), centerPt.y + legLength * Math.sin(angle))._round(); + } + angle += separation / legLength + i * 0.0005; + legLength += lengthFactor / angle; + } + return res; + }, + + _noanimationUnspiderfy: function () { + var group = this._group, + map = group._map, + fg = group._featureGroup, + childMarkers = this.getAllChildMarkers(null, true), + m, i; + + group._ignoreMove = true; + + this.setOpacity(1); + for (i = childMarkers.length - 1; i >= 0; i--) { + m = childMarkers[i]; + + fg.removeLayer(m); + + if (m._preSpiderfyLatlng) { + m.setLatLng(m._preSpiderfyLatlng); + delete m._preSpiderfyLatlng; + } + if (m.setZIndexOffset) { + m.setZIndexOffset(0); + } + + if (m._spiderLeg) { + map.removeLayer(m._spiderLeg); + delete m._spiderLeg; + } + } + + group.fire('unspiderfied', { + cluster: this, + markers: childMarkers + }); + group._ignoreMove = false; + group._spiderfied = null; + } +}); + +//Non Animated versions of everything +L.MarkerClusterNonAnimated = L.MarkerCluster.extend({ + _animationSpiderfy: function (childMarkers, positions) { + var group = this._group, + map = group._map, + fg = group._featureGroup, + legOptions = this._group.options.spiderLegPolylineOptions, + i, m, leg, newPos; + + group._ignoreMove = true; + + // Traverse in ascending order to make sure that inner circleMarkers are on top of further legs. Normal markers are re-ordered by newPosition. + // The reverse order trick no longer improves performance on modern browsers. + for (i = 0; i < childMarkers.length; i++) { + newPos = map.layerPointToLatLng(positions[i]); + m = childMarkers[i]; + + // Add the leg before the marker, so that in case the latter is a circleMarker, the leg is behind it. + leg = new L.Polyline([this._latlng, newPos], legOptions); + map.addLayer(leg); + m._spiderLeg = leg; + + // Now add the marker. + m._preSpiderfyLatlng = m._latlng; + m.setLatLng(newPos); + if (m.setZIndexOffset) { + m.setZIndexOffset(1000000); //Make these appear on top of EVERYTHING + } + + fg.addLayer(m); + } + this.setOpacity(0.3); + + group._ignoreMove = false; + group.fire('spiderfied', { + cluster: this, + markers: childMarkers + }); + }, + + _animationUnspiderfy: function () { + this._noanimationUnspiderfy(); + } +}); + +//Animated versions here +L.MarkerCluster.include({ + + _animationSpiderfy: function (childMarkers, positions) { + var me = this, + group = this._group, + map = group._map, + fg = group._featureGroup, + thisLayerLatLng = this._latlng, + thisLayerPos = map.latLngToLayerPoint(thisLayerLatLng), + svg = L.Path.SVG, + legOptions = L.extend({}, this._group.options.spiderLegPolylineOptions), // Copy the options so that we can modify them for animation. + finalLegOpacity = legOptions.opacity, + i, m, leg, legPath, legLength, newPos; + + if (finalLegOpacity === undefined) { + finalLegOpacity = L.MarkerClusterGroup.prototype.options.spiderLegPolylineOptions.opacity; + } + + if (svg) { + // If the initial opacity of the spider leg is not 0 then it appears before the animation starts. + legOptions.opacity = 0; + + // Add the class for CSS transitions. + legOptions.className = (legOptions.className || '') + ' leaflet-cluster-spider-leg'; + } else { + // Make sure we have a defined opacity. + legOptions.opacity = finalLegOpacity; + } + + group._ignoreMove = true; + + // Add markers and spider legs to map, hidden at our center point. + // Traverse in ascending order to make sure that inner circleMarkers are on top of further legs. Normal markers are re-ordered by newPosition. + // The reverse order trick no longer improves performance on modern browsers. + for (i = 0; i < childMarkers.length; i++) { + m = childMarkers[i]; + + newPos = map.layerPointToLatLng(positions[i]); + + // Add the leg before the marker, so that in case the latter is a circleMarker, the leg is behind it. + leg = new L.Polyline([thisLayerLatLng, newPos], legOptions); + map.addLayer(leg); + m._spiderLeg = leg; + + // Explanations: https://jakearchibald.com/2013/animated-line-drawing-svg/ + // In our case the transition property is declared in the CSS file. + if (svg) { + legPath = leg._path; + legLength = legPath.getTotalLength() + 0.1; // Need a small extra length to avoid remaining dot in Firefox. + legPath.style.strokeDasharray = legLength; // Just 1 length is enough, it will be duplicated. + legPath.style.strokeDashoffset = legLength; + } + + // If it is a marker, add it now and we'll animate it out + if (m.setZIndexOffset) { + m.setZIndexOffset(1000000); // Make normal markers appear on top of EVERYTHING + } + if (m.clusterHide) { + m.clusterHide(); + } + + // Vectors just get immediately added + fg.addLayer(m); + + if (m._setPos) { + m._setPos(thisLayerPos); + } + } + + group._forceLayout(); + group._animationStart(); + + // Reveal markers and spider legs. + for (i = childMarkers.length - 1; i >= 0; i--) { + newPos = map.layerPointToLatLng(positions[i]); + m = childMarkers[i]; + + //Move marker to new position + m._preSpiderfyLatlng = m._latlng; + m.setLatLng(newPos); + + if (m.clusterShow) { + m.clusterShow(); + } + + // Animate leg (animation is actually delegated to CSS transition). + if (svg) { + leg = m._spiderLeg; + legPath = leg._path; + legPath.style.strokeDashoffset = 0; + //legPath.style.strokeOpacity = finalLegOpacity; + leg.setStyle({opacity: finalLegOpacity}); + } + } + this.setOpacity(0.3); + + group._ignoreMove = false; + + setTimeout(function () { + group._animationEnd(); + group.fire('spiderfied', { + cluster: me, + markers: childMarkers + }); + }, 200); + }, + + _animationUnspiderfy: function (zoomDetails) { + var me = this, + group = this._group, + map = group._map, + fg = group._featureGroup, + thisLayerPos = zoomDetails ? map._latLngToNewLayerPoint(this._latlng, zoomDetails.zoom, zoomDetails.center) : map.latLngToLayerPoint(this._latlng), + childMarkers = this.getAllChildMarkers(null, true), + svg = L.Path.SVG, + m, i, leg, legPath, legLength, nonAnimatable; + + group._ignoreMove = true; + group._animationStart(); + + //Make us visible and bring the child markers back in + this.setOpacity(1); + for (i = childMarkers.length - 1; i >= 0; i--) { + m = childMarkers[i]; + + //Marker was added to us after we were spiderfied + if (!m._preSpiderfyLatlng) { + continue; + } + + //Close any popup on the marker first, otherwise setting the location of the marker will make the map scroll + m.closePopup(); + + //Fix up the location to the real one + m.setLatLng(m._preSpiderfyLatlng); + delete m._preSpiderfyLatlng; + + //Hack override the location to be our center + nonAnimatable = true; + if (m._setPos) { + m._setPos(thisLayerPos); + nonAnimatable = false; + } + if (m.clusterHide) { + m.clusterHide(); + nonAnimatable = false; + } + if (nonAnimatable) { + fg.removeLayer(m); + } + + // Animate the spider leg back in (animation is actually delegated to CSS transition). + if (svg) { + leg = m._spiderLeg; + legPath = leg._path; + legLength = legPath.getTotalLength() + 0.1; + legPath.style.strokeDashoffset = legLength; + leg.setStyle({opacity: 0}); + } + } + + group._ignoreMove = false; + + setTimeout(function () { + //If we have only <= one child left then that marker will be shown on the map so don't remove it! + var stillThereChildCount = 0; + for (i = childMarkers.length - 1; i >= 0; i--) { + m = childMarkers[i]; + if (m._spiderLeg) { + stillThereChildCount++; + } + } + + + for (i = childMarkers.length - 1; i >= 0; i--) { + m = childMarkers[i]; + + if (!m._spiderLeg) { //Has already been unspiderfied + continue; + } + + if (m.clusterShow) { + m.clusterShow(); + } + if (m.setZIndexOffset) { + m.setZIndexOffset(0); + } + + if (stillThereChildCount > 1) { + fg.removeLayer(m); + } + + map.removeLayer(m._spiderLeg); + delete m._spiderLeg; + } + group._animationEnd(); + group.fire('unspiderfied', { + cluster: me, + markers: childMarkers + }); + }, 200); + } +}); + + +L.MarkerClusterGroup.include({ + //The MarkerCluster currently spiderfied (if any) + _spiderfied: null, + + unspiderfy: function () { + this._unspiderfy.apply(this, arguments); + }, + + _spiderfierOnAdd: function () { + this._map.on('click', this._unspiderfyWrapper, this); + + if (this._map.options.zoomAnimation) { + this._map.on('zoomstart', this._unspiderfyZoomStart, this); + } + //Browsers without zoomAnimation or a big zoom don't fire zoomstart + this._map.on('zoomend', this._noanimationUnspiderfy, this); + + if (!L.Browser.touch) { + this._map.getRenderer(this); + //Needs to happen in the pageload, not after, or animations don't work in webkit + // http://stackoverflow.com/questions/8455200/svg-animate-with-dynamically-added-elements + //Disable on touch browsers as the animation messes up on a touch zoom and isn't very noticable + } + }, + + _spiderfierOnRemove: function () { + this._map.off('click', this._unspiderfyWrapper, this); + this._map.off('zoomstart', this._unspiderfyZoomStart, this); + this._map.off('zoomanim', this._unspiderfyZoomAnim, this); + this._map.off('zoomend', this._noanimationUnspiderfy, this); + + //Ensure that markers are back where they should be + // Use no animation to avoid a sticky leaflet-cluster-anim class on mapPane + this._noanimationUnspiderfy(); + }, + + //On zoom start we add a zoomanim handler so that we are guaranteed to be last (after markers are animated) + //This means we can define the animation they do rather than Markers doing an animation to their actual location + _unspiderfyZoomStart: function () { + if (!this._map) { //May have been removed from the map by a zoomEnd handler + return; + } + + this._map.on('zoomanim', this._unspiderfyZoomAnim, this); + }, + + _unspiderfyZoomAnim: function (zoomDetails) { + //Wait until the first zoomanim after the user has finished touch-zooming before running the animation + if (L.DomUtil.hasClass(this._map._mapPane, 'leaflet-touching')) { + return; + } + + this._map.off('zoomanim', this._unspiderfyZoomAnim, this); + this._unspiderfy(zoomDetails); + }, + + _unspiderfyWrapper: function () { + /// _unspiderfy but passes no arguments + this._unspiderfy(); + }, + + _unspiderfy: function (zoomDetails) { + if (this._spiderfied) { + this._spiderfied.unspiderfy(zoomDetails); + } + }, + + _noanimationUnspiderfy: function () { + if (this._spiderfied) { + this._spiderfied._noanimationUnspiderfy(); + } + }, + + //If the given layer is currently being spiderfied then we unspiderfy it so it isn't on the map anymore etc + _unspiderfyLayer: function (layer) { + if (layer._spiderLeg) { + this._featureGroup.removeLayer(layer); + + if (layer.clusterShow) { + layer.clusterShow(); + } + //Position will be fixed up immediately in _animationUnspiderfy + if (layer.setZIndexOffset) { + layer.setZIndexOffset(0); + } + + this._map.removeLayer(layer._spiderLeg); + delete layer._spiderLeg; + } + } +}); + +/** + * Adds 1 public method to MCG and 1 to L.Marker to facilitate changing + * markers' icon options and refreshing their icon and their parent clusters + * accordingly (case where their iconCreateFunction uses data of childMarkers + * to make up the cluster icon). + */ + + +L.MarkerClusterGroup.include({ + /** + * Updates the icon of all clusters which are parents of the given marker(s). + * In singleMarkerMode, also updates the given marker(s) icon. + * @param layers L.MarkerClusterGroup|L.LayerGroup|Array(L.Marker)|Map(L.Marker)| + * L.MarkerCluster|L.Marker (optional) list of markers (or single marker) whose parent + * clusters need to be updated. If not provided, retrieves all child markers of this. + * @returns {L.MarkerClusterGroup} + */ + refreshClusters: function (layers) { + if (!layers) { + layers = this._topClusterLevel.getAllChildMarkers(); + } else if (layers instanceof L.MarkerClusterGroup) { + layers = layers._topClusterLevel.getAllChildMarkers(); + } else if (layers instanceof L.LayerGroup) { + layers = layers._layers; + } else if (layers instanceof L.MarkerCluster) { + layers = layers.getAllChildMarkers(); + } else if (layers instanceof L.Marker) { + layers = [layers]; + } // else: must be an Array(L.Marker)|Map(L.Marker) + this._flagParentsIconsNeedUpdate(layers); + this._refreshClustersIcons(); + + // In case of singleMarkerMode, also re-draw the markers. + if (this.options.singleMarkerMode) { + this._refreshSingleMarkerModeMarkers(layers); + } + + return this; + }, + + /** + * Simply flags all parent clusters of the given markers as having a "dirty" icon. + * @param layers Array(L.Marker)|Map(L.Marker) list of markers. + * @private + */ + _flagParentsIconsNeedUpdate: function (layers) { + var id, parent; + + // Assumes layers is an Array or an Object whose prototype is non-enumerable. + for (id in layers) { + // Flag parent clusters' icon as "dirty", all the way up. + // Dumb process that flags multiple times upper parents, but still + // much more efficient than trying to be smart and make short lists, + // at least in the case of a hierarchy following a power law: + // http://jsperf.com/flag-nodes-in-power-hierarchy/2 + parent = layers[id].__parent; + while (parent) { + parent._iconNeedsUpdate = true; + parent = parent.__parent; + } + } + }, + + /** + * Re-draws the icon of the supplied markers. + * To be used in singleMarkerMode only. + * @param layers Array(L.Marker)|Map(L.Marker) list of markers. + * @private + */ + _refreshSingleMarkerModeMarkers: function (layers) { + var id, layer; + + for (id in layers) { + layer = layers[id]; + + // Make sure we do not override markers that do not belong to THIS group. + if (this.hasLayer(layer)) { + // Need to re-create the icon first, then re-draw the marker. + layer.setIcon(this._overrideMarkerIcon(layer)); + } + } + } +}); + +L.Marker.include({ + /** + * Updates the given options in the marker's icon and refreshes the marker. + * @param options map object of icon options. + * @param directlyRefreshClusters boolean (optional) true to trigger + * MCG.refreshClustersOf() right away with this single marker. + * @returns {L.Marker} + */ + refreshIconOptions: function (options, directlyRefreshClusters) { + var icon = this.options.icon; + + L.setOptions(icon, options); + + this.setIcon(icon); + + // Shortcut to refresh the associated MCG clusters right away. + // To be used when refreshing a single marker. + // Otherwise, better use MCG.refreshClusters() once at the end with + // the list of modified markers. + if (directlyRefreshClusters && this.__parent) { + this.__parent._group.refreshClusters(this); + } + + return this; + } +}); + +exports.MarkerClusterGroup = MarkerClusterGroup; +exports.MarkerCluster = MarkerCluster; + +}))); +//# sourceMappingURL=leaflet.markercluster-src.js.map diff --git a/deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/leaflet.markercluster-src.js.map b/deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/leaflet.markercluster-src.js.map new file mode 100755 index 0000000..30220ae --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/leaflet.markercluster-src.js.map @@ -0,0 +1 @@ +{"version":3,"file":"leaflet.markercluster-src.js","sources":["../src/MarkerClusterGroup.js","../src/MarkerCluster.js","../src/MarkerOpacity.js","../src/DistanceGrid.js","../src/MarkerCluster.QuickHull.js","../src/MarkerCluster.Spiderfier.js","../src/MarkerClusterGroup.Refresh.js"],"sourcesContent":["/*\r\n * L.MarkerClusterGroup extends L.FeatureGroup by clustering the markers contained within\r\n */\r\n\r\nexport var MarkerClusterGroup = L.MarkerClusterGroup = L.FeatureGroup.extend({\r\n\r\n\toptions: {\r\n\t\tmaxClusterRadius: 80, //A cluster will cover at most this many pixels from its center\r\n\t\ticonCreateFunction: null,\r\n\t\tclusterPane: L.Marker.prototype.options.pane,\r\n\r\n\t\tspiderfyOnMaxZoom: true,\r\n\t\tshowCoverageOnHover: true,\r\n\t\tzoomToBoundsOnClick: true,\r\n\t\tsingleMarkerMode: false,\r\n\r\n\t\tdisableClusteringAtZoom: null,\r\n\r\n\t\t// Setting this to false prevents the removal of any clusters outside of the viewpoint, which\r\n\t\t// is the default behaviour for performance reasons.\r\n\t\tremoveOutsideVisibleBounds: true,\r\n\r\n\t\t// Set to false to disable all animations (zoom and spiderfy).\r\n\t\t// If false, option animateAddingMarkers below has no effect.\r\n\t\t// If L.DomUtil.TRANSITION is falsy, this option has no effect.\r\n\t\tanimate: true,\r\n\r\n\t\t//Whether to animate adding markers after adding the MarkerClusterGroup to the map\r\n\t\t// If you are adding individual markers set to true, if adding bulk markers leave false for massive performance gains.\r\n\t\tanimateAddingMarkers: false,\r\n\r\n\t\t//Increase to increase the distance away that spiderfied markers appear from the center\r\n\t\tspiderfyDistanceMultiplier: 1,\r\n\r\n\t\t// Make it possible to specify a polyline options on a spider leg\r\n\t\tspiderLegPolylineOptions: { weight: 1.5, color: '#222', opacity: 0.5 },\r\n\r\n\t\t// When bulk adding layers, adds markers in chunks. Means addLayers may not add all the layers in the call, others will be loaded during setTimeouts\r\n\t\tchunkedLoading: false,\r\n\t\tchunkInterval: 200, // process markers for a maximum of ~ n milliseconds (then trigger the chunkProgress callback)\r\n\t\tchunkDelay: 50, // at the end of each interval, give n milliseconds back to system/browser\r\n\t\tchunkProgress: null, // progress callback: function(processed, total, elapsed) (e.g. for a progress indicator)\r\n\r\n\t\t//Options to pass to the L.Polygon constructor\r\n\t\tpolygonOptions: {}\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tL.Util.setOptions(this, options);\r\n\t\tif (!this.options.iconCreateFunction) {\r\n\t\t\tthis.options.iconCreateFunction = this._defaultIconCreateFunction;\r\n\t\t}\r\n\r\n\t\tthis._featureGroup = L.featureGroup();\r\n\t\tthis._featureGroup.addEventParent(this);\r\n\r\n\t\tthis._nonPointGroup = L.featureGroup();\r\n\t\tthis._nonPointGroup.addEventParent(this);\r\n\r\n\t\tthis._inZoomAnimation = 0;\r\n\t\tthis._needsClustering = [];\r\n\t\tthis._needsRemoving = []; //Markers removed while we aren't on the map need to be kept track of\r\n\t\t//The bounds of the currently shown area (from _getExpandedVisibleBounds) Updated on zoom/move\r\n\t\tthis._currentShownBounds = null;\r\n\r\n\t\tthis._queue = [];\r\n\r\n\t\tthis._childMarkerEventHandlers = {\r\n\t\t\t'dragstart': this._childMarkerDragStart,\r\n\t\t\t'move': this._childMarkerMoved,\r\n\t\t\t'dragend': this._childMarkerDragEnd,\r\n\t\t};\r\n\r\n\t\t// Hook the appropriate animation methods.\r\n\t\tvar animate = L.DomUtil.TRANSITION && this.options.animate;\r\n\t\tL.extend(this, animate ? this._withAnimation : this._noAnimation);\r\n\t\t// Remember which MarkerCluster class to instantiate (animated or not).\r\n\t\tthis._markerCluster = animate ? L.MarkerCluster : L.MarkerClusterNonAnimated;\r\n\t},\r\n\r\n\taddLayer: function (layer) {\r\n\r\n\t\tif (layer instanceof L.LayerGroup) {\r\n\t\t\treturn this.addLayers([layer]);\r\n\t\t}\r\n\r\n\t\t//Don't cluster non point data\r\n\t\tif (!layer.getLatLng) {\r\n\t\t\tthis._nonPointGroup.addLayer(layer);\r\n\t\t\tthis.fire('layeradd', { layer: layer });\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif (!this._map) {\r\n\t\t\tthis._needsClustering.push(layer);\r\n\t\t\tthis.fire('layeradd', { layer: layer });\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif (this.hasLayer(layer)) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\r\n\t\t//If we have already clustered we'll need to add this one to a cluster\r\n\r\n\t\tif (this._unspiderfy) {\r\n\t\t\tthis._unspiderfy();\r\n\t\t}\r\n\r\n\t\tthis._addLayer(layer, this._maxZoom);\r\n\t\tthis.fire('layeradd', { layer: layer });\r\n\r\n\t\t// Refresh bounds and weighted positions.\r\n\t\tthis._topClusterLevel._recalculateBounds();\r\n\r\n\t\tthis._refreshClustersIcons();\r\n\r\n\t\t//Work out what is visible\r\n\t\tvar visibleLayer = layer,\r\n\t\t currentZoom = this._zoom;\r\n\t\tif (layer.__parent) {\r\n\t\t\twhile (visibleLayer.__parent._zoom >= currentZoom) {\r\n\t\t\t\tvisibleLayer = visibleLayer.__parent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this._currentShownBounds.contains(visibleLayer.getLatLng())) {\r\n\t\t\tif (this.options.animateAddingMarkers) {\r\n\t\t\t\tthis._animationAddLayer(layer, visibleLayer);\r\n\t\t\t} else {\r\n\t\t\t\tthis._animationAddLayerNonAnimated(layer, visibleLayer);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\tremoveLayer: function (layer) {\r\n\r\n\t\tif (layer instanceof L.LayerGroup) {\r\n\t\t\treturn this.removeLayers([layer]);\r\n\t\t}\r\n\r\n\t\t//Non point layers\r\n\t\tif (!layer.getLatLng) {\r\n\t\t\tthis._nonPointGroup.removeLayer(layer);\r\n\t\t\tthis.fire('layerremove', { layer: layer });\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif (!this._map) {\r\n\t\t\tif (!this._arraySplice(this._needsClustering, layer) && this.hasLayer(layer)) {\r\n\t\t\t\tthis._needsRemoving.push({ layer: layer, latlng: layer._latlng });\r\n\t\t\t}\r\n\t\t\tthis.fire('layerremove', { layer: layer });\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif (!layer.__parent) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif (this._unspiderfy) {\r\n\t\t\tthis._unspiderfy();\r\n\t\t\tthis._unspiderfyLayer(layer);\r\n\t\t}\r\n\r\n\t\t//Remove the marker from clusters\r\n\t\tthis._removeLayer(layer, true);\r\n\t\tthis.fire('layerremove', { layer: layer });\r\n\r\n\t\t// Refresh bounds and weighted positions.\r\n\t\tthis._topClusterLevel._recalculateBounds();\r\n\r\n\t\tthis._refreshClustersIcons();\r\n\r\n\t\tlayer.off(this._childMarkerEventHandlers, this);\r\n\r\n\t\tif (this._featureGroup.hasLayer(layer)) {\r\n\t\t\tthis._featureGroup.removeLayer(layer);\r\n\t\t\tif (layer.clusterShow) {\r\n\t\t\t\tlayer.clusterShow();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t//Takes an array of markers and adds them in bulk\r\n\taddLayers: function (layersArray, skipLayerAddEvent) {\r\n\t\tif (!L.Util.isArray(layersArray)) {\r\n\t\t\treturn this.addLayer(layersArray);\r\n\t\t}\r\n\r\n\t\tvar fg = this._featureGroup,\r\n\t\t npg = this._nonPointGroup,\r\n\t\t chunked = this.options.chunkedLoading,\r\n\t\t chunkInterval = this.options.chunkInterval,\r\n\t\t chunkProgress = this.options.chunkProgress,\r\n\t\t l = layersArray.length,\r\n\t\t offset = 0,\r\n\t\t originalArray = true,\r\n\t\t m;\r\n\r\n\t\tif (this._map) {\r\n\t\t\tvar started = (new Date()).getTime();\r\n\t\t\tvar process = L.bind(function () {\r\n\t\t\t\tvar start = (new Date()).getTime();\r\n\t\t\t\tfor (; offset < l; offset++) {\r\n\t\t\t\t\tif (chunked && offset % 200 === 0) {\r\n\t\t\t\t\t\t// every couple hundred markers, instrument the time elapsed since processing started:\r\n\t\t\t\t\t\tvar elapsed = (new Date()).getTime() - start;\r\n\t\t\t\t\t\tif (elapsed > chunkInterval) {\r\n\t\t\t\t\t\t\tbreak; // been working too hard, time to take a break :-)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tm = layersArray[offset];\r\n\r\n\t\t\t\t\t// Group of layers, append children to layersArray and skip.\r\n\t\t\t\t\t// Side effects:\r\n\t\t\t\t\t// - Total increases, so chunkProgress ratio jumps backward.\r\n\t\t\t\t\t// - Groups are not included in this group, only their non-group child layers (hasLayer).\r\n\t\t\t\t\t// Changing array length while looping does not affect performance in current browsers:\r\n\t\t\t\t\t// http://jsperf.com/for-loop-changing-length/6\r\n\t\t\t\t\tif (m instanceof L.LayerGroup) {\r\n\t\t\t\t\t\tif (originalArray) {\r\n\t\t\t\t\t\t\tlayersArray = layersArray.slice();\r\n\t\t\t\t\t\t\toriginalArray = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis._extractNonGroupLayers(m, layersArray);\r\n\t\t\t\t\t\tl = layersArray.length;\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//Not point data, can't be clustered\r\n\t\t\t\t\tif (!m.getLatLng) {\r\n\t\t\t\t\t\tnpg.addLayer(m);\r\n\t\t\t\t\t\tif (!skipLayerAddEvent) {\r\n\t\t\t\t\t\t\tthis.fire('layeradd', { layer: m });\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (this.hasLayer(m)) {\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis._addLayer(m, this._maxZoom);\r\n\t\t\t\t\tif (!skipLayerAddEvent) {\r\n\t\t\t\t\t\tthis.fire('layeradd', { layer: m });\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//If we just made a cluster of size 2 then we need to remove the other marker from the map (if it is) or we never will\r\n\t\t\t\t\tif (m.__parent) {\r\n\t\t\t\t\t\tif (m.__parent.getChildCount() === 2) {\r\n\t\t\t\t\t\t\tvar markers = m.__parent.getAllChildMarkers(),\r\n\t\t\t\t\t\t\t otherMarker = markers[0] === m ? markers[1] : markers[0];\r\n\t\t\t\t\t\t\tfg.removeLayer(otherMarker);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (chunkProgress) {\r\n\t\t\t\t\t// report progress and time elapsed:\r\n\t\t\t\t\tchunkProgress(offset, l, (new Date()).getTime() - started);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Completed processing all markers.\r\n\t\t\t\tif (offset === l) {\r\n\r\n\t\t\t\t\t// Refresh bounds and weighted positions.\r\n\t\t\t\t\tthis._topClusterLevel._recalculateBounds();\r\n\r\n\t\t\t\t\tthis._refreshClustersIcons();\r\n\r\n\t\t\t\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, this._zoom, this._currentShownBounds);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tsetTimeout(process, this.options.chunkDelay);\r\n\t\t\t\t}\r\n\t\t\t}, this);\r\n\r\n\t\t\tprocess();\r\n\t\t} else {\r\n\t\t\tvar needsClustering = this._needsClustering;\r\n\r\n\t\t\tfor (; offset < l; offset++) {\r\n\t\t\t\tm = layersArray[offset];\r\n\r\n\t\t\t\t// Group of layers, append children to layersArray and skip.\r\n\t\t\t\tif (m instanceof L.LayerGroup) {\r\n\t\t\t\t\tif (originalArray) {\r\n\t\t\t\t\t\tlayersArray = layersArray.slice();\r\n\t\t\t\t\t\toriginalArray = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis._extractNonGroupLayers(m, layersArray);\r\n\t\t\t\t\tl = layersArray.length;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//Not point data, can't be clustered\r\n\t\t\t\tif (!m.getLatLng) {\r\n\t\t\t\t\tnpg.addLayer(m);\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.hasLayer(m)) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tneedsClustering.push(m);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t//Takes an array of markers and removes them in bulk\r\n\tremoveLayers: function (layersArray) {\r\n\t\tvar i, m,\r\n\t\t l = layersArray.length,\r\n\t\t fg = this._featureGroup,\r\n\t\t npg = this._nonPointGroup,\r\n\t\t originalArray = true;\r\n\r\n\t\tif (!this._map) {\r\n\t\t\tfor (i = 0; i < l; i++) {\r\n\t\t\t\tm = layersArray[i];\r\n\r\n\t\t\t\t// Group of layers, append children to layersArray and skip.\r\n\t\t\t\tif (m instanceof L.LayerGroup) {\r\n\t\t\t\t\tif (originalArray) {\r\n\t\t\t\t\t\tlayersArray = layersArray.slice();\r\n\t\t\t\t\t\toriginalArray = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis._extractNonGroupLayers(m, layersArray);\r\n\t\t\t\t\tl = layersArray.length;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._arraySplice(this._needsClustering, m);\r\n\t\t\t\tnpg.removeLayer(m);\r\n\t\t\t\tif (this.hasLayer(m)) {\r\n\t\t\t\t\tthis._needsRemoving.push({ layer: m, latlng: m._latlng });\r\n\t\t\t\t}\r\n\t\t\t\tthis.fire('layerremove', { layer: m });\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif (this._unspiderfy) {\r\n\t\t\tthis._unspiderfy();\r\n\r\n\t\t\t// Work on a copy of the array, so that next loop is not affected.\r\n\t\t\tvar layersArray2 = layersArray.slice(),\r\n\t\t\t l2 = l;\r\n\t\t\tfor (i = 0; i < l2; i++) {\r\n\t\t\t\tm = layersArray2[i];\r\n\r\n\t\t\t\t// Group of layers, append children to layersArray and skip.\r\n\t\t\t\tif (m instanceof L.LayerGroup) {\r\n\t\t\t\t\tthis._extractNonGroupLayers(m, layersArray2);\r\n\t\t\t\t\tl2 = layersArray2.length;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._unspiderfyLayer(m);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (i = 0; i < l; i++) {\r\n\t\t\tm = layersArray[i];\r\n\r\n\t\t\t// Group of layers, append children to layersArray and skip.\r\n\t\t\tif (m instanceof L.LayerGroup) {\r\n\t\t\t\tif (originalArray) {\r\n\t\t\t\t\tlayersArray = layersArray.slice();\r\n\t\t\t\t\toriginalArray = false;\r\n\t\t\t\t}\r\n\t\t\t\tthis._extractNonGroupLayers(m, layersArray);\r\n\t\t\t\tl = layersArray.length;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (!m.__parent) {\r\n\t\t\t\tnpg.removeLayer(m);\r\n\t\t\t\tthis.fire('layerremove', { layer: m });\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tthis._removeLayer(m, true, true);\r\n\t\t\tthis.fire('layerremove', { layer: m });\r\n\r\n\t\t\tif (fg.hasLayer(m)) {\r\n\t\t\t\tfg.removeLayer(m);\r\n\t\t\t\tif (m.clusterShow) {\r\n\t\t\t\t\tm.clusterShow();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Refresh bounds and weighted positions.\r\n\t\tthis._topClusterLevel._recalculateBounds();\r\n\r\n\t\tthis._refreshClustersIcons();\r\n\r\n\t\t//Fix up the clusters and markers on the map\r\n\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, this._zoom, this._currentShownBounds);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t//Removes all layers from the MarkerClusterGroup\r\n\tclearLayers: function () {\r\n\t\t//Need our own special implementation as the LayerGroup one doesn't work for us\r\n\r\n\t\t//If we aren't on the map (yet), blow away the markers we know of\r\n\t\tif (!this._map) {\r\n\t\t\tthis._needsClustering = [];\r\n\t\t\tthis._needsRemoving = [];\r\n\t\t\tdelete this._gridClusters;\r\n\t\t\tdelete this._gridUnclustered;\r\n\t\t}\r\n\r\n\t\tif (this._noanimationUnspiderfy) {\r\n\t\t\tthis._noanimationUnspiderfy();\r\n\t\t}\r\n\r\n\t\t//Remove all the visible layers\r\n\t\tthis._featureGroup.clearLayers();\r\n\t\tthis._nonPointGroup.clearLayers();\r\n\r\n\t\tthis.eachLayer(function (marker) {\r\n\t\t\tmarker.off(this._childMarkerEventHandlers, this);\r\n\t\t\tdelete marker.__parent;\r\n\t\t}, this);\r\n\r\n\t\tif (this._map) {\r\n\t\t\t//Reset _topClusterLevel and the DistanceGrids\r\n\t\t\tthis._generateInitialClusters();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t//Override FeatureGroup.getBounds as it doesn't work\r\n\tgetBounds: function () {\r\n\t\tvar bounds = new L.LatLngBounds();\r\n\r\n\t\tif (this._topClusterLevel) {\r\n\t\t\tbounds.extend(this._topClusterLevel._bounds);\r\n\t\t}\r\n\r\n\t\tfor (var i = this._needsClustering.length - 1; i >= 0; i--) {\r\n\t\t\tbounds.extend(this._needsClustering[i].getLatLng());\r\n\t\t}\r\n\r\n\t\tbounds.extend(this._nonPointGroup.getBounds());\r\n\r\n\t\treturn bounds;\r\n\t},\r\n\r\n\t//Overrides LayerGroup.eachLayer\r\n\teachLayer: function (method, context) {\r\n\t\tvar markers = this._needsClustering.slice(),\r\n\t\t\tneedsRemoving = this._needsRemoving,\r\n\t\t\tthisNeedsRemoving, i, j;\r\n\r\n\t\tif (this._topClusterLevel) {\r\n\t\t\tthis._topClusterLevel.getAllChildMarkers(markers);\r\n\t\t}\r\n\r\n\t\tfor (i = markers.length - 1; i >= 0; i--) {\r\n\t\t\tthisNeedsRemoving = true;\r\n\r\n\t\t\tfor (j = needsRemoving.length - 1; j >= 0; j--) {\r\n\t\t\t\tif (needsRemoving[j].layer === markers[i]) {\r\n\t\t\t\t\tthisNeedsRemoving = false;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (thisNeedsRemoving) {\r\n\t\t\t\tmethod.call(context, markers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._nonPointGroup.eachLayer(method, context);\r\n\t},\r\n\r\n\t//Overrides LayerGroup.getLayers\r\n\tgetLayers: function () {\r\n\t\tvar layers = [];\r\n\t\tthis.eachLayer(function (l) {\r\n\t\t\tlayers.push(l);\r\n\t\t});\r\n\t\treturn layers;\r\n\t},\r\n\r\n\t//Overrides LayerGroup.getLayer, WARNING: Really bad performance\r\n\tgetLayer: function (id) {\r\n\t\tvar result = null;\r\n\r\n\t\tid = parseInt(id, 10);\r\n\r\n\t\tthis.eachLayer(function (l) {\r\n\t\t\tif (L.stamp(l) === id) {\r\n\t\t\t\tresult = l;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t},\r\n\r\n\t//Returns true if the given layer is in this MarkerClusterGroup\r\n\thasLayer: function (layer) {\r\n\t\tif (!layer) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar i, anArray = this._needsClustering;\r\n\r\n\t\tfor (i = anArray.length - 1; i >= 0; i--) {\r\n\t\t\tif (anArray[i] === layer) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tanArray = this._needsRemoving;\r\n\t\tfor (i = anArray.length - 1; i >= 0; i--) {\r\n\t\t\tif (anArray[i].layer === layer) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn !!(layer.__parent && layer.__parent._group === this) || this._nonPointGroup.hasLayer(layer);\r\n\t},\r\n\r\n\t//Zoom down to show the given layer (spiderfying if necessary) then calls the callback\r\n\tzoomToShowLayer: function (layer, callback) {\r\n\r\n\t\tif (typeof callback !== 'function') {\r\n\t\t\tcallback = function () {};\r\n\t\t}\r\n\r\n\t\tvar showMarker = function () {\r\n\t\t\tif ((layer._icon || layer.__parent._icon) && !this._inZoomAnimation) {\r\n\t\t\t\tthis._map.off('moveend', showMarker, this);\r\n\t\t\t\tthis.off('animationend', showMarker, this);\r\n\r\n\t\t\t\tif (layer._icon) {\r\n\t\t\t\t\tcallback();\r\n\t\t\t\t} else if (layer.__parent._icon) {\r\n\t\t\t\t\tthis.once('spiderfied', callback, this);\r\n\t\t\t\t\tlayer.__parent.spiderfy();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tif (layer._icon && this._map.getBounds().contains(layer.getLatLng())) {\r\n\t\t\t//Layer is visible ond on screen, immediate return\r\n\t\t\tcallback();\r\n\t\t} else if (layer.__parent._zoom < Math.round(this._map._zoom)) {\r\n\t\t\t//Layer should be visible at this zoom level. It must not be on screen so just pan over to it\r\n\t\t\tthis._map.on('moveend', showMarker, this);\r\n\t\t\tthis._map.panTo(layer.getLatLng());\r\n\t\t} else {\r\n\t\t\tthis._map.on('moveend', showMarker, this);\r\n\t\t\tthis.on('animationend', showMarker, this);\r\n\t\t\tlayer.__parent.zoomToBounds();\r\n\t\t}\r\n\t},\r\n\r\n\t//Overrides FeatureGroup.onAdd\r\n\tonAdd: function (map) {\r\n\t\tthis._map = map;\r\n\t\tvar i, l, layer;\r\n\r\n\t\tif (!isFinite(this._map.getMaxZoom())) {\r\n\t\t\tthrow \"Map has no maxZoom specified\";\r\n\t\t}\r\n\r\n\t\tthis._featureGroup.addTo(map);\r\n\t\tthis._nonPointGroup.addTo(map);\r\n\r\n\t\tif (!this._gridClusters) {\r\n\t\t\tthis._generateInitialClusters();\r\n\t\t}\r\n\r\n\t\tthis._maxLat = map.options.crs.projection.MAX_LATITUDE;\r\n\r\n\t\t//Restore all the positions as they are in the MCG before removing them\r\n\t\tfor (i = 0, l = this._needsRemoving.length; i < l; i++) {\r\n\t\t\tlayer = this._needsRemoving[i];\r\n\t\t\tlayer.newlatlng = layer.layer._latlng;\r\n\t\t\tlayer.layer._latlng = layer.latlng;\r\n\t\t}\r\n\t\t//Remove them, then restore their new positions\r\n\t\tfor (i = 0, l = this._needsRemoving.length; i < l; i++) {\r\n\t\t\tlayer = this._needsRemoving[i];\r\n\t\t\tthis._removeLayer(layer.layer, true);\r\n\t\t\tlayer.layer._latlng = layer.newlatlng;\r\n\t\t}\r\n\t\tthis._needsRemoving = [];\r\n\r\n\t\t//Remember the current zoom level and bounds\r\n\t\tthis._zoom = Math.round(this._map._zoom);\r\n\t\tthis._currentShownBounds = this._getExpandedVisibleBounds();\r\n\r\n\t\tthis._map.on('zoomend', this._zoomEnd, this);\r\n\t\tthis._map.on('moveend', this._moveEnd, this);\r\n\r\n\t\tif (this._spiderfierOnAdd) { //TODO FIXME: Not sure how to have spiderfier add something on here nicely\r\n\t\t\tthis._spiderfierOnAdd();\r\n\t\t}\r\n\r\n\t\tthis._bindEvents();\r\n\r\n\t\t//Actually add our markers to the map:\r\n\t\tl = this._needsClustering;\r\n\t\tthis._needsClustering = [];\r\n\t\tthis.addLayers(l, true);\r\n\t},\r\n\r\n\t//Overrides FeatureGroup.onRemove\r\n\tonRemove: function (map) {\r\n\t\tmap.off('zoomend', this._zoomEnd, this);\r\n\t\tmap.off('moveend', this._moveEnd, this);\r\n\r\n\t\tthis._unbindEvents();\r\n\r\n\t\t//In case we are in a cluster animation\r\n\t\tthis._map._mapPane.className = this._map._mapPane.className.replace(' leaflet-cluster-anim', '');\r\n\r\n\t\tif (this._spiderfierOnRemove) { //TODO FIXME: Not sure how to have spiderfier add something on here nicely\r\n\t\t\tthis._spiderfierOnRemove();\r\n\t\t}\r\n\r\n\t\tdelete this._maxLat;\r\n\r\n\t\t//Clean up all the layers we added to the map\r\n\t\tthis._hideCoverage();\r\n\t\tthis._featureGroup.remove();\r\n\t\tthis._nonPointGroup.remove();\r\n\r\n\t\tthis._featureGroup.clearLayers();\r\n\r\n\t\tthis._map = null;\r\n\t},\r\n\r\n\tgetVisibleParent: function (marker) {\r\n\t\tvar vMarker = marker;\r\n\t\twhile (vMarker && !vMarker._icon) {\r\n\t\t\tvMarker = vMarker.__parent;\r\n\t\t}\r\n\t\treturn vMarker || null;\r\n\t},\r\n\r\n\t//Remove the given object from the given array\r\n\t_arraySplice: function (anArray, obj) {\r\n\t\tfor (var i = anArray.length - 1; i >= 0; i--) {\r\n\t\t\tif (anArray[i] === obj) {\r\n\t\t\t\tanArray.splice(i, 1);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Removes a marker from all _gridUnclustered zoom levels, starting at the supplied zoom.\r\n\t * @param marker to be removed from _gridUnclustered.\r\n\t * @param z integer bottom start zoom level (included)\r\n\t * @private\r\n\t */\r\n\t_removeFromGridUnclustered: function (marker, z) {\r\n\t\tvar map = this._map,\r\n\t\t gridUnclustered = this._gridUnclustered,\r\n\t\t\tminZoom = Math.floor(this._map.getMinZoom());\r\n\r\n\t\tfor (; z >= minZoom; z--) {\r\n\t\t\tif (!gridUnclustered[z].removeObject(marker, map.project(marker.getLatLng(), z))) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_childMarkerDragStart: function (e) {\r\n\t\te.target.__dragStart = e.target._latlng;\r\n\t},\r\n\r\n\t_childMarkerMoved: function (e) {\r\n\t\tif (!this._ignoreMove && !e.target.__dragStart) {\r\n\t\t\tvar isPopupOpen = e.target._popup && e.target._popup.isOpen();\r\n\r\n\t\t\tthis._moveChild(e.target, e.oldLatLng, e.latlng);\r\n\r\n\t\t\tif (isPopupOpen) {\r\n\t\t\t\te.target.openPopup();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_moveChild: function (layer, from, to) {\r\n\t\tlayer._latlng = from;\r\n\t\tthis.removeLayer(layer);\r\n\r\n\t\tlayer._latlng = to;\r\n\t\tthis.addLayer(layer);\r\n\t},\r\n\r\n\t_childMarkerDragEnd: function (e) {\r\n\t\tvar dragStart = e.target.__dragStart;\r\n\t\tdelete e.target.__dragStart;\r\n\t\tif (dragStart) {\r\n\t\t\tthis._moveChild(e.target, dragStart, e.target._latlng);\r\n\t\t}\t\t\r\n\t},\r\n\r\n\r\n\t//Internal function for removing a marker from everything.\r\n\t//dontUpdateMap: set to true if you will handle updating the map manually (for bulk functions)\r\n\t_removeLayer: function (marker, removeFromDistanceGrid, dontUpdateMap) {\r\n\t\tvar gridClusters = this._gridClusters,\r\n\t\t\tgridUnclustered = this._gridUnclustered,\r\n\t\t\tfg = this._featureGroup,\r\n\t\t\tmap = this._map,\r\n\t\t\tminZoom = Math.floor(this._map.getMinZoom());\r\n\r\n\t\t//Remove the marker from distance clusters it might be in\r\n\t\tif (removeFromDistanceGrid) {\r\n\t\t\tthis._removeFromGridUnclustered(marker, this._maxZoom);\r\n\t\t}\r\n\r\n\t\t//Work our way up the clusters removing them as we go if required\r\n\t\tvar cluster = marker.__parent,\r\n\t\t\tmarkers = cluster._markers,\r\n\t\t\totherMarker;\r\n\r\n\t\t//Remove the marker from the immediate parents marker list\r\n\t\tthis._arraySplice(markers, marker);\r\n\r\n\t\twhile (cluster) {\r\n\t\t\tcluster._childCount--;\r\n\t\t\tcluster._boundsNeedUpdate = true;\r\n\r\n\t\t\tif (cluster._zoom < minZoom) {\r\n\t\t\t\t//Top level, do nothing\r\n\t\t\t\tbreak;\r\n\t\t\t} else if (removeFromDistanceGrid && cluster._childCount <= 1) { //Cluster no longer required\r\n\t\t\t\t//We need to push the other marker up to the parent\r\n\t\t\t\totherMarker = cluster._markers[0] === marker ? cluster._markers[1] : cluster._markers[0];\r\n\r\n\t\t\t\t//Update distance grid\r\n\t\t\t\tgridClusters[cluster._zoom].removeObject(cluster, map.project(cluster._cLatLng, cluster._zoom));\r\n\t\t\t\tgridUnclustered[cluster._zoom].addObject(otherMarker, map.project(otherMarker.getLatLng(), cluster._zoom));\r\n\r\n\t\t\t\t//Move otherMarker up to parent\r\n\t\t\t\tthis._arraySplice(cluster.__parent._childClusters, cluster);\r\n\t\t\t\tcluster.__parent._markers.push(otherMarker);\r\n\t\t\t\totherMarker.__parent = cluster.__parent;\r\n\r\n\t\t\t\tif (cluster._icon) {\r\n\t\t\t\t\t//Cluster is currently on the map, need to put the marker on the map instead\r\n\t\t\t\t\tfg.removeLayer(cluster);\r\n\t\t\t\t\tif (!dontUpdateMap) {\r\n\t\t\t\t\t\tfg.addLayer(otherMarker);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tcluster._iconNeedsUpdate = true;\r\n\t\t\t}\r\n\r\n\t\t\tcluster = cluster.__parent;\r\n\t\t}\r\n\r\n\t\tdelete marker.__parent;\r\n\t},\r\n\r\n\t_isOrIsParent: function (el, oel) {\r\n\t\twhile (oel) {\r\n\t\t\tif (el === oel) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\toel = oel.parentNode;\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t//Override L.Evented.fire\r\n\tfire: function (type, data, propagate) {\r\n\t\tif (data && data.layer instanceof L.MarkerCluster) {\r\n\t\t\t//Prevent multiple clustermouseover/off events if the icon is made up of stacked divs (Doesn't work in ie <= 8, no relatedTarget)\r\n\t\t\tif (data.originalEvent && this._isOrIsParent(data.layer._icon, data.originalEvent.relatedTarget)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\ttype = 'cluster' + type;\r\n\t\t}\r\n\r\n\t\tL.FeatureGroup.prototype.fire.call(this, type, data, propagate);\r\n\t},\r\n\r\n\t//Override L.Evented.listens\r\n\tlistens: function (type, propagate) {\r\n\t\treturn L.FeatureGroup.prototype.listens.call(this, type, propagate) || L.FeatureGroup.prototype.listens.call(this, 'cluster' + type, propagate);\r\n\t},\r\n\r\n\t//Default functionality\r\n\t_defaultIconCreateFunction: function (cluster) {\r\n\t\tvar childCount = cluster.getChildCount();\r\n\r\n\t\tvar c = ' marker-cluster-';\r\n\t\tif (childCount < 10) {\r\n\t\t\tc += 'small';\r\n\t\t} else if (childCount < 100) {\r\n\t\t\tc += 'medium';\r\n\t\t} else {\r\n\t\t\tc += 'large';\r\n\t\t}\r\n\r\n\t\treturn new L.DivIcon({ html: '
' + childCount + '
', className: 'marker-cluster' + c, iconSize: new L.Point(40, 40) });\r\n\t},\r\n\r\n\t_bindEvents: function () {\r\n\t\tvar map = this._map,\r\n\t\t spiderfyOnMaxZoom = this.options.spiderfyOnMaxZoom,\r\n\t\t showCoverageOnHover = this.options.showCoverageOnHover,\r\n\t\t zoomToBoundsOnClick = this.options.zoomToBoundsOnClick;\r\n\r\n\t\t//Zoom on cluster click or spiderfy if we are at the lowest level\r\n\t\tif (spiderfyOnMaxZoom || zoomToBoundsOnClick) {\r\n\t\t\tthis.on('clusterclick', this._zoomOrSpiderfy, this);\r\n\t\t}\r\n\r\n\t\t//Show convex hull (boundary) polygon on mouse over\r\n\t\tif (showCoverageOnHover) {\r\n\t\t\tthis.on('clustermouseover', this._showCoverage, this);\r\n\t\t\tthis.on('clustermouseout', this._hideCoverage, this);\r\n\t\t\tmap.on('zoomend', this._hideCoverage, this);\r\n\t\t}\r\n\t},\r\n\r\n\t_zoomOrSpiderfy: function (e) {\r\n\t\tvar cluster = e.layer,\r\n\t\t bottomCluster = cluster;\r\n\r\n\t\twhile (bottomCluster._childClusters.length === 1) {\r\n\t\t\tbottomCluster = bottomCluster._childClusters[0];\r\n\t\t}\r\n\r\n\t\tif (bottomCluster._zoom === this._maxZoom &&\r\n\t\t\tbottomCluster._childCount === cluster._childCount &&\r\n\t\t\tthis.options.spiderfyOnMaxZoom) {\r\n\r\n\t\t\t// All child markers are contained in a single cluster from this._maxZoom to this cluster.\r\n\t\t\tcluster.spiderfy();\r\n\t\t} else if (this.options.zoomToBoundsOnClick) {\r\n\t\t\tcluster.zoomToBounds();\r\n\t\t}\r\n\r\n\t\t// Focus the map again for keyboard users.\r\n\t\tif (e.originalEvent && e.originalEvent.keyCode === 13) {\r\n\t\t\tthis._map._container.focus();\r\n\t\t}\r\n\t},\r\n\r\n\t_showCoverage: function (e) {\r\n\t\tvar map = this._map;\r\n\t\tif (this._inZoomAnimation) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (this._shownPolygon) {\r\n\t\t\tmap.removeLayer(this._shownPolygon);\r\n\t\t}\r\n\t\tif (e.layer.getChildCount() > 2 && e.layer !== this._spiderfied) {\r\n\t\t\tthis._shownPolygon = new L.Polygon(e.layer.getConvexHull(), this.options.polygonOptions);\r\n\t\t\tmap.addLayer(this._shownPolygon);\r\n\t\t}\r\n\t},\r\n\r\n\t_hideCoverage: function () {\r\n\t\tif (this._shownPolygon) {\r\n\t\t\tthis._map.removeLayer(this._shownPolygon);\r\n\t\t\tthis._shownPolygon = null;\r\n\t\t}\r\n\t},\r\n\r\n\t_unbindEvents: function () {\r\n\t\tvar spiderfyOnMaxZoom = this.options.spiderfyOnMaxZoom,\r\n\t\t\tshowCoverageOnHover = this.options.showCoverageOnHover,\r\n\t\t\tzoomToBoundsOnClick = this.options.zoomToBoundsOnClick,\r\n\t\t\tmap = this._map;\r\n\r\n\t\tif (spiderfyOnMaxZoom || zoomToBoundsOnClick) {\r\n\t\t\tthis.off('clusterclick', this._zoomOrSpiderfy, this);\r\n\t\t}\r\n\t\tif (showCoverageOnHover) {\r\n\t\t\tthis.off('clustermouseover', this._showCoverage, this);\r\n\t\t\tthis.off('clustermouseout', this._hideCoverage, this);\r\n\t\t\tmap.off('zoomend', this._hideCoverage, this);\r\n\t\t}\r\n\t},\r\n\r\n\t_zoomEnd: function () {\r\n\t\tif (!this._map) { //May have been removed from the map by a zoomEnd handler\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._mergeSplitClusters();\r\n\r\n\t\tthis._zoom = Math.round(this._map._zoom);\r\n\t\tthis._currentShownBounds = this._getExpandedVisibleBounds();\r\n\t},\r\n\r\n\t_moveEnd: function () {\r\n\t\tif (this._inZoomAnimation) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar newBounds = this._getExpandedVisibleBounds();\r\n\r\n\t\tthis._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), this._zoom, newBounds);\r\n\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, Math.round(this._map._zoom), newBounds);\r\n\r\n\t\tthis._currentShownBounds = newBounds;\r\n\t\treturn;\r\n\t},\r\n\r\n\t_generateInitialClusters: function () {\r\n\t\tvar maxZoom = Math.ceil(this._map.getMaxZoom()),\r\n\t\t\tminZoom = Math.floor(this._map.getMinZoom()),\r\n\t\t\tradius = this.options.maxClusterRadius,\r\n\t\t\tradiusFn = radius;\r\n\r\n\t\t//If we just set maxClusterRadius to a single number, we need to create\r\n\t\t//a simple function to return that number. Otherwise, we just have to\r\n\t\t//use the function we've passed in.\r\n\t\tif (typeof radius !== \"function\") {\r\n\t\t\tradiusFn = function () { return radius; };\r\n\t\t}\r\n\r\n\t\tif (this.options.disableClusteringAtZoom !== null) {\r\n\t\t\tmaxZoom = this.options.disableClusteringAtZoom - 1;\r\n\t\t}\r\n\t\tthis._maxZoom = maxZoom;\r\n\t\tthis._gridClusters = {};\r\n\t\tthis._gridUnclustered = {};\r\n\r\n\t\t//Set up DistanceGrids for each zoom\r\n\t\tfor (var zoom = maxZoom; zoom >= minZoom; zoom--) {\r\n\t\t\tthis._gridClusters[zoom] = new L.DistanceGrid(radiusFn(zoom));\r\n\t\t\tthis._gridUnclustered[zoom] = new L.DistanceGrid(radiusFn(zoom));\r\n\t\t}\r\n\r\n\t\t// Instantiate the appropriate L.MarkerCluster class (animated or not).\r\n\t\tthis._topClusterLevel = new this._markerCluster(this, minZoom - 1);\r\n\t},\r\n\r\n\t//Zoom: Zoom to start adding at (Pass this._maxZoom to start at the bottom)\r\n\t_addLayer: function (layer, zoom) {\r\n\t\tvar gridClusters = this._gridClusters,\r\n\t\t gridUnclustered = this._gridUnclustered,\r\n\t\t\tminZoom = Math.floor(this._map.getMinZoom()),\r\n\t\t markerPoint, z;\r\n\r\n\t\tif (this.options.singleMarkerMode) {\r\n\t\t\tthis._overrideMarkerIcon(layer);\r\n\t\t}\r\n\r\n\t\tlayer.on(this._childMarkerEventHandlers, this);\r\n\r\n\t\t//Find the lowest zoom level to slot this one in\r\n\t\tfor (; zoom >= minZoom; zoom--) {\r\n\t\t\tmarkerPoint = this._map.project(layer.getLatLng(), zoom); // calculate pixel position\r\n\r\n\t\t\t//Try find a cluster close by\r\n\t\t\tvar closest = gridClusters[zoom].getNearObject(markerPoint);\r\n\t\t\tif (closest) {\r\n\t\t\t\tclosest._addChild(layer);\r\n\t\t\t\tlayer.__parent = closest;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t//Try find a marker close by to form a new cluster with\r\n\t\t\tclosest = gridUnclustered[zoom].getNearObject(markerPoint);\r\n\t\t\tif (closest) {\r\n\t\t\t\tvar parent = closest.__parent;\r\n\t\t\t\tif (parent) {\r\n\t\t\t\t\tthis._removeLayer(closest, false);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//Create new cluster with these 2 in it\r\n\r\n\t\t\t\tvar newCluster = new this._markerCluster(this, zoom, closest, layer);\r\n\t\t\t\tgridClusters[zoom].addObject(newCluster, this._map.project(newCluster._cLatLng, zoom));\r\n\t\t\t\tclosest.__parent = newCluster;\r\n\t\t\t\tlayer.__parent = newCluster;\r\n\r\n\t\t\t\t//First create any new intermediate parent clusters that don't exist\r\n\t\t\t\tvar lastParent = newCluster;\r\n\t\t\t\tfor (z = zoom - 1; z > parent._zoom; z--) {\r\n\t\t\t\t\tlastParent = new this._markerCluster(this, z, lastParent);\r\n\t\t\t\t\tgridClusters[z].addObject(lastParent, this._map.project(closest.getLatLng(), z));\r\n\t\t\t\t}\r\n\t\t\t\tparent._addChild(lastParent);\r\n\r\n\t\t\t\t//Remove closest from this zoom level and any above that it is in, replace with newCluster\r\n\t\t\t\tthis._removeFromGridUnclustered(closest, zoom);\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t//Didn't manage to cluster in at this zoom, record us as a marker here and continue upwards\r\n\t\t\tgridUnclustered[zoom].addObject(layer, markerPoint);\r\n\t\t}\r\n\r\n\t\t//Didn't get in anything, add us to the top\r\n\t\tthis._topClusterLevel._addChild(layer);\r\n\t\tlayer.__parent = this._topClusterLevel;\r\n\t\treturn;\r\n\t},\r\n\r\n\t/**\r\n\t * Refreshes the icon of all \"dirty\" visible clusters.\r\n\t * Non-visible \"dirty\" clusters will be updated when they are added to the map.\r\n\t * @private\r\n\t */\r\n\t_refreshClustersIcons: function () {\r\n\t\tthis._featureGroup.eachLayer(function (c) {\r\n\t\t\tif (c instanceof L.MarkerCluster && c._iconNeedsUpdate) {\r\n\t\t\t\tc._updateIcon();\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t//Enqueue code to fire after the marker expand/contract has happened\r\n\t_enqueue: function (fn) {\r\n\t\tthis._queue.push(fn);\r\n\t\tif (!this._queueTimeout) {\r\n\t\t\tthis._queueTimeout = setTimeout(L.bind(this._processQueue, this), 300);\r\n\t\t}\r\n\t},\r\n\t_processQueue: function () {\r\n\t\tfor (var i = 0; i < this._queue.length; i++) {\r\n\t\t\tthis._queue[i].call(this);\r\n\t\t}\r\n\t\tthis._queue.length = 0;\r\n\t\tclearTimeout(this._queueTimeout);\r\n\t\tthis._queueTimeout = null;\r\n\t},\r\n\r\n\t//Merge and split any existing clusters that are too big or small\r\n\t_mergeSplitClusters: function () {\r\n\t\tvar mapZoom = Math.round(this._map._zoom);\r\n\r\n\t\t//In case we are starting to split before the animation finished\r\n\t\tthis._processQueue();\r\n\r\n\t\tif (this._zoom < mapZoom && this._currentShownBounds.intersects(this._getExpandedVisibleBounds())) { //Zoom in, split\r\n\t\t\tthis._animationStart();\r\n\t\t\t//Remove clusters now off screen\r\n\t\t\tthis._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), this._zoom, this._getExpandedVisibleBounds());\r\n\r\n\t\t\tthis._animationZoomIn(this._zoom, mapZoom);\r\n\r\n\t\t} else if (this._zoom > mapZoom) { //Zoom out, merge\r\n\t\t\tthis._animationStart();\r\n\r\n\t\t\tthis._animationZoomOut(this._zoom, mapZoom);\r\n\t\t} else {\r\n\t\t\tthis._moveEnd();\r\n\t\t}\r\n\t},\r\n\r\n\t//Gets the maps visible bounds expanded in each direction by the size of the screen (so the user cannot see an area we do not cover in one pan)\r\n\t_getExpandedVisibleBounds: function () {\r\n\t\tif (!this.options.removeOutsideVisibleBounds) {\r\n\t\t\treturn this._mapBoundsInfinite;\r\n\t\t} else if (L.Browser.mobile) {\r\n\t\t\treturn this._checkBoundsMaxLat(this._map.getBounds());\r\n\t\t}\r\n\r\n\t\treturn this._checkBoundsMaxLat(this._map.getBounds().pad(1)); // Padding expands the bounds by its own dimensions but scaled with the given factor.\r\n\t},\r\n\r\n\t/**\r\n\t * Expands the latitude to Infinity (or -Infinity) if the input bounds reach the map projection maximum defined latitude\r\n\t * (in the case of Web/Spherical Mercator, it is 85.0511287798 / see https://en.wikipedia.org/wiki/Web_Mercator#Formulas).\r\n\t * Otherwise, the removeOutsideVisibleBounds option will remove markers beyond that limit, whereas the same markers without\r\n\t * this option (or outside MCG) will have their position floored (ceiled) by the projection and rendered at that limit,\r\n\t * making the user think that MCG \"eats\" them and never displays them again.\r\n\t * @param bounds L.LatLngBounds\r\n\t * @returns {L.LatLngBounds}\r\n\t * @private\r\n\t */\r\n\t_checkBoundsMaxLat: function (bounds) {\r\n\t\tvar maxLat = this._maxLat;\r\n\r\n\t\tif (maxLat !== undefined) {\r\n\t\t\tif (bounds.getNorth() >= maxLat) {\r\n\t\t\t\tbounds._northEast.lat = Infinity;\r\n\t\t\t}\r\n\t\t\tif (bounds.getSouth() <= -maxLat) {\r\n\t\t\t\tbounds._southWest.lat = -Infinity;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn bounds;\r\n\t},\r\n\r\n\t//Shared animation code\r\n\t_animationAddLayerNonAnimated: function (layer, newCluster) {\r\n\t\tif (newCluster === layer) {\r\n\t\t\tthis._featureGroup.addLayer(layer);\r\n\t\t} else if (newCluster._childCount === 2) {\r\n\t\t\tnewCluster._addToMap();\r\n\r\n\t\t\tvar markers = newCluster.getAllChildMarkers();\r\n\t\t\tthis._featureGroup.removeLayer(markers[0]);\r\n\t\t\tthis._featureGroup.removeLayer(markers[1]);\r\n\t\t} else {\r\n\t\t\tnewCluster._updateIcon();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Extracts individual (i.e. non-group) layers from a Layer Group.\r\n\t * @param group to extract layers from.\r\n\t * @param output {Array} in which to store the extracted layers.\r\n\t * @returns {*|Array}\r\n\t * @private\r\n\t */\r\n\t_extractNonGroupLayers: function (group, output) {\r\n\t\tvar layers = group.getLayers(),\r\n\t\t i = 0,\r\n\t\t layer;\r\n\r\n\t\toutput = output || [];\r\n\r\n\t\tfor (; i < layers.length; i++) {\r\n\t\t\tlayer = layers[i];\r\n\r\n\t\t\tif (layer instanceof L.LayerGroup) {\r\n\t\t\t\tthis._extractNonGroupLayers(layer, output);\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\toutput.push(layer);\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t},\r\n\r\n\t/**\r\n\t * Implements the singleMarkerMode option.\r\n\t * @param layer Marker to re-style using the Clusters iconCreateFunction.\r\n\t * @returns {L.Icon} The newly created icon.\r\n\t * @private\r\n\t */\r\n\t_overrideMarkerIcon: function (layer) {\r\n\t\tvar icon = layer.options.icon = this.options.iconCreateFunction({\r\n\t\t\tgetChildCount: function () {\r\n\t\t\t\treturn 1;\r\n\t\t\t},\r\n\t\t\tgetAllChildMarkers: function () {\r\n\t\t\t\treturn [layer];\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn icon;\r\n\t}\r\n});\r\n\r\n// Constant bounds used in case option \"removeOutsideVisibleBounds\" is set to false.\r\nL.MarkerClusterGroup.include({\r\n\t_mapBoundsInfinite: new L.LatLngBounds(new L.LatLng(-Infinity, -Infinity), new L.LatLng(Infinity, Infinity))\r\n});\r\n\r\nL.MarkerClusterGroup.include({\r\n\t_noAnimation: {\r\n\t\t//Non Animated versions of everything\r\n\t\t_animationStart: function () {\r\n\t\t\t//Do nothing...\r\n\t\t},\r\n\t\t_animationZoomIn: function (previousZoomLevel, newZoomLevel) {\r\n\t\t\tthis._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel);\r\n\t\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds());\r\n\r\n\t\t\t//We didn't actually animate, but we use this event to mean \"clustering animations have finished\"\r\n\t\t\tthis.fire('animationend');\r\n\t\t},\r\n\t\t_animationZoomOut: function (previousZoomLevel, newZoomLevel) {\r\n\t\t\tthis._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel);\r\n\t\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds());\r\n\r\n\t\t\t//We didn't actually animate, but we use this event to mean \"clustering animations have finished\"\r\n\t\t\tthis.fire('animationend');\r\n\t\t},\r\n\t\t_animationAddLayer: function (layer, newCluster) {\r\n\t\t\tthis._animationAddLayerNonAnimated(layer, newCluster);\r\n\t\t}\r\n\t},\r\n\r\n\t_withAnimation: {\r\n\t\t//Animated versions here\r\n\t\t_animationStart: function () {\r\n\t\t\tthis._map._mapPane.className += ' leaflet-cluster-anim';\r\n\t\t\tthis._inZoomAnimation++;\r\n\t\t},\r\n\r\n\t\t_animationZoomIn: function (previousZoomLevel, newZoomLevel) {\r\n\t\t\tvar bounds = this._getExpandedVisibleBounds(),\r\n\t\t\t fg = this._featureGroup,\r\n\t\t\t\tminZoom = Math.floor(this._map.getMinZoom()),\r\n\t\t\t i;\r\n\r\n\t\t\tthis._ignoreMove = true;\r\n\r\n\t\t\t//Add all children of current clusters to map and remove those clusters from map\r\n\t\t\tthis._topClusterLevel._recursively(bounds, previousZoomLevel, minZoom, function (c) {\r\n\t\t\t\tvar startPos = c._latlng,\r\n\t\t\t\t markers = c._markers,\r\n\t\t\t\t m;\r\n\r\n\t\t\t\tif (!bounds.contains(startPos)) {\r\n\t\t\t\t\tstartPos = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (c._isSingleParent() && previousZoomLevel + 1 === newZoomLevel) { //Immediately add the new child and remove us\r\n\t\t\t\t\tfg.removeLayer(c);\r\n\t\t\t\t\tc._recursivelyAddChildrenToMap(null, newZoomLevel, bounds);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t//Fade out old cluster\r\n\t\t\t\t\tc.clusterHide();\r\n\t\t\t\t\tc._recursivelyAddChildrenToMap(startPos, newZoomLevel, bounds);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//Remove all markers that aren't visible any more\r\n\t\t\t\t//TODO: Do we actually need to do this on the higher levels too?\r\n\t\t\t\tfor (i = markers.length - 1; i >= 0; i--) {\r\n\t\t\t\t\tm = markers[i];\r\n\t\t\t\t\tif (!bounds.contains(m._latlng)) {\r\n\t\t\t\t\t\tfg.removeLayer(m);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\r\n\t\t\tthis._forceLayout();\r\n\r\n\t\t\t//Update opacities\r\n\t\t\tthis._topClusterLevel._recursivelyBecomeVisible(bounds, newZoomLevel);\r\n\t\t\t//TODO Maybe? Update markers in _recursivelyBecomeVisible\r\n\t\t\tfg.eachLayer(function (n) {\r\n\t\t\t\tif (!(n instanceof L.MarkerCluster) && n._icon) {\r\n\t\t\t\t\tn.clusterShow();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t//update the positions of the just added clusters/markers\r\n\t\t\tthis._topClusterLevel._recursively(bounds, previousZoomLevel, newZoomLevel, function (c) {\r\n\t\t\t\tc._recursivelyRestoreChildPositions(newZoomLevel);\r\n\t\t\t});\r\n\r\n\t\t\tthis._ignoreMove = false;\r\n\r\n\t\t\t//Remove the old clusters and close the zoom animation\r\n\t\t\tthis._enqueue(function () {\r\n\t\t\t\t//update the positions of the just added clusters/markers\r\n\t\t\t\tthis._topClusterLevel._recursively(bounds, previousZoomLevel, minZoom, function (c) {\r\n\t\t\t\t\tfg.removeLayer(c);\r\n\t\t\t\t\tc.clusterShow();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis._animationEnd();\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\t_animationZoomOut: function (previousZoomLevel, newZoomLevel) {\r\n\t\t\tthis._animationZoomOutSingle(this._topClusterLevel, previousZoomLevel - 1, newZoomLevel);\r\n\r\n\t\t\t//Need to add markers for those that weren't on the map before but are now\r\n\t\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds());\r\n\t\t\t//Remove markers that were on the map before but won't be now\r\n\t\t\tthis._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel, this._getExpandedVisibleBounds());\r\n\t\t},\r\n\r\n\t\t_animationAddLayer: function (layer, newCluster) {\r\n\t\t\tvar me = this,\r\n\t\t\t fg = this._featureGroup;\r\n\r\n\t\t\tfg.addLayer(layer);\r\n\t\t\tif (newCluster !== layer) {\r\n\t\t\t\tif (newCluster._childCount > 2) { //Was already a cluster\r\n\r\n\t\t\t\t\tnewCluster._updateIcon();\r\n\t\t\t\t\tthis._forceLayout();\r\n\t\t\t\t\tthis._animationStart();\r\n\r\n\t\t\t\t\tlayer._setPos(this._map.latLngToLayerPoint(newCluster.getLatLng()));\r\n\t\t\t\t\tlayer.clusterHide();\r\n\r\n\t\t\t\t\tthis._enqueue(function () {\r\n\t\t\t\t\t\tfg.removeLayer(layer);\r\n\t\t\t\t\t\tlayer.clusterShow();\r\n\r\n\t\t\t\t\t\tme._animationEnd();\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t} else { //Just became a cluster\r\n\t\t\t\t\tthis._forceLayout();\r\n\r\n\t\t\t\t\tme._animationStart();\r\n\t\t\t\t\tme._animationZoomOutSingle(newCluster, this._map.getMaxZoom(), this._zoom);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// Private methods for animated versions.\r\n\t_animationZoomOutSingle: function (cluster, previousZoomLevel, newZoomLevel) {\r\n\t\tvar bounds = this._getExpandedVisibleBounds(),\r\n\t\t\tminZoom = Math.floor(this._map.getMinZoom());\r\n\r\n\t\t//Animate all of the markers in the clusters to move to their cluster center point\r\n\t\tcluster._recursivelyAnimateChildrenInAndAddSelfToMap(bounds, minZoom, previousZoomLevel + 1, newZoomLevel);\r\n\r\n\t\tvar me = this;\r\n\r\n\t\t//Update the opacity (If we immediately set it they won't animate)\r\n\t\tthis._forceLayout();\r\n\t\tcluster._recursivelyBecomeVisible(bounds, newZoomLevel);\r\n\r\n\t\t//TODO: Maybe use the transition timing stuff to make this more reliable\r\n\t\t//When the animations are done, tidy up\r\n\t\tthis._enqueue(function () {\r\n\r\n\t\t\t//This cluster stopped being a cluster before the timeout fired\r\n\t\t\tif (cluster._childCount === 1) {\r\n\t\t\t\tvar m = cluster._markers[0];\r\n\t\t\t\t//If we were in a cluster animation at the time then the opacity and position of our child could be wrong now, so fix it\r\n\t\t\t\tthis._ignoreMove = true;\r\n\t\t\t\tm.setLatLng(m.getLatLng());\r\n\t\t\t\tthis._ignoreMove = false;\r\n\t\t\t\tif (m.clusterShow) {\r\n\t\t\t\t\tm.clusterShow();\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tcluster._recursively(bounds, newZoomLevel, minZoom, function (c) {\r\n\t\t\t\t\tc._recursivelyRemoveChildrenFromMap(bounds, minZoom, previousZoomLevel + 1);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tme._animationEnd();\r\n\t\t});\r\n\t},\r\n\r\n\t_animationEnd: function () {\r\n\t\tif (this._map) {\r\n\t\t\tthis._map._mapPane.className = this._map._mapPane.className.replace(' leaflet-cluster-anim', '');\r\n\t\t}\r\n\t\tthis._inZoomAnimation--;\r\n\t\tthis.fire('animationend');\r\n\t},\r\n\r\n\t//Force a browser layout of stuff in the map\r\n\t// Should apply the current opacity and location to all elements so we can update them again for an animation\r\n\t_forceLayout: function () {\r\n\t\t//In my testing this works, infact offsetWidth of any element seems to work.\r\n\t\t//Could loop all this._layers and do this for each _icon if it stops working\r\n\r\n\t\tL.Util.falseFn(document.body.offsetWidth);\r\n\t}\r\n});\r\n\r\nL.markerClusterGroup = function (options) {\r\n\treturn new L.MarkerClusterGroup(options);\r\n};\r\n","export var MarkerCluster = L.MarkerCluster = L.Marker.extend({\r\n\toptions: L.Icon.prototype.options,\r\n\r\n\tinitialize: function (group, zoom, a, b) {\r\n\r\n\t\tL.Marker.prototype.initialize.call(this, a ? (a._cLatLng || a.getLatLng()) : new L.LatLng(0, 0),\r\n { icon: this, pane: group.options.clusterPane });\r\n\r\n\t\tthis._group = group;\r\n\t\tthis._zoom = zoom;\r\n\r\n\t\tthis._markers = [];\r\n\t\tthis._childClusters = [];\r\n\t\tthis._childCount = 0;\r\n\t\tthis._iconNeedsUpdate = true;\r\n\t\tthis._boundsNeedUpdate = true;\r\n\r\n\t\tthis._bounds = new L.LatLngBounds();\r\n\r\n\t\tif (a) {\r\n\t\t\tthis._addChild(a);\r\n\t\t}\r\n\t\tif (b) {\r\n\t\t\tthis._addChild(b);\r\n\t\t}\r\n\t},\r\n\r\n\t//Recursively retrieve all child markers of this cluster\r\n\tgetAllChildMarkers: function (storageArray, ignoreDraggedMarker) {\r\n\t\tstorageArray = storageArray || [];\r\n\r\n\t\tfor (var i = this._childClusters.length - 1; i >= 0; i--) {\r\n\t\t\tthis._childClusters[i].getAllChildMarkers(storageArray);\r\n\t\t}\r\n\r\n\t\tfor (var j = this._markers.length - 1; j >= 0; j--) {\r\n\t\t\tif (ignoreDraggedMarker && this._markers[j].__dragStart) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tstorageArray.push(this._markers[j]);\r\n\t\t}\r\n\r\n\t\treturn storageArray;\r\n\t},\r\n\r\n\t//Returns the count of how many child markers we have\r\n\tgetChildCount: function () {\r\n\t\treturn this._childCount;\r\n\t},\r\n\r\n\t//Zoom to the minimum of showing all of the child markers, or the extents of this cluster\r\n\tzoomToBounds: function (fitBoundsOptions) {\r\n\t\tvar childClusters = this._childClusters.slice(),\r\n\t\t\tmap = this._group._map,\r\n\t\t\tboundsZoom = map.getBoundsZoom(this._bounds),\r\n\t\t\tzoom = this._zoom + 1,\r\n\t\t\tmapZoom = map.getZoom(),\r\n\t\t\ti;\r\n\r\n\t\t//calculate how far we need to zoom down to see all of the markers\r\n\t\twhile (childClusters.length > 0 && boundsZoom > zoom) {\r\n\t\t\tzoom++;\r\n\t\t\tvar newClusters = [];\r\n\t\t\tfor (i = 0; i < childClusters.length; i++) {\r\n\t\t\t\tnewClusters = newClusters.concat(childClusters[i]._childClusters);\r\n\t\t\t}\r\n\t\t\tchildClusters = newClusters;\r\n\t\t}\r\n\r\n\t\tif (boundsZoom > zoom) {\r\n\t\t\tthis._group._map.setView(this._latlng, zoom);\r\n\t\t} else if (boundsZoom <= mapZoom) { //If fitBounds wouldn't zoom us down, zoom us down instead\r\n\t\t\tthis._group._map.setView(this._latlng, mapZoom + 1);\r\n\t\t} else {\r\n\t\t\tthis._group._map.fitBounds(this._bounds, fitBoundsOptions);\r\n\t\t}\r\n\t},\r\n\r\n\tgetBounds: function () {\r\n\t\tvar bounds = new L.LatLngBounds();\r\n\t\tbounds.extend(this._bounds);\r\n\t\treturn bounds;\r\n\t},\r\n\r\n\t_updateIcon: function () {\r\n\t\tthis._iconNeedsUpdate = true;\r\n\t\tif (this._icon) {\r\n\t\t\tthis.setIcon(this);\r\n\t\t}\r\n\t},\r\n\r\n\t//Cludge for Icon, we pretend to be an icon for performance\r\n\tcreateIcon: function () {\r\n\t\tif (this._iconNeedsUpdate) {\r\n\t\t\tthis._iconObj = this._group.options.iconCreateFunction(this);\r\n\t\t\tthis._iconNeedsUpdate = false;\r\n\t\t}\r\n\t\treturn this._iconObj.createIcon();\r\n\t},\r\n\tcreateShadow: function () {\r\n\t\treturn this._iconObj.createShadow();\r\n\t},\r\n\r\n\r\n\t_addChild: function (new1, isNotificationFromChild) {\r\n\r\n\t\tthis._iconNeedsUpdate = true;\r\n\r\n\t\tthis._boundsNeedUpdate = true;\r\n\t\tthis._setClusterCenter(new1);\r\n\r\n\t\tif (new1 instanceof L.MarkerCluster) {\r\n\t\t\tif (!isNotificationFromChild) {\r\n\t\t\t\tthis._childClusters.push(new1);\r\n\t\t\t\tnew1.__parent = this;\r\n\t\t\t}\r\n\t\t\tthis._childCount += new1._childCount;\r\n\t\t} else {\r\n\t\t\tif (!isNotificationFromChild) {\r\n\t\t\t\tthis._markers.push(new1);\r\n\t\t\t}\r\n\t\t\tthis._childCount++;\r\n\t\t}\r\n\r\n\t\tif (this.__parent) {\r\n\t\t\tthis.__parent._addChild(new1, true);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Makes sure the cluster center is set. If not, uses the child center if it is a cluster, or the marker position.\r\n\t * @param child L.MarkerCluster|L.Marker that will be used as cluster center if not defined yet.\r\n\t * @private\r\n\t */\r\n\t_setClusterCenter: function (child) {\r\n\t\tif (!this._cLatLng) {\r\n\t\t\t// when clustering, take position of the first point as the cluster center\r\n\t\t\tthis._cLatLng = child._cLatLng || child._latlng;\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Assigns impossible bounding values so that the next extend entirely determines the new bounds.\r\n\t * This method avoids having to trash the previous L.LatLngBounds object and to create a new one, which is much slower for this class.\r\n\t * As long as the bounds are not extended, most other methods would probably fail, as they would with bounds initialized but not extended.\r\n\t * @private\r\n\t */\r\n\t_resetBounds: function () {\r\n\t\tvar bounds = this._bounds;\r\n\r\n\t\tif (bounds._southWest) {\r\n\t\t\tbounds._southWest.lat = Infinity;\r\n\t\t\tbounds._southWest.lng = Infinity;\r\n\t\t}\r\n\t\tif (bounds._northEast) {\r\n\t\t\tbounds._northEast.lat = -Infinity;\r\n\t\t\tbounds._northEast.lng = -Infinity;\r\n\t\t}\r\n\t},\r\n\r\n\t_recalculateBounds: function () {\r\n\t\tvar markers = this._markers,\r\n\t\t childClusters = this._childClusters,\r\n\t\t latSum = 0,\r\n\t\t lngSum = 0,\r\n\t\t totalCount = this._childCount,\r\n\t\t i, child, childLatLng, childCount;\r\n\r\n\t\t// Case where all markers are removed from the map and we are left with just an empty _topClusterLevel.\r\n\t\tif (totalCount === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Reset rather than creating a new object, for performance.\r\n\t\tthis._resetBounds();\r\n\r\n\t\t// Child markers.\r\n\t\tfor (i = 0; i < markers.length; i++) {\r\n\t\t\tchildLatLng = markers[i]._latlng;\r\n\r\n\t\t\tthis._bounds.extend(childLatLng);\r\n\r\n\t\t\tlatSum += childLatLng.lat;\r\n\t\t\tlngSum += childLatLng.lng;\r\n\t\t}\r\n\r\n\t\t// Child clusters.\r\n\t\tfor (i = 0; i < childClusters.length; i++) {\r\n\t\t\tchild = childClusters[i];\r\n\r\n\t\t\t// Re-compute child bounds and weighted position first if necessary.\r\n\t\t\tif (child._boundsNeedUpdate) {\r\n\t\t\t\tchild._recalculateBounds();\r\n\t\t\t}\r\n\r\n\t\t\tthis._bounds.extend(child._bounds);\r\n\r\n\t\t\tchildLatLng = child._wLatLng;\r\n\t\t\tchildCount = child._childCount;\r\n\r\n\t\t\tlatSum += childLatLng.lat * childCount;\r\n\t\t\tlngSum += childLatLng.lng * childCount;\r\n\t\t}\r\n\r\n\t\tthis._latlng = this._wLatLng = new L.LatLng(latSum / totalCount, lngSum / totalCount);\r\n\r\n\t\t// Reset dirty flag.\r\n\t\tthis._boundsNeedUpdate = false;\r\n\t},\r\n\r\n\t//Set our markers position as given and add it to the map\r\n\t_addToMap: function (startPos) {\r\n\t\tif (startPos) {\r\n\t\t\tthis._backupLatlng = this._latlng;\r\n\t\t\tthis.setLatLng(startPos);\r\n\t\t}\r\n\t\tthis._group._featureGroup.addLayer(this);\r\n\t},\r\n\r\n\t_recursivelyAnimateChildrenIn: function (bounds, center, maxZoom) {\r\n\t\tthis._recursively(bounds, this._group._map.getMinZoom(), maxZoom - 1,\r\n\t\t\tfunction (c) {\r\n\t\t\t\tvar markers = c._markers,\r\n\t\t\t\t\ti, m;\r\n\t\t\t\tfor (i = markers.length - 1; i >= 0; i--) {\r\n\t\t\t\t\tm = markers[i];\r\n\r\n\t\t\t\t\t//Only do it if the icon is still on the map\r\n\t\t\t\t\tif (m._icon) {\r\n\t\t\t\t\t\tm._setPos(center);\r\n\t\t\t\t\t\tm.clusterHide();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tfunction (c) {\r\n\t\t\t\tvar childClusters = c._childClusters,\r\n\t\t\t\t\tj, cm;\r\n\t\t\t\tfor (j = childClusters.length - 1; j >= 0; j--) {\r\n\t\t\t\t\tcm = childClusters[j];\r\n\t\t\t\t\tif (cm._icon) {\r\n\t\t\t\t\t\tcm._setPos(center);\r\n\t\t\t\t\t\tcm.clusterHide();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\t},\r\n\r\n\t_recursivelyAnimateChildrenInAndAddSelfToMap: function (bounds, mapMinZoom, previousZoomLevel, newZoomLevel) {\r\n\t\tthis._recursively(bounds, newZoomLevel, mapMinZoom,\r\n\t\t\tfunction (c) {\r\n\t\t\t\tc._recursivelyAnimateChildrenIn(bounds, c._group._map.latLngToLayerPoint(c.getLatLng()).round(), previousZoomLevel);\r\n\r\n\t\t\t\t//TODO: depthToAnimateIn affects _isSingleParent, if there is a multizoom we may/may not be.\r\n\t\t\t\t//As a hack we only do a animation free zoom on a single level zoom, if someone does multiple levels then we always animate\r\n\t\t\t\tif (c._isSingleParent() && previousZoomLevel - 1 === newZoomLevel) {\r\n\t\t\t\t\tc.clusterShow();\r\n\t\t\t\t\tc._recursivelyRemoveChildrenFromMap(bounds, mapMinZoom, previousZoomLevel); //Immediately remove our children as we are replacing them. TODO previousBounds not bounds\r\n\t\t\t\t} else {\r\n\t\t\t\t\tc.clusterHide();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tc._addToMap();\r\n\t\t\t}\r\n\t\t);\r\n\t},\r\n\r\n\t_recursivelyBecomeVisible: function (bounds, zoomLevel) {\r\n\t\tthis._recursively(bounds, this._group._map.getMinZoom(), zoomLevel, null, function (c) {\r\n\t\t\tc.clusterShow();\r\n\t\t});\r\n\t},\r\n\r\n\t_recursivelyAddChildrenToMap: function (startPos, zoomLevel, bounds) {\r\n\t\tthis._recursively(bounds, this._group._map.getMinZoom() - 1, zoomLevel,\r\n\t\t\tfunction (c) {\r\n\t\t\t\tif (zoomLevel === c._zoom) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//Add our child markers at startPos (so they can be animated out)\r\n\t\t\t\tfor (var i = c._markers.length - 1; i >= 0; i--) {\r\n\t\t\t\t\tvar nm = c._markers[i];\r\n\r\n\t\t\t\t\tif (!bounds.contains(nm._latlng)) {\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (startPos) {\r\n\t\t\t\t\t\tnm._backupLatlng = nm.getLatLng();\r\n\r\n\t\t\t\t\t\tnm.setLatLng(startPos);\r\n\t\t\t\t\t\tif (nm.clusterHide) {\r\n\t\t\t\t\t\t\tnm.clusterHide();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tc._group._featureGroup.addLayer(nm);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tfunction (c) {\r\n\t\t\t\tc._addToMap(startPos);\r\n\t\t\t}\r\n\t\t);\r\n\t},\r\n\r\n\t_recursivelyRestoreChildPositions: function (zoomLevel) {\r\n\t\t//Fix positions of child markers\r\n\t\tfor (var i = this._markers.length - 1; i >= 0; i--) {\r\n\t\t\tvar nm = this._markers[i];\r\n\t\t\tif (nm._backupLatlng) {\r\n\t\t\t\tnm.setLatLng(nm._backupLatlng);\r\n\t\t\t\tdelete nm._backupLatlng;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (zoomLevel - 1 === this._zoom) {\r\n\t\t\t//Reposition child clusters\r\n\t\t\tfor (var j = this._childClusters.length - 1; j >= 0; j--) {\r\n\t\t\t\tthis._childClusters[j]._restorePosition();\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tfor (var k = this._childClusters.length - 1; k >= 0; k--) {\r\n\t\t\t\tthis._childClusters[k]._recursivelyRestoreChildPositions(zoomLevel);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_restorePosition: function () {\r\n\t\tif (this._backupLatlng) {\r\n\t\t\tthis.setLatLng(this._backupLatlng);\r\n\t\t\tdelete this._backupLatlng;\r\n\t\t}\r\n\t},\r\n\r\n\t//exceptBounds: If set, don't remove any markers/clusters in it\r\n\t_recursivelyRemoveChildrenFromMap: function (previousBounds, mapMinZoom, zoomLevel, exceptBounds) {\r\n\t\tvar m, i;\r\n\t\tthis._recursively(previousBounds, mapMinZoom - 1, zoomLevel - 1,\r\n\t\t\tfunction (c) {\r\n\t\t\t\t//Remove markers at every level\r\n\t\t\t\tfor (i = c._markers.length - 1; i >= 0; i--) {\r\n\t\t\t\t\tm = c._markers[i];\r\n\t\t\t\t\tif (!exceptBounds || !exceptBounds.contains(m._latlng)) {\r\n\t\t\t\t\t\tc._group._featureGroup.removeLayer(m);\r\n\t\t\t\t\t\tif (m.clusterShow) {\r\n\t\t\t\t\t\t\tm.clusterShow();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tfunction (c) {\r\n\t\t\t\t//Remove child clusters at just the bottom level\r\n\t\t\t\tfor (i = c._childClusters.length - 1; i >= 0; i--) {\r\n\t\t\t\t\tm = c._childClusters[i];\r\n\t\t\t\t\tif (!exceptBounds || !exceptBounds.contains(m._latlng)) {\r\n\t\t\t\t\t\tc._group._featureGroup.removeLayer(m);\r\n\t\t\t\t\t\tif (m.clusterShow) {\r\n\t\t\t\t\t\t\tm.clusterShow();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\t},\r\n\r\n\t//Run the given functions recursively to this and child clusters\r\n\t// boundsToApplyTo: a L.LatLngBounds representing the bounds of what clusters to recurse in to\r\n\t// zoomLevelToStart: zoom level to start running functions (inclusive)\r\n\t// zoomLevelToStop: zoom level to stop running functions (inclusive)\r\n\t// runAtEveryLevel: function that takes an L.MarkerCluster as an argument that should be applied on every level\r\n\t// runAtBottomLevel: function that takes an L.MarkerCluster as an argument that should be applied at only the bottom level\r\n\t_recursively: function (boundsToApplyTo, zoomLevelToStart, zoomLevelToStop, runAtEveryLevel, runAtBottomLevel) {\r\n\t\tvar childClusters = this._childClusters,\r\n\t\t zoom = this._zoom,\r\n\t\t i, c;\r\n\r\n\t\tif (zoomLevelToStart <= zoom) {\r\n\t\t\tif (runAtEveryLevel) {\r\n\t\t\t\trunAtEveryLevel(this);\r\n\t\t\t}\r\n\t\t\tif (runAtBottomLevel && zoom === zoomLevelToStop) {\r\n\t\t\t\trunAtBottomLevel(this);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (zoom < zoomLevelToStart || zoom < zoomLevelToStop) {\r\n\t\t\tfor (i = childClusters.length - 1; i >= 0; i--) {\r\n\t\t\t\tc = childClusters[i];\r\n\t\t\t\tif (c._boundsNeedUpdate) {\r\n\t\t\t\t\tc._recalculateBounds();\r\n\t\t\t\t}\r\n\t\t\t\tif (boundsToApplyTo.intersects(c._bounds)) {\r\n\t\t\t\t\tc._recursively(boundsToApplyTo, zoomLevelToStart, zoomLevelToStop, runAtEveryLevel, runAtBottomLevel);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//Returns true if we are the parent of only one cluster and that cluster is the same as us\r\n\t_isSingleParent: function () {\r\n\t\t//Don't need to check this._markers as the rest won't work if there are any\r\n\t\treturn this._childClusters.length > 0 && this._childClusters[0]._childCount === this._childCount;\r\n\t}\r\n});\r\n\r\n","/*\r\n* Extends L.Marker to include two extra methods: clusterHide and clusterShow.\r\n* \r\n* They work as setOpacity(0) and setOpacity(1) respectively, but\r\n* don't overwrite the options.opacity\r\n* \r\n*/\r\n\r\nL.Marker.include({\r\n\tclusterHide: function () {\r\n\t\tvar backup = this.options.opacity;\r\n\t\tthis.setOpacity(0);\r\n\t\tthis.options.opacity = backup;\r\n\t\treturn this;\r\n\t},\r\n\t\r\n\tclusterShow: function () {\r\n\t\treturn this.setOpacity(this.options.opacity);\r\n\t}\r\n});\r\n\r\n\r\n","\r\nL.DistanceGrid = function (cellSize) {\r\n\tthis._cellSize = cellSize;\r\n\tthis._sqCellSize = cellSize * cellSize;\r\n\tthis._grid = {};\r\n\tthis._objectPoint = { };\r\n};\r\n\r\nL.DistanceGrid.prototype = {\r\n\r\n\taddObject: function (obj, point) {\r\n\t\tvar x = this._getCoord(point.x),\r\n\t\t y = this._getCoord(point.y),\r\n\t\t grid = this._grid,\r\n\t\t row = grid[y] = grid[y] || {},\r\n\t\t cell = row[x] = row[x] || [],\r\n\t\t stamp = L.Util.stamp(obj);\r\n\r\n\t\tthis._objectPoint[stamp] = point;\r\n\r\n\t\tcell.push(obj);\r\n\t},\r\n\r\n\tupdateObject: function (obj, point) {\r\n\t\tthis.removeObject(obj);\r\n\t\tthis.addObject(obj, point);\r\n\t},\r\n\r\n\t//Returns true if the object was found\r\n\tremoveObject: function (obj, point) {\r\n\t\tvar x = this._getCoord(point.x),\r\n\t\t y = this._getCoord(point.y),\r\n\t\t grid = this._grid,\r\n\t\t row = grid[y] = grid[y] || {},\r\n\t\t cell = row[x] = row[x] || [],\r\n\t\t i, len;\r\n\r\n\t\tdelete this._objectPoint[L.Util.stamp(obj)];\r\n\r\n\t\tfor (i = 0, len = cell.length; i < len; i++) {\r\n\t\t\tif (cell[i] === obj) {\r\n\r\n\t\t\t\tcell.splice(i, 1);\r\n\r\n\t\t\t\tif (len === 1) {\r\n\t\t\t\t\tdelete row[x];\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t},\r\n\r\n\teachObject: function (fn, context) {\r\n\t\tvar i, j, k, len, row, cell, removed,\r\n\t\t grid = this._grid;\r\n\r\n\t\tfor (i in grid) {\r\n\t\t\trow = grid[i];\r\n\r\n\t\t\tfor (j in row) {\r\n\t\t\t\tcell = row[j];\r\n\r\n\t\t\t\tfor (k = 0, len = cell.length; k < len; k++) {\r\n\t\t\t\t\tremoved = fn.call(context, cell[k]);\r\n\t\t\t\t\tif (removed) {\r\n\t\t\t\t\t\tk--;\r\n\t\t\t\t\t\tlen--;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tgetNearObject: function (point) {\r\n\t\tvar x = this._getCoord(point.x),\r\n\t\t y = this._getCoord(point.y),\r\n\t\t i, j, k, row, cell, len, obj, dist,\r\n\t\t objectPoint = this._objectPoint,\r\n\t\t closestDistSq = this._sqCellSize,\r\n\t\t closest = null;\r\n\r\n\t\tfor (i = y - 1; i <= y + 1; i++) {\r\n\t\t\trow = this._grid[i];\r\n\t\t\tif (row) {\r\n\r\n\t\t\t\tfor (j = x - 1; j <= x + 1; j++) {\r\n\t\t\t\t\tcell = row[j];\r\n\t\t\t\t\tif (cell) {\r\n\r\n\t\t\t\t\t\tfor (k = 0, len = cell.length; k < len; k++) {\r\n\t\t\t\t\t\t\tobj = cell[k];\r\n\t\t\t\t\t\t\tdist = this._sqDist(objectPoint[L.Util.stamp(obj)], point);\r\n\t\t\t\t\t\t\tif (dist < closestDistSq ||\r\n\t\t\t\t\t\t\t\tdist <= closestDistSq && closest === null) {\r\n\t\t\t\t\t\t\t\tclosestDistSq = dist;\r\n\t\t\t\t\t\t\t\tclosest = obj;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn closest;\r\n\t},\r\n\r\n\t_getCoord: function (x) {\r\n\t\tvar coord = Math.floor(x / this._cellSize);\r\n\t\treturn isFinite(coord) ? coord : x;\r\n\t},\r\n\r\n\t_sqDist: function (p, p2) {\r\n\t\tvar dx = p2.x - p.x,\r\n\t\t dy = p2.y - p.y;\r\n\t\treturn dx * dx + dy * dy;\r\n\t}\r\n};\r\n","/* Copyright (c) 2012 the authors listed at the following URL, and/or\r\nthe authors of referenced articles or incorporated external code:\r\nhttp://en.literateprograms.org/Quickhull_(Javascript)?action=history&offset=20120410175256\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining\r\na copy of this software and associated documentation files (the\r\n\"Software\"), to deal in the Software without restriction, including\r\nwithout limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Software, and to\r\npermit persons to whom the Software is furnished to do so, subject to\r\nthe following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be\r\nincluded in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\nRetrieved from: http://en.literateprograms.org/Quickhull_(Javascript)?oldid=18434\r\n*/\r\n\r\n(function () {\r\n\tL.QuickHull = {\r\n\r\n\t\t/*\r\n\t\t * @param {Object} cpt a point to be measured from the baseline\r\n\t\t * @param {Array} bl the baseline, as represented by a two-element\r\n\t\t * array of latlng objects.\r\n\t\t * @returns {Number} an approximate distance measure\r\n\t\t */\r\n\t\tgetDistant: function (cpt, bl) {\r\n\t\t\tvar vY = bl[1].lat - bl[0].lat,\r\n\t\t\t\tvX = bl[0].lng - bl[1].lng;\r\n\t\t\treturn (vX * (cpt.lat - bl[0].lat) + vY * (cpt.lng - bl[0].lng));\r\n\t\t},\r\n\r\n\t\t/*\r\n\t\t * @param {Array} baseLine a two-element array of latlng objects\r\n\t\t * representing the baseline to project from\r\n\t\t * @param {Array} latLngs an array of latlng objects\r\n\t\t * @returns {Object} the maximum point and all new points to stay\r\n\t\t * in consideration for the hull.\r\n\t\t */\r\n\t\tfindMostDistantPointFromBaseLine: function (baseLine, latLngs) {\r\n\t\t\tvar maxD = 0,\r\n\t\t\t\tmaxPt = null,\r\n\t\t\t\tnewPoints = [],\r\n\t\t\t\ti, pt, d;\r\n\r\n\t\t\tfor (i = latLngs.length - 1; i >= 0; i--) {\r\n\t\t\t\tpt = latLngs[i];\r\n\t\t\t\td = this.getDistant(pt, baseLine);\r\n\r\n\t\t\t\tif (d > 0) {\r\n\t\t\t\t\tnewPoints.push(pt);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (d > maxD) {\r\n\t\t\t\t\tmaxD = d;\r\n\t\t\t\t\tmaxPt = pt;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn { maxPoint: maxPt, newPoints: newPoints };\r\n\t\t},\r\n\r\n\r\n\t\t/*\r\n\t\t * Given a baseline, compute the convex hull of latLngs as an array\r\n\t\t * of latLngs.\r\n\t\t *\r\n\t\t * @param {Array} latLngs\r\n\t\t * @returns {Array}\r\n\t\t */\r\n\t\tbuildConvexHull: function (baseLine, latLngs) {\r\n\t\t\tvar convexHullBaseLines = [],\r\n\t\t\t\tt = this.findMostDistantPointFromBaseLine(baseLine, latLngs);\r\n\r\n\t\t\tif (t.maxPoint) { // if there is still a point \"outside\" the base line\r\n\t\t\t\tconvexHullBaseLines =\r\n\t\t\t\t\tconvexHullBaseLines.concat(\r\n\t\t\t\t\t\tthis.buildConvexHull([baseLine[0], t.maxPoint], t.newPoints)\r\n\t\t\t\t\t);\r\n\t\t\t\tconvexHullBaseLines =\r\n\t\t\t\t\tconvexHullBaseLines.concat(\r\n\t\t\t\t\t\tthis.buildConvexHull([t.maxPoint, baseLine[1]], t.newPoints)\r\n\t\t\t\t\t);\r\n\t\t\t\treturn convexHullBaseLines;\r\n\t\t\t} else { // if there is no more point \"outside\" the base line, the current base line is part of the convex hull\r\n\t\t\t\treturn [baseLine[0]];\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/*\r\n\t\t * Given an array of latlngs, compute a convex hull as an array\r\n\t\t * of latlngs\r\n\t\t *\r\n\t\t * @param {Array} latLngs\r\n\t\t * @returns {Array}\r\n\t\t */\r\n\t\tgetConvexHull: function (latLngs) {\r\n\t\t\t// find first baseline\r\n\t\t\tvar maxLat = false, minLat = false,\r\n\t\t\t\tmaxLng = false, minLng = false,\r\n\t\t\t\tmaxLatPt = null, minLatPt = null,\r\n\t\t\t\tmaxLngPt = null, minLngPt = null,\r\n\t\t\t\tmaxPt = null, minPt = null,\r\n\t\t\t\ti;\r\n\r\n\t\t\tfor (i = latLngs.length - 1; i >= 0; i--) {\r\n\t\t\t\tvar pt = latLngs[i];\r\n\t\t\t\tif (maxLat === false || pt.lat > maxLat) {\r\n\t\t\t\t\tmaxLatPt = pt;\r\n\t\t\t\t\tmaxLat = pt.lat;\r\n\t\t\t\t}\r\n\t\t\t\tif (minLat === false || pt.lat < minLat) {\r\n\t\t\t\t\tminLatPt = pt;\r\n\t\t\t\t\tminLat = pt.lat;\r\n\t\t\t\t}\r\n\t\t\t\tif (maxLng === false || pt.lng > maxLng) {\r\n\t\t\t\t\tmaxLngPt = pt;\r\n\t\t\t\t\tmaxLng = pt.lng;\r\n\t\t\t\t}\r\n\t\t\t\tif (minLng === false || pt.lng < minLng) {\r\n\t\t\t\t\tminLngPt = pt;\r\n\t\t\t\t\tminLng = pt.lng;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (minLat !== maxLat) {\r\n\t\t\t\tminPt = minLatPt;\r\n\t\t\t\tmaxPt = maxLatPt;\r\n\t\t\t} else {\r\n\t\t\t\tminPt = minLngPt;\r\n\t\t\t\tmaxPt = maxLngPt;\r\n\t\t\t}\r\n\r\n\t\t\tvar ch = [].concat(this.buildConvexHull([minPt, maxPt], latLngs),\r\n\t\t\t\t\t\t\t\tthis.buildConvexHull([maxPt, minPt], latLngs));\r\n\t\t\treturn ch;\r\n\t\t}\r\n\t};\r\n}());\r\n\r\nL.MarkerCluster.include({\r\n\tgetConvexHull: function () {\r\n\t\tvar childMarkers = this.getAllChildMarkers(),\r\n\t\t\tpoints = [],\r\n\t\t\tp, i;\r\n\r\n\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\r\n\t\t\tp = childMarkers[i].getLatLng();\r\n\t\t\tpoints.push(p);\r\n\t\t}\r\n\r\n\t\treturn L.QuickHull.getConvexHull(points);\r\n\t}\r\n});\r\n","//This code is 100% based on https://github.com/jawj/OverlappingMarkerSpiderfier-Leaflet\r\n//Huge thanks to jawj for implementing it first to make my job easy :-)\r\n\r\nL.MarkerCluster.include({\r\n\r\n\t_2PI: Math.PI * 2,\r\n\t_circleFootSeparation: 25, //related to circumference of circle\r\n\t_circleStartAngle: 0,\r\n\r\n\t_spiralFootSeparation: 28, //related to size of spiral (experiment!)\r\n\t_spiralLengthStart: 11,\r\n\t_spiralLengthFactor: 5,\r\n\r\n\t_circleSpiralSwitchover: 9, //show spiral instead of circle from this marker count upwards.\r\n\t\t\t\t\t\t\t\t// 0 -> always spiral; Infinity -> always circle\r\n\r\n\tspiderfy: function () {\r\n\t\tif (this._group._spiderfied === this || this._group._inZoomAnimation) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar childMarkers = this.getAllChildMarkers(null, true),\r\n\t\t\tgroup = this._group,\r\n\t\t\tmap = group._map,\r\n\t\t\tcenter = map.latLngToLayerPoint(this._latlng),\r\n\t\t\tpositions;\r\n\r\n\t\tthis._group._unspiderfy();\r\n\t\tthis._group._spiderfied = this;\r\n\r\n\t\t//TODO Maybe: childMarkers order by distance to center\r\n\r\n\t\tif (childMarkers.length >= this._circleSpiralSwitchover) {\r\n\t\t\tpositions = this._generatePointsSpiral(childMarkers.length, center);\r\n\t\t} else {\r\n\t\t\tcenter.y += 10; // Otherwise circles look wrong => hack for standard blue icon, renders differently for other icons.\r\n\t\t\tpositions = this._generatePointsCircle(childMarkers.length, center);\r\n\t\t}\r\n\r\n\t\tthis._animationSpiderfy(childMarkers, positions);\r\n\t},\r\n\r\n\tunspiderfy: function (zoomDetails) {\r\n\t\t/// Argument from zoomanim if being called in a zoom animation or null otherwise\r\n\t\tif (this._group._inZoomAnimation) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._animationUnspiderfy(zoomDetails);\r\n\r\n\t\tthis._group._spiderfied = null;\r\n\t},\r\n\r\n\t_generatePointsCircle: function (count, centerPt) {\r\n\t\tvar circumference = this._group.options.spiderfyDistanceMultiplier * this._circleFootSeparation * (2 + count),\r\n\t\t\tlegLength = circumference / this._2PI, //radius from circumference\r\n\t\t\tangleStep = this._2PI / count,\r\n\t\t\tres = [],\r\n\t\t\ti, angle;\r\n\r\n\t\tlegLength = Math.max(legLength, 35); // Minimum distance to get outside the cluster icon.\r\n\r\n\t\tres.length = count;\r\n\r\n\t\tfor (i = 0; i < count; i++) { // Clockwise, like spiral.\r\n\t\t\tangle = this._circleStartAngle + i * angleStep;\r\n\t\t\tres[i] = new L.Point(centerPt.x + legLength * Math.cos(angle), centerPt.y + legLength * Math.sin(angle))._round();\r\n\t\t}\r\n\r\n\t\treturn res;\r\n\t},\r\n\r\n\t_generatePointsSpiral: function (count, centerPt) {\r\n\t\tvar spiderfyDistanceMultiplier = this._group.options.spiderfyDistanceMultiplier,\r\n\t\t\tlegLength = spiderfyDistanceMultiplier * this._spiralLengthStart,\r\n\t\t\tseparation = spiderfyDistanceMultiplier * this._spiralFootSeparation,\r\n\t\t\tlengthFactor = spiderfyDistanceMultiplier * this._spiralLengthFactor * this._2PI,\r\n\t\t\tangle = 0,\r\n\t\t\tres = [],\r\n\t\t\ti;\r\n\r\n\t\tres.length = count;\r\n\r\n\t\t// Higher index, closer position to cluster center.\r\n\t\tfor (i = count; i >= 0; i--) {\r\n\t\t\t// Skip the first position, so that we are already farther from center and we avoid\r\n\t\t\t// being under the default cluster icon (especially important for Circle Markers).\r\n\t\t\tif (i < count) {\r\n\t\t\t\tres[i] = new L.Point(centerPt.x + legLength * Math.cos(angle), centerPt.y + legLength * Math.sin(angle))._round();\r\n\t\t\t}\r\n\t\t\tangle += separation / legLength + i * 0.0005;\r\n\t\t\tlegLength += lengthFactor / angle;\r\n\t\t}\r\n\t\treturn res;\r\n\t},\r\n\r\n\t_noanimationUnspiderfy: function () {\r\n\t\tvar group = this._group,\r\n\t\t\tmap = group._map,\r\n\t\t\tfg = group._featureGroup,\r\n\t\t\tchildMarkers = this.getAllChildMarkers(null, true),\r\n\t\t\tm, i;\r\n\r\n\t\tgroup._ignoreMove = true;\r\n\r\n\t\tthis.setOpacity(1);\r\n\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\r\n\t\t\tm = childMarkers[i];\r\n\r\n\t\t\tfg.removeLayer(m);\r\n\r\n\t\t\tif (m._preSpiderfyLatlng) {\r\n\t\t\t\tm.setLatLng(m._preSpiderfyLatlng);\r\n\t\t\t\tdelete m._preSpiderfyLatlng;\r\n\t\t\t}\r\n\t\t\tif (m.setZIndexOffset) {\r\n\t\t\t\tm.setZIndexOffset(0);\r\n\t\t\t}\r\n\r\n\t\t\tif (m._spiderLeg) {\r\n\t\t\t\tmap.removeLayer(m._spiderLeg);\r\n\t\t\t\tdelete m._spiderLeg;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tgroup.fire('unspiderfied', {\r\n\t\t\tcluster: this,\r\n\t\t\tmarkers: childMarkers\r\n\t\t});\r\n\t\tgroup._ignoreMove = false;\r\n\t\tgroup._spiderfied = null;\r\n\t}\r\n});\r\n\r\n//Non Animated versions of everything\r\nL.MarkerClusterNonAnimated = L.MarkerCluster.extend({\r\n\t_animationSpiderfy: function (childMarkers, positions) {\r\n\t\tvar group = this._group,\r\n\t\t\tmap = group._map,\r\n\t\t\tfg = group._featureGroup,\r\n\t\t\tlegOptions = this._group.options.spiderLegPolylineOptions,\r\n\t\t\ti, m, leg, newPos;\r\n\r\n\t\tgroup._ignoreMove = true;\r\n\r\n\t\t// Traverse in ascending order to make sure that inner circleMarkers are on top of further legs. Normal markers are re-ordered by newPosition.\r\n\t\t// The reverse order trick no longer improves performance on modern browsers.\r\n\t\tfor (i = 0; i < childMarkers.length; i++) {\r\n\t\t\tnewPos = map.layerPointToLatLng(positions[i]);\r\n\t\t\tm = childMarkers[i];\r\n\r\n\t\t\t// Add the leg before the marker, so that in case the latter is a circleMarker, the leg is behind it.\r\n\t\t\tleg = new L.Polyline([this._latlng, newPos], legOptions);\r\n\t\t\tmap.addLayer(leg);\r\n\t\t\tm._spiderLeg = leg;\r\n\r\n\t\t\t// Now add the marker.\r\n\t\t\tm._preSpiderfyLatlng = m._latlng;\r\n\t\t\tm.setLatLng(newPos);\r\n\t\t\tif (m.setZIndexOffset) {\r\n\t\t\t\tm.setZIndexOffset(1000000); //Make these appear on top of EVERYTHING\r\n\t\t\t}\r\n\r\n\t\t\tfg.addLayer(m);\r\n\t\t}\r\n\t\tthis.setOpacity(0.3);\r\n\r\n\t\tgroup._ignoreMove = false;\r\n\t\tgroup.fire('spiderfied', {\r\n\t\t\tcluster: this,\r\n\t\t\tmarkers: childMarkers\r\n\t\t});\r\n\t},\r\n\r\n\t_animationUnspiderfy: function () {\r\n\t\tthis._noanimationUnspiderfy();\r\n\t}\r\n});\r\n\r\n//Animated versions here\r\nL.MarkerCluster.include({\r\n\r\n\t_animationSpiderfy: function (childMarkers, positions) {\r\n\t\tvar me = this,\r\n\t\t\tgroup = this._group,\r\n\t\t\tmap = group._map,\r\n\t\t\tfg = group._featureGroup,\r\n\t\t\tthisLayerLatLng = this._latlng,\r\n\t\t\tthisLayerPos = map.latLngToLayerPoint(thisLayerLatLng),\r\n\t\t\tsvg = L.Path.SVG,\r\n\t\t\tlegOptions = L.extend({}, this._group.options.spiderLegPolylineOptions), // Copy the options so that we can modify them for animation.\r\n\t\t\tfinalLegOpacity = legOptions.opacity,\r\n\t\t\ti, m, leg, legPath, legLength, newPos;\r\n\r\n\t\tif (finalLegOpacity === undefined) {\r\n\t\t\tfinalLegOpacity = L.MarkerClusterGroup.prototype.options.spiderLegPolylineOptions.opacity;\r\n\t\t}\r\n\r\n\t\tif (svg) {\r\n\t\t\t// If the initial opacity of the spider leg is not 0 then it appears before the animation starts.\r\n\t\t\tlegOptions.opacity = 0;\r\n\r\n\t\t\t// Add the class for CSS transitions.\r\n\t\t\tlegOptions.className = (legOptions.className || '') + ' leaflet-cluster-spider-leg';\r\n\t\t} else {\r\n\t\t\t// Make sure we have a defined opacity.\r\n\t\t\tlegOptions.opacity = finalLegOpacity;\r\n\t\t}\r\n\r\n\t\tgroup._ignoreMove = true;\r\n\r\n\t\t// Add markers and spider legs to map, hidden at our center point.\r\n\t\t// Traverse in ascending order to make sure that inner circleMarkers are on top of further legs. Normal markers are re-ordered by newPosition.\r\n\t\t// The reverse order trick no longer improves performance on modern browsers.\r\n\t\tfor (i = 0; i < childMarkers.length; i++) {\r\n\t\t\tm = childMarkers[i];\r\n\r\n\t\t\tnewPos = map.layerPointToLatLng(positions[i]);\r\n\r\n\t\t\t// Add the leg before the marker, so that in case the latter is a circleMarker, the leg is behind it.\r\n\t\t\tleg = new L.Polyline([thisLayerLatLng, newPos], legOptions);\r\n\t\t\tmap.addLayer(leg);\r\n\t\t\tm._spiderLeg = leg;\r\n\r\n\t\t\t// Explanations: https://jakearchibald.com/2013/animated-line-drawing-svg/\r\n\t\t\t// In our case the transition property is declared in the CSS file.\r\n\t\t\tif (svg) {\r\n\t\t\t\tlegPath = leg._path;\r\n\t\t\t\tlegLength = legPath.getTotalLength() + 0.1; // Need a small extra length to avoid remaining dot in Firefox.\r\n\t\t\t\tlegPath.style.strokeDasharray = legLength; // Just 1 length is enough, it will be duplicated.\r\n\t\t\t\tlegPath.style.strokeDashoffset = legLength;\r\n\t\t\t}\r\n\r\n\t\t\t// If it is a marker, add it now and we'll animate it out\r\n\t\t\tif (m.setZIndexOffset) {\r\n\t\t\t\tm.setZIndexOffset(1000000); // Make normal markers appear on top of EVERYTHING\r\n\t\t\t}\r\n\t\t\tif (m.clusterHide) {\r\n\t\t\t\tm.clusterHide();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// Vectors just get immediately added\r\n\t\t\tfg.addLayer(m);\r\n\r\n\t\t\tif (m._setPos) {\r\n\t\t\t\tm._setPos(thisLayerPos);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tgroup._forceLayout();\r\n\t\tgroup._animationStart();\r\n\r\n\t\t// Reveal markers and spider legs.\r\n\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\r\n\t\t\tnewPos = map.layerPointToLatLng(positions[i]);\r\n\t\t\tm = childMarkers[i];\r\n\r\n\t\t\t//Move marker to new position\r\n\t\t\tm._preSpiderfyLatlng = m._latlng;\r\n\t\t\tm.setLatLng(newPos);\r\n\t\t\t\r\n\t\t\tif (m.clusterShow) {\r\n\t\t\t\tm.clusterShow();\r\n\t\t\t}\r\n\r\n\t\t\t// Animate leg (animation is actually delegated to CSS transition).\r\n\t\t\tif (svg) {\r\n\t\t\t\tleg = m._spiderLeg;\r\n\t\t\t\tlegPath = leg._path;\r\n\t\t\t\tlegPath.style.strokeDashoffset = 0;\r\n\t\t\t\t//legPath.style.strokeOpacity = finalLegOpacity;\r\n\t\t\t\tleg.setStyle({opacity: finalLegOpacity});\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.setOpacity(0.3);\r\n\r\n\t\tgroup._ignoreMove = false;\r\n\r\n\t\tsetTimeout(function () {\r\n\t\t\tgroup._animationEnd();\r\n\t\t\tgroup.fire('spiderfied', {\r\n\t\t\t\tcluster: me,\r\n\t\t\t\tmarkers: childMarkers\r\n\t\t\t});\r\n\t\t}, 200);\r\n\t},\r\n\r\n\t_animationUnspiderfy: function (zoomDetails) {\r\n\t\tvar me = this,\r\n\t\t\tgroup = this._group,\r\n\t\t\tmap = group._map,\r\n\t\t\tfg = group._featureGroup,\r\n\t\t\tthisLayerPos = zoomDetails ? map._latLngToNewLayerPoint(this._latlng, zoomDetails.zoom, zoomDetails.center) : map.latLngToLayerPoint(this._latlng),\r\n\t\t\tchildMarkers = this.getAllChildMarkers(null, true),\r\n\t\t\tsvg = L.Path.SVG,\r\n\t\t\tm, i, leg, legPath, legLength, nonAnimatable;\r\n\r\n\t\tgroup._ignoreMove = true;\r\n\t\tgroup._animationStart();\r\n\r\n\t\t//Make us visible and bring the child markers back in\r\n\t\tthis.setOpacity(1);\r\n\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\r\n\t\t\tm = childMarkers[i];\r\n\r\n\t\t\t//Marker was added to us after we were spiderfied\r\n\t\t\tif (!m._preSpiderfyLatlng) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\t//Close any popup on the marker first, otherwise setting the location of the marker will make the map scroll\r\n\t\t\tm.closePopup();\r\n\r\n\t\t\t//Fix up the location to the real one\r\n\t\t\tm.setLatLng(m._preSpiderfyLatlng);\r\n\t\t\tdelete m._preSpiderfyLatlng;\r\n\r\n\t\t\t//Hack override the location to be our center\r\n\t\t\tnonAnimatable = true;\r\n\t\t\tif (m._setPos) {\r\n\t\t\t\tm._setPos(thisLayerPos);\r\n\t\t\t\tnonAnimatable = false;\r\n\t\t\t}\r\n\t\t\tif (m.clusterHide) {\r\n\t\t\t\tm.clusterHide();\r\n\t\t\t\tnonAnimatable = false;\r\n\t\t\t}\r\n\t\t\tif (nonAnimatable) {\r\n\t\t\t\tfg.removeLayer(m);\r\n\t\t\t}\r\n\r\n\t\t\t// Animate the spider leg back in (animation is actually delegated to CSS transition).\r\n\t\t\tif (svg) {\r\n\t\t\t\tleg = m._spiderLeg;\r\n\t\t\t\tlegPath = leg._path;\r\n\t\t\t\tlegLength = legPath.getTotalLength() + 0.1;\r\n\t\t\t\tlegPath.style.strokeDashoffset = legLength;\r\n\t\t\t\tleg.setStyle({opacity: 0});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tgroup._ignoreMove = false;\r\n\r\n\t\tsetTimeout(function () {\r\n\t\t\t//If we have only <= one child left then that marker will be shown on the map so don't remove it!\r\n\t\t\tvar stillThereChildCount = 0;\r\n\t\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\r\n\t\t\t\tm = childMarkers[i];\r\n\t\t\t\tif (m._spiderLeg) {\r\n\t\t\t\t\tstillThereChildCount++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\r\n\t\t\t\tm = childMarkers[i];\r\n\r\n\t\t\t\tif (!m._spiderLeg) { //Has already been unspiderfied\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (m.clusterShow) {\r\n\t\t\t\t\tm.clusterShow();\r\n\t\t\t\t}\r\n\t\t\t\tif (m.setZIndexOffset) {\r\n\t\t\t\t\tm.setZIndexOffset(0);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (stillThereChildCount > 1) {\r\n\t\t\t\t\tfg.removeLayer(m);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tmap.removeLayer(m._spiderLeg);\r\n\t\t\t\tdelete m._spiderLeg;\r\n\t\t\t}\r\n\t\t\tgroup._animationEnd();\r\n\t\t\tgroup.fire('unspiderfied', {\r\n\t\t\t\tcluster: me,\r\n\t\t\t\tmarkers: childMarkers\r\n\t\t\t});\r\n\t\t}, 200);\r\n\t}\r\n});\r\n\r\n\r\nL.MarkerClusterGroup.include({\r\n\t//The MarkerCluster currently spiderfied (if any)\r\n\t_spiderfied: null,\r\n\r\n\tunspiderfy: function () {\r\n\t\tthis._unspiderfy.apply(this, arguments);\r\n\t},\r\n\r\n\t_spiderfierOnAdd: function () {\r\n\t\tthis._map.on('click', this._unspiderfyWrapper, this);\r\n\r\n\t\tif (this._map.options.zoomAnimation) {\r\n\t\t\tthis._map.on('zoomstart', this._unspiderfyZoomStart, this);\r\n\t\t}\r\n\t\t//Browsers without zoomAnimation or a big zoom don't fire zoomstart\r\n\t\tthis._map.on('zoomend', this._noanimationUnspiderfy, this);\r\n\r\n\t\tif (!L.Browser.touch) {\r\n\t\t\tthis._map.getRenderer(this);\r\n\t\t\t//Needs to happen in the pageload, not after, or animations don't work in webkit\r\n\t\t\t// http://stackoverflow.com/questions/8455200/svg-animate-with-dynamically-added-elements\r\n\t\t\t//Disable on touch browsers as the animation messes up on a touch zoom and isn't very noticable\r\n\t\t}\r\n\t},\r\n\r\n\t_spiderfierOnRemove: function () {\r\n\t\tthis._map.off('click', this._unspiderfyWrapper, this);\r\n\t\tthis._map.off('zoomstart', this._unspiderfyZoomStart, this);\r\n\t\tthis._map.off('zoomanim', this._unspiderfyZoomAnim, this);\r\n\t\tthis._map.off('zoomend', this._noanimationUnspiderfy, this);\r\n\r\n\t\t//Ensure that markers are back where they should be\r\n\t\t// Use no animation to avoid a sticky leaflet-cluster-anim class on mapPane\r\n\t\tthis._noanimationUnspiderfy();\r\n\t},\r\n\r\n\t//On zoom start we add a zoomanim handler so that we are guaranteed to be last (after markers are animated)\r\n\t//This means we can define the animation they do rather than Markers doing an animation to their actual location\r\n\t_unspiderfyZoomStart: function () {\r\n\t\tif (!this._map) { //May have been removed from the map by a zoomEnd handler\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._map.on('zoomanim', this._unspiderfyZoomAnim, this);\r\n\t},\r\n\r\n\t_unspiderfyZoomAnim: function (zoomDetails) {\r\n\t\t//Wait until the first zoomanim after the user has finished touch-zooming before running the animation\r\n\t\tif (L.DomUtil.hasClass(this._map._mapPane, 'leaflet-touching')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._map.off('zoomanim', this._unspiderfyZoomAnim, this);\r\n\t\tthis._unspiderfy(zoomDetails);\r\n\t},\r\n\r\n\t_unspiderfyWrapper: function () {\r\n\t\t/// _unspiderfy but passes no arguments\r\n\t\tthis._unspiderfy();\r\n\t},\r\n\r\n\t_unspiderfy: function (zoomDetails) {\r\n\t\tif (this._spiderfied) {\r\n\t\t\tthis._spiderfied.unspiderfy(zoomDetails);\r\n\t\t}\r\n\t},\r\n\r\n\t_noanimationUnspiderfy: function () {\r\n\t\tif (this._spiderfied) {\r\n\t\t\tthis._spiderfied._noanimationUnspiderfy();\r\n\t\t}\r\n\t},\r\n\r\n\t//If the given layer is currently being spiderfied then we unspiderfy it so it isn't on the map anymore etc\r\n\t_unspiderfyLayer: function (layer) {\r\n\t\tif (layer._spiderLeg) {\r\n\t\t\tthis._featureGroup.removeLayer(layer);\r\n\r\n\t\t\tif (layer.clusterShow) {\r\n\t\t\t\tlayer.clusterShow();\r\n\t\t\t}\r\n\t\t\t\t//Position will be fixed up immediately in _animationUnspiderfy\r\n\t\t\tif (layer.setZIndexOffset) {\r\n\t\t\t\tlayer.setZIndexOffset(0);\r\n\t\t\t}\r\n\r\n\t\t\tthis._map.removeLayer(layer._spiderLeg);\r\n\t\t\tdelete layer._spiderLeg;\r\n\t\t}\r\n\t}\r\n});\r\n","/**\r\n * Adds 1 public method to MCG and 1 to L.Marker to facilitate changing\r\n * markers' icon options and refreshing their icon and their parent clusters\r\n * accordingly (case where their iconCreateFunction uses data of childMarkers\r\n * to make up the cluster icon).\r\n */\r\n\r\n\r\nL.MarkerClusterGroup.include({\r\n\t/**\r\n\t * Updates the icon of all clusters which are parents of the given marker(s).\r\n\t * In singleMarkerMode, also updates the given marker(s) icon.\r\n\t * @param layers L.MarkerClusterGroup|L.LayerGroup|Array(L.Marker)|Map(L.Marker)|\r\n\t * L.MarkerCluster|L.Marker (optional) list of markers (or single marker) whose parent\r\n\t * clusters need to be updated. If not provided, retrieves all child markers of this.\r\n\t * @returns {L.MarkerClusterGroup}\r\n\t */\r\n\trefreshClusters: function (layers) {\r\n\t\tif (!layers) {\r\n\t\t\tlayers = this._topClusterLevel.getAllChildMarkers();\r\n\t\t} else if (layers instanceof L.MarkerClusterGroup) {\r\n\t\t\tlayers = layers._topClusterLevel.getAllChildMarkers();\r\n\t\t} else if (layers instanceof L.LayerGroup) {\r\n\t\t\tlayers = layers._layers;\r\n\t\t} else if (layers instanceof L.MarkerCluster) {\r\n\t\t\tlayers = layers.getAllChildMarkers();\r\n\t\t} else if (layers instanceof L.Marker) {\r\n\t\t\tlayers = [layers];\r\n\t\t} // else: must be an Array(L.Marker)|Map(L.Marker)\r\n\t\tthis._flagParentsIconsNeedUpdate(layers);\r\n\t\tthis._refreshClustersIcons();\r\n\r\n\t\t// In case of singleMarkerMode, also re-draw the markers.\r\n\t\tif (this.options.singleMarkerMode) {\r\n\t\t\tthis._refreshSingleMarkerModeMarkers(layers);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/**\r\n\t * Simply flags all parent clusters of the given markers as having a \"dirty\" icon.\r\n\t * @param layers Array(L.Marker)|Map(L.Marker) list of markers.\r\n\t * @private\r\n\t */\r\n\t_flagParentsIconsNeedUpdate: function (layers) {\r\n\t\tvar id, parent;\r\n\r\n\t\t// Assumes layers is an Array or an Object whose prototype is non-enumerable.\r\n\t\tfor (id in layers) {\r\n\t\t\t// Flag parent clusters' icon as \"dirty\", all the way up.\r\n\t\t\t// Dumb process that flags multiple times upper parents, but still\r\n\t\t\t// much more efficient than trying to be smart and make short lists,\r\n\t\t\t// at least in the case of a hierarchy following a power law:\r\n\t\t\t// http://jsperf.com/flag-nodes-in-power-hierarchy/2\r\n\t\t\tparent = layers[id].__parent;\r\n\t\t\twhile (parent) {\r\n\t\t\t\tparent._iconNeedsUpdate = true;\r\n\t\t\t\tparent = parent.__parent;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Re-draws the icon of the supplied markers.\r\n\t * To be used in singleMarkerMode only.\r\n\t * @param layers Array(L.Marker)|Map(L.Marker) list of markers.\r\n\t * @private\r\n\t */\r\n\t_refreshSingleMarkerModeMarkers: function (layers) {\r\n\t\tvar id, layer;\r\n\r\n\t\tfor (id in layers) {\r\n\t\t\tlayer = layers[id];\r\n\r\n\t\t\t// Make sure we do not override markers that do not belong to THIS group.\r\n\t\t\tif (this.hasLayer(layer)) {\r\n\t\t\t\t// Need to re-create the icon first, then re-draw the marker.\r\n\t\t\t\tlayer.setIcon(this._overrideMarkerIcon(layer));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nL.Marker.include({\r\n\t/**\r\n\t * Updates the given options in the marker's icon and refreshes the marker.\r\n\t * @param options map object of icon options.\r\n\t * @param directlyRefreshClusters boolean (optional) true to trigger\r\n\t * MCG.refreshClustersOf() right away with this single marker.\r\n\t * @returns {L.Marker}\r\n\t */\r\n\trefreshIconOptions: function (options, directlyRefreshClusters) {\r\n\t\tvar icon = this.options.icon;\r\n\r\n\t\tL.setOptions(icon, options);\r\n\r\n\t\tthis.setIcon(icon);\r\n\r\n\t\t// Shortcut to refresh the associated MCG clusters right away.\r\n\t\t// To be used when refreshing a single marker.\r\n\t\t// Otherwise, better use MCG.refreshClusters() once at the end with\r\n\t\t// the list of modified markers.\r\n\t\tif (directlyRefreshClusters && this.__parent) {\r\n\t\t\tthis.__parent._group.refreshClusters(this);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n});\r\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/leaflet.markercluster.js b/deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/leaflet.markercluster.js new file mode 100755 index 0000000..67c52dc --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/leaflet.markercluster.js @@ -0,0 +1,3 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e.Leaflet=e.Leaflet||{},e.Leaflet.markercluster=e.Leaflet.markercluster||{}))}(this,function(e){"use strict";var t=L.MarkerClusterGroup=L.FeatureGroup.extend({options:{maxClusterRadius:80,iconCreateFunction:null,clusterPane:L.Marker.prototype.options.pane,spiderfyOnMaxZoom:!0,showCoverageOnHover:!0,zoomToBoundsOnClick:!0,singleMarkerMode:!1,disableClusteringAtZoom:null,removeOutsideVisibleBounds:!0,animate:!0,animateAddingMarkers:!1,spiderfyDistanceMultiplier:1,spiderLegPolylineOptions:{weight:1.5,color:"#222",opacity:.5},chunkedLoading:!1,chunkInterval:200,chunkDelay:50,chunkProgress:null,polygonOptions:{}},initialize:function(e){L.Util.setOptions(this,e),this.options.iconCreateFunction||(this.options.iconCreateFunction=this._defaultIconCreateFunction),this._featureGroup=L.featureGroup(),this._featureGroup.addEventParent(this),this._nonPointGroup=L.featureGroup(),this._nonPointGroup.addEventParent(this),this._inZoomAnimation=0,this._needsClustering=[],this._needsRemoving=[],this._currentShownBounds=null,this._queue=[],this._childMarkerEventHandlers={dragstart:this._childMarkerDragStart,move:this._childMarkerMoved,dragend:this._childMarkerDragEnd};var t=L.DomUtil.TRANSITION&&this.options.animate;L.extend(this,t?this._withAnimation:this._noAnimation),this._markerCluster=t?L.MarkerCluster:L.MarkerClusterNonAnimated},addLayer:function(e){if(e instanceof L.LayerGroup)return this.addLayers([e]);if(!e.getLatLng)return this._nonPointGroup.addLayer(e),this.fire("layeradd",{layer:e}),this;if(!this._map)return this._needsClustering.push(e),this.fire("layeradd",{layer:e}),this;if(this.hasLayer(e))return this;this._unspiderfy&&this._unspiderfy(),this._addLayer(e,this._maxZoom),this.fire("layeradd",{layer:e}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons();var t=e,i=this._zoom;if(e.__parent)for(;t.__parent._zoom>=i;)t=t.__parent;return this._currentShownBounds.contains(t.getLatLng())&&(this.options.animateAddingMarkers?this._animationAddLayer(e,t):this._animationAddLayerNonAnimated(e,t)),this},removeLayer:function(e){return e instanceof L.LayerGroup?this.removeLayers([e]):e.getLatLng?this._map?e.__parent?(this._unspiderfy&&(this._unspiderfy(),this._unspiderfyLayer(e)),this._removeLayer(e,!0),this.fire("layerremove",{layer:e}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),e.off(this._childMarkerEventHandlers,this),this._featureGroup.hasLayer(e)&&(this._featureGroup.removeLayer(e),e.clusterShow&&e.clusterShow()),this):this:(!this._arraySplice(this._needsClustering,e)&&this.hasLayer(e)&&this._needsRemoving.push({layer:e,latlng:e._latlng}),this.fire("layerremove",{layer:e}),this):(this._nonPointGroup.removeLayer(e),this.fire("layerremove",{layer:e}),this)},addLayers:function(e,t){if(!L.Util.isArray(e))return this.addLayer(e);var i,n=this._featureGroup,r=this._nonPointGroup,s=this.options.chunkedLoading,o=this.options.chunkInterval,a=this.options.chunkProgress,h=e.length,l=0,u=!0;if(this._map){var _=(new Date).getTime(),d=L.bind(function(){for(var c=(new Date).getTime();h>l;l++){if(s&&0===l%200){var p=(new Date).getTime()-c;if(p>o)break}if(i=e[l],i instanceof L.LayerGroup)u&&(e=e.slice(),u=!1),this._extractNonGroupLayers(i,e),h=e.length;else if(i.getLatLng){if(!this.hasLayer(i)&&(this._addLayer(i,this._maxZoom),t||this.fire("layeradd",{layer:i}),i.__parent&&2===i.__parent.getChildCount())){var f=i.__parent.getAllChildMarkers(),m=f[0]===i?f[1]:f[0];n.removeLayer(m)}}else r.addLayer(i),t||this.fire("layeradd",{layer:i})}a&&a(l,h,(new Date).getTime()-_),l===h?(this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),this._topClusterLevel._recursivelyAddChildrenToMap(null,this._zoom,this._currentShownBounds)):setTimeout(d,this.options.chunkDelay)},this);d()}else for(var c=this._needsClustering;h>l;l++)i=e[l],i instanceof L.LayerGroup?(u&&(e=e.slice(),u=!1),this._extractNonGroupLayers(i,e),h=e.length):i.getLatLng?this.hasLayer(i)||c.push(i):r.addLayer(i);return this},removeLayers:function(e){var t,i,n=e.length,r=this._featureGroup,s=this._nonPointGroup,o=!0;if(!this._map){for(t=0;n>t;t++)i=e[t],i instanceof L.LayerGroup?(o&&(e=e.slice(),o=!1),this._extractNonGroupLayers(i,e),n=e.length):(this._arraySplice(this._needsClustering,i),s.removeLayer(i),this.hasLayer(i)&&this._needsRemoving.push({layer:i,latlng:i._latlng}),this.fire("layerremove",{layer:i}));return this}if(this._unspiderfy){this._unspiderfy();var a=e.slice(),h=n;for(t=0;h>t;t++)i=a[t],i instanceof L.LayerGroup?(this._extractNonGroupLayers(i,a),h=a.length):this._unspiderfyLayer(i)}for(t=0;n>t;t++)i=e[t],i instanceof L.LayerGroup?(o&&(e=e.slice(),o=!1),this._extractNonGroupLayers(i,e),n=e.length):i.__parent?(this._removeLayer(i,!0,!0),this.fire("layerremove",{layer:i}),r.hasLayer(i)&&(r.removeLayer(i),i.clusterShow&&i.clusterShow())):(s.removeLayer(i),this.fire("layerremove",{layer:i}));return this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),this._topClusterLevel._recursivelyAddChildrenToMap(null,this._zoom,this._currentShownBounds),this},clearLayers:function(){return this._map||(this._needsClustering=[],this._needsRemoving=[],delete this._gridClusters,delete this._gridUnclustered),this._noanimationUnspiderfy&&this._noanimationUnspiderfy(),this._featureGroup.clearLayers(),this._nonPointGroup.clearLayers(),this.eachLayer(function(e){e.off(this._childMarkerEventHandlers,this),delete e.__parent},this),this._map&&this._generateInitialClusters(),this},getBounds:function(){var e=new L.LatLngBounds;this._topClusterLevel&&e.extend(this._topClusterLevel._bounds);for(var t=this._needsClustering.length-1;t>=0;t--)e.extend(this._needsClustering[t].getLatLng());return e.extend(this._nonPointGroup.getBounds()),e},eachLayer:function(e,t){var i,n,r,s=this._needsClustering.slice(),o=this._needsRemoving;for(this._topClusterLevel&&this._topClusterLevel.getAllChildMarkers(s),n=s.length-1;n>=0;n--){for(i=!0,r=o.length-1;r>=0;r--)if(o[r].layer===s[n]){i=!1;break}i&&e.call(t,s[n])}this._nonPointGroup.eachLayer(e,t)},getLayers:function(){var e=[];return this.eachLayer(function(t){e.push(t)}),e},getLayer:function(e){var t=null;return e=parseInt(e,10),this.eachLayer(function(i){L.stamp(i)===e&&(t=i)}),t},hasLayer:function(e){if(!e)return!1;var t,i=this._needsClustering;for(t=i.length-1;t>=0;t--)if(i[t]===e)return!0;for(i=this._needsRemoving,t=i.length-1;t>=0;t--)if(i[t].layer===e)return!1;return!(!e.__parent||e.__parent._group!==this)||this._nonPointGroup.hasLayer(e)},zoomToShowLayer:function(e,t){"function"!=typeof t&&(t=function(){});var i=function(){!e._icon&&!e.__parent._icon||this._inZoomAnimation||(this._map.off("moveend",i,this),this.off("animationend",i,this),e._icon?t():e.__parent._icon&&(this.once("spiderfied",t,this),e.__parent.spiderfy()))};e._icon&&this._map.getBounds().contains(e.getLatLng())?t():e.__parent._zoomt;t++)n=this._needsRemoving[t],n.newlatlng=n.layer._latlng,n.layer._latlng=n.latlng;for(t=0,i=this._needsRemoving.length;i>t;t++)n=this._needsRemoving[t],this._removeLayer(n.layer,!0),n.layer._latlng=n.newlatlng;this._needsRemoving=[],this._zoom=Math.round(this._map._zoom),this._currentShownBounds=this._getExpandedVisibleBounds(),this._map.on("zoomend",this._zoomEnd,this),this._map.on("moveend",this._moveEnd,this),this._spiderfierOnAdd&&this._spiderfierOnAdd(),this._bindEvents(),i=this._needsClustering,this._needsClustering=[],this.addLayers(i,!0)},onRemove:function(e){e.off("zoomend",this._zoomEnd,this),e.off("moveend",this._moveEnd,this),this._unbindEvents(),this._map._mapPane.className=this._map._mapPane.className.replace(" leaflet-cluster-anim",""),this._spiderfierOnRemove&&this._spiderfierOnRemove(),delete this._maxLat,this._hideCoverage(),this._featureGroup.remove(),this._nonPointGroup.remove(),this._featureGroup.clearLayers(),this._map=null},getVisibleParent:function(e){for(var t=e;t&&!t._icon;)t=t.__parent;return t||null},_arraySplice:function(e,t){for(var i=e.length-1;i>=0;i--)if(e[i]===t)return e.splice(i,1),!0},_removeFromGridUnclustered:function(e,t){for(var i=this._map,n=this._gridUnclustered,r=Math.floor(this._map.getMinZoom());t>=r&&n[t].removeObject(e,i.project(e.getLatLng(),t));t--);},_childMarkerDragStart:function(e){e.target.__dragStart=e.target._latlng},_childMarkerMoved:function(e){if(!this._ignoreMove&&!e.target.__dragStart){var t=e.target._popup&&e.target._popup.isOpen();this._moveChild(e.target,e.oldLatLng,e.latlng),t&&e.target.openPopup()}},_moveChild:function(e,t,i){e._latlng=t,this.removeLayer(e),e._latlng=i,this.addLayer(e)},_childMarkerDragEnd:function(e){var t=e.target.__dragStart;delete e.target.__dragStart,t&&this._moveChild(e.target,t,e.target._latlng)},_removeLayer:function(e,t,i){var n=this._gridClusters,r=this._gridUnclustered,s=this._featureGroup,o=this._map,a=Math.floor(this._map.getMinZoom());t&&this._removeFromGridUnclustered(e,this._maxZoom);var h,l=e.__parent,u=l._markers;for(this._arraySplice(u,e);l&&(l._childCount--,l._boundsNeedUpdate=!0,!(l._zoomt?"small":100>t?"medium":"large",new L.DivIcon({html:"
"+t+"
",className:"marker-cluster"+i,iconSize:new L.Point(40,40)})},_bindEvents:function(){var e=this._map,t=this.options.spiderfyOnMaxZoom,i=this.options.showCoverageOnHover,n=this.options.zoomToBoundsOnClick;(t||n)&&this.on("clusterclick",this._zoomOrSpiderfy,this),i&&(this.on("clustermouseover",this._showCoverage,this),this.on("clustermouseout",this._hideCoverage,this),e.on("zoomend",this._hideCoverage,this))},_zoomOrSpiderfy:function(e){for(var t=e.layer,i=t;1===i._childClusters.length;)i=i._childClusters[0];i._zoom===this._maxZoom&&i._childCount===t._childCount&&this.options.spiderfyOnMaxZoom?t.spiderfy():this.options.zoomToBoundsOnClick&&t.zoomToBounds(),e.originalEvent&&13===e.originalEvent.keyCode&&this._map._container.focus()},_showCoverage:function(e){var t=this._map;this._inZoomAnimation||(this._shownPolygon&&t.removeLayer(this._shownPolygon),e.layer.getChildCount()>2&&e.layer!==this._spiderfied&&(this._shownPolygon=new L.Polygon(e.layer.getConvexHull(),this.options.polygonOptions),t.addLayer(this._shownPolygon)))},_hideCoverage:function(){this._shownPolygon&&(this._map.removeLayer(this._shownPolygon),this._shownPolygon=null)},_unbindEvents:function(){var e=this.options.spiderfyOnMaxZoom,t=this.options.showCoverageOnHover,i=this.options.zoomToBoundsOnClick,n=this._map;(e||i)&&this.off("clusterclick",this._zoomOrSpiderfy,this),t&&(this.off("clustermouseover",this._showCoverage,this),this.off("clustermouseout",this._hideCoverage,this),n.off("zoomend",this._hideCoverage,this))},_zoomEnd:function(){this._map&&(this._mergeSplitClusters(),this._zoom=Math.round(this._map._zoom),this._currentShownBounds=this._getExpandedVisibleBounds())},_moveEnd:function(){if(!this._inZoomAnimation){var e=this._getExpandedVisibleBounds();this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),this._zoom,e),this._topClusterLevel._recursivelyAddChildrenToMap(null,Math.round(this._map._zoom),e),this._currentShownBounds=e}},_generateInitialClusters:function(){var e=Math.ceil(this._map.getMaxZoom()),t=Math.floor(this._map.getMinZoom()),i=this.options.maxClusterRadius,n=i;"function"!=typeof i&&(n=function(){return i}),null!==this.options.disableClusteringAtZoom&&(e=this.options.disableClusteringAtZoom-1),this._maxZoom=e,this._gridClusters={},this._gridUnclustered={};for(var r=e;r>=t;r--)this._gridClusters[r]=new L.DistanceGrid(n(r)),this._gridUnclustered[r]=new L.DistanceGrid(n(r));this._topClusterLevel=new this._markerCluster(this,t-1)},_addLayer:function(e,t){var i,n,r=this._gridClusters,s=this._gridUnclustered,o=Math.floor(this._map.getMinZoom());for(this.options.singleMarkerMode&&this._overrideMarkerIcon(e),e.on(this._childMarkerEventHandlers,this);t>=o;t--){i=this._map.project(e.getLatLng(),t);var a=r[t].getNearObject(i);if(a)return a._addChild(e),e.__parent=a,void 0;if(a=s[t].getNearObject(i)){var h=a.__parent;h&&this._removeLayer(a,!1);var l=new this._markerCluster(this,t,a,e);r[t].addObject(l,this._map.project(l._cLatLng,t)),a.__parent=l,e.__parent=l;var u=l;for(n=t-1;n>h._zoom;n--)u=new this._markerCluster(this,n,u),r[n].addObject(u,this._map.project(a.getLatLng(),n));return h._addChild(u),this._removeFromGridUnclustered(a,t),void 0}s[t].addObject(e,i)}this._topClusterLevel._addChild(e),e.__parent=this._topClusterLevel},_refreshClustersIcons:function(){this._featureGroup.eachLayer(function(e){e instanceof L.MarkerCluster&&e._iconNeedsUpdate&&e._updateIcon()})},_enqueue:function(e){this._queue.push(e),this._queueTimeout||(this._queueTimeout=setTimeout(L.bind(this._processQueue,this),300))},_processQueue:function(){for(var e=0;ee?(this._animationStart(),this._animationZoomOut(this._zoom,e)):this._moveEnd()},_getExpandedVisibleBounds:function(){return this.options.removeOutsideVisibleBounds?L.Browser.mobile?this._checkBoundsMaxLat(this._map.getBounds()):this._checkBoundsMaxLat(this._map.getBounds().pad(1)):this._mapBoundsInfinite},_checkBoundsMaxLat:function(e){var t=this._maxLat;return void 0!==t&&(e.getNorth()>=t&&(e._northEast.lat=1/0),e.getSouth()<=-t&&(e._southWest.lat=-1/0)),e},_animationAddLayerNonAnimated:function(e,t){if(t===e)this._featureGroup.addLayer(e);else if(2===t._childCount){t._addToMap();var i=t.getAllChildMarkers();this._featureGroup.removeLayer(i[0]),this._featureGroup.removeLayer(i[1])}else t._updateIcon()},_extractNonGroupLayers:function(e,t){var i,n=e.getLayers(),r=0;for(t=t||[];r=0;i--)o=h[i],n.contains(o._latlng)||r.removeLayer(o)}),this._forceLayout(),this._topClusterLevel._recursivelyBecomeVisible(n,t),r.eachLayer(function(e){e instanceof L.MarkerCluster||!e._icon||e.clusterShow()}),this._topClusterLevel._recursively(n,e,t,function(e){e._recursivelyRestoreChildPositions(t)}),this._ignoreMove=!1,this._enqueue(function(){this._topClusterLevel._recursively(n,e,s,function(e){r.removeLayer(e),e.clusterShow()}),this._animationEnd()})},_animationZoomOut:function(e,t){this._animationZoomOutSingle(this._topClusterLevel,e-1,t),this._topClusterLevel._recursivelyAddChildrenToMap(null,t,this._getExpandedVisibleBounds()),this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),e,this._getExpandedVisibleBounds())},_animationAddLayer:function(e,t){var i=this,n=this._featureGroup;n.addLayer(e),t!==e&&(t._childCount>2?(t._updateIcon(),this._forceLayout(),this._animationStart(),e._setPos(this._map.latLngToLayerPoint(t.getLatLng())),e.clusterHide(),this._enqueue(function(){n.removeLayer(e),e.clusterShow(),i._animationEnd()})):(this._forceLayout(),i._animationStart(),i._animationZoomOutSingle(t,this._map.getMaxZoom(),this._zoom)))}},_animationZoomOutSingle:function(e,t,i){var n=this._getExpandedVisibleBounds(),r=Math.floor(this._map.getMinZoom());e._recursivelyAnimateChildrenInAndAddSelfToMap(n,r,t+1,i);var s=this;this._forceLayout(),e._recursivelyBecomeVisible(n,i),this._enqueue(function(){if(1===e._childCount){var o=e._markers[0];this._ignoreMove=!0,o.setLatLng(o.getLatLng()),this._ignoreMove=!1,o.clusterShow&&o.clusterShow()}else e._recursively(n,i,r,function(e){e._recursivelyRemoveChildrenFromMap(n,r,t+1)});s._animationEnd()})},_animationEnd:function(){this._map&&(this._map._mapPane.className=this._map._mapPane.className.replace(" leaflet-cluster-anim","")),this._inZoomAnimation--,this.fire("animationend")},_forceLayout:function(){L.Util.falseFn(document.body.offsetWidth)}}),L.markerClusterGroup=function(e){return new L.MarkerClusterGroup(e)};var i=L.MarkerCluster=L.Marker.extend({options:L.Icon.prototype.options,initialize:function(e,t,i,n){L.Marker.prototype.initialize.call(this,i?i._cLatLng||i.getLatLng():new L.LatLng(0,0),{icon:this,pane:e.options.clusterPane}),this._group=e,this._zoom=t,this._markers=[],this._childClusters=[],this._childCount=0,this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._bounds=new L.LatLngBounds,i&&this._addChild(i),n&&this._addChild(n)},getAllChildMarkers:function(e,t){e=e||[];for(var i=this._childClusters.length-1;i>=0;i--)this._childClusters[i].getAllChildMarkers(e);for(var n=this._markers.length-1;n>=0;n--)t&&this._markers[n].__dragStart||e.push(this._markers[n]);return e},getChildCount:function(){return this._childCount},zoomToBounds:function(e){for(var t,i=this._childClusters.slice(),n=this._group._map,r=n.getBoundsZoom(this._bounds),s=this._zoom+1,o=n.getZoom();i.length>0&&r>s;){s++;var a=[];for(t=0;ts?this._group._map.setView(this._latlng,s):o>=r?this._group._map.setView(this._latlng,o+1):this._group._map.fitBounds(this._bounds,e)},getBounds:function(){var e=new L.LatLngBounds;return e.extend(this._bounds),e},_updateIcon:function(){this._iconNeedsUpdate=!0,this._icon&&this.setIcon(this)},createIcon:function(){return this._iconNeedsUpdate&&(this._iconObj=this._group.options.iconCreateFunction(this),this._iconNeedsUpdate=!1),this._iconObj.createIcon()},createShadow:function(){return this._iconObj.createShadow()},_addChild:function(e,t){this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._setClusterCenter(e),e instanceof L.MarkerCluster?(t||(this._childClusters.push(e),e.__parent=this),this._childCount+=e._childCount):(t||this._markers.push(e),this._childCount++),this.__parent&&this.__parent._addChild(e,!0)},_setClusterCenter:function(e){this._cLatLng||(this._cLatLng=e._cLatLng||e._latlng)},_resetBounds:function(){var e=this._bounds;e._southWest&&(e._southWest.lat=1/0,e._southWest.lng=1/0),e._northEast&&(e._northEast.lat=-1/0,e._northEast.lng=-1/0)},_recalculateBounds:function(){var e,t,i,n,r=this._markers,s=this._childClusters,o=0,a=0,h=this._childCount;if(0!==h){for(this._resetBounds(),e=0;e=0;i--)n=r[i],n._icon&&(n._setPos(t),n.clusterHide())},function(e){var i,n,r=e._childClusters;for(i=r.length-1;i>=0;i--)n=r[i],n._icon&&(n._setPos(t),n.clusterHide())})},_recursivelyAnimateChildrenInAndAddSelfToMap:function(e,t,i,n){this._recursively(e,n,t,function(r){r._recursivelyAnimateChildrenIn(e,r._group._map.latLngToLayerPoint(r.getLatLng()).round(),i),r._isSingleParent()&&i-1===n?(r.clusterShow(),r._recursivelyRemoveChildrenFromMap(e,t,i)):r.clusterHide(),r._addToMap()})},_recursivelyBecomeVisible:function(e,t){this._recursively(e,this._group._map.getMinZoom(),t,null,function(e){e.clusterShow()})},_recursivelyAddChildrenToMap:function(e,t,i){this._recursively(i,this._group._map.getMinZoom()-1,t,function(n){if(t!==n._zoom)for(var r=n._markers.length-1;r>=0;r--){var s=n._markers[r];i.contains(s._latlng)&&(e&&(s._backupLatlng=s.getLatLng(),s.setLatLng(e),s.clusterHide&&s.clusterHide()),n._group._featureGroup.addLayer(s))}},function(t){t._addToMap(e)})},_recursivelyRestoreChildPositions:function(e){for(var t=this._markers.length-1;t>=0;t--){var i=this._markers[t];i._backupLatlng&&(i.setLatLng(i._backupLatlng),delete i._backupLatlng)}if(e-1===this._zoom)for(var n=this._childClusters.length-1;n>=0;n--)this._childClusters[n]._restorePosition();else for(var r=this._childClusters.length-1;r>=0;r--)this._childClusters[r]._recursivelyRestoreChildPositions(e)},_restorePosition:function(){this._backupLatlng&&(this.setLatLng(this._backupLatlng),delete this._backupLatlng)},_recursivelyRemoveChildrenFromMap:function(e,t,i,n){var r,s;this._recursively(e,t-1,i-1,function(e){for(s=e._markers.length-1;s>=0;s--)r=e._markers[s],n&&n.contains(r._latlng)||(e._group._featureGroup.removeLayer(r),r.clusterShow&&r.clusterShow())},function(e){for(s=e._childClusters.length-1;s>=0;s--)r=e._childClusters[s],n&&n.contains(r._latlng)||(e._group._featureGroup.removeLayer(r),r.clusterShow&&r.clusterShow())})},_recursively:function(e,t,i,n,r){var s,o,a=this._childClusters,h=this._zoom;if(h>=t&&(n&&n(this),r&&h===i&&r(this)),t>h||i>h)for(s=a.length-1;s>=0;s--)o=a[s],o._boundsNeedUpdate&&o._recalculateBounds(),e.intersects(o._bounds)&&o._recursively(e,t,i,n,r)},_isSingleParent:function(){return this._childClusters.length>0&&this._childClusters[0]._childCount===this._childCount}});L.Marker.include({clusterHide:function(){var e=this.options.opacity;return this.setOpacity(0),this.options.opacity=e,this},clusterShow:function(){return this.setOpacity(this.options.opacity)}}),L.DistanceGrid=function(e){this._cellSize=e,this._sqCellSize=e*e,this._grid={},this._objectPoint={}},L.DistanceGrid.prototype={addObject:function(e,t){var i=this._getCoord(t.x),n=this._getCoord(t.y),r=this._grid,s=r[n]=r[n]||{},o=s[i]=s[i]||[],a=L.Util.stamp(e);this._objectPoint[a]=t,o.push(e)},updateObject:function(e,t){this.removeObject(e),this.addObject(e,t)},removeObject:function(e,t){var i,n,r=this._getCoord(t.x),s=this._getCoord(t.y),o=this._grid,a=o[s]=o[s]||{},h=a[r]=a[r]||[];for(delete this._objectPoint[L.Util.stamp(e)],i=0,n=h.length;n>i;i++)if(h[i]===e)return h.splice(i,1),1===n&&delete a[r],!0},eachObject:function(e,t){var i,n,r,s,o,a,h,l=this._grid;for(i in l){o=l[i];for(n in o)for(a=o[n],r=0,s=a.length;s>r;r++)h=e.call(t,a[r]),h&&(r--,s--)}},getNearObject:function(e){var t,i,n,r,s,o,a,h,l=this._getCoord(e.x),u=this._getCoord(e.y),_=this._objectPoint,d=this._sqCellSize,c=null;for(t=u-1;u+1>=t;t++)if(r=this._grid[t])for(i=l-1;l+1>=i;i++)if(s=r[i])for(n=0,o=s.length;o>n;n++)a=s[n],h=this._sqDist(_[L.Util.stamp(a)],e),(d>h||d>=h&&null===c)&&(d=h,c=a);return c},_getCoord:function(e){var t=Math.floor(e/this._cellSize);return isFinite(t)?t:e},_sqDist:function(e,t){var i=t.x-e.x,n=t.y-e.y;return i*i+n*n}},function(){L.QuickHull={getDistant:function(e,t){var i=t[1].lat-t[0].lat,n=t[0].lng-t[1].lng;return n*(e.lat-t[0].lat)+i*(e.lng-t[0].lng)},findMostDistantPointFromBaseLine:function(e,t){var i,n,r,s=0,o=null,a=[];for(i=t.length-1;i>=0;i--)n=t[i],r=this.getDistant(n,e),r>0&&(a.push(n),r>s&&(s=r,o=n));return{maxPoint:o,newPoints:a}},buildConvexHull:function(e,t){var i=[],n=this.findMostDistantPointFromBaseLine(e,t);return n.maxPoint?(i=i.concat(this.buildConvexHull([e[0],n.maxPoint],n.newPoints)),i=i.concat(this.buildConvexHull([n.maxPoint,e[1]],n.newPoints))):[e[0]]},getConvexHull:function(e){var t,i=!1,n=!1,r=!1,s=!1,o=null,a=null,h=null,l=null,u=null,_=null;for(t=e.length-1;t>=0;t--){var d=e[t];(i===!1||d.lat>i)&&(o=d,i=d.lat),(n===!1||d.latr)&&(h=d,r=d.lng),(s===!1||d.lng=0;t--)e=i[t].getLatLng(),n.push(e);return L.QuickHull.getConvexHull(n)}}),L.MarkerCluster.include({_2PI:2*Math.PI,_circleFootSeparation:25,_circleStartAngle:0,_spiralFootSeparation:28,_spiralLengthStart:11,_spiralLengthFactor:5,_circleSpiralSwitchover:9,spiderfy:function(){if(this._group._spiderfied!==this&&!this._group._inZoomAnimation){var e,t=this.getAllChildMarkers(null,!0),i=this._group,n=i._map,r=n.latLngToLayerPoint(this._latlng);this._group._unspiderfy(),this._group._spiderfied=this,t.length>=this._circleSpiralSwitchover?e=this._generatePointsSpiral(t.length,r):(r.y+=10,e=this._generatePointsCircle(t.length,r)),this._animationSpiderfy(t,e)}},unspiderfy:function(e){this._group._inZoomAnimation||(this._animationUnspiderfy(e),this._group._spiderfied=null)},_generatePointsCircle:function(e,t){var i,n,r=this._group.options.spiderfyDistanceMultiplier*this._circleFootSeparation*(2+e),s=r/this._2PI,o=this._2PI/e,a=[];for(s=Math.max(s,35),a.length=e,i=0;e>i;i++)n=this._circleStartAngle+i*o,a[i]=new L.Point(t.x+s*Math.cos(n),t.y+s*Math.sin(n))._round();return a},_generatePointsSpiral:function(e,t){var i,n=this._group.options.spiderfyDistanceMultiplier,r=n*this._spiralLengthStart,s=n*this._spiralFootSeparation,o=n*this._spiralLengthFactor*this._2PI,a=0,h=[];for(h.length=e,i=e;i>=0;i--)e>i&&(h[i]=new L.Point(t.x+r*Math.cos(a),t.y+r*Math.sin(a))._round()),a+=s/r+5e-4*i,r+=o/a;return h},_noanimationUnspiderfy:function(){var e,t,i=this._group,n=i._map,r=i._featureGroup,s=this.getAllChildMarkers(null,!0);for(i._ignoreMove=!0,this.setOpacity(1),t=s.length-1;t>=0;t--)e=s[t],r.removeLayer(e),e._preSpiderfyLatlng&&(e.setLatLng(e._preSpiderfyLatlng),delete e._preSpiderfyLatlng),e.setZIndexOffset&&e.setZIndexOffset(0),e._spiderLeg&&(n.removeLayer(e._spiderLeg),delete e._spiderLeg);i.fire("unspiderfied",{cluster:this,markers:s}),i._ignoreMove=!1,i._spiderfied=null}}),L.MarkerClusterNonAnimated=L.MarkerCluster.extend({_animationSpiderfy:function(e,t){var i,n,r,s,o=this._group,a=o._map,h=o._featureGroup,l=this._group.options.spiderLegPolylineOptions;for(o._ignoreMove=!0,i=0;i=0;i--)a=u.layerPointToLatLng(t[i]),n=e[i],n._preSpiderfyLatlng=n._latlng,n.setLatLng(a),n.clusterShow&&n.clusterShow(),p&&(r=n._spiderLeg,s=r._path,s.style.strokeDashoffset=0,r.setStyle({opacity:m}));this.setOpacity(.3),l._ignoreMove=!1,setTimeout(function(){l._animationEnd(),l.fire("spiderfied",{cluster:h,markers:e})},200)},_animationUnspiderfy:function(e){var t,i,n,r,s,o,a=this,h=this._group,l=h._map,u=h._featureGroup,_=e?l._latLngToNewLayerPoint(this._latlng,e.zoom,e.center):l.latLngToLayerPoint(this._latlng),d=this.getAllChildMarkers(null,!0),c=L.Path.SVG;for(h._ignoreMove=!0,h._animationStart(),this.setOpacity(1),i=d.length-1;i>=0;i--)t=d[i],t._preSpiderfyLatlng&&(t.closePopup(),t.setLatLng(t._preSpiderfyLatlng),delete t._preSpiderfyLatlng,o=!0,t._setPos&&(t._setPos(_),o=!1),t.clusterHide&&(t.clusterHide(),o=!1),o&&u.removeLayer(t),c&&(n=t._spiderLeg,r=n._path,s=r.getTotalLength()+.1,r.style.strokeDashoffset=s,n.setStyle({opacity:0})));h._ignoreMove=!1,setTimeout(function(){var e=0;for(i=d.length-1;i>=0;i--)t=d[i],t._spiderLeg&&e++;for(i=d.length-1;i>=0;i--)t=d[i],t._spiderLeg&&(t.clusterShow&&t.clusterShow(),t.setZIndexOffset&&t.setZIndexOffset(0),e>1&&u.removeLayer(t),l.removeLayer(t._spiderLeg),delete t._spiderLeg);h._animationEnd(),h.fire("unspiderfied",{cluster:a,markers:d})},200)}}),L.MarkerClusterGroup.include({_spiderfied:null,unspiderfy:function(){this._unspiderfy.apply(this,arguments)},_spiderfierOnAdd:function(){this._map.on("click",this._unspiderfyWrapper,this),this._map.options.zoomAnimation&&this._map.on("zoomstart",this._unspiderfyZoomStart,this),this._map.on("zoomend",this._noanimationUnspiderfy,this),L.Browser.touch||this._map.getRenderer(this)},_spiderfierOnRemove:function(){this._map.off("click",this._unspiderfyWrapper,this),this._map.off("zoomstart",this._unspiderfyZoomStart,this),this._map.off("zoomanim",this._unspiderfyZoomAnim,this),this._map.off("zoomend",this._noanimationUnspiderfy,this),this._noanimationUnspiderfy() +},_unspiderfyZoomStart:function(){this._map&&this._map.on("zoomanim",this._unspiderfyZoomAnim,this)},_unspiderfyZoomAnim:function(e){L.DomUtil.hasClass(this._map._mapPane,"leaflet-touching")||(this._map.off("zoomanim",this._unspiderfyZoomAnim,this),this._unspiderfy(e))},_unspiderfyWrapper:function(){this._unspiderfy()},_unspiderfy:function(e){this._spiderfied&&this._spiderfied.unspiderfy(e)},_noanimationUnspiderfy:function(){this._spiderfied&&this._spiderfied._noanimationUnspiderfy()},_unspiderfyLayer:function(e){e._spiderLeg&&(this._featureGroup.removeLayer(e),e.clusterShow&&e.clusterShow(),e.setZIndexOffset&&e.setZIndexOffset(0),this._map.removeLayer(e._spiderLeg),delete e._spiderLeg)}}),L.MarkerClusterGroup.include({refreshClusters:function(e){return e?e instanceof L.MarkerClusterGroup?e=e._topClusterLevel.getAllChildMarkers():e instanceof L.LayerGroup?e=e._layers:e instanceof L.MarkerCluster?e=e.getAllChildMarkers():e instanceof L.Marker&&(e=[e]):e=this._topClusterLevel.getAllChildMarkers(),this._flagParentsIconsNeedUpdate(e),this._refreshClustersIcons(),this.options.singleMarkerMode&&this._refreshSingleMarkerModeMarkers(e),this},_flagParentsIconsNeedUpdate:function(e){var t,i;for(t in e)for(i=e[t].__parent;i;)i._iconNeedsUpdate=!0,i=i.__parent},_refreshSingleMarkerModeMarkers:function(e){var t,i;for(t in e)i=e[t],this.hasLayer(i)&&i.setIcon(this._overrideMarkerIcon(i))}}),L.Marker.include({refreshIconOptions:function(e,t){var i=this.options.icon;return L.setOptions(i,e),this.setIcon(i),t&&this.__parent&&this.__parent._group.refreshClusters(this),this}}),e.MarkerClusterGroup=t,e.MarkerCluster=i}); +//# sourceMappingURL=leaflet.markercluster.js.map \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/leaflet.markercluster.js.map b/deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/leaflet.markercluster.js.map new file mode 100755 index 0000000..a4b459c --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/leaflet.markercluster/leaflet.markercluster.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/MarkerClusterGroup.js","../src/MarkerCluster.js","../src/MarkerOpacity.js","../src/DistanceGrid.js","../src/MarkerCluster.QuickHull.js","../src/MarkerCluster.Spiderfier.js","../src/MarkerClusterGroup.Refresh.js"],"names":[],"mappings":"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","file":"dist/leaflet.markercluster.js"} \ No newline at end of file diff --git a/deploy/grafana-map-plugin/dist/vendor/leaflet/images/layers-2x.png b/deploy/grafana-map-plugin/dist/vendor/leaflet/images/layers-2x.png new file mode 100755 index 0000000000000000000000000000000000000000..200c333dca9652ac4cba004d609e5af4eee168c1 GIT binary patch literal 1259 zcmVFhCYNy;#0irRPomHqW|G1C*;4?@4#E?jH>?v@U%cy?3dQAc-DchXVErpOh~ z-jbon+tNbnl6hoEb;)TVk+%hTDDi_G%i3*RZ&15!$Fjr^f;Ke&A@|?=`2&+{zr+3a z{D*=t(`AXyS%X7N z%a#RZw6vD^t_rnM`L4E>m=U&R!A-&}nZIi$BOPvkhrCuUe@BN~-lRD)f44;J%TwgE zcze8u!PQ_NR7?o(NylLXVTfDO zxs5=@|GsYEsNo4M#nT%N!UE(?dnS)t2+{ELYAFp*3=iF=|EQnTp`#vlSXuGVraYo? z+RCzXo6h3qA8{KG?S4nE(lM+;Eb4nT3XV;7gcAxUi5m)`k5tv}cPy()8ZR3TLW3I- zAS^}cq-IJvL7a4RgR!yk@~RT%$lA7{L5ES*hyx)M4(yxI$Ub(4f)K|^v1>zvwQY!_ zIrWw8q9GS^!Dp~}+?mbnB6jDF8mVlbQ!jFKDY;w=7;XO{9bq7>LXGK24WA`;rL)_Z z)&j}pbV(;6gY;VMhbxgvn`X;6x}VUEE-7 z%)7j-%t8S=ZL3yc)HbXDAqJZvBTPoiW_A-+a8m3_Z?v{DN7Tnr#O_VUMT0UBt$;p` zDh6JbGHN8JJ*JN%y2%msb97@_S>9!%Egwk;?PEkU9ntz&3uR}%Fj5d$JHQbQb3}a{ zSzFT^#n=VInPpcAS}CNxj?_ zVscANk5Cfz(51EI1pz};AWWb|kgbYNb4wCEGUn3+eMUMV?1-{=I4TlmLJMot@rd07 zZuo2hk1ccu{YmGkcYdWAVdk{Z4Nm?^cTD&}jGm+Q1SYIXMwmG*oO*83&#>l%nbR`G zhh=lZ%xIb7kU3#;TBbfECrnC9P=-XpL|TG2BoZdj61*XiFbW8?1Z_wp%#;>${SUIy V$8qr;L*)Pf002ovPDHLkV1hYLS~36t literal 0 HcmV?d00001 diff --git a/deploy/grafana-map-plugin/dist/vendor/leaflet/images/layers.png b/deploy/grafana-map-plugin/dist/vendor/leaflet/images/layers.png new file mode 100755 index 0000000000000000000000000000000000000000..1a72e5784b2b456eac5d7670738db80697af3377 GIT binary patch literal 696 zcmV;p0!RIcP)*@&l2<6p=!C&s@#ZL+%BQvF&b?w6S%wp=I>1QHj7AP5C)IWy#b znXXB;g;j=$a-tW89K%FbDceHVq&unY*Wx3L#=EGWH=rjqnp|4c_Ulec!ql3#G-5ZF zVlbBA@XP=)C8U&+Lrc)S4O5%1$&{(;7R^K(CSnvSr$v;+B$8q&7Bf|h$#PARo1^%M zf1H^nG-EiXVXr07OH(*8R)xa|FD;lXUlg_-%)~ZGsL2cX0NXaAzN2q%jqLRR6ruVk8`Jb7n#{`T;o@`F= z#3YcynIR^s83UNF3D!f5m#Mg)NJ24&Qfrqb&_z=yF;=B)#9Iq7u-@^O!(mW{D;qvr zPc)gVb%aowtS8m@ElL4A9G>w#ffQ~q{i&_i)*6f^)Sz|C?C>zb4Uo?H<-&Hz@a?J; z$ml@zGygWofb9$ZBj6aLjpLhsT2AzjOu=-*u_gSCUYnU^5s62$4H-fe}gSR(=wKRaTHh!@*b)YV6mo|a4Fn6Rgc&Rpk zvn_X|3VY?v=>nJ{slE^V1GaGWk}m@aIWGIpghbfPh8m@aIWEo_%AZI>==moIFVE^L=C zZJ91?mo03UEp3-BY?wBGur6$uD{Yr9Y?m%SHF8Fk1pc(Nva%QJ+{FLkalfypz3&M|||Fn`7|g3c~4(nXHKFmRnwn$J#_$xE8i z|Ns9!kC;(oC1qQk>LMp3_a2(odYyMT@>voX=UI)k>1cJdn;gjmJ-|6v4nb1Oryh)eQMwHP(i@!36%vGJyFK(JTj?Vb{{C=jx&)@1l zlFmnw%0`&bqruifkkHKC=vbiAM3&E`#Mv>2%tw;VK8?_|&E89cs{a1}$J*!f_xd-C z&F%B|oxRgPlh0F!txkxrQjNA`m9~?&&|jw4W0<`_iNHsX$VQXVK!B}Xkh4>av|f_8 zLY2?t?ejE=%(TnfV5iqOjm?d;&qI~ZGl|SzU77a)002XDQchC<95+*MjE@82?VLm= z3xf6%Vd@99z|q|-ua5l3kJxvZwan-8K1cPiwQAtlcNX~ZqLeoMB+a;7)WA|O#HOB% zg6SX;754xD1{Fy}K~#8Ntklac&zTpadXZ& zC*_=T&g7hfbI$R?v%9?sknIb97gJOJ=`-8YyS3ndqN+Jm+x33!p&Hc@@L$w))s2@N ztv~i}Emc?DykgwFWwma($8+~b>l?tqj$dh13R^nMZnva9 zn0Vflzv2Dvp`oVQw{Guby~i`JGbyBGTEC{y>yzCkg>K&CIeQ$u;lyQ+M{O~gEJ^)Z zrF3p)^>|uT;57}WY&IRwyOQ=dq%Az}_t=_hKowP!Z79q0;@Zu(SWEJJcHY+5T6I({ zw)wj*SNi4wrd+POUfZe4gF77vW?j zoFS}|r2n&$U9Y!S4VEOyN}OpZZi|?cr1VcE_tHsDQgp-ga(SwkBrkCm{|*-yb=}ZW zvcYvLvfA90TPn|!-TuYJV<6`}+RJeRgP3EA=qQcF9k0*#*{f&I_pjam%I6Dd#YE|G zqB!R}tW-K!wV1w+4JcFA_s6~=@9F&j8`u$-ifLN3vK;`lvaA-`jRn_}(8|)!3?-}I zvFi{H;@A$gEZYh?%|Qr_y#*UkOPjwiRCsJQ>mb6h5yGIk6C5_XA=8T?IBfm_?+P0; zhhUs)-(0R*H<&Kku(1>#cGtOpk&Z&kQcw&SJv-4VY<+;=8hYnoX zfNJMCa9)^5Z0;2dCUk;x-%#yS!I~Jr3pNuI!g_tHz!$hKwt1GL~sFvx)3u4TA zv>CLGdQtoZ7Du7ctJRfTqY;FPxs1G{ZJ?73D5J@OO{6BHcPbk{_mjg&p2QFeke%QI zlAJ-kvjuwy1<5D-6>su68A+i998aSZNnQX)+Q}6(GK-C%8G-!1bOJBONU{gT%IOOE z;Yk24YC@^lFW77>r6x7eS1Omc;8=GUp#&zLQ&L{ zv8$hGC`wp~$9pR>f%-_Ps3>YhzP(+vC(E*zr1CVO8ChN^MI-VGMX7+|(r!SGZ9gd5 zzO9sQd>sm|f1|X&oh=8lOzd6+ITvo zCXInR?>RZ#>Hb*PO=7dI!dZ(wY4O}ZGv zdfQFio7+0~PN*RFCZGM6@9-o~y*@?;k00NvOsw54t1^tt{*ATMs^2j}4Wp=4t3RH* z_+8b`F-{E=0sOgM<;VHTo!Ij3u zmmI`2?K7g(GOcGA)@h?$SW&pwHdtj1n57PLI8&6RHhx4R%Q7b z^JEqR)@06V!pbS*@D_ZyRMo_LlT}r{#sXOx4kM-V<_V{!5SSuM^SIVCA37|nY7LWQ zZA#B1h4l`6asz=Lvax_#GMRX|NF>=$=p{Qn0i@ExX1jGhy@B8a*_uR+ODEbVi8ObL zezG?azy>E~S~dl43&8<$(2H}P&*tuBdESUP83KQ?8B z?K(!uS>H1wlWQz;qOfB`T#TZ=EoSp~vZ5XtCvwm1h*Ex6mzTsn_y@_=xREIslV-%- zpdWkEzMjeNOGWrSM32gpBt27*O29NdhGzuDgYxcf`Jjjqw@B;Vmdb@fxdhCRi`Kg> zmUTr$=&@#i!%F4Q6mb&4QKfR^95KJ!<6~fqx-f^66AV!|ywG{6D^Vay-3b99>XOe# e-I|>x8~*?ZhF3snGbtJX0000cOl4 literal 0 HcmV?d00001 diff --git a/deploy/grafana-map-plugin/dist/vendor/leaflet/images/marker-icon.png b/deploy/grafana-map-plugin/dist/vendor/leaflet/images/marker-icon.png new file mode 100755 index 0000000000000000000000000000000000000000..950edf24677ded147df13b26f91baa2b0fa70513 GIT binary patch literal 1466 zcmV;r1x5OaP)P001cn1^@s6z>|W`000GnNklGNuHDcIX17Zdjl&3`L?0sTjIws<{((Dh&g-s0<@jYQyl?D*X^?%13;ml^gy> ziMrY_^1WI=(g@LMizu=zCoA>C`6|QEq1eV92k*7m>G65*&@&6)aC&e}G zI)pf-Za|N`DT&Cn1J|o`19mumxW~hiKiKyc-P`S@q)rdTo84@QI@;0yXrG%9uhI>A zG5QHb6s4=<6xy{1 z@NMxEkryp{LS44%z$3lP^cX!9+2-;CTt3wM4(k*#C{aiIiLuB>jJj;KPhPzIC00bL zU3a#;aJld94lCW=`4&aAy8M7PY=HQ>O%$YEP4c4UY#CRxfgbE~(|uiI=YS8q;O9y6 zmIkXzR`}p7ti|PrM3a}WMnR=3NVnWdAAR>b9X@)DKL6=YsvmH%?I24wdq?Gh54_;# z$?_LvgjEdspdQlft#4CQ z`2Zyvy?*)N1Ftw|{_hakhG9WjS?Az@I@+IZ8JbWewR!XUK4&6346+d#~gsE0SY(LX8&JfY>Aj)RxGy96nwhs2rv zzW6pTnMpFkDSkT*a*6Dx|u@ds6ISVn0@^RmIsKZ5Y;bazbc;tTSq(kg(=481ODrPyNB6n z-$+U}(w$m6U6H$w17Bw+wDaFIe~GvNMYvnw31MpY0eQKT9l>SU``8k7w4)z!GZKMI z#_cEKq7k~i%nlK@6c-K?+R;B#5$?T#YpKD`t_4bAs^#E+@5QW$@OX3*`;(#{U^d-vY)&xEE>n5lYl&T?Amke9$Lam@{1K@O ze*LXqlKQHiv=gx+V^Cbb2?z@ISBQ*3amF;9UJ3SBg(N|710TLamQmYZ&Qjn2LuO<* zCZlB4n%@pc&7NNnY1}x+NWpHlq`OJEo|`aYN9<`RBUB+79g;>dgb6YlfN#kGL?lO_ z!6~M^7sOnbsUkKk<@Ysie&`G>ruxH&Mgy&8;i=A zB9OO!xR{AyODw>DS-q5YM{0ExFEAzt zm>RdS+ssW(-8|?xr0(?$vBVB*%(xDLtq3Hf0I5yFm<_g=W2`QWAax{1rWVH=I!VrP zs(rTFX@W#t$hXNvbgX`gK&^w_YD;CQ!B@e0QbLIWaKAXQe2-kkloo;{iF#6}z!4=W zi$giRj1{ zt;2w`VSCF#WE&*ev7jpsC=6175@(~nTE2;7M-L((0bH@yG}-TB$R~WXd?tA$s3|%y zA`9$sA(>F%J3ioz<-LJl*^o1|w84l>HBR`>3l9c8$5Xr@xCiIQ7{x$fMCzOk_-M=% z+{a_Q#;42`#KfUte@$NT77uaTz?b-fBe)1s5XE$yA79fm?KqM^VgLXD07*qoM6N<$ Ef<_J(9smFU literal 0 HcmV?d00001 diff --git a/deploy/grafana-map-plugin/dist/vendor/leaflet/leaflet-src.esm.js b/deploy/grafana-map-plugin/dist/vendor/leaflet/leaflet-src.esm.js new file mode 100755 index 0000000..819a257 --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/leaflet/leaflet-src.esm.js @@ -0,0 +1,13986 @@ +/* @preserve + * Leaflet 1.6.0, a JS library for interactive maps. http://leafletjs.com + * (c) 2010-2019 Vladimir Agafonkin, (c) 2010-2011 CloudMade + */ + +var version = "1.6.0"; + +/* + * @namespace Util + * + * Various utility functions, used by Leaflet internally. + */ + +var freeze = Object.freeze; +Object.freeze = function (obj) { return obj; }; + +// @function extend(dest: Object, src?: Object): Object +// Merges the properties of the `src` object (or multiple objects) into `dest` object and returns the latter. Has an `L.extend` shortcut. +function extend(dest) { + var i, j, len, src; + + for (j = 1, len = arguments.length; j < len; j++) { + src = arguments[j]; + for (i in src) { + dest[i] = src[i]; + } + } + return dest; +} + +// @function create(proto: Object, properties?: Object): Object +// Compatibility polyfill for [Object.create](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/create) +var create = Object.create || (function () { + function F() {} + return function (proto) { + F.prototype = proto; + return new F(); + }; +})(); + +// @function bind(fn: Function, …): Function +// Returns a new function bound to the arguments passed, like [Function.prototype.bind](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Function/bind). +// Has a `L.bind()` shortcut. +function bind(fn, obj) { + var slice = Array.prototype.slice; + + if (fn.bind) { + return fn.bind.apply(fn, slice.call(arguments, 1)); + } + + var args = slice.call(arguments, 2); + + return function () { + return fn.apply(obj, args.length ? args.concat(slice.call(arguments)) : arguments); + }; +} + +// @property lastId: Number +// Last unique ID used by [`stamp()`](#util-stamp) +var lastId = 0; + +// @function stamp(obj: Object): Number +// Returns the unique ID of an object, assigning it one if it doesn't have it. +function stamp(obj) { + /*eslint-disable */ + obj._leaflet_id = obj._leaflet_id || ++lastId; + return obj._leaflet_id; + /* eslint-enable */ +} + +// @function throttle(fn: Function, time: Number, context: Object): Function +// Returns a function which executes function `fn` with the given scope `context` +// (so that the `this` keyword refers to `context` inside `fn`'s code). The function +// `fn` will be called no more than one time per given amount of `time`. The arguments +// received by the bound function will be any arguments passed when binding the +// function, followed by any arguments passed when invoking the bound function. +// Has an `L.throttle` shortcut. +function throttle(fn, time, context) { + var lock, args, wrapperFn, later; + + later = function () { + // reset lock and call if queued + lock = false; + if (args) { + wrapperFn.apply(context, args); + args = false; + } + }; + + wrapperFn = function () { + if (lock) { + // called too soon, queue to call later + args = arguments; + + } else { + // call and lock until later + fn.apply(context, arguments); + setTimeout(later, time); + lock = true; + } + }; + + return wrapperFn; +} + +// @function wrapNum(num: Number, range: Number[], includeMax?: Boolean): Number +// Returns the number `num` modulo `range` in such a way so it lies within +// `range[0]` and `range[1]`. The returned value will be always smaller than +// `range[1]` unless `includeMax` is set to `true`. +function wrapNum(x, range, includeMax) { + var max = range[1], + min = range[0], + d = max - min; + return x === max && includeMax ? x : ((x - min) % d + d) % d + min; +} + +// @function falseFn(): Function +// Returns a function which always returns `false`. +function falseFn() { return false; } + +// @function formatNum(num: Number, digits?: Number): Number +// Returns the number `num` rounded to `digits` decimals, or to 6 decimals by default. +function formatNum(num, digits) { + var pow = Math.pow(10, (digits === undefined ? 6 : digits)); + return Math.round(num * pow) / pow; +} + +// @function trim(str: String): String +// Compatibility polyfill for [String.prototype.trim](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim) +function trim(str) { + return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, ''); +} + +// @function splitWords(str: String): String[] +// Trims and splits the string on whitespace and returns the array of parts. +function splitWords(str) { + return trim(str).split(/\s+/); +} + +// @function setOptions(obj: Object, options: Object): Object +// Merges the given properties to the `options` of the `obj` object, returning the resulting options. See `Class options`. Has an `L.setOptions` shortcut. +function setOptions(obj, options) { + if (!obj.hasOwnProperty('options')) { + obj.options = obj.options ? create(obj.options) : {}; + } + for (var i in options) { + obj.options[i] = options[i]; + } + return obj.options; +} + +// @function getParamString(obj: Object, existingUrl?: String, uppercase?: Boolean): String +// Converts an object into a parameter URL string, e.g. `{a: "foo", b: "bar"}` +// translates to `'?a=foo&b=bar'`. If `existingUrl` is set, the parameters will +// be appended at the end. If `uppercase` is `true`, the parameter names will +// be uppercased (e.g. `'?A=foo&B=bar'`) +function getParamString(obj, existingUrl, uppercase) { + var params = []; + for (var i in obj) { + params.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i])); + } + return ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&'); +} + +var templateRe = /\{ *([\w_-]+) *\}/g; + +// @function template(str: String, data: Object): String +// Simple templating facility, accepts a template string of the form `'Hello {a}, {b}'` +// and a data object like `{a: 'foo', b: 'bar'}`, returns evaluated string +// `('Hello foo, bar')`. You can also specify functions instead of strings for +// data values — they will be evaluated passing `data` as an argument. +function template(str, data) { + return str.replace(templateRe, function (str, key) { + var value = data[key]; + + if (value === undefined) { + throw new Error('No value provided for variable ' + str); + + } else if (typeof value === 'function') { + value = value(data); + } + return value; + }); +} + +// @function isArray(obj): Boolean +// Compatibility polyfill for [Array.isArray](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray) +var isArray = Array.isArray || function (obj) { + return (Object.prototype.toString.call(obj) === '[object Array]'); +}; + +// @function indexOf(array: Array, el: Object): Number +// Compatibility polyfill for [Array.prototype.indexOf](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf) +function indexOf(array, el) { + for (var i = 0; i < array.length; i++) { + if (array[i] === el) { return i; } + } + return -1; +} + +// @property emptyImageUrl: String +// Data URI string containing a base64-encoded empty GIF image. +// Used as a hack to free memory from unused images on WebKit-powered +// mobile devices (by setting image `src` to this string). +var emptyImageUrl = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs='; + +// inspired by http://paulirish.com/2011/requestanimationframe-for-smart-animating/ + +function getPrefixed(name) { + return window['webkit' + name] || window['moz' + name] || window['ms' + name]; +} + +var lastTime = 0; + +// fallback for IE 7-8 +function timeoutDefer(fn) { + var time = +new Date(), + timeToCall = Math.max(0, 16 - (time - lastTime)); + + lastTime = time + timeToCall; + return window.setTimeout(fn, timeToCall); +} + +var requestFn = window.requestAnimationFrame || getPrefixed('RequestAnimationFrame') || timeoutDefer; +var cancelFn = window.cancelAnimationFrame || getPrefixed('CancelAnimationFrame') || + getPrefixed('CancelRequestAnimationFrame') || function (id) { window.clearTimeout(id); }; + +// @function requestAnimFrame(fn: Function, context?: Object, immediate?: Boolean): Number +// Schedules `fn` to be executed when the browser repaints. `fn` is bound to +// `context` if given. When `immediate` is set, `fn` is called immediately if +// the browser doesn't have native support for +// [`window.requestAnimationFrame`](https://developer.mozilla.org/docs/Web/API/window/requestAnimationFrame), +// otherwise it's delayed. Returns a request ID that can be used to cancel the request. +function requestAnimFrame(fn, context, immediate) { + if (immediate && requestFn === timeoutDefer) { + fn.call(context); + } else { + return requestFn.call(window, bind(fn, context)); + } +} + +// @function cancelAnimFrame(id: Number): undefined +// Cancels a previous `requestAnimFrame`. See also [window.cancelAnimationFrame](https://developer.mozilla.org/docs/Web/API/window/cancelAnimationFrame). +function cancelAnimFrame(id) { + if (id) { + cancelFn.call(window, id); + } +} + + +var Util = (Object.freeze || Object)({ + freeze: freeze, + extend: extend, + create: create, + bind: bind, + lastId: lastId, + stamp: stamp, + throttle: throttle, + wrapNum: wrapNum, + falseFn: falseFn, + formatNum: formatNum, + trim: trim, + splitWords: splitWords, + setOptions: setOptions, + getParamString: getParamString, + template: template, + isArray: isArray, + indexOf: indexOf, + emptyImageUrl: emptyImageUrl, + requestFn: requestFn, + cancelFn: cancelFn, + requestAnimFrame: requestAnimFrame, + cancelAnimFrame: cancelAnimFrame +}); + +// @class Class +// @aka L.Class + +// @section +// @uninheritable + +// Thanks to John Resig and Dean Edwards for inspiration! + +function Class() {} + +Class.extend = function (props) { + + // @function extend(props: Object): Function + // [Extends the current class](#class-inheritance) given the properties to be included. + // Returns a Javascript function that is a class constructor (to be called with `new`). + var NewClass = function () { + + // call the constructor + if (this.initialize) { + this.initialize.apply(this, arguments); + } + + // call all constructor hooks + this.callInitHooks(); + }; + + var parentProto = NewClass.__super__ = this.prototype; + + var proto = create(parentProto); + proto.constructor = NewClass; + + NewClass.prototype = proto; + + // inherit parent's statics + for (var i in this) { + if (this.hasOwnProperty(i) && i !== 'prototype' && i !== '__super__') { + NewClass[i] = this[i]; + } + } + + // mix static properties into the class + if (props.statics) { + extend(NewClass, props.statics); + delete props.statics; + } + + // mix includes into the prototype + if (props.includes) { + checkDeprecatedMixinEvents(props.includes); + extend.apply(null, [proto].concat(props.includes)); + delete props.includes; + } + + // merge options + if (proto.options) { + props.options = extend(create(proto.options), props.options); + } + + // mix given properties into the prototype + extend(proto, props); + + proto._initHooks = []; + + // add method for calling all hooks + proto.callInitHooks = function () { + + if (this._initHooksCalled) { return; } + + if (parentProto.callInitHooks) { + parentProto.callInitHooks.call(this); + } + + this._initHooksCalled = true; + + for (var i = 0, len = proto._initHooks.length; i < len; i++) { + proto._initHooks[i].call(this); + } + }; + + return NewClass; +}; + + +// @function include(properties: Object): this +// [Includes a mixin](#class-includes) into the current class. +Class.include = function (props) { + extend(this.prototype, props); + return this; +}; + +// @function mergeOptions(options: Object): this +// [Merges `options`](#class-options) into the defaults of the class. +Class.mergeOptions = function (options) { + extend(this.prototype.options, options); + return this; +}; + +// @function addInitHook(fn: Function): this +// Adds a [constructor hook](#class-constructor-hooks) to the class. +Class.addInitHook = function (fn) { // (Function) || (String, args...) + var args = Array.prototype.slice.call(arguments, 1); + + var init = typeof fn === 'function' ? fn : function () { + this[fn].apply(this, args); + }; + + this.prototype._initHooks = this.prototype._initHooks || []; + this.prototype._initHooks.push(init); + return this; +}; + +function checkDeprecatedMixinEvents(includes) { + if (typeof L === 'undefined' || !L || !L.Mixin) { return; } + + includes = isArray(includes) ? includes : [includes]; + + for (var i = 0; i < includes.length; i++) { + if (includes[i] === L.Mixin.Events) { + console.warn('Deprecated include of L.Mixin.Events: ' + + 'this property will be removed in future releases, ' + + 'please inherit from L.Evented instead.', new Error().stack); + } + } +} + +/* + * @class Evented + * @aka L.Evented + * @inherits Class + * + * A set of methods shared between event-powered classes (like `Map` and `Marker`). Generally, events allow you to execute some function when something happens with an object (e.g. the user clicks on the map, causing the map to fire `'click'` event). + * + * @example + * + * ```js + * map.on('click', function(e) { + * alert(e.latlng); + * } ); + * ``` + * + * Leaflet deals with event listeners by reference, so if you want to add a listener and then remove it, define it as a function: + * + * ```js + * function onClick(e) { ... } + * + * map.on('click', onClick); + * map.off('click', onClick); + * ``` + */ + +var Events = { + /* @method on(type: String, fn: Function, context?: Object): this + * Adds a listener function (`fn`) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. `'click dblclick'`). + * + * @alternative + * @method on(eventMap: Object): this + * Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}` + */ + on: function (types, fn, context) { + + // types can be a map of types/handlers + if (typeof types === 'object') { + for (var type in types) { + // we don't process space-separated events here for performance; + // it's a hot path since Layer uses the on(obj) syntax + this._on(type, types[type], fn); + } + + } else { + // types can be a string of space-separated words + types = splitWords(types); + + for (var i = 0, len = types.length; i < len; i++) { + this._on(types[i], fn, context); + } + } + + return this; + }, + + /* @method off(type: String, fn?: Function, context?: Object): this + * Removes a previously added listener function. If no function is specified, it will remove all the listeners of that particular event from the object. Note that if you passed a custom context to `on`, you must pass the same context to `off` in order to remove the listener. + * + * @alternative + * @method off(eventMap: Object): this + * Removes a set of type/listener pairs. + * + * @alternative + * @method off: this + * Removes all listeners to all events on the object. This includes implicitly attached events. + */ + off: function (types, fn, context) { + + if (!types) { + // clear all listeners if called without arguments + delete this._events; + + } else if (typeof types === 'object') { + for (var type in types) { + this._off(type, types[type], fn); + } + + } else { + types = splitWords(types); + + for (var i = 0, len = types.length; i < len; i++) { + this._off(types[i], fn, context); + } + } + + return this; + }, + + // attach listener (without syntactic sugar now) + _on: function (type, fn, context) { + this._events = this._events || {}; + + /* get/init listeners for type */ + var typeListeners = this._events[type]; + if (!typeListeners) { + typeListeners = []; + this._events[type] = typeListeners; + } + + if (context === this) { + // Less memory footprint. + context = undefined; + } + var newListener = {fn: fn, ctx: context}, + listeners = typeListeners; + + // check if fn already there + for (var i = 0, len = listeners.length; i < len; i++) { + if (listeners[i].fn === fn && listeners[i].ctx === context) { + return; + } + } + + listeners.push(newListener); + }, + + _off: function (type, fn, context) { + var listeners, + i, + len; + + if (!this._events) { return; } + + listeners = this._events[type]; + + if (!listeners) { + return; + } + + if (!fn) { + // Set all removed listeners to noop so they are not called if remove happens in fire + for (i = 0, len = listeners.length; i < len; i++) { + listeners[i].fn = falseFn; + } + // clear all listeners for a type if function isn't specified + delete this._events[type]; + return; + } + + if (context === this) { + context = undefined; + } + + if (listeners) { + + // find fn and remove it + for (i = 0, len = listeners.length; i < len; i++) { + var l = listeners[i]; + if (l.ctx !== context) { continue; } + if (l.fn === fn) { + + // set the removed listener to noop so that's not called if remove happens in fire + l.fn = falseFn; + + if (this._firingCount) { + /* copy array in case events are being fired */ + this._events[type] = listeners = listeners.slice(); + } + listeners.splice(i, 1); + + return; + } + } + } + }, + + // @method fire(type: String, data?: Object, propagate?: Boolean): this + // Fires an event of the specified type. You can optionally provide an data + // object — the first argument of the listener function will contain its + // properties. The event can optionally be propagated to event parents. + fire: function (type, data, propagate) { + if (!this.listens(type, propagate)) { return this; } + + var event = extend({}, data, { + type: type, + target: this, + sourceTarget: data && data.sourceTarget || this + }); + + if (this._events) { + var listeners = this._events[type]; + + if (listeners) { + this._firingCount = (this._firingCount + 1) || 1; + for (var i = 0, len = listeners.length; i < len; i++) { + var l = listeners[i]; + l.fn.call(l.ctx || this, event); + } + + this._firingCount--; + } + } + + if (propagate) { + // propagate the event to parents (set with addEventParent) + this._propagateEvent(event); + } + + return this; + }, + + // @method listens(type: String): Boolean + // Returns `true` if a particular event type has any listeners attached to it. + listens: function (type, propagate) { + var listeners = this._events && this._events[type]; + if (listeners && listeners.length) { return true; } + + if (propagate) { + // also check parents for listeners if event propagates + for (var id in this._eventParents) { + if (this._eventParents[id].listens(type, propagate)) { return true; } + } + } + return false; + }, + + // @method once(…): this + // Behaves as [`on(…)`](#evented-on), except the listener will only get fired once and then removed. + once: function (types, fn, context) { + + if (typeof types === 'object') { + for (var type in types) { + this.once(type, types[type], fn); + } + return this; + } + + var handler = bind(function () { + this + .off(types, fn, context) + .off(types, handler, context); + }, this); + + // add a listener that's executed once and removed after that + return this + .on(types, fn, context) + .on(types, handler, context); + }, + + // @method addEventParent(obj: Evented): this + // Adds an event parent - an `Evented` that will receive propagated events + addEventParent: function (obj) { + this._eventParents = this._eventParents || {}; + this._eventParents[stamp(obj)] = obj; + return this; + }, + + // @method removeEventParent(obj: Evented): this + // Removes an event parent, so it will stop receiving propagated events + removeEventParent: function (obj) { + if (this._eventParents) { + delete this._eventParents[stamp(obj)]; + } + return this; + }, + + _propagateEvent: function (e) { + for (var id in this._eventParents) { + this._eventParents[id].fire(e.type, extend({ + layer: e.target, + propagatedFrom: e.target + }, e), true); + } + } +}; + +// aliases; we should ditch those eventually + +// @method addEventListener(…): this +// Alias to [`on(…)`](#evented-on) +Events.addEventListener = Events.on; + +// @method removeEventListener(…): this +// Alias to [`off(…)`](#evented-off) + +// @method clearAllEventListeners(…): this +// Alias to [`off()`](#evented-off) +Events.removeEventListener = Events.clearAllEventListeners = Events.off; + +// @method addOneTimeEventListener(…): this +// Alias to [`once(…)`](#evented-once) +Events.addOneTimeEventListener = Events.once; + +// @method fireEvent(…): this +// Alias to [`fire(…)`](#evented-fire) +Events.fireEvent = Events.fire; + +// @method hasEventListeners(…): Boolean +// Alias to [`listens(…)`](#evented-listens) +Events.hasEventListeners = Events.listens; + +var Evented = Class.extend(Events); + +/* + * @class Point + * @aka L.Point + * + * Represents a point with `x` and `y` coordinates in pixels. + * + * @example + * + * ```js + * var point = L.point(200, 300); + * ``` + * + * All Leaflet methods and options that accept `Point` objects also accept them in a simple Array form (unless noted otherwise), so these lines are equivalent: + * + * ```js + * map.panBy([200, 300]); + * map.panBy(L.point(200, 300)); + * ``` + * + * Note that `Point` does not inherit from Leafet's `Class` object, + * which means new classes can't inherit from it, and new methods + * can't be added to it with the `include` function. + */ + +function Point(x, y, round) { + // @property x: Number; The `x` coordinate of the point + this.x = (round ? Math.round(x) : x); + // @property y: Number; The `y` coordinate of the point + this.y = (round ? Math.round(y) : y); +} + +var trunc = Math.trunc || function (v) { + return v > 0 ? Math.floor(v) : Math.ceil(v); +}; + +Point.prototype = { + + // @method clone(): Point + // Returns a copy of the current point. + clone: function () { + return new Point(this.x, this.y); + }, + + // @method add(otherPoint: Point): Point + // Returns the result of addition of the current and the given points. + add: function (point) { + // non-destructive, returns a new point + return this.clone()._add(toPoint(point)); + }, + + _add: function (point) { + // destructive, used directly for performance in situations where it's safe to modify existing point + this.x += point.x; + this.y += point.y; + return this; + }, + + // @method subtract(otherPoint: Point): Point + // Returns the result of subtraction of the given point from the current. + subtract: function (point) { + return this.clone()._subtract(toPoint(point)); + }, + + _subtract: function (point) { + this.x -= point.x; + this.y -= point.y; + return this; + }, + + // @method divideBy(num: Number): Point + // Returns the result of division of the current point by the given number. + divideBy: function (num) { + return this.clone()._divideBy(num); + }, + + _divideBy: function (num) { + this.x /= num; + this.y /= num; + return this; + }, + + // @method multiplyBy(num: Number): Point + // Returns the result of multiplication of the current point by the given number. + multiplyBy: function (num) { + return this.clone()._multiplyBy(num); + }, + + _multiplyBy: function (num) { + this.x *= num; + this.y *= num; + return this; + }, + + // @method scaleBy(scale: Point): Point + // Multiply each coordinate of the current point by each coordinate of + // `scale`. In linear algebra terms, multiply the point by the + // [scaling matrix](https://en.wikipedia.org/wiki/Scaling_%28geometry%29#Matrix_representation) + // defined by `scale`. + scaleBy: function (point) { + return new Point(this.x * point.x, this.y * point.y); + }, + + // @method unscaleBy(scale: Point): Point + // Inverse of `scaleBy`. Divide each coordinate of the current point by + // each coordinate of `scale`. + unscaleBy: function (point) { + return new Point(this.x / point.x, this.y / point.y); + }, + + // @method round(): Point + // Returns a copy of the current point with rounded coordinates. + round: function () { + return this.clone()._round(); + }, + + _round: function () { + this.x = Math.round(this.x); + this.y = Math.round(this.y); + return this; + }, + + // @method floor(): Point + // Returns a copy of the current point with floored coordinates (rounded down). + floor: function () { + return this.clone()._floor(); + }, + + _floor: function () { + this.x = Math.floor(this.x); + this.y = Math.floor(this.y); + return this; + }, + + // @method ceil(): Point + // Returns a copy of the current point with ceiled coordinates (rounded up). + ceil: function () { + return this.clone()._ceil(); + }, + + _ceil: function () { + this.x = Math.ceil(this.x); + this.y = Math.ceil(this.y); + return this; + }, + + // @method trunc(): Point + // Returns a copy of the current point with truncated coordinates (rounded towards zero). + trunc: function () { + return this.clone()._trunc(); + }, + + _trunc: function () { + this.x = trunc(this.x); + this.y = trunc(this.y); + return this; + }, + + // @method distanceTo(otherPoint: Point): Number + // Returns the cartesian distance between the current and the given points. + distanceTo: function (point) { + point = toPoint(point); + + var x = point.x - this.x, + y = point.y - this.y; + + return Math.sqrt(x * x + y * y); + }, + + // @method equals(otherPoint: Point): Boolean + // Returns `true` if the given point has the same coordinates. + equals: function (point) { + point = toPoint(point); + + return point.x === this.x && + point.y === this.y; + }, + + // @method contains(otherPoint: Point): Boolean + // Returns `true` if both coordinates of the given point are less than the corresponding current point coordinates (in absolute values). + contains: function (point) { + point = toPoint(point); + + return Math.abs(point.x) <= Math.abs(this.x) && + Math.abs(point.y) <= Math.abs(this.y); + }, + + // @method toString(): String + // Returns a string representation of the point for debugging purposes. + toString: function () { + return 'Point(' + + formatNum(this.x) + ', ' + + formatNum(this.y) + ')'; + } +}; + +// @factory L.point(x: Number, y: Number, round?: Boolean) +// Creates a Point object with the given `x` and `y` coordinates. If optional `round` is set to true, rounds the `x` and `y` values. + +// @alternative +// @factory L.point(coords: Number[]) +// Expects an array of the form `[x, y]` instead. + +// @alternative +// @factory L.point(coords: Object) +// Expects a plain object of the form `{x: Number, y: Number}` instead. +function toPoint(x, y, round) { + if (x instanceof Point) { + return x; + } + if (isArray(x)) { + return new Point(x[0], x[1]); + } + if (x === undefined || x === null) { + return x; + } + if (typeof x === 'object' && 'x' in x && 'y' in x) { + return new Point(x.x, x.y); + } + return new Point(x, y, round); +} + +/* + * @class Bounds + * @aka L.Bounds + * + * Represents a rectangular area in pixel coordinates. + * + * @example + * + * ```js + * var p1 = L.point(10, 10), + * p2 = L.point(40, 60), + * bounds = L.bounds(p1, p2); + * ``` + * + * All Leaflet methods that accept `Bounds` objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this: + * + * ```js + * otherBounds.intersects([[10, 10], [40, 60]]); + * ``` + * + * Note that `Bounds` does not inherit from Leafet's `Class` object, + * which means new classes can't inherit from it, and new methods + * can't be added to it with the `include` function. + */ + +function Bounds(a, b) { + if (!a) { return; } + + var points = b ? [a, b] : a; + + for (var i = 0, len = points.length; i < len; i++) { + this.extend(points[i]); + } +} + +Bounds.prototype = { + // @method extend(point: Point): this + // Extends the bounds to contain the given point. + extend: function (point) { // (Point) + point = toPoint(point); + + // @property min: Point + // The top left corner of the rectangle. + // @property max: Point + // The bottom right corner of the rectangle. + if (!this.min && !this.max) { + this.min = point.clone(); + this.max = point.clone(); + } else { + this.min.x = Math.min(point.x, this.min.x); + this.max.x = Math.max(point.x, this.max.x); + this.min.y = Math.min(point.y, this.min.y); + this.max.y = Math.max(point.y, this.max.y); + } + return this; + }, + + // @method getCenter(round?: Boolean): Point + // Returns the center point of the bounds. + getCenter: function (round) { + return new Point( + (this.min.x + this.max.x) / 2, + (this.min.y + this.max.y) / 2, round); + }, + + // @method getBottomLeft(): Point + // Returns the bottom-left point of the bounds. + getBottomLeft: function () { + return new Point(this.min.x, this.max.y); + }, + + // @method getTopRight(): Point + // Returns the top-right point of the bounds. + getTopRight: function () { // -> Point + return new Point(this.max.x, this.min.y); + }, + + // @method getTopLeft(): Point + // Returns the top-left point of the bounds (i.e. [`this.min`](#bounds-min)). + getTopLeft: function () { + return this.min; // left, top + }, + + // @method getBottomRight(): Point + // Returns the bottom-right point of the bounds (i.e. [`this.max`](#bounds-max)). + getBottomRight: function () { + return this.max; // right, bottom + }, + + // @method getSize(): Point + // Returns the size of the given bounds + getSize: function () { + return this.max.subtract(this.min); + }, + + // @method contains(otherBounds: Bounds): Boolean + // Returns `true` if the rectangle contains the given one. + // @alternative + // @method contains(point: Point): Boolean + // Returns `true` if the rectangle contains the given point. + contains: function (obj) { + var min, max; + + if (typeof obj[0] === 'number' || obj instanceof Point) { + obj = toPoint(obj); + } else { + obj = toBounds(obj); + } + + if (obj instanceof Bounds) { + min = obj.min; + max = obj.max; + } else { + min = max = obj; + } + + return (min.x >= this.min.x) && + (max.x <= this.max.x) && + (min.y >= this.min.y) && + (max.y <= this.max.y); + }, + + // @method intersects(otherBounds: Bounds): Boolean + // Returns `true` if the rectangle intersects the given bounds. Two bounds + // intersect if they have at least one point in common. + intersects: function (bounds) { // (Bounds) -> Boolean + bounds = toBounds(bounds); + + var min = this.min, + max = this.max, + min2 = bounds.min, + max2 = bounds.max, + xIntersects = (max2.x >= min.x) && (min2.x <= max.x), + yIntersects = (max2.y >= min.y) && (min2.y <= max.y); + + return xIntersects && yIntersects; + }, + + // @method overlaps(otherBounds: Bounds): Boolean + // Returns `true` if the rectangle overlaps the given bounds. Two bounds + // overlap if their intersection is an area. + overlaps: function (bounds) { // (Bounds) -> Boolean + bounds = toBounds(bounds); + + var min = this.min, + max = this.max, + min2 = bounds.min, + max2 = bounds.max, + xOverlaps = (max2.x > min.x) && (min2.x < max.x), + yOverlaps = (max2.y > min.y) && (min2.y < max.y); + + return xOverlaps && yOverlaps; + }, + + isValid: function () { + return !!(this.min && this.max); + } +}; + + +// @factory L.bounds(corner1: Point, corner2: Point) +// Creates a Bounds object from two corners coordinate pairs. +// @alternative +// @factory L.bounds(points: Point[]) +// Creates a Bounds object from the given array of points. +function toBounds(a, b) { + if (!a || a instanceof Bounds) { + return a; + } + return new Bounds(a, b); +} + +/* + * @class LatLngBounds + * @aka L.LatLngBounds + * + * Represents a rectangular geographical area on a map. + * + * @example + * + * ```js + * var corner1 = L.latLng(40.712, -74.227), + * corner2 = L.latLng(40.774, -74.125), + * bounds = L.latLngBounds(corner1, corner2); + * ``` + * + * All Leaflet methods that accept LatLngBounds objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this: + * + * ```js + * map.fitBounds([ + * [40.712, -74.227], + * [40.774, -74.125] + * ]); + * ``` + * + * Caution: if the area crosses the antimeridian (often confused with the International Date Line), you must specify corners _outside_ the [-180, 180] degrees longitude range. + * + * Note that `LatLngBounds` does not inherit from Leafet's `Class` object, + * which means new classes can't inherit from it, and new methods + * can't be added to it with the `include` function. + */ + +function LatLngBounds(corner1, corner2) { // (LatLng, LatLng) or (LatLng[]) + if (!corner1) { return; } + + var latlngs = corner2 ? [corner1, corner2] : corner1; + + for (var i = 0, len = latlngs.length; i < len; i++) { + this.extend(latlngs[i]); + } +} + +LatLngBounds.prototype = { + + // @method extend(latlng: LatLng): this + // Extend the bounds to contain the given point + + // @alternative + // @method extend(otherBounds: LatLngBounds): this + // Extend the bounds to contain the given bounds + extend: function (obj) { + var sw = this._southWest, + ne = this._northEast, + sw2, ne2; + + if (obj instanceof LatLng) { + sw2 = obj; + ne2 = obj; + + } else if (obj instanceof LatLngBounds) { + sw2 = obj._southWest; + ne2 = obj._northEast; + + if (!sw2 || !ne2) { return this; } + + } else { + return obj ? this.extend(toLatLng(obj) || toLatLngBounds(obj)) : this; + } + + if (!sw && !ne) { + this._southWest = new LatLng(sw2.lat, sw2.lng); + this._northEast = new LatLng(ne2.lat, ne2.lng); + } else { + sw.lat = Math.min(sw2.lat, sw.lat); + sw.lng = Math.min(sw2.lng, sw.lng); + ne.lat = Math.max(ne2.lat, ne.lat); + ne.lng = Math.max(ne2.lng, ne.lng); + } + + return this; + }, + + // @method pad(bufferRatio: Number): LatLngBounds + // Returns bounds created by extending or retracting the current bounds by a given ratio in each direction. + // For example, a ratio of 0.5 extends the bounds by 50% in each direction. + // Negative values will retract the bounds. + pad: function (bufferRatio) { + var sw = this._southWest, + ne = this._northEast, + heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio, + widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio; + + return new LatLngBounds( + new LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer), + new LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer)); + }, + + // @method getCenter(): LatLng + // Returns the center point of the bounds. + getCenter: function () { + return new LatLng( + (this._southWest.lat + this._northEast.lat) / 2, + (this._southWest.lng + this._northEast.lng) / 2); + }, + + // @method getSouthWest(): LatLng + // Returns the south-west point of the bounds. + getSouthWest: function () { + return this._southWest; + }, + + // @method getNorthEast(): LatLng + // Returns the north-east point of the bounds. + getNorthEast: function () { + return this._northEast; + }, + + // @method getNorthWest(): LatLng + // Returns the north-west point of the bounds. + getNorthWest: function () { + return new LatLng(this.getNorth(), this.getWest()); + }, + + // @method getSouthEast(): LatLng + // Returns the south-east point of the bounds. + getSouthEast: function () { + return new LatLng(this.getSouth(), this.getEast()); + }, + + // @method getWest(): Number + // Returns the west longitude of the bounds + getWest: function () { + return this._southWest.lng; + }, + + // @method getSouth(): Number + // Returns the south latitude of the bounds + getSouth: function () { + return this._southWest.lat; + }, + + // @method getEast(): Number + // Returns the east longitude of the bounds + getEast: function () { + return this._northEast.lng; + }, + + // @method getNorth(): Number + // Returns the north latitude of the bounds + getNorth: function () { + return this._northEast.lat; + }, + + // @method contains(otherBounds: LatLngBounds): Boolean + // Returns `true` if the rectangle contains the given one. + + // @alternative + // @method contains (latlng: LatLng): Boolean + // Returns `true` if the rectangle contains the given point. + contains: function (obj) { // (LatLngBounds) or (LatLng) -> Boolean + if (typeof obj[0] === 'number' || obj instanceof LatLng || 'lat' in obj) { + obj = toLatLng(obj); + } else { + obj = toLatLngBounds(obj); + } + + var sw = this._southWest, + ne = this._northEast, + sw2, ne2; + + if (obj instanceof LatLngBounds) { + sw2 = obj.getSouthWest(); + ne2 = obj.getNorthEast(); + } else { + sw2 = ne2 = obj; + } + + return (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) && + (sw2.lng >= sw.lng) && (ne2.lng <= ne.lng); + }, + + // @method intersects(otherBounds: LatLngBounds): Boolean + // Returns `true` if the rectangle intersects the given bounds. Two bounds intersect if they have at least one point in common. + intersects: function (bounds) { + bounds = toLatLngBounds(bounds); + + var sw = this._southWest, + ne = this._northEast, + sw2 = bounds.getSouthWest(), + ne2 = bounds.getNorthEast(), + + latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat), + lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng); + + return latIntersects && lngIntersects; + }, + + // @method overlaps(otherBounds: Bounds): Boolean + // Returns `true` if the rectangle overlaps the given bounds. Two bounds overlap if their intersection is an area. + overlaps: function (bounds) { + bounds = toLatLngBounds(bounds); + + var sw = this._southWest, + ne = this._northEast, + sw2 = bounds.getSouthWest(), + ne2 = bounds.getNorthEast(), + + latOverlaps = (ne2.lat > sw.lat) && (sw2.lat < ne.lat), + lngOverlaps = (ne2.lng > sw.lng) && (sw2.lng < ne.lng); + + return latOverlaps && lngOverlaps; + }, + + // @method toBBoxString(): String + // Returns a string with bounding box coordinates in a 'southwest_lng,southwest_lat,northeast_lng,northeast_lat' format. Useful for sending requests to web services that return geo data. + toBBoxString: function () { + return [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(','); + }, + + // @method equals(otherBounds: LatLngBounds, maxMargin?: Number): Boolean + // Returns `true` if the rectangle is equivalent (within a small margin of error) to the given bounds. The margin of error can be overridden by setting `maxMargin` to a small number. + equals: function (bounds, maxMargin) { + if (!bounds) { return false; } + + bounds = toLatLngBounds(bounds); + + return this._southWest.equals(bounds.getSouthWest(), maxMargin) && + this._northEast.equals(bounds.getNorthEast(), maxMargin); + }, + + // @method isValid(): Boolean + // Returns `true` if the bounds are properly initialized. + isValid: function () { + return !!(this._southWest && this._northEast); + } +}; + +// TODO International date line? + +// @factory L.latLngBounds(corner1: LatLng, corner2: LatLng) +// Creates a `LatLngBounds` object by defining two diagonally opposite corners of the rectangle. + +// @alternative +// @factory L.latLngBounds(latlngs: LatLng[]) +// Creates a `LatLngBounds` object defined by the geographical points it contains. Very useful for zooming the map to fit a particular set of locations with [`fitBounds`](#map-fitbounds). +function toLatLngBounds(a, b) { + if (a instanceof LatLngBounds) { + return a; + } + return new LatLngBounds(a, b); +} + +/* @class LatLng + * @aka L.LatLng + * + * Represents a geographical point with a certain latitude and longitude. + * + * @example + * + * ``` + * var latlng = L.latLng(50.5, 30.5); + * ``` + * + * All Leaflet methods that accept LatLng objects also accept them in a simple Array form and simple object form (unless noted otherwise), so these lines are equivalent: + * + * ``` + * map.panTo([50, 30]); + * map.panTo({lon: 30, lat: 50}); + * map.panTo({lat: 50, lng: 30}); + * map.panTo(L.latLng(50, 30)); + * ``` + * + * Note that `LatLng` does not inherit from Leaflet's `Class` object, + * which means new classes can't inherit from it, and new methods + * can't be added to it with the `include` function. + */ + +function LatLng(lat, lng, alt) { + if (isNaN(lat) || isNaN(lng)) { + throw new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')'); + } + + // @property lat: Number + // Latitude in degrees + this.lat = +lat; + + // @property lng: Number + // Longitude in degrees + this.lng = +lng; + + // @property alt: Number + // Altitude in meters (optional) + if (alt !== undefined) { + this.alt = +alt; + } +} + +LatLng.prototype = { + // @method equals(otherLatLng: LatLng, maxMargin?: Number): Boolean + // Returns `true` if the given `LatLng` point is at the same position (within a small margin of error). The margin of error can be overridden by setting `maxMargin` to a small number. + equals: function (obj, maxMargin) { + if (!obj) { return false; } + + obj = toLatLng(obj); + + var margin = Math.max( + Math.abs(this.lat - obj.lat), + Math.abs(this.lng - obj.lng)); + + return margin <= (maxMargin === undefined ? 1.0E-9 : maxMargin); + }, + + // @method toString(): String + // Returns a string representation of the point (for debugging purposes). + toString: function (precision) { + return 'LatLng(' + + formatNum(this.lat, precision) + ', ' + + formatNum(this.lng, precision) + ')'; + }, + + // @method distanceTo(otherLatLng: LatLng): Number + // Returns the distance (in meters) to the given `LatLng` calculated using the [Spherical Law of Cosines](https://en.wikipedia.org/wiki/Spherical_law_of_cosines). + distanceTo: function (other) { + return Earth.distance(this, toLatLng(other)); + }, + + // @method wrap(): LatLng + // Returns a new `LatLng` object with the longitude wrapped so it's always between -180 and +180 degrees. + wrap: function () { + return Earth.wrapLatLng(this); + }, + + // @method toBounds(sizeInMeters: Number): LatLngBounds + // Returns a new `LatLngBounds` object in which each boundary is `sizeInMeters/2` meters apart from the `LatLng`. + toBounds: function (sizeInMeters) { + var latAccuracy = 180 * sizeInMeters / 40075017, + lngAccuracy = latAccuracy / Math.cos((Math.PI / 180) * this.lat); + + return toLatLngBounds( + [this.lat - latAccuracy, this.lng - lngAccuracy], + [this.lat + latAccuracy, this.lng + lngAccuracy]); + }, + + clone: function () { + return new LatLng(this.lat, this.lng, this.alt); + } +}; + + + +// @factory L.latLng(latitude: Number, longitude: Number, altitude?: Number): LatLng +// Creates an object representing a geographical point with the given latitude and longitude (and optionally altitude). + +// @alternative +// @factory L.latLng(coords: Array): LatLng +// Expects an array of the form `[Number, Number]` or `[Number, Number, Number]` instead. + +// @alternative +// @factory L.latLng(coords: Object): LatLng +// Expects an plain object of the form `{lat: Number, lng: Number}` or `{lat: Number, lng: Number, alt: Number}` instead. + +function toLatLng(a, b, c) { + if (a instanceof LatLng) { + return a; + } + if (isArray(a) && typeof a[0] !== 'object') { + if (a.length === 3) { + return new LatLng(a[0], a[1], a[2]); + } + if (a.length === 2) { + return new LatLng(a[0], a[1]); + } + return null; + } + if (a === undefined || a === null) { + return a; + } + if (typeof a === 'object' && 'lat' in a) { + return new LatLng(a.lat, 'lng' in a ? a.lng : a.lon, a.alt); + } + if (b === undefined) { + return null; + } + return new LatLng(a, b, c); +} + +/* + * @namespace CRS + * @crs L.CRS.Base + * Object that defines coordinate reference systems for projecting + * geographical points into pixel (screen) coordinates and back (and to + * coordinates in other units for [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services). See + * [spatial reference system](http://en.wikipedia.org/wiki/Coordinate_reference_system). + * + * Leaflet defines the most usual CRSs by default. If you want to use a + * CRS not defined by default, take a look at the + * [Proj4Leaflet](https://github.com/kartena/Proj4Leaflet) plugin. + * + * Note that the CRS instances do not inherit from Leafet's `Class` object, + * and can't be instantiated. Also, new classes can't inherit from them, + * and methods can't be added to them with the `include` function. + */ + +var CRS = { + // @method latLngToPoint(latlng: LatLng, zoom: Number): Point + // Projects geographical coordinates into pixel coordinates for a given zoom. + latLngToPoint: function (latlng, zoom) { + var projectedPoint = this.projection.project(latlng), + scale = this.scale(zoom); + + return this.transformation._transform(projectedPoint, scale); + }, + + // @method pointToLatLng(point: Point, zoom: Number): LatLng + // The inverse of `latLngToPoint`. Projects pixel coordinates on a given + // zoom into geographical coordinates. + pointToLatLng: function (point, zoom) { + var scale = this.scale(zoom), + untransformedPoint = this.transformation.untransform(point, scale); + + return this.projection.unproject(untransformedPoint); + }, + + // @method project(latlng: LatLng): Point + // Projects geographical coordinates into coordinates in units accepted for + // this CRS (e.g. meters for EPSG:3857, for passing it to WMS services). + project: function (latlng) { + return this.projection.project(latlng); + }, + + // @method unproject(point: Point): LatLng + // Given a projected coordinate returns the corresponding LatLng. + // The inverse of `project`. + unproject: function (point) { + return this.projection.unproject(point); + }, + + // @method scale(zoom: Number): Number + // Returns the scale used when transforming projected coordinates into + // pixel coordinates for a particular zoom. For example, it returns + // `256 * 2^zoom` for Mercator-based CRS. + scale: function (zoom) { + return 256 * Math.pow(2, zoom); + }, + + // @method zoom(scale: Number): Number + // Inverse of `scale()`, returns the zoom level corresponding to a scale + // factor of `scale`. + zoom: function (scale) { + return Math.log(scale / 256) / Math.LN2; + }, + + // @method getProjectedBounds(zoom: Number): Bounds + // Returns the projection's bounds scaled and transformed for the provided `zoom`. + getProjectedBounds: function (zoom) { + if (this.infinite) { return null; } + + var b = this.projection.bounds, + s = this.scale(zoom), + min = this.transformation.transform(b.min, s), + max = this.transformation.transform(b.max, s); + + return new Bounds(min, max); + }, + + // @method distance(latlng1: LatLng, latlng2: LatLng): Number + // Returns the distance between two geographical coordinates. + + // @property code: String + // Standard code name of the CRS passed into WMS services (e.g. `'EPSG:3857'`) + // + // @property wrapLng: Number[] + // An array of two numbers defining whether the longitude (horizontal) coordinate + // axis wraps around a given range and how. Defaults to `[-180, 180]` in most + // geographical CRSs. If `undefined`, the longitude axis does not wrap around. + // + // @property wrapLat: Number[] + // Like `wrapLng`, but for the latitude (vertical) axis. + + // wrapLng: [min, max], + // wrapLat: [min, max], + + // @property infinite: Boolean + // If true, the coordinate space will be unbounded (infinite in both axes) + infinite: false, + + // @method wrapLatLng(latlng: LatLng): LatLng + // Returns a `LatLng` where lat and lng has been wrapped according to the + // CRS's `wrapLat` and `wrapLng` properties, if they are outside the CRS's bounds. + wrapLatLng: function (latlng) { + var lng = this.wrapLng ? wrapNum(latlng.lng, this.wrapLng, true) : latlng.lng, + lat = this.wrapLat ? wrapNum(latlng.lat, this.wrapLat, true) : latlng.lat, + alt = latlng.alt; + + return new LatLng(lat, lng, alt); + }, + + // @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds + // Returns a `LatLngBounds` with the same size as the given one, ensuring + // that its center is within the CRS's bounds. + // Only accepts actual `L.LatLngBounds` instances, not arrays. + wrapLatLngBounds: function (bounds) { + var center = bounds.getCenter(), + newCenter = this.wrapLatLng(center), + latShift = center.lat - newCenter.lat, + lngShift = center.lng - newCenter.lng; + + if (latShift === 0 && lngShift === 0) { + return bounds; + } + + var sw = bounds.getSouthWest(), + ne = bounds.getNorthEast(), + newSw = new LatLng(sw.lat - latShift, sw.lng - lngShift), + newNe = new LatLng(ne.lat - latShift, ne.lng - lngShift); + + return new LatLngBounds(newSw, newNe); + } +}; + +/* + * @namespace CRS + * @crs L.CRS.Earth + * + * Serves as the base for CRS that are global such that they cover the earth. + * Can only be used as the base for other CRS and cannot be used directly, + * since it does not have a `code`, `projection` or `transformation`. `distance()` returns + * meters. + */ + +var Earth = extend({}, CRS, { + wrapLng: [-180, 180], + + // Mean Earth Radius, as recommended for use by + // the International Union of Geodesy and Geophysics, + // see http://rosettacode.org/wiki/Haversine_formula + R: 6371000, + + // distance between two geographical points using spherical law of cosines approximation + distance: function (latlng1, latlng2) { + var rad = Math.PI / 180, + lat1 = latlng1.lat * rad, + lat2 = latlng2.lat * rad, + sinDLat = Math.sin((latlng2.lat - latlng1.lat) * rad / 2), + sinDLon = Math.sin((latlng2.lng - latlng1.lng) * rad / 2), + a = sinDLat * sinDLat + Math.cos(lat1) * Math.cos(lat2) * sinDLon * sinDLon, + c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + return this.R * c; + } +}); + +/* + * @namespace Projection + * @projection L.Projection.SphericalMercator + * + * Spherical Mercator projection — the most common projection for online maps, + * used by almost all free and commercial tile providers. Assumes that Earth is + * a sphere. Used by the `EPSG:3857` CRS. + */ + +var earthRadius = 6378137; + +var SphericalMercator = { + + R: earthRadius, + MAX_LATITUDE: 85.0511287798, + + project: function (latlng) { + var d = Math.PI / 180, + max = this.MAX_LATITUDE, + lat = Math.max(Math.min(max, latlng.lat), -max), + sin = Math.sin(lat * d); + + return new Point( + this.R * latlng.lng * d, + this.R * Math.log((1 + sin) / (1 - sin)) / 2); + }, + + unproject: function (point) { + var d = 180 / Math.PI; + + return new LatLng( + (2 * Math.atan(Math.exp(point.y / this.R)) - (Math.PI / 2)) * d, + point.x * d / this.R); + }, + + bounds: (function () { + var d = earthRadius * Math.PI; + return new Bounds([-d, -d], [d, d]); + })() +}; + +/* + * @class Transformation + * @aka L.Transformation + * + * Represents an affine transformation: a set of coefficients `a`, `b`, `c`, `d` + * for transforming a point of a form `(x, y)` into `(a*x + b, c*y + d)` and doing + * the reverse. Used by Leaflet in its projections code. + * + * @example + * + * ```js + * var transformation = L.transformation(2, 5, -1, 10), + * p = L.point(1, 2), + * p2 = transformation.transform(p), // L.point(7, 8) + * p3 = transformation.untransform(p2); // L.point(1, 2) + * ``` + */ + + +// factory new L.Transformation(a: Number, b: Number, c: Number, d: Number) +// Creates a `Transformation` object with the given coefficients. +function Transformation(a, b, c, d) { + if (isArray(a)) { + // use array properties + this._a = a[0]; + this._b = a[1]; + this._c = a[2]; + this._d = a[3]; + return; + } + this._a = a; + this._b = b; + this._c = c; + this._d = d; +} + +Transformation.prototype = { + // @method transform(point: Point, scale?: Number): Point + // Returns a transformed point, optionally multiplied by the given scale. + // Only accepts actual `L.Point` instances, not arrays. + transform: function (point, scale) { // (Point, Number) -> Point + return this._transform(point.clone(), scale); + }, + + // destructive transform (faster) + _transform: function (point, scale) { + scale = scale || 1; + point.x = scale * (this._a * point.x + this._b); + point.y = scale * (this._c * point.y + this._d); + return point; + }, + + // @method untransform(point: Point, scale?: Number): Point + // Returns the reverse transformation of the given point, optionally divided + // by the given scale. Only accepts actual `L.Point` instances, not arrays. + untransform: function (point, scale) { + scale = scale || 1; + return new Point( + (point.x / scale - this._b) / this._a, + (point.y / scale - this._d) / this._c); + } +}; + +// factory L.transformation(a: Number, b: Number, c: Number, d: Number) + +// @factory L.transformation(a: Number, b: Number, c: Number, d: Number) +// Instantiates a Transformation object with the given coefficients. + +// @alternative +// @factory L.transformation(coefficients: Array): Transformation +// Expects an coefficients array of the form +// `[a: Number, b: Number, c: Number, d: Number]`. + +function toTransformation(a, b, c, d) { + return new Transformation(a, b, c, d); +} + +/* + * @namespace CRS + * @crs L.CRS.EPSG3857 + * + * The most common CRS for online maps, used by almost all free and commercial + * tile providers. Uses Spherical Mercator projection. Set in by default in + * Map's `crs` option. + */ + +var EPSG3857 = extend({}, Earth, { + code: 'EPSG:3857', + projection: SphericalMercator, + + transformation: (function () { + var scale = 0.5 / (Math.PI * SphericalMercator.R); + return toTransformation(scale, 0.5, -scale, 0.5); + }()) +}); + +var EPSG900913 = extend({}, EPSG3857, { + code: 'EPSG:900913' +}); + +// @namespace SVG; @section +// There are several static functions which can be called without instantiating L.SVG: + +// @function create(name: String): SVGElement +// Returns a instance of [SVGElement](https://developer.mozilla.org/docs/Web/API/SVGElement), +// corresponding to the class name passed. For example, using 'line' will return +// an instance of [SVGLineElement](https://developer.mozilla.org/docs/Web/API/SVGLineElement). +function svgCreate(name) { + return document.createElementNS('http://www.w3.org/2000/svg', name); +} + +// @function pointsToPath(rings: Point[], closed: Boolean): String +// Generates a SVG path string for multiple rings, with each ring turning +// into "M..L..L.." instructions +function pointsToPath(rings, closed) { + var str = '', + i, j, len, len2, points, p; + + for (i = 0, len = rings.length; i < len; i++) { + points = rings[i]; + + for (j = 0, len2 = points.length; j < len2; j++) { + p = points[j]; + str += (j ? 'L' : 'M') + p.x + ' ' + p.y; + } + + // closes the ring for polygons; "x" is VML syntax + str += closed ? (svg ? 'z' : 'x') : ''; + } + + // SVG complains about empty path strings + return str || 'M0 0'; +} + +/* + * @namespace Browser + * @aka L.Browser + * + * A namespace with static properties for browser/feature detection used by Leaflet internally. + * + * @example + * + * ```js + * if (L.Browser.ielt9) { + * alert('Upgrade your browser, dude!'); + * } + * ``` + */ + +var style$1 = document.documentElement.style; + +// @property ie: Boolean; `true` for all Internet Explorer versions (not Edge). +var ie = 'ActiveXObject' in window; + +// @property ielt9: Boolean; `true` for Internet Explorer versions less than 9. +var ielt9 = ie && !document.addEventListener; + +// @property edge: Boolean; `true` for the Edge web browser. +var edge = 'msLaunchUri' in navigator && !('documentMode' in document); + +// @property webkit: Boolean; +// `true` for webkit-based browsers like Chrome and Safari (including mobile versions). +var webkit = userAgentContains('webkit'); + +// @property android: Boolean +// `true` for any browser running on an Android platform. +var android = userAgentContains('android'); + +// @property android23: Boolean; `true` for browsers running on Android 2 or Android 3. +var android23 = userAgentContains('android 2') || userAgentContains('android 3'); + +/* See https://stackoverflow.com/a/17961266 for details on detecting stock Android */ +var webkitVer = parseInt(/WebKit\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10); // also matches AppleWebKit +// @property androidStock: Boolean; `true` for the Android stock browser (i.e. not Chrome) +var androidStock = android && userAgentContains('Google') && webkitVer < 537 && !('AudioNode' in window); + +// @property opera: Boolean; `true` for the Opera browser +var opera = !!window.opera; + +// @property chrome: Boolean; `true` for the Chrome browser. +var chrome = userAgentContains('chrome'); + +// @property gecko: Boolean; `true` for gecko-based browsers like Firefox. +var gecko = userAgentContains('gecko') && !webkit && !opera && !ie; + +// @property safari: Boolean; `true` for the Safari browser. +var safari = !chrome && userAgentContains('safari'); + +var phantom = userAgentContains('phantom'); + +// @property opera12: Boolean +// `true` for the Opera browser supporting CSS transforms (version 12 or later). +var opera12 = 'OTransition' in style$1; + +// @property win: Boolean; `true` when the browser is running in a Windows platform +var win = navigator.platform.indexOf('Win') === 0; + +// @property ie3d: Boolean; `true` for all Internet Explorer versions supporting CSS transforms. +var ie3d = ie && ('transition' in style$1); + +// @property webkit3d: Boolean; `true` for webkit-based browsers supporting CSS transforms. +var webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()) && !android23; + +// @property gecko3d: Boolean; `true` for gecko-based browsers supporting CSS transforms. +var gecko3d = 'MozPerspective' in style$1; + +// @property any3d: Boolean +// `true` for all browsers supporting CSS transforms. +var any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d) && !opera12 && !phantom; + +// @property mobile: Boolean; `true` for all browsers running in a mobile device. +var mobile = typeof orientation !== 'undefined' || userAgentContains('mobile'); + +// @property mobileWebkit: Boolean; `true` for all webkit-based browsers in a mobile device. +var mobileWebkit = mobile && webkit; + +// @property mobileWebkit3d: Boolean +// `true` for all webkit-based browsers in a mobile device supporting CSS transforms. +var mobileWebkit3d = mobile && webkit3d; + +// @property msPointer: Boolean +// `true` for browsers implementing the Microsoft touch events model (notably IE10). +var msPointer = !window.PointerEvent && window.MSPointerEvent; + +// @property pointer: Boolean +// `true` for all browsers supporting [pointer events](https://msdn.microsoft.com/en-us/library/dn433244%28v=vs.85%29.aspx). +var pointer = !webkit && !!(window.PointerEvent || msPointer); + +// @property touch: Boolean +// `true` for all browsers supporting [touch events](https://developer.mozilla.org/docs/Web/API/Touch_events). +// This does not necessarily mean that the browser is running in a computer with +// a touchscreen, it only means that the browser is capable of understanding +// touch events. +var touch = !window.L_NO_TOUCH && (pointer || 'ontouchstart' in window || + (window.DocumentTouch && document instanceof window.DocumentTouch)); + +// @property mobileOpera: Boolean; `true` for the Opera browser in a mobile device. +var mobileOpera = mobile && opera; + +// @property mobileGecko: Boolean +// `true` for gecko-based browsers running in a mobile device. +var mobileGecko = mobile && gecko; + +// @property retina: Boolean +// `true` for browsers on a high-resolution "retina" screen or on any screen when browser's display zoom is more than 100%. +var retina = (window.devicePixelRatio || (window.screen.deviceXDPI / window.screen.logicalXDPI)) > 1; + +// @property passiveEvents: Boolean +// `true` for browsers that support passive events. +var passiveEvents = (function () { + var supportsPassiveOption = false; + try { + var opts = Object.defineProperty({}, 'passive', { + get: function () { + supportsPassiveOption = true; + } + }); + window.addEventListener('testPassiveEventSupport', falseFn, opts); + window.removeEventListener('testPassiveEventSupport', falseFn, opts); + } catch (e) { + // Errors can safely be ignored since this is only a browser support test. + } + return supportsPassiveOption; +}); + +// @property canvas: Boolean +// `true` when the browser supports [``](https://developer.mozilla.org/docs/Web/API/Canvas_API). +var canvas = (function () { + return !!document.createElement('canvas').getContext; +}()); + +// @property svg: Boolean +// `true` when the browser supports [SVG](https://developer.mozilla.org/docs/Web/SVG). +var svg = !!(document.createElementNS && svgCreate('svg').createSVGRect); + +// @property vml: Boolean +// `true` if the browser supports [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language). +var vml = !svg && (function () { + try { + var div = document.createElement('div'); + div.innerHTML = ''; + + var shape = div.firstChild; + shape.style.behavior = 'url(#default#VML)'; + + return shape && (typeof shape.adj === 'object'); + + } catch (e) { + return false; + } +}()); + + +function userAgentContains(str) { + return navigator.userAgent.toLowerCase().indexOf(str) >= 0; +} + + +var Browser = (Object.freeze || Object)({ + ie: ie, + ielt9: ielt9, + edge: edge, + webkit: webkit, + android: android, + android23: android23, + androidStock: androidStock, + opera: opera, + chrome: chrome, + gecko: gecko, + safari: safari, + phantom: phantom, + opera12: opera12, + win: win, + ie3d: ie3d, + webkit3d: webkit3d, + gecko3d: gecko3d, + any3d: any3d, + mobile: mobile, + mobileWebkit: mobileWebkit, + mobileWebkit3d: mobileWebkit3d, + msPointer: msPointer, + pointer: pointer, + touch: touch, + mobileOpera: mobileOpera, + mobileGecko: mobileGecko, + retina: retina, + passiveEvents: passiveEvents, + canvas: canvas, + svg: svg, + vml: vml +}); + +/* + * Extends L.DomEvent to provide touch support for Internet Explorer and Windows-based devices. + */ + + +var POINTER_DOWN = msPointer ? 'MSPointerDown' : 'pointerdown'; +var POINTER_MOVE = msPointer ? 'MSPointerMove' : 'pointermove'; +var POINTER_UP = msPointer ? 'MSPointerUp' : 'pointerup'; +var POINTER_CANCEL = msPointer ? 'MSPointerCancel' : 'pointercancel'; +var TAG_WHITE_LIST = ['INPUT', 'SELECT', 'OPTION']; + +var _pointers = {}; +var _pointerDocListener = false; + +// DomEvent.DoubleTap needs to know about this +var _pointersCount = 0; + +// Provides a touch events wrapper for (ms)pointer events. +// ref http://www.w3.org/TR/pointerevents/ https://www.w3.org/Bugs/Public/show_bug.cgi?id=22890 + +function addPointerListener(obj, type, handler, id) { + if (type === 'touchstart') { + _addPointerStart(obj, handler, id); + + } else if (type === 'touchmove') { + _addPointerMove(obj, handler, id); + + } else if (type === 'touchend') { + _addPointerEnd(obj, handler, id); + } + + return this; +} + +function removePointerListener(obj, type, id) { + var handler = obj['_leaflet_' + type + id]; + + if (type === 'touchstart') { + obj.removeEventListener(POINTER_DOWN, handler, false); + + } else if (type === 'touchmove') { + obj.removeEventListener(POINTER_MOVE, handler, false); + + } else if (type === 'touchend') { + obj.removeEventListener(POINTER_UP, handler, false); + obj.removeEventListener(POINTER_CANCEL, handler, false); + } + + return this; +} + +function _addPointerStart(obj, handler, id) { + var onDown = bind(function (e) { + if (e.pointerType !== 'mouse' && e.MSPOINTER_TYPE_MOUSE && e.pointerType !== e.MSPOINTER_TYPE_MOUSE) { + // In IE11, some touch events needs to fire for form controls, or + // the controls will stop working. We keep a whitelist of tag names that + // need these events. For other target tags, we prevent default on the event. + if (TAG_WHITE_LIST.indexOf(e.target.tagName) < 0) { + preventDefault(e); + } else { + return; + } + } + + _handlePointer(e, handler); + }); + + obj['_leaflet_touchstart' + id] = onDown; + obj.addEventListener(POINTER_DOWN, onDown, false); + + // need to keep track of what pointers and how many are active to provide e.touches emulation + if (!_pointerDocListener) { + // we listen documentElement as any drags that end by moving the touch off the screen get fired there + document.documentElement.addEventListener(POINTER_DOWN, _globalPointerDown, true); + document.documentElement.addEventListener(POINTER_MOVE, _globalPointerMove, true); + document.documentElement.addEventListener(POINTER_UP, _globalPointerUp, true); + document.documentElement.addEventListener(POINTER_CANCEL, _globalPointerUp, true); + + _pointerDocListener = true; + } +} + +function _globalPointerDown(e) { + _pointers[e.pointerId] = e; + _pointersCount++; +} + +function _globalPointerMove(e) { + if (_pointers[e.pointerId]) { + _pointers[e.pointerId] = e; + } +} + +function _globalPointerUp(e) { + delete _pointers[e.pointerId]; + _pointersCount--; +} + +function _handlePointer(e, handler) { + e.touches = []; + for (var i in _pointers) { + e.touches.push(_pointers[i]); + } + e.changedTouches = [e]; + + handler(e); +} + +function _addPointerMove(obj, handler, id) { + var onMove = function (e) { + // don't fire touch moves when mouse isn't down + if ((e.pointerType === e.MSPOINTER_TYPE_MOUSE || e.pointerType === 'mouse') && e.buttons === 0) { return; } + + _handlePointer(e, handler); + }; + + obj['_leaflet_touchmove' + id] = onMove; + obj.addEventListener(POINTER_MOVE, onMove, false); +} + +function _addPointerEnd(obj, handler, id) { + var onUp = function (e) { + _handlePointer(e, handler); + }; + + obj['_leaflet_touchend' + id] = onUp; + obj.addEventListener(POINTER_UP, onUp, false); + obj.addEventListener(POINTER_CANCEL, onUp, false); +} + +/* + * Extends the event handling code with double tap support for mobile browsers. + */ + +var _touchstart = msPointer ? 'MSPointerDown' : pointer ? 'pointerdown' : 'touchstart'; +var _touchend = msPointer ? 'MSPointerUp' : pointer ? 'pointerup' : 'touchend'; +var _pre = '_leaflet_'; + +// inspired by Zepto touch code by Thomas Fuchs +function addDoubleTapListener(obj, handler, id) { + var last, touch$$1, + doubleTap = false, + delay = 250; + + function onTouchStart(e) { + var count; + + if (pointer) { + if ((!edge) || e.pointerType === 'mouse') { return; } + count = _pointersCount; + } else { + count = e.touches.length; + } + + if (count > 1) { return; } + + var now = Date.now(), + delta = now - (last || now); + + touch$$1 = e.touches ? e.touches[0] : e; + doubleTap = (delta > 0 && delta <= delay); + last = now; + } + + function onTouchEnd(e) { + if (doubleTap && !touch$$1.cancelBubble) { + if (pointer) { + if ((!edge) || e.pointerType === 'mouse') { return; } + // work around .type being readonly with MSPointer* events + var newTouch = {}, + prop, i; + + for (i in touch$$1) { + prop = touch$$1[i]; + newTouch[i] = prop && prop.bind ? prop.bind(touch$$1) : prop; + } + touch$$1 = newTouch; + } + touch$$1.type = 'dblclick'; + touch$$1.button = 0; + handler(touch$$1); + last = null; + } + } + + obj[_pre + _touchstart + id] = onTouchStart; + obj[_pre + _touchend + id] = onTouchEnd; + obj[_pre + 'dblclick' + id] = handler; + + obj.addEventListener(_touchstart, onTouchStart, passiveEvents ? {passive: false} : false); + obj.addEventListener(_touchend, onTouchEnd, passiveEvents ? {passive: false} : false); + + // On some platforms (notably, chrome<55 on win10 + touchscreen + mouse), + // the browser doesn't fire touchend/pointerup events but does fire + // native dblclicks. See #4127. + // Edge 14 also fires native dblclicks, but only for pointerType mouse, see #5180. + obj.addEventListener('dblclick', handler, false); + + return this; +} + +function removeDoubleTapListener(obj, id) { + var touchstart = obj[_pre + _touchstart + id], + touchend = obj[_pre + _touchend + id], + dblclick = obj[_pre + 'dblclick' + id]; + + obj.removeEventListener(_touchstart, touchstart, passiveEvents ? {passive: false} : false); + obj.removeEventListener(_touchend, touchend, passiveEvents ? {passive: false} : false); + if (!edge) { + obj.removeEventListener('dblclick', dblclick, false); + } + + return this; +} + +/* + * @namespace DomUtil + * + * Utility functions to work with the [DOM](https://developer.mozilla.org/docs/Web/API/Document_Object_Model) + * tree, used by Leaflet internally. + * + * Most functions expecting or returning a `HTMLElement` also work for + * SVG elements. The only difference is that classes refer to CSS classes + * in HTML and SVG classes in SVG. + */ + + +// @property TRANSFORM: String +// Vendor-prefixed transform style name (e.g. `'webkitTransform'` for WebKit). +var TRANSFORM = testProp( + ['transform', 'webkitTransform', 'OTransform', 'MozTransform', 'msTransform']); + +// webkitTransition comes first because some browser versions that drop vendor prefix don't do +// the same for the transitionend event, in particular the Android 4.1 stock browser + +// @property TRANSITION: String +// Vendor-prefixed transition style name. +var TRANSITION = testProp( + ['webkitTransition', 'transition', 'OTransition', 'MozTransition', 'msTransition']); + +// @property TRANSITION_END: String +// Vendor-prefixed transitionend event name. +var TRANSITION_END = + TRANSITION === 'webkitTransition' || TRANSITION === 'OTransition' ? TRANSITION + 'End' : 'transitionend'; + + +// @function get(id: String|HTMLElement): HTMLElement +// Returns an element given its DOM id, or returns the element itself +// if it was passed directly. +function get(id) { + return typeof id === 'string' ? document.getElementById(id) : id; +} + +// @function getStyle(el: HTMLElement, styleAttrib: String): String +// Returns the value for a certain style attribute on an element, +// including computed values or values set through CSS. +function getStyle(el, style) { + var value = el.style[style] || (el.currentStyle && el.currentStyle[style]); + + if ((!value || value === 'auto') && document.defaultView) { + var css = document.defaultView.getComputedStyle(el, null); + value = css ? css[style] : null; + } + return value === 'auto' ? null : value; +} + +// @function create(tagName: String, className?: String, container?: HTMLElement): HTMLElement +// Creates an HTML element with `tagName`, sets its class to `className`, and optionally appends it to `container` element. +function create$1(tagName, className, container) { + var el = document.createElement(tagName); + el.className = className || ''; + + if (container) { + container.appendChild(el); + } + return el; +} + +// @function remove(el: HTMLElement) +// Removes `el` from its parent element +function remove(el) { + var parent = el.parentNode; + if (parent) { + parent.removeChild(el); + } +} + +// @function empty(el: HTMLElement) +// Removes all of `el`'s children elements from `el` +function empty(el) { + while (el.firstChild) { + el.removeChild(el.firstChild); + } +} + +// @function toFront(el: HTMLElement) +// Makes `el` the last child of its parent, so it renders in front of the other children. +function toFront(el) { + var parent = el.parentNode; + if (parent && parent.lastChild !== el) { + parent.appendChild(el); + } +} + +// @function toBack(el: HTMLElement) +// Makes `el` the first child of its parent, so it renders behind the other children. +function toBack(el) { + var parent = el.parentNode; + if (parent && parent.firstChild !== el) { + parent.insertBefore(el, parent.firstChild); + } +} + +// @function hasClass(el: HTMLElement, name: String): Boolean +// Returns `true` if the element's class attribute contains `name`. +function hasClass(el, name) { + if (el.classList !== undefined) { + return el.classList.contains(name); + } + var className = getClass(el); + return className.length > 0 && new RegExp('(^|\\s)' + name + '(\\s|$)').test(className); +} + +// @function addClass(el: HTMLElement, name: String) +// Adds `name` to the element's class attribute. +function addClass(el, name) { + if (el.classList !== undefined) { + var classes = splitWords(name); + for (var i = 0, len = classes.length; i < len; i++) { + el.classList.add(classes[i]); + } + } else if (!hasClass(el, name)) { + var className = getClass(el); + setClass(el, (className ? className + ' ' : '') + name); + } +} + +// @function removeClass(el: HTMLElement, name: String) +// Removes `name` from the element's class attribute. +function removeClass(el, name) { + if (el.classList !== undefined) { + el.classList.remove(name); + } else { + setClass(el, trim((' ' + getClass(el) + ' ').replace(' ' + name + ' ', ' '))); + } +} + +// @function setClass(el: HTMLElement, name: String) +// Sets the element's class. +function setClass(el, name) { + if (el.className.baseVal === undefined) { + el.className = name; + } else { + // in case of SVG element + el.className.baseVal = name; + } +} + +// @function getClass(el: HTMLElement): String +// Returns the element's class. +function getClass(el) { + // Check if the element is an SVGElementInstance and use the correspondingElement instead + // (Required for linked SVG elements in IE11.) + if (el.correspondingElement) { + el = el.correspondingElement; + } + return el.className.baseVal === undefined ? el.className : el.className.baseVal; +} + +// @function setOpacity(el: HTMLElement, opacity: Number) +// Set the opacity of an element (including old IE support). +// `opacity` must be a number from `0` to `1`. +function setOpacity(el, value) { + if ('opacity' in el.style) { + el.style.opacity = value; + } else if ('filter' in el.style) { + _setOpacityIE(el, value); + } +} + +function _setOpacityIE(el, value) { + var filter = false, + filterName = 'DXImageTransform.Microsoft.Alpha'; + + // filters collection throws an error if we try to retrieve a filter that doesn't exist + try { + filter = el.filters.item(filterName); + } catch (e) { + // don't set opacity to 1 if we haven't already set an opacity, + // it isn't needed and breaks transparent pngs. + if (value === 1) { return; } + } + + value = Math.round(value * 100); + + if (filter) { + filter.Enabled = (value !== 100); + filter.Opacity = value; + } else { + el.style.filter += ' progid:' + filterName + '(opacity=' + value + ')'; + } +} + +// @function testProp(props: String[]): String|false +// Goes through the array of style names and returns the first name +// that is a valid style name for an element. If no such name is found, +// it returns false. Useful for vendor-prefixed styles like `transform`. +function testProp(props) { + var style = document.documentElement.style; + + for (var i = 0; i < props.length; i++) { + if (props[i] in style) { + return props[i]; + } + } + return false; +} + +// @function setTransform(el: HTMLElement, offset: Point, scale?: Number) +// Resets the 3D CSS transform of `el` so it is translated by `offset` pixels +// and optionally scaled by `scale`. Does not have an effect if the +// browser doesn't support 3D CSS transforms. +function setTransform(el, offset, scale) { + var pos = offset || new Point(0, 0); + + el.style[TRANSFORM] = + (ie3d ? + 'translate(' + pos.x + 'px,' + pos.y + 'px)' : + 'translate3d(' + pos.x + 'px,' + pos.y + 'px,0)') + + (scale ? ' scale(' + scale + ')' : ''); +} + +// @function setPosition(el: HTMLElement, position: Point) +// Sets the position of `el` to coordinates specified by `position`, +// using CSS translate or top/left positioning depending on the browser +// (used by Leaflet internally to position its layers). +function setPosition(el, point) { + + /*eslint-disable */ + el._leaflet_pos = point; + /* eslint-enable */ + + if (any3d) { + setTransform(el, point); + } else { + el.style.left = point.x + 'px'; + el.style.top = point.y + 'px'; + } +} + +// @function getPosition(el: HTMLElement): Point +// Returns the coordinates of an element previously positioned with setPosition. +function getPosition(el) { + // this method is only used for elements previously positioned using setPosition, + // so it's safe to cache the position for performance + + return el._leaflet_pos || new Point(0, 0); +} + +// @function disableTextSelection() +// Prevents the user from generating `selectstart` DOM events, usually generated +// when the user drags the mouse through a page with text. Used internally +// by Leaflet to override the behaviour of any click-and-drag interaction on +// the map. Affects drag interactions on the whole document. + +// @function enableTextSelection() +// Cancels the effects of a previous [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection). +var disableTextSelection; +var enableTextSelection; +var _userSelect; +if ('onselectstart' in document) { + disableTextSelection = function () { + on(window, 'selectstart', preventDefault); + }; + enableTextSelection = function () { + off(window, 'selectstart', preventDefault); + }; +} else { + var userSelectProperty = testProp( + ['userSelect', 'WebkitUserSelect', 'OUserSelect', 'MozUserSelect', 'msUserSelect']); + + disableTextSelection = function () { + if (userSelectProperty) { + var style = document.documentElement.style; + _userSelect = style[userSelectProperty]; + style[userSelectProperty] = 'none'; + } + }; + enableTextSelection = function () { + if (userSelectProperty) { + document.documentElement.style[userSelectProperty] = _userSelect; + _userSelect = undefined; + } + }; +} + +// @function disableImageDrag() +// As [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection), but +// for `dragstart` DOM events, usually generated when the user drags an image. +function disableImageDrag() { + on(window, 'dragstart', preventDefault); +} + +// @function enableImageDrag() +// Cancels the effects of a previous [`L.DomUtil.disableImageDrag`](#domutil-disabletextselection). +function enableImageDrag() { + off(window, 'dragstart', preventDefault); +} + +var _outlineElement; +var _outlineStyle; +// @function preventOutline(el: HTMLElement) +// Makes the [outline](https://developer.mozilla.org/docs/Web/CSS/outline) +// of the element `el` invisible. Used internally by Leaflet to prevent +// focusable elements from displaying an outline when the user performs a +// drag interaction on them. +function preventOutline(element) { + while (element.tabIndex === -1) { + element = element.parentNode; + } + if (!element.style) { return; } + restoreOutline(); + _outlineElement = element; + _outlineStyle = element.style.outline; + element.style.outline = 'none'; + on(window, 'keydown', restoreOutline); +} + +// @function restoreOutline() +// Cancels the effects of a previous [`L.DomUtil.preventOutline`](). +function restoreOutline() { + if (!_outlineElement) { return; } + _outlineElement.style.outline = _outlineStyle; + _outlineElement = undefined; + _outlineStyle = undefined; + off(window, 'keydown', restoreOutline); +} + +// @function getSizedParentNode(el: HTMLElement): HTMLElement +// Finds the closest parent node which size (width and height) is not null. +function getSizedParentNode(element) { + do { + element = element.parentNode; + } while ((!element.offsetWidth || !element.offsetHeight) && element !== document.body); + return element; +} + +// @function getScale(el: HTMLElement): Object +// Computes the CSS scale currently applied on the element. +// Returns an object with `x` and `y` members as horizontal and vertical scales respectively, +// and `boundingClientRect` as the result of [`getBoundingClientRect()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect). +function getScale(element) { + var rect = element.getBoundingClientRect(); // Read-only in old browsers. + + return { + x: rect.width / element.offsetWidth || 1, + y: rect.height / element.offsetHeight || 1, + boundingClientRect: rect + }; +} + + +var DomUtil = (Object.freeze || Object)({ + TRANSFORM: TRANSFORM, + TRANSITION: TRANSITION, + TRANSITION_END: TRANSITION_END, + get: get, + getStyle: getStyle, + create: create$1, + remove: remove, + empty: empty, + toFront: toFront, + toBack: toBack, + hasClass: hasClass, + addClass: addClass, + removeClass: removeClass, + setClass: setClass, + getClass: getClass, + setOpacity: setOpacity, + testProp: testProp, + setTransform: setTransform, + setPosition: setPosition, + getPosition: getPosition, + disableTextSelection: disableTextSelection, + enableTextSelection: enableTextSelection, + disableImageDrag: disableImageDrag, + enableImageDrag: enableImageDrag, + preventOutline: preventOutline, + restoreOutline: restoreOutline, + getSizedParentNode: getSizedParentNode, + getScale: getScale +}); + +/* + * @namespace DomEvent + * Utility functions to work with the [DOM events](https://developer.mozilla.org/docs/Web/API/Event), used by Leaflet internally. + */ + +// Inspired by John Resig, Dean Edwards and YUI addEvent implementations. + +// @function on(el: HTMLElement, types: String, fn: Function, context?: Object): this +// Adds a listener function (`fn`) to a particular DOM event type of the +// element `el`. You can optionally specify the context of the listener +// (object the `this` keyword will point to). You can also pass several +// space-separated types (e.g. `'click dblclick'`). + +// @alternative +// @function on(el: HTMLElement, eventMap: Object, context?: Object): this +// Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}` +function on(obj, types, fn, context) { + + if (typeof types === 'object') { + for (var type in types) { + addOne(obj, type, types[type], fn); + } + } else { + types = splitWords(types); + + for (var i = 0, len = types.length; i < len; i++) { + addOne(obj, types[i], fn, context); + } + } + + return this; +} + +var eventsKey = '_leaflet_events'; + +// @function off(el: HTMLElement, types: String, fn: Function, context?: Object): this +// Removes a previously added listener function. +// Note that if you passed a custom context to on, you must pass the same +// context to `off` in order to remove the listener. + +// @alternative +// @function off(el: HTMLElement, eventMap: Object, context?: Object): this +// Removes a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}` +function off(obj, types, fn, context) { + + if (typeof types === 'object') { + for (var type in types) { + removeOne(obj, type, types[type], fn); + } + } else if (types) { + types = splitWords(types); + + for (var i = 0, len = types.length; i < len; i++) { + removeOne(obj, types[i], fn, context); + } + } else { + for (var j in obj[eventsKey]) { + removeOne(obj, j, obj[eventsKey][j]); + } + delete obj[eventsKey]; + } + + return this; +} + +function addOne(obj, type, fn, context) { + var id = type + stamp(fn) + (context ? '_' + stamp(context) : ''); + + if (obj[eventsKey] && obj[eventsKey][id]) { return this; } + + var handler = function (e) { + return fn.call(context || obj, e || window.event); + }; + + var originalHandler = handler; + + if (pointer && type.indexOf('touch') === 0) { + // Needs DomEvent.Pointer.js + addPointerListener(obj, type, handler, id); + + } else if (touch && (type === 'dblclick') && addDoubleTapListener && + !(pointer && chrome)) { + // Chrome >55 does not need the synthetic dblclicks from addDoubleTapListener + // See #5180 + addDoubleTapListener(obj, handler, id); + + } else if ('addEventListener' in obj) { + + if (type === 'mousewheel') { + obj.addEventListener('onwheel' in obj ? 'wheel' : 'mousewheel', handler, passiveEvents ? {passive: false} : false); + + } else if ((type === 'mouseenter') || (type === 'mouseleave')) { + handler = function (e) { + e = e || window.event; + if (isExternalTarget(obj, e)) { + originalHandler(e); + } + }; + obj.addEventListener(type === 'mouseenter' ? 'mouseover' : 'mouseout', handler, false); + + } else { + if (type === 'click' && android) { + handler = function (e) { + filterClick(e, originalHandler); + }; + } + obj.addEventListener(type, handler, false); + } + + } else if ('attachEvent' in obj) { + obj.attachEvent('on' + type, handler); + } + + obj[eventsKey] = obj[eventsKey] || {}; + obj[eventsKey][id] = handler; +} + +function removeOne(obj, type, fn, context) { + + var id = type + stamp(fn) + (context ? '_' + stamp(context) : ''), + handler = obj[eventsKey] && obj[eventsKey][id]; + + if (!handler) { return this; } + + if (pointer && type.indexOf('touch') === 0) { + removePointerListener(obj, type, id); + + } else if (touch && (type === 'dblclick') && removeDoubleTapListener && + !(pointer && chrome)) { + removeDoubleTapListener(obj, id); + + } else if ('removeEventListener' in obj) { + + if (type === 'mousewheel') { + obj.removeEventListener('onwheel' in obj ? 'wheel' : 'mousewheel', handler, passiveEvents ? {passive: false} : false); + + } else { + obj.removeEventListener( + type === 'mouseenter' ? 'mouseover' : + type === 'mouseleave' ? 'mouseout' : type, handler, false); + } + + } else if ('detachEvent' in obj) { + obj.detachEvent('on' + type, handler); + } + + obj[eventsKey][id] = null; +} + +// @function stopPropagation(ev: DOMEvent): this +// Stop the given event from propagation to parent elements. Used inside the listener functions: +// ```js +// L.DomEvent.on(div, 'click', function (ev) { +// L.DomEvent.stopPropagation(ev); +// }); +// ``` +function stopPropagation(e) { + + if (e.stopPropagation) { + e.stopPropagation(); + } else if (e.originalEvent) { // In case of Leaflet event. + e.originalEvent._stopped = true; + } else { + e.cancelBubble = true; + } + skipped(e); + + return this; +} + +// @function disableScrollPropagation(el: HTMLElement): this +// Adds `stopPropagation` to the element's `'mousewheel'` events (plus browser variants). +function disableScrollPropagation(el) { + addOne(el, 'mousewheel', stopPropagation); + return this; +} + +// @function disableClickPropagation(el: HTMLElement): this +// Adds `stopPropagation` to the element's `'click'`, `'doubleclick'`, +// `'mousedown'` and `'touchstart'` events (plus browser variants). +function disableClickPropagation(el) { + on(el, 'mousedown touchstart dblclick', stopPropagation); + addOne(el, 'click', fakeStop); + return this; +} + +// @function preventDefault(ev: DOMEvent): this +// Prevents the default action of the DOM Event `ev` from happening (such as +// following a link in the href of the a element, or doing a POST request +// with page reload when a `
` is submitted). +// Use it inside listener functions. +function preventDefault(e) { + if (e.preventDefault) { + e.preventDefault(); + } else { + e.returnValue = false; + } + return this; +} + +// @function stop(ev: DOMEvent): this +// Does `stopPropagation` and `preventDefault` at the same time. +function stop(e) { + preventDefault(e); + stopPropagation(e); + return this; +} + +// @function getMousePosition(ev: DOMEvent, container?: HTMLElement): Point +// Gets normalized mouse position from a DOM event relative to the +// `container` (border excluded) or to the whole page if not specified. +function getMousePosition(e, container) { + if (!container) { + return new Point(e.clientX, e.clientY); + } + + var scale = getScale(container), + offset = scale.boundingClientRect; // left and top values are in page scale (like the event clientX/Y) + + return new Point( + // offset.left/top values are in page scale (like clientX/Y), + // whereas clientLeft/Top (border width) values are the original values (before CSS scale applies). + (e.clientX - offset.left) / scale.x - container.clientLeft, + (e.clientY - offset.top) / scale.y - container.clientTop + ); +} + +// Chrome on Win scrolls double the pixels as in other platforms (see #4538), +// and Firefox scrolls device pixels, not CSS pixels +var wheelPxFactor = + (win && chrome) ? 2 * window.devicePixelRatio : + gecko ? window.devicePixelRatio : 1; + +// @function getWheelDelta(ev: DOMEvent): Number +// Gets normalized wheel delta from a mousewheel DOM event, in vertical +// pixels scrolled (negative if scrolling down). +// Events from pointing devices without precise scrolling are mapped to +// a best guess of 60 pixels. +function getWheelDelta(e) { + return (edge) ? e.wheelDeltaY / 2 : // Don't trust window-geometry-based delta + (e.deltaY && e.deltaMode === 0) ? -e.deltaY / wheelPxFactor : // Pixels + (e.deltaY && e.deltaMode === 1) ? -e.deltaY * 20 : // Lines + (e.deltaY && e.deltaMode === 2) ? -e.deltaY * 60 : // Pages + (e.deltaX || e.deltaZ) ? 0 : // Skip horizontal/depth wheel events + e.wheelDelta ? (e.wheelDeltaY || e.wheelDelta) / 2 : // Legacy IE pixels + (e.detail && Math.abs(e.detail) < 32765) ? -e.detail * 20 : // Legacy Moz lines + e.detail ? e.detail / -32765 * 60 : // Legacy Moz pages + 0; +} + +var skipEvents = {}; + +function fakeStop(e) { + // fakes stopPropagation by setting a special event flag, checked/reset with skipped(e) + skipEvents[e.type] = true; +} + +function skipped(e) { + var events = skipEvents[e.type]; + // reset when checking, as it's only used in map container and propagates outside of the map + skipEvents[e.type] = false; + return events; +} + +// check if element really left/entered the event target (for mouseenter/mouseleave) +function isExternalTarget(el, e) { + + var related = e.relatedTarget; + + if (!related) { return true; } + + try { + while (related && (related !== el)) { + related = related.parentNode; + } + } catch (err) { + return false; + } + return (related !== el); +} + +var lastClick; + +// this is a horrible workaround for a bug in Android where a single touch triggers two click events +function filterClick(e, handler) { + var timeStamp = (e.timeStamp || (e.originalEvent && e.originalEvent.timeStamp)), + elapsed = lastClick && (timeStamp - lastClick); + + // are they closer together than 500ms yet more than 100ms? + // Android typically triggers them ~300ms apart while multiple listeners + // on the same event should be triggered far faster; + // or check if click is simulated on the element, and if it is, reject any non-simulated events + + if ((elapsed && elapsed > 100 && elapsed < 500) || (e.target._simulatedClick && !e._simulated)) { + stop(e); + return; + } + lastClick = timeStamp; + + handler(e); +} + + + + +var DomEvent = (Object.freeze || Object)({ + on: on, + off: off, + stopPropagation: stopPropagation, + disableScrollPropagation: disableScrollPropagation, + disableClickPropagation: disableClickPropagation, + preventDefault: preventDefault, + stop: stop, + getMousePosition: getMousePosition, + getWheelDelta: getWheelDelta, + fakeStop: fakeStop, + skipped: skipped, + isExternalTarget: isExternalTarget, + addListener: on, + removeListener: off +}); + +/* + * @class PosAnimation + * @aka L.PosAnimation + * @inherits Evented + * Used internally for panning animations, utilizing CSS3 Transitions for modern browsers and a timer fallback for IE6-9. + * + * @example + * ```js + * var fx = new L.PosAnimation(); + * fx.run(el, [300, 500], 0.5); + * ``` + * + * @constructor L.PosAnimation() + * Creates a `PosAnimation` object. + * + */ + +var PosAnimation = Evented.extend({ + + // @method run(el: HTMLElement, newPos: Point, duration?: Number, easeLinearity?: Number) + // Run an animation of a given element to a new position, optionally setting + // duration in seconds (`0.25` by default) and easing linearity factor (3rd + // argument of the [cubic bezier curve](http://cubic-bezier.com/#0,0,.5,1), + // `0.5` by default). + run: function (el, newPos, duration, easeLinearity) { + this.stop(); + + this._el = el; + this._inProgress = true; + this._duration = duration || 0.25; + this._easeOutPower = 1 / Math.max(easeLinearity || 0.5, 0.2); + + this._startPos = getPosition(el); + this._offset = newPos.subtract(this._startPos); + this._startTime = +new Date(); + + // @event start: Event + // Fired when the animation starts + this.fire('start'); + + this._animate(); + }, + + // @method stop() + // Stops the animation (if currently running). + stop: function () { + if (!this._inProgress) { return; } + + this._step(true); + this._complete(); + }, + + _animate: function () { + // animation loop + this._animId = requestAnimFrame(this._animate, this); + this._step(); + }, + + _step: function (round) { + var elapsed = (+new Date()) - this._startTime, + duration = this._duration * 1000; + + if (elapsed < duration) { + this._runFrame(this._easeOut(elapsed / duration), round); + } else { + this._runFrame(1); + this._complete(); + } + }, + + _runFrame: function (progress, round) { + var pos = this._startPos.add(this._offset.multiplyBy(progress)); + if (round) { + pos._round(); + } + setPosition(this._el, pos); + + // @event step: Event + // Fired continuously during the animation. + this.fire('step'); + }, + + _complete: function () { + cancelAnimFrame(this._animId); + + this._inProgress = false; + // @event end: Event + // Fired when the animation ends. + this.fire('end'); + }, + + _easeOut: function (t) { + return 1 - Math.pow(1 - t, this._easeOutPower); + } +}); + +/* + * @class Map + * @aka L.Map + * @inherits Evented + * + * The central class of the API — it is used to create a map on a page and manipulate it. + * + * @example + * + * ```js + * // initialize the map on the "map" div with a given center and zoom + * var map = L.map('map', { + * center: [51.505, -0.09], + * zoom: 13 + * }); + * ``` + * + */ + +var Map = Evented.extend({ + + options: { + // @section Map State Options + // @option crs: CRS = L.CRS.EPSG3857 + // The [Coordinate Reference System](#crs) to use. Don't change this if you're not + // sure what it means. + crs: EPSG3857, + + // @option center: LatLng = undefined + // Initial geographic center of the map + center: undefined, + + // @option zoom: Number = undefined + // Initial map zoom level + zoom: undefined, + + // @option minZoom: Number = * + // Minimum zoom level of the map. + // If not specified and at least one `GridLayer` or `TileLayer` is in the map, + // the lowest of their `minZoom` options will be used instead. + minZoom: undefined, + + // @option maxZoom: Number = * + // Maximum zoom level of the map. + // If not specified and at least one `GridLayer` or `TileLayer` is in the map, + // the highest of their `maxZoom` options will be used instead. + maxZoom: undefined, + + // @option layers: Layer[] = [] + // Array of layers that will be added to the map initially + layers: [], + + // @option maxBounds: LatLngBounds = null + // When this option is set, the map restricts the view to the given + // geographical bounds, bouncing the user back if the user tries to pan + // outside the view. To set the restriction dynamically, use + // [`setMaxBounds`](#map-setmaxbounds) method. + maxBounds: undefined, + + // @option renderer: Renderer = * + // The default method for drawing vector layers on the map. `L.SVG` + // or `L.Canvas` by default depending on browser support. + renderer: undefined, + + + // @section Animation Options + // @option zoomAnimation: Boolean = true + // Whether the map zoom animation is enabled. By default it's enabled + // in all browsers that support CSS3 Transitions except Android. + zoomAnimation: true, + + // @option zoomAnimationThreshold: Number = 4 + // Won't animate zoom if the zoom difference exceeds this value. + zoomAnimationThreshold: 4, + + // @option fadeAnimation: Boolean = true + // Whether the tile fade animation is enabled. By default it's enabled + // in all browsers that support CSS3 Transitions except Android. + fadeAnimation: true, + + // @option markerZoomAnimation: Boolean = true + // Whether markers animate their zoom with the zoom animation, if disabled + // they will disappear for the length of the animation. By default it's + // enabled in all browsers that support CSS3 Transitions except Android. + markerZoomAnimation: true, + + // @option transform3DLimit: Number = 2^23 + // Defines the maximum size of a CSS translation transform. The default + // value should not be changed unless a web browser positions layers in + // the wrong place after doing a large `panBy`. + transform3DLimit: 8388608, // Precision limit of a 32-bit float + + // @section Interaction Options + // @option zoomSnap: Number = 1 + // Forces the map's zoom level to always be a multiple of this, particularly + // right after a [`fitBounds()`](#map-fitbounds) or a pinch-zoom. + // By default, the zoom level snaps to the nearest integer; lower values + // (e.g. `0.5` or `0.1`) allow for greater granularity. A value of `0` + // means the zoom level will not be snapped after `fitBounds` or a pinch-zoom. + zoomSnap: 1, + + // @option zoomDelta: Number = 1 + // Controls how much the map's zoom level will change after a + // [`zoomIn()`](#map-zoomin), [`zoomOut()`](#map-zoomout), pressing `+` + // or `-` on the keyboard, or using the [zoom controls](#control-zoom). + // Values smaller than `1` (e.g. `0.5`) allow for greater granularity. + zoomDelta: 1, + + // @option trackResize: Boolean = true + // Whether the map automatically handles browser window resize to update itself. + trackResize: true + }, + + initialize: function (id, options) { // (HTMLElement or String, Object) + options = setOptions(this, options); + + // Make sure to assign internal flags at the beginning, + // to avoid inconsistent state in some edge cases. + this._handlers = []; + this._layers = {}; + this._zoomBoundLayers = {}; + this._sizeChanged = true; + + this._initContainer(id); + this._initLayout(); + + // hack for https://github.com/Leaflet/Leaflet/issues/1980 + this._onResize = bind(this._onResize, this); + + this._initEvents(); + + if (options.maxBounds) { + this.setMaxBounds(options.maxBounds); + } + + if (options.zoom !== undefined) { + this._zoom = this._limitZoom(options.zoom); + } + + if (options.center && options.zoom !== undefined) { + this.setView(toLatLng(options.center), options.zoom, {reset: true}); + } + + this.callInitHooks(); + + // don't animate on browsers without hardware-accelerated transitions or old Android/Opera + this._zoomAnimated = TRANSITION && any3d && !mobileOpera && + this.options.zoomAnimation; + + // zoom transitions run with the same duration for all layers, so if one of transitionend events + // happens after starting zoom animation (propagating to the map pane), we know that it ended globally + if (this._zoomAnimated) { + this._createAnimProxy(); + on(this._proxy, TRANSITION_END, this._catchTransitionEnd, this); + } + + this._addLayers(this.options.layers); + }, + + + // @section Methods for modifying map state + + // @method setView(center: LatLng, zoom: Number, options?: Zoom/pan options): this + // Sets the view of the map (geographical center and zoom) with the given + // animation options. + setView: function (center, zoom, options) { + + zoom = zoom === undefined ? this._zoom : this._limitZoom(zoom); + center = this._limitCenter(toLatLng(center), zoom, this.options.maxBounds); + options = options || {}; + + this._stop(); + + if (this._loaded && !options.reset && options !== true) { + + if (options.animate !== undefined) { + options.zoom = extend({animate: options.animate}, options.zoom); + options.pan = extend({animate: options.animate, duration: options.duration}, options.pan); + } + + // try animating pan or zoom + var moved = (this._zoom !== zoom) ? + this._tryAnimatedZoom && this._tryAnimatedZoom(center, zoom, options.zoom) : + this._tryAnimatedPan(center, options.pan); + + if (moved) { + // prevent resize handler call, the view will refresh after animation anyway + clearTimeout(this._sizeTimer); + return this; + } + } + + // animation didn't start, just reset the map view + this._resetView(center, zoom); + + return this; + }, + + // @method setZoom(zoom: Number, options?: Zoom/pan options): this + // Sets the zoom of the map. + setZoom: function (zoom, options) { + if (!this._loaded) { + this._zoom = zoom; + return this; + } + return this.setView(this.getCenter(), zoom, {zoom: options}); + }, + + // @method zoomIn(delta?: Number, options?: Zoom options): this + // Increases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default). + zoomIn: function (delta, options) { + delta = delta || (any3d ? this.options.zoomDelta : 1); + return this.setZoom(this._zoom + delta, options); + }, + + // @method zoomOut(delta?: Number, options?: Zoom options): this + // Decreases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default). + zoomOut: function (delta, options) { + delta = delta || (any3d ? this.options.zoomDelta : 1); + return this.setZoom(this._zoom - delta, options); + }, + + // @method setZoomAround(latlng: LatLng, zoom: Number, options: Zoom options): this + // Zooms the map while keeping a specified geographical point on the map + // stationary (e.g. used internally for scroll zoom and double-click zoom). + // @alternative + // @method setZoomAround(offset: Point, zoom: Number, options: Zoom options): this + // Zooms the map while keeping a specified pixel on the map (relative to the top-left corner) stationary. + setZoomAround: function (latlng, zoom, options) { + var scale = this.getZoomScale(zoom), + viewHalf = this.getSize().divideBy(2), + containerPoint = latlng instanceof Point ? latlng : this.latLngToContainerPoint(latlng), + + centerOffset = containerPoint.subtract(viewHalf).multiplyBy(1 - 1 / scale), + newCenter = this.containerPointToLatLng(viewHalf.add(centerOffset)); + + return this.setView(newCenter, zoom, {zoom: options}); + }, + + _getBoundsCenterZoom: function (bounds, options) { + + options = options || {}; + bounds = bounds.getBounds ? bounds.getBounds() : toLatLngBounds(bounds); + + var paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]), + paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]), + + zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR)); + + zoom = (typeof options.maxZoom === 'number') ? Math.min(options.maxZoom, zoom) : zoom; + + if (zoom === Infinity) { + return { + center: bounds.getCenter(), + zoom: zoom + }; + } + + var paddingOffset = paddingBR.subtract(paddingTL).divideBy(2), + + swPoint = this.project(bounds.getSouthWest(), zoom), + nePoint = this.project(bounds.getNorthEast(), zoom), + center = this.unproject(swPoint.add(nePoint).divideBy(2).add(paddingOffset), zoom); + + return { + center: center, + zoom: zoom + }; + }, + + // @method fitBounds(bounds: LatLngBounds, options?: fitBounds options): this + // Sets a map view that contains the given geographical bounds with the + // maximum zoom level possible. + fitBounds: function (bounds, options) { + + bounds = toLatLngBounds(bounds); + + if (!bounds.isValid()) { + throw new Error('Bounds are not valid.'); + } + + var target = this._getBoundsCenterZoom(bounds, options); + return this.setView(target.center, target.zoom, options); + }, + + // @method fitWorld(options?: fitBounds options): this + // Sets a map view that mostly contains the whole world with the maximum + // zoom level possible. + fitWorld: function (options) { + return this.fitBounds([[-90, -180], [90, 180]], options); + }, + + // @method panTo(latlng: LatLng, options?: Pan options): this + // Pans the map to a given center. + panTo: function (center, options) { // (LatLng) + return this.setView(center, this._zoom, {pan: options}); + }, + + // @method panBy(offset: Point, options?: Pan options): this + // Pans the map by a given number of pixels (animated). + panBy: function (offset, options) { + offset = toPoint(offset).round(); + options = options || {}; + + if (!offset.x && !offset.y) { + return this.fire('moveend'); + } + // If we pan too far, Chrome gets issues with tiles + // and makes them disappear or appear in the wrong place (slightly offset) #2602 + if (options.animate !== true && !this.getSize().contains(offset)) { + this._resetView(this.unproject(this.project(this.getCenter()).add(offset)), this.getZoom()); + return this; + } + + if (!this._panAnim) { + this._panAnim = new PosAnimation(); + + this._panAnim.on({ + 'step': this._onPanTransitionStep, + 'end': this._onPanTransitionEnd + }, this); + } + + // don't fire movestart if animating inertia + if (!options.noMoveStart) { + this.fire('movestart'); + } + + // animate pan unless animate: false specified + if (options.animate !== false) { + addClass(this._mapPane, 'leaflet-pan-anim'); + + var newPos = this._getMapPanePos().subtract(offset).round(); + this._panAnim.run(this._mapPane, newPos, options.duration || 0.25, options.easeLinearity); + } else { + this._rawPanBy(offset); + this.fire('move').fire('moveend'); + } + + return this; + }, + + // @method flyTo(latlng: LatLng, zoom?: Number, options?: Zoom/pan options): this + // Sets the view of the map (geographical center and zoom) performing a smooth + // pan-zoom animation. + flyTo: function (targetCenter, targetZoom, options) { + + options = options || {}; + if (options.animate === false || !any3d) { + return this.setView(targetCenter, targetZoom, options); + } + + this._stop(); + + var from = this.project(this.getCenter()), + to = this.project(targetCenter), + size = this.getSize(), + startZoom = this._zoom; + + targetCenter = toLatLng(targetCenter); + targetZoom = targetZoom === undefined ? startZoom : targetZoom; + + var w0 = Math.max(size.x, size.y), + w1 = w0 * this.getZoomScale(startZoom, targetZoom), + u1 = (to.distanceTo(from)) || 1, + rho = 1.42, + rho2 = rho * rho; + + function r(i) { + var s1 = i ? -1 : 1, + s2 = i ? w1 : w0, + t1 = w1 * w1 - w0 * w0 + s1 * rho2 * rho2 * u1 * u1, + b1 = 2 * s2 * rho2 * u1, + b = t1 / b1, + sq = Math.sqrt(b * b + 1) - b; + + // workaround for floating point precision bug when sq = 0, log = -Infinite, + // thus triggering an infinite loop in flyTo + var log = sq < 0.000000001 ? -18 : Math.log(sq); + + return log; + } + + function sinh(n) { return (Math.exp(n) - Math.exp(-n)) / 2; } + function cosh(n) { return (Math.exp(n) + Math.exp(-n)) / 2; } + function tanh(n) { return sinh(n) / cosh(n); } + + var r0 = r(0); + + function w(s) { return w0 * (cosh(r0) / cosh(r0 + rho * s)); } + function u(s) { return w0 * (cosh(r0) * tanh(r0 + rho * s) - sinh(r0)) / rho2; } + + function easeOut(t) { return 1 - Math.pow(1 - t, 1.5); } + + var start = Date.now(), + S = (r(1) - r0) / rho, + duration = options.duration ? 1000 * options.duration : 1000 * S * 0.8; + + function frame() { + var t = (Date.now() - start) / duration, + s = easeOut(t) * S; + + if (t <= 1) { + this._flyToFrame = requestAnimFrame(frame, this); + + this._move( + this.unproject(from.add(to.subtract(from).multiplyBy(u(s) / u1)), startZoom), + this.getScaleZoom(w0 / w(s), startZoom), + {flyTo: true}); + + } else { + this + ._move(targetCenter, targetZoom) + ._moveEnd(true); + } + } + + this._moveStart(true, options.noMoveStart); + + frame.call(this); + return this; + }, + + // @method flyToBounds(bounds: LatLngBounds, options?: fitBounds options): this + // Sets the view of the map with a smooth animation like [`flyTo`](#map-flyto), + // but takes a bounds parameter like [`fitBounds`](#map-fitbounds). + flyToBounds: function (bounds, options) { + var target = this._getBoundsCenterZoom(bounds, options); + return this.flyTo(target.center, target.zoom, options); + }, + + // @method setMaxBounds(bounds: Bounds): this + // Restricts the map view to the given bounds (see the [maxBounds](#map-maxbounds) option). + setMaxBounds: function (bounds) { + bounds = toLatLngBounds(bounds); + + if (!bounds.isValid()) { + this.options.maxBounds = null; + return this.off('moveend', this._panInsideMaxBounds); + } else if (this.options.maxBounds) { + this.off('moveend', this._panInsideMaxBounds); + } + + this.options.maxBounds = bounds; + + if (this._loaded) { + this._panInsideMaxBounds(); + } + + return this.on('moveend', this._panInsideMaxBounds); + }, + + // @method setMinZoom(zoom: Number): this + // Sets the lower limit for the available zoom levels (see the [minZoom](#map-minzoom) option). + setMinZoom: function (zoom) { + var oldZoom = this.options.minZoom; + this.options.minZoom = zoom; + + if (this._loaded && oldZoom !== zoom) { + this.fire('zoomlevelschange'); + + if (this.getZoom() < this.options.minZoom) { + return this.setZoom(zoom); + } + } + + return this; + }, + + // @method setMaxZoom(zoom: Number): this + // Sets the upper limit for the available zoom levels (see the [maxZoom](#map-maxzoom) option). + setMaxZoom: function (zoom) { + var oldZoom = this.options.maxZoom; + this.options.maxZoom = zoom; + + if (this._loaded && oldZoom !== zoom) { + this.fire('zoomlevelschange'); + + if (this.getZoom() > this.options.maxZoom) { + return this.setZoom(zoom); + } + } + + return this; + }, + + // @method panInsideBounds(bounds: LatLngBounds, options?: Pan options): this + // Pans the map to the closest view that would lie inside the given bounds (if it's not already), controlling the animation using the options specific, if any. + panInsideBounds: function (bounds, options) { + this._enforcingBounds = true; + var center = this.getCenter(), + newCenter = this._limitCenter(center, this._zoom, toLatLngBounds(bounds)); + + if (!center.equals(newCenter)) { + this.panTo(newCenter, options); + } + + this._enforcingBounds = false; + return this; + }, + + // @method panInside(latlng: LatLng, options?: options): this + // Pans the map the minimum amount to make the `latlng` visible. Use + // `padding`, `paddingTopLeft` and `paddingTopRight` options to fit + // the display to more restricted bounds, like [`fitBounds`](#map-fitbounds). + // If `latlng` is already within the (optionally padded) display bounds, + // the map will not be panned. + panInside: function (latlng, options) { + options = options || {}; + + var paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]), + paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]), + center = this.getCenter(), + pixelCenter = this.project(center), + pixelPoint = this.project(latlng), + pixelBounds = this.getPixelBounds(), + halfPixelBounds = pixelBounds.getSize().divideBy(2), + paddedBounds = toBounds([pixelBounds.min.add(paddingTL), pixelBounds.max.subtract(paddingBR)]); + + if (!paddedBounds.contains(pixelPoint)) { + this._enforcingBounds = true; + var diff = pixelCenter.subtract(pixelPoint), + newCenter = toPoint(pixelPoint.x + diff.x, pixelPoint.y + diff.y); + + if (pixelPoint.x < paddedBounds.min.x || pixelPoint.x > paddedBounds.max.x) { + newCenter.x = pixelCenter.x - diff.x; + if (diff.x > 0) { + newCenter.x += halfPixelBounds.x - paddingTL.x; + } else { + newCenter.x -= halfPixelBounds.x - paddingBR.x; + } + } + if (pixelPoint.y < paddedBounds.min.y || pixelPoint.y > paddedBounds.max.y) { + newCenter.y = pixelCenter.y - diff.y; + if (diff.y > 0) { + newCenter.y += halfPixelBounds.y - paddingTL.y; + } else { + newCenter.y -= halfPixelBounds.y - paddingBR.y; + } + } + this.panTo(this.unproject(newCenter), options); + this._enforcingBounds = false; + } + return this; + }, + + // @method invalidateSize(options: Zoom/pan options): this + // Checks if the map container size changed and updates the map if so — + // call it after you've changed the map size dynamically, also animating + // pan by default. If `options.pan` is `false`, panning will not occur. + // If `options.debounceMoveend` is `true`, it will delay `moveend` event so + // that it doesn't happen often even if the method is called many + // times in a row. + + // @alternative + // @method invalidateSize(animate: Boolean): this + // Checks if the map container size changed and updates the map if so — + // call it after you've changed the map size dynamically, also animating + // pan by default. + invalidateSize: function (options) { + if (!this._loaded) { return this; } + + options = extend({ + animate: false, + pan: true + }, options === true ? {animate: true} : options); + + var oldSize = this.getSize(); + this._sizeChanged = true; + this._lastCenter = null; + + var newSize = this.getSize(), + oldCenter = oldSize.divideBy(2).round(), + newCenter = newSize.divideBy(2).round(), + offset = oldCenter.subtract(newCenter); + + if (!offset.x && !offset.y) { return this; } + + if (options.animate && options.pan) { + this.panBy(offset); + + } else { + if (options.pan) { + this._rawPanBy(offset); + } + + this.fire('move'); + + if (options.debounceMoveend) { + clearTimeout(this._sizeTimer); + this._sizeTimer = setTimeout(bind(this.fire, this, 'moveend'), 200); + } else { + this.fire('moveend'); + } + } + + // @section Map state change events + // @event resize: ResizeEvent + // Fired when the map is resized. + return this.fire('resize', { + oldSize: oldSize, + newSize: newSize + }); + }, + + // @section Methods for modifying map state + // @method stop(): this + // Stops the currently running `panTo` or `flyTo` animation, if any. + stop: function () { + this.setZoom(this._limitZoom(this._zoom)); + if (!this.options.zoomSnap) { + this.fire('viewreset'); + } + return this._stop(); + }, + + // @section Geolocation methods + // @method locate(options?: Locate options): this + // Tries to locate the user using the Geolocation API, firing a [`locationfound`](#map-locationfound) + // event with location data on success or a [`locationerror`](#map-locationerror) event on failure, + // and optionally sets the map view to the user's location with respect to + // detection accuracy (or to the world view if geolocation failed). + // Note that, if your page doesn't use HTTPS, this method will fail in + // modern browsers ([Chrome 50 and newer](https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins)) + // See `Locate options` for more details. + locate: function (options) { + + options = this._locateOptions = extend({ + timeout: 10000, + watch: false + // setView: false + // maxZoom: + // maximumAge: 0 + // enableHighAccuracy: false + }, options); + + if (!('geolocation' in navigator)) { + this._handleGeolocationError({ + code: 0, + message: 'Geolocation not supported.' + }); + return this; + } + + var onResponse = bind(this._handleGeolocationResponse, this), + onError = bind(this._handleGeolocationError, this); + + if (options.watch) { + this._locationWatchId = + navigator.geolocation.watchPosition(onResponse, onError, options); + } else { + navigator.geolocation.getCurrentPosition(onResponse, onError, options); + } + return this; + }, + + // @method stopLocate(): this + // Stops watching location previously initiated by `map.locate({watch: true})` + // and aborts resetting the map view if map.locate was called with + // `{setView: true}`. + stopLocate: function () { + if (navigator.geolocation && navigator.geolocation.clearWatch) { + navigator.geolocation.clearWatch(this._locationWatchId); + } + if (this._locateOptions) { + this._locateOptions.setView = false; + } + return this; + }, + + _handleGeolocationError: function (error) { + var c = error.code, + message = error.message || + (c === 1 ? 'permission denied' : + (c === 2 ? 'position unavailable' : 'timeout')); + + if (this._locateOptions.setView && !this._loaded) { + this.fitWorld(); + } + + // @section Location events + // @event locationerror: ErrorEvent + // Fired when geolocation (using the [`locate`](#map-locate) method) failed. + this.fire('locationerror', { + code: c, + message: 'Geolocation error: ' + message + '.' + }); + }, + + _handleGeolocationResponse: function (pos) { + var lat = pos.coords.latitude, + lng = pos.coords.longitude, + latlng = new LatLng(lat, lng), + bounds = latlng.toBounds(pos.coords.accuracy * 2), + options = this._locateOptions; + + if (options.setView) { + var zoom = this.getBoundsZoom(bounds); + this.setView(latlng, options.maxZoom ? Math.min(zoom, options.maxZoom) : zoom); + } + + var data = { + latlng: latlng, + bounds: bounds, + timestamp: pos.timestamp + }; + + for (var i in pos.coords) { + if (typeof pos.coords[i] === 'number') { + data[i] = pos.coords[i]; + } + } + + // @event locationfound: LocationEvent + // Fired when geolocation (using the [`locate`](#map-locate) method) + // went successfully. + this.fire('locationfound', data); + }, + + // TODO Appropriate docs section? + // @section Other Methods + // @method addHandler(name: String, HandlerClass: Function): this + // Adds a new `Handler` to the map, given its name and constructor function. + addHandler: function (name, HandlerClass) { + if (!HandlerClass) { return this; } + + var handler = this[name] = new HandlerClass(this); + + this._handlers.push(handler); + + if (this.options[name]) { + handler.enable(); + } + + return this; + }, + + // @method remove(): this + // Destroys the map and clears all related event listeners. + remove: function () { + + this._initEvents(true); + + if (this._containerId !== this._container._leaflet_id) { + throw new Error('Map container is being reused by another instance'); + } + + try { + // throws error in IE6-8 + delete this._container._leaflet_id; + delete this._containerId; + } catch (e) { + /*eslint-disable */ + this._container._leaflet_id = undefined; + /* eslint-enable */ + this._containerId = undefined; + } + + if (this._locationWatchId !== undefined) { + this.stopLocate(); + } + + this._stop(); + + remove(this._mapPane); + + if (this._clearControlPos) { + this._clearControlPos(); + } + if (this._resizeRequest) { + cancelAnimFrame(this._resizeRequest); + this._resizeRequest = null; + } + + this._clearHandlers(); + + if (this._loaded) { + // @section Map state change events + // @event unload: Event + // Fired when the map is destroyed with [remove](#map-remove) method. + this.fire('unload'); + } + + var i; + for (i in this._layers) { + this._layers[i].remove(); + } + for (i in this._panes) { + remove(this._panes[i]); + } + + this._layers = []; + this._panes = []; + delete this._mapPane; + delete this._renderer; + + return this; + }, + + // @section Other Methods + // @method createPane(name: String, container?: HTMLElement): HTMLElement + // Creates a new [map pane](#map-pane) with the given name if it doesn't exist already, + // then returns it. The pane is created as a child of `container`, or + // as a child of the main map pane if not set. + createPane: function (name, container) { + var className = 'leaflet-pane' + (name ? ' leaflet-' + name.replace('Pane', '') + '-pane' : ''), + pane = create$1('div', className, container || this._mapPane); + + if (name) { + this._panes[name] = pane; + } + return pane; + }, + + // @section Methods for Getting Map State + + // @method getCenter(): LatLng + // Returns the geographical center of the map view + getCenter: function () { + this._checkIfLoaded(); + + if (this._lastCenter && !this._moved()) { + return this._lastCenter; + } + return this.layerPointToLatLng(this._getCenterLayerPoint()); + }, + + // @method getZoom(): Number + // Returns the current zoom level of the map view + getZoom: function () { + return this._zoom; + }, + + // @method getBounds(): LatLngBounds + // Returns the geographical bounds visible in the current map view + getBounds: function () { + var bounds = this.getPixelBounds(), + sw = this.unproject(bounds.getBottomLeft()), + ne = this.unproject(bounds.getTopRight()); + + return new LatLngBounds(sw, ne); + }, + + // @method getMinZoom(): Number + // Returns the minimum zoom level of the map (if set in the `minZoom` option of the map or of any layers), or `0` by default. + getMinZoom: function () { + return this.options.minZoom === undefined ? this._layersMinZoom || 0 : this.options.minZoom; + }, + + // @method getMaxZoom(): Number + // Returns the maximum zoom level of the map (if set in the `maxZoom` option of the map or of any layers). + getMaxZoom: function () { + return this.options.maxZoom === undefined ? + (this._layersMaxZoom === undefined ? Infinity : this._layersMaxZoom) : + this.options.maxZoom; + }, + + // @method getBoundsZoom(bounds: LatLngBounds, inside?: Boolean, padding?: Point): Number + // Returns the maximum zoom level on which the given bounds fit to the map + // view in its entirety. If `inside` (optional) is set to `true`, the method + // instead returns the minimum zoom level on which the map view fits into + // the given bounds in its entirety. + getBoundsZoom: function (bounds, inside, padding) { // (LatLngBounds[, Boolean, Point]) -> Number + bounds = toLatLngBounds(bounds); + padding = toPoint(padding || [0, 0]); + + var zoom = this.getZoom() || 0, + min = this.getMinZoom(), + max = this.getMaxZoom(), + nw = bounds.getNorthWest(), + se = bounds.getSouthEast(), + size = this.getSize().subtract(padding), + boundsSize = toBounds(this.project(se, zoom), this.project(nw, zoom)).getSize(), + snap = any3d ? this.options.zoomSnap : 1, + scalex = size.x / boundsSize.x, + scaley = size.y / boundsSize.y, + scale = inside ? Math.max(scalex, scaley) : Math.min(scalex, scaley); + + zoom = this.getScaleZoom(scale, zoom); + + if (snap) { + zoom = Math.round(zoom / (snap / 100)) * (snap / 100); // don't jump if within 1% of a snap level + zoom = inside ? Math.ceil(zoom / snap) * snap : Math.floor(zoom / snap) * snap; + } + + return Math.max(min, Math.min(max, zoom)); + }, + + // @method getSize(): Point + // Returns the current size of the map container (in pixels). + getSize: function () { + if (!this._size || this._sizeChanged) { + this._size = new Point( + this._container.clientWidth || 0, + this._container.clientHeight || 0); + + this._sizeChanged = false; + } + return this._size.clone(); + }, + + // @method getPixelBounds(): Bounds + // Returns the bounds of the current map view in projected pixel + // coordinates (sometimes useful in layer and overlay implementations). + getPixelBounds: function (center, zoom) { + var topLeftPoint = this._getTopLeftPoint(center, zoom); + return new Bounds(topLeftPoint, topLeftPoint.add(this.getSize())); + }, + + // TODO: Check semantics - isn't the pixel origin the 0,0 coord relative to + // the map pane? "left point of the map layer" can be confusing, specially + // since there can be negative offsets. + // @method getPixelOrigin(): Point + // Returns the projected pixel coordinates of the top left point of + // the map layer (useful in custom layer and overlay implementations). + getPixelOrigin: function () { + this._checkIfLoaded(); + return this._pixelOrigin; + }, + + // @method getPixelWorldBounds(zoom?: Number): Bounds + // Returns the world's bounds in pixel coordinates for zoom level `zoom`. + // If `zoom` is omitted, the map's current zoom level is used. + getPixelWorldBounds: function (zoom) { + return this.options.crs.getProjectedBounds(zoom === undefined ? this.getZoom() : zoom); + }, + + // @section Other Methods + + // @method getPane(pane: String|HTMLElement): HTMLElement + // Returns a [map pane](#map-pane), given its name or its HTML element (its identity). + getPane: function (pane) { + return typeof pane === 'string' ? this._panes[pane] : pane; + }, + + // @method getPanes(): Object + // Returns a plain object containing the names of all [panes](#map-pane) as keys and + // the panes as values. + getPanes: function () { + return this._panes; + }, + + // @method getContainer: HTMLElement + // Returns the HTML element that contains the map. + getContainer: function () { + return this._container; + }, + + + // @section Conversion Methods + + // @method getZoomScale(toZoom: Number, fromZoom: Number): Number + // Returns the scale factor to be applied to a map transition from zoom level + // `fromZoom` to `toZoom`. Used internally to help with zoom animations. + getZoomScale: function (toZoom, fromZoom) { + // TODO replace with universal implementation after refactoring projections + var crs = this.options.crs; + fromZoom = fromZoom === undefined ? this._zoom : fromZoom; + return crs.scale(toZoom) / crs.scale(fromZoom); + }, + + // @method getScaleZoom(scale: Number, fromZoom: Number): Number + // Returns the zoom level that the map would end up at, if it is at `fromZoom` + // level and everything is scaled by a factor of `scale`. Inverse of + // [`getZoomScale`](#map-getZoomScale). + getScaleZoom: function (scale, fromZoom) { + var crs = this.options.crs; + fromZoom = fromZoom === undefined ? this._zoom : fromZoom; + var zoom = crs.zoom(scale * crs.scale(fromZoom)); + return isNaN(zoom) ? Infinity : zoom; + }, + + // @method project(latlng: LatLng, zoom: Number): Point + // Projects a geographical coordinate `LatLng` according to the projection + // of the map's CRS, then scales it according to `zoom` and the CRS's + // `Transformation`. The result is pixel coordinate relative to + // the CRS origin. + project: function (latlng, zoom) { + zoom = zoom === undefined ? this._zoom : zoom; + return this.options.crs.latLngToPoint(toLatLng(latlng), zoom); + }, + + // @method unproject(point: Point, zoom: Number): LatLng + // Inverse of [`project`](#map-project). + unproject: function (point, zoom) { + zoom = zoom === undefined ? this._zoom : zoom; + return this.options.crs.pointToLatLng(toPoint(point), zoom); + }, + + // @method layerPointToLatLng(point: Point): LatLng + // Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin), + // returns the corresponding geographical coordinate (for the current zoom level). + layerPointToLatLng: function (point) { + var projectedPoint = toPoint(point).add(this.getPixelOrigin()); + return this.unproject(projectedPoint); + }, + + // @method latLngToLayerPoint(latlng: LatLng): Point + // Given a geographical coordinate, returns the corresponding pixel coordinate + // relative to the [origin pixel](#map-getpixelorigin). + latLngToLayerPoint: function (latlng) { + var projectedPoint = this.project(toLatLng(latlng))._round(); + return projectedPoint._subtract(this.getPixelOrigin()); + }, + + // @method wrapLatLng(latlng: LatLng): LatLng + // Returns a `LatLng` where `lat` and `lng` has been wrapped according to the + // map's CRS's `wrapLat` and `wrapLng` properties, if they are outside the + // CRS's bounds. + // By default this means longitude is wrapped around the dateline so its + // value is between -180 and +180 degrees. + wrapLatLng: function (latlng) { + return this.options.crs.wrapLatLng(toLatLng(latlng)); + }, + + // @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds + // Returns a `LatLngBounds` with the same size as the given one, ensuring that + // its center is within the CRS's bounds. + // By default this means the center longitude is wrapped around the dateline so its + // value is between -180 and +180 degrees, and the majority of the bounds + // overlaps the CRS's bounds. + wrapLatLngBounds: function (latlng) { + return this.options.crs.wrapLatLngBounds(toLatLngBounds(latlng)); + }, + + // @method distance(latlng1: LatLng, latlng2: LatLng): Number + // Returns the distance between two geographical coordinates according to + // the map's CRS. By default this measures distance in meters. + distance: function (latlng1, latlng2) { + return this.options.crs.distance(toLatLng(latlng1), toLatLng(latlng2)); + }, + + // @method containerPointToLayerPoint(point: Point): Point + // Given a pixel coordinate relative to the map container, returns the corresponding + // pixel coordinate relative to the [origin pixel](#map-getpixelorigin). + containerPointToLayerPoint: function (point) { // (Point) + return toPoint(point).subtract(this._getMapPanePos()); + }, + + // @method layerPointToContainerPoint(point: Point): Point + // Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin), + // returns the corresponding pixel coordinate relative to the map container. + layerPointToContainerPoint: function (point) { // (Point) + return toPoint(point).add(this._getMapPanePos()); + }, + + // @method containerPointToLatLng(point: Point): LatLng + // Given a pixel coordinate relative to the map container, returns + // the corresponding geographical coordinate (for the current zoom level). + containerPointToLatLng: function (point) { + var layerPoint = this.containerPointToLayerPoint(toPoint(point)); + return this.layerPointToLatLng(layerPoint); + }, + + // @method latLngToContainerPoint(latlng: LatLng): Point + // Given a geographical coordinate, returns the corresponding pixel coordinate + // relative to the map container. + latLngToContainerPoint: function (latlng) { + return this.layerPointToContainerPoint(this.latLngToLayerPoint(toLatLng(latlng))); + }, + + // @method mouseEventToContainerPoint(ev: MouseEvent): Point + // Given a MouseEvent object, returns the pixel coordinate relative to the + // map container where the event took place. + mouseEventToContainerPoint: function (e) { + return getMousePosition(e, this._container); + }, + + // @method mouseEventToLayerPoint(ev: MouseEvent): Point + // Given a MouseEvent object, returns the pixel coordinate relative to + // the [origin pixel](#map-getpixelorigin) where the event took place. + mouseEventToLayerPoint: function (e) { + return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e)); + }, + + // @method mouseEventToLatLng(ev: MouseEvent): LatLng + // Given a MouseEvent object, returns geographical coordinate where the + // event took place. + mouseEventToLatLng: function (e) { // (MouseEvent) + return this.layerPointToLatLng(this.mouseEventToLayerPoint(e)); + }, + + + // map initialization methods + + _initContainer: function (id) { + var container = this._container = get(id); + + if (!container) { + throw new Error('Map container not found.'); + } else if (container._leaflet_id) { + throw new Error('Map container is already initialized.'); + } + + on(container, 'scroll', this._onScroll, this); + this._containerId = stamp(container); + }, + + _initLayout: function () { + var container = this._container; + + this._fadeAnimated = this.options.fadeAnimation && any3d; + + addClass(container, 'leaflet-container' + + (touch ? ' leaflet-touch' : '') + + (retina ? ' leaflet-retina' : '') + + (ielt9 ? ' leaflet-oldie' : '') + + (safari ? ' leaflet-safari' : '') + + (this._fadeAnimated ? ' leaflet-fade-anim' : '')); + + var position = getStyle(container, 'position'); + + if (position !== 'absolute' && position !== 'relative' && position !== 'fixed') { + container.style.position = 'relative'; + } + + this._initPanes(); + + if (this._initControlPos) { + this._initControlPos(); + } + }, + + _initPanes: function () { + var panes = this._panes = {}; + this._paneRenderers = {}; + + // @section + // + // Panes are DOM elements used to control the ordering of layers on the map. You + // can access panes with [`map.getPane`](#map-getpane) or + // [`map.getPanes`](#map-getpanes) methods. New panes can be created with the + // [`map.createPane`](#map-createpane) method. + // + // Every map has the following default panes that differ only in zIndex. + // + // @pane mapPane: HTMLElement = 'auto' + // Pane that contains all other map panes + + this._mapPane = this.createPane('mapPane', this._container); + setPosition(this._mapPane, new Point(0, 0)); + + // @pane tilePane: HTMLElement = 200 + // Pane for `GridLayer`s and `TileLayer`s + this.createPane('tilePane'); + // @pane overlayPane: HTMLElement = 400 + // Pane for vectors (`Path`s, like `Polyline`s and `Polygon`s), `ImageOverlay`s and `VideoOverlay`s + this.createPane('shadowPane'); + // @pane shadowPane: HTMLElement = 500 + // Pane for overlay shadows (e.g. `Marker` shadows) + this.createPane('overlayPane'); + // @pane markerPane: HTMLElement = 600 + // Pane for `Icon`s of `Marker`s + this.createPane('markerPane'); + // @pane tooltipPane: HTMLElement = 650 + // Pane for `Tooltip`s. + this.createPane('tooltipPane'); + // @pane popupPane: HTMLElement = 700 + // Pane for `Popup`s. + this.createPane('popupPane'); + + if (!this.options.markerZoomAnimation) { + addClass(panes.markerPane, 'leaflet-zoom-hide'); + addClass(panes.shadowPane, 'leaflet-zoom-hide'); + } + }, + + + // private methods that modify map state + + // @section Map state change events + _resetView: function (center, zoom) { + setPosition(this._mapPane, new Point(0, 0)); + + var loading = !this._loaded; + this._loaded = true; + zoom = this._limitZoom(zoom); + + this.fire('viewprereset'); + + var zoomChanged = this._zoom !== zoom; + this + ._moveStart(zoomChanged, false) + ._move(center, zoom) + ._moveEnd(zoomChanged); + + // @event viewreset: Event + // Fired when the map needs to redraw its content (this usually happens + // on map zoom or load). Very useful for creating custom overlays. + this.fire('viewreset'); + + // @event load: Event + // Fired when the map is initialized (when its center and zoom are set + // for the first time). + if (loading) { + this.fire('load'); + } + }, + + _moveStart: function (zoomChanged, noMoveStart) { + // @event zoomstart: Event + // Fired when the map zoom is about to change (e.g. before zoom animation). + // @event movestart: Event + // Fired when the view of the map starts changing (e.g. user starts dragging the map). + if (zoomChanged) { + this.fire('zoomstart'); + } + if (!noMoveStart) { + this.fire('movestart'); + } + return this; + }, + + _move: function (center, zoom, data) { + if (zoom === undefined) { + zoom = this._zoom; + } + var zoomChanged = this._zoom !== zoom; + + this._zoom = zoom; + this._lastCenter = center; + this._pixelOrigin = this._getNewPixelOrigin(center); + + // @event zoom: Event + // Fired repeatedly during any change in zoom level, including zoom + // and fly animations. + if (zoomChanged || (data && data.pinch)) { // Always fire 'zoom' if pinching because #3530 + this.fire('zoom', data); + } + + // @event move: Event + // Fired repeatedly during any movement of the map, including pan and + // fly animations. + return this.fire('move', data); + }, + + _moveEnd: function (zoomChanged) { + // @event zoomend: Event + // Fired when the map has changed, after any animations. + if (zoomChanged) { + this.fire('zoomend'); + } + + // @event moveend: Event + // Fired when the center of the map stops changing (e.g. user stopped + // dragging the map). + return this.fire('moveend'); + }, + + _stop: function () { + cancelAnimFrame(this._flyToFrame); + if (this._panAnim) { + this._panAnim.stop(); + } + return this; + }, + + _rawPanBy: function (offset) { + setPosition(this._mapPane, this._getMapPanePos().subtract(offset)); + }, + + _getZoomSpan: function () { + return this.getMaxZoom() - this.getMinZoom(); + }, + + _panInsideMaxBounds: function () { + if (!this._enforcingBounds) { + this.panInsideBounds(this.options.maxBounds); + } + }, + + _checkIfLoaded: function () { + if (!this._loaded) { + throw new Error('Set map center and zoom first.'); + } + }, + + // DOM event handling + + // @section Interaction events + _initEvents: function (remove$$1) { + this._targets = {}; + this._targets[stamp(this._container)] = this; + + var onOff = remove$$1 ? off : on; + + // @event click: MouseEvent + // Fired when the user clicks (or taps) the map. + // @event dblclick: MouseEvent + // Fired when the user double-clicks (or double-taps) the map. + // @event mousedown: MouseEvent + // Fired when the user pushes the mouse button on the map. + // @event mouseup: MouseEvent + // Fired when the user releases the mouse button on the map. + // @event mouseover: MouseEvent + // Fired when the mouse enters the map. + // @event mouseout: MouseEvent + // Fired when the mouse leaves the map. + // @event mousemove: MouseEvent + // Fired while the mouse moves over the map. + // @event contextmenu: MouseEvent + // Fired when the user pushes the right mouse button on the map, prevents + // default browser context menu from showing if there are listeners on + // this event. Also fired on mobile when the user holds a single touch + // for a second (also called long press). + // @event keypress: KeyboardEvent + // Fired when the user presses a key from the keyboard that produces a character value while the map is focused. + // @event keydown: KeyboardEvent + // Fired when the user presses a key from the keyboard while the map is focused. Unlike the `keypress` event, + // the `keydown` event is fired for keys that produce a character value and for keys + // that do not produce a character value. + // @event keyup: KeyboardEvent + // Fired when the user releases a key from the keyboard while the map is focused. + onOff(this._container, 'click dblclick mousedown mouseup ' + + 'mouseover mouseout mousemove contextmenu keypress keydown keyup', this._handleDOMEvent, this); + + if (this.options.trackResize) { + onOff(window, 'resize', this._onResize, this); + } + + if (any3d && this.options.transform3DLimit) { + (remove$$1 ? this.off : this.on).call(this, 'moveend', this._onMoveEnd); + } + }, + + _onResize: function () { + cancelAnimFrame(this._resizeRequest); + this._resizeRequest = requestAnimFrame( + function () { this.invalidateSize({debounceMoveend: true}); }, this); + }, + + _onScroll: function () { + this._container.scrollTop = 0; + this._container.scrollLeft = 0; + }, + + _onMoveEnd: function () { + var pos = this._getMapPanePos(); + if (Math.max(Math.abs(pos.x), Math.abs(pos.y)) >= this.options.transform3DLimit) { + // https://bugzilla.mozilla.org/show_bug.cgi?id=1203873 but Webkit also have + // a pixel offset on very high values, see: http://jsfiddle.net/dg6r5hhb/ + this._resetView(this.getCenter(), this.getZoom()); + } + }, + + _findEventTargets: function (e, type) { + var targets = [], + target, + isHover = type === 'mouseout' || type === 'mouseover', + src = e.target || e.srcElement, + dragging = false; + + while (src) { + target = this._targets[stamp(src)]; + if (target && (type === 'click' || type === 'preclick') && !e._simulated && this._draggableMoved(target)) { + // Prevent firing click after you just dragged an object. + dragging = true; + break; + } + if (target && target.listens(type, true)) { + if (isHover && !isExternalTarget(src, e)) { break; } + targets.push(target); + if (isHover) { break; } + } + if (src === this._container) { break; } + src = src.parentNode; + } + if (!targets.length && !dragging && !isHover && isExternalTarget(src, e)) { + targets = [this]; + } + return targets; + }, + + _handleDOMEvent: function (e) { + if (!this._loaded || skipped(e)) { return; } + + var type = e.type; + + if (type === 'mousedown' || type === 'keypress' || type === 'keyup' || type === 'keydown') { + // prevents outline when clicking on keyboard-focusable element + preventOutline(e.target || e.srcElement); + } + + this._fireDOMEvent(e, type); + }, + + _mouseEvents: ['click', 'dblclick', 'mouseover', 'mouseout', 'contextmenu'], + + _fireDOMEvent: function (e, type, targets) { + + if (e.type === 'click') { + // Fire a synthetic 'preclick' event which propagates up (mainly for closing popups). + // @event preclick: MouseEvent + // Fired before mouse click on the map (sometimes useful when you + // want something to happen on click before any existing click + // handlers start running). + var synth = extend({}, e); + synth.type = 'preclick'; + this._fireDOMEvent(synth, synth.type, targets); + } + + if (e._stopped) { return; } + + // Find the layer the event is propagating from and its parents. + targets = (targets || []).concat(this._findEventTargets(e, type)); + + if (!targets.length) { return; } + + var target = targets[0]; + if (type === 'contextmenu' && target.listens(type, true)) { + preventDefault(e); + } + + var data = { + originalEvent: e + }; + + if (e.type !== 'keypress' && e.type !== 'keydown' && e.type !== 'keyup') { + var isMarker = target.getLatLng && (!target._radius || target._radius <= 10); + data.containerPoint = isMarker ? + this.latLngToContainerPoint(target.getLatLng()) : this.mouseEventToContainerPoint(e); + data.layerPoint = this.containerPointToLayerPoint(data.containerPoint); + data.latlng = isMarker ? target.getLatLng() : this.layerPointToLatLng(data.layerPoint); + } + + for (var i = 0; i < targets.length; i++) { + targets[i].fire(type, data, true); + if (data.originalEvent._stopped || + (targets[i].options.bubblingMouseEvents === false && indexOf(this._mouseEvents, type) !== -1)) { return; } + } + }, + + _draggableMoved: function (obj) { + obj = obj.dragging && obj.dragging.enabled() ? obj : this; + return (obj.dragging && obj.dragging.moved()) || (this.boxZoom && this.boxZoom.moved()); + }, + + _clearHandlers: function () { + for (var i = 0, len = this._handlers.length; i < len; i++) { + this._handlers[i].disable(); + } + }, + + // @section Other Methods + + // @method whenReady(fn: Function, context?: Object): this + // Runs the given function `fn` when the map gets initialized with + // a view (center and zoom) and at least one layer, or immediately + // if it's already initialized, optionally passing a function context. + whenReady: function (callback, context) { + if (this._loaded) { + callback.call(context || this, {target: this}); + } else { + this.on('load', callback, context); + } + return this; + }, + + + // private methods for getting map state + + _getMapPanePos: function () { + return getPosition(this._mapPane) || new Point(0, 0); + }, + + _moved: function () { + var pos = this._getMapPanePos(); + return pos && !pos.equals([0, 0]); + }, + + _getTopLeftPoint: function (center, zoom) { + var pixelOrigin = center && zoom !== undefined ? + this._getNewPixelOrigin(center, zoom) : + this.getPixelOrigin(); + return pixelOrigin.subtract(this._getMapPanePos()); + }, + + _getNewPixelOrigin: function (center, zoom) { + var viewHalf = this.getSize()._divideBy(2); + return this.project(center, zoom)._subtract(viewHalf)._add(this._getMapPanePos())._round(); + }, + + _latLngToNewLayerPoint: function (latlng, zoom, center) { + var topLeft = this._getNewPixelOrigin(center, zoom); + return this.project(latlng, zoom)._subtract(topLeft); + }, + + _latLngBoundsToNewLayerBounds: function (latLngBounds, zoom, center) { + var topLeft = this._getNewPixelOrigin(center, zoom); + return toBounds([ + this.project(latLngBounds.getSouthWest(), zoom)._subtract(topLeft), + this.project(latLngBounds.getNorthWest(), zoom)._subtract(topLeft), + this.project(latLngBounds.getSouthEast(), zoom)._subtract(topLeft), + this.project(latLngBounds.getNorthEast(), zoom)._subtract(topLeft) + ]); + }, + + // layer point of the current center + _getCenterLayerPoint: function () { + return this.containerPointToLayerPoint(this.getSize()._divideBy(2)); + }, + + // offset of the specified place to the current center in pixels + _getCenterOffset: function (latlng) { + return this.latLngToLayerPoint(latlng).subtract(this._getCenterLayerPoint()); + }, + + // adjust center for view to get inside bounds + _limitCenter: function (center, zoom, bounds) { + + if (!bounds) { return center; } + + var centerPoint = this.project(center, zoom), + viewHalf = this.getSize().divideBy(2), + viewBounds = new Bounds(centerPoint.subtract(viewHalf), centerPoint.add(viewHalf)), + offset = this._getBoundsOffset(viewBounds, bounds, zoom); + + // If offset is less than a pixel, ignore. + // This prevents unstable projections from getting into + // an infinite loop of tiny offsets. + if (offset.round().equals([0, 0])) { + return center; + } + + return this.unproject(centerPoint.add(offset), zoom); + }, + + // adjust offset for view to get inside bounds + _limitOffset: function (offset, bounds) { + if (!bounds) { return offset; } + + var viewBounds = this.getPixelBounds(), + newBounds = new Bounds(viewBounds.min.add(offset), viewBounds.max.add(offset)); + + return offset.add(this._getBoundsOffset(newBounds, bounds)); + }, + + // returns offset needed for pxBounds to get inside maxBounds at a specified zoom + _getBoundsOffset: function (pxBounds, maxBounds, zoom) { + var projectedMaxBounds = toBounds( + this.project(maxBounds.getNorthEast(), zoom), + this.project(maxBounds.getSouthWest(), zoom) + ), + minOffset = projectedMaxBounds.min.subtract(pxBounds.min), + maxOffset = projectedMaxBounds.max.subtract(pxBounds.max), + + dx = this._rebound(minOffset.x, -maxOffset.x), + dy = this._rebound(minOffset.y, -maxOffset.y); + + return new Point(dx, dy); + }, + + _rebound: function (left, right) { + return left + right > 0 ? + Math.round(left - right) / 2 : + Math.max(0, Math.ceil(left)) - Math.max(0, Math.floor(right)); + }, + + _limitZoom: function (zoom) { + var min = this.getMinZoom(), + max = this.getMaxZoom(), + snap = any3d ? this.options.zoomSnap : 1; + if (snap) { + zoom = Math.round(zoom / snap) * snap; + } + return Math.max(min, Math.min(max, zoom)); + }, + + _onPanTransitionStep: function () { + this.fire('move'); + }, + + _onPanTransitionEnd: function () { + removeClass(this._mapPane, 'leaflet-pan-anim'); + this.fire('moveend'); + }, + + _tryAnimatedPan: function (center, options) { + // difference between the new and current centers in pixels + var offset = this._getCenterOffset(center)._trunc(); + + // don't animate too far unless animate: true specified in options + if ((options && options.animate) !== true && !this.getSize().contains(offset)) { return false; } + + this.panBy(offset, options); + + return true; + }, + + _createAnimProxy: function () { + + var proxy = this._proxy = create$1('div', 'leaflet-proxy leaflet-zoom-animated'); + this._panes.mapPane.appendChild(proxy); + + this.on('zoomanim', function (e) { + var prop = TRANSFORM, + transform = this._proxy.style[prop]; + + setTransform(this._proxy, this.project(e.center, e.zoom), this.getZoomScale(e.zoom, 1)); + + // workaround for case when transform is the same and so transitionend event is not fired + if (transform === this._proxy.style[prop] && this._animatingZoom) { + this._onZoomTransitionEnd(); + } + }, this); + + this.on('load moveend', this._animMoveEnd, this); + + this._on('unload', this._destroyAnimProxy, this); + }, + + _destroyAnimProxy: function () { + remove(this._proxy); + this.off('load moveend', this._animMoveEnd, this); + delete this._proxy; + }, + + _animMoveEnd: function () { + var c = this.getCenter(), + z = this.getZoom(); + setTransform(this._proxy, this.project(c, z), this.getZoomScale(z, 1)); + }, + + _catchTransitionEnd: function (e) { + if (this._animatingZoom && e.propertyName.indexOf('transform') >= 0) { + this._onZoomTransitionEnd(); + } + }, + + _nothingToAnimate: function () { + return !this._container.getElementsByClassName('leaflet-zoom-animated').length; + }, + + _tryAnimatedZoom: function (center, zoom, options) { + + if (this._animatingZoom) { return true; } + + options = options || {}; + + // don't animate if disabled, not supported or zoom difference is too large + if (!this._zoomAnimated || options.animate === false || this._nothingToAnimate() || + Math.abs(zoom - this._zoom) > this.options.zoomAnimationThreshold) { return false; } + + // offset is the pixel coords of the zoom origin relative to the current center + var scale = this.getZoomScale(zoom), + offset = this._getCenterOffset(center)._divideBy(1 - 1 / scale); + + // don't animate if the zoom origin isn't within one screen from the current center, unless forced + if (options.animate !== true && !this.getSize().contains(offset)) { return false; } + + requestAnimFrame(function () { + this + ._moveStart(true, false) + ._animateZoom(center, zoom, true); + }, this); + + return true; + }, + + _animateZoom: function (center, zoom, startAnim, noUpdate) { + if (!this._mapPane) { return; } + + if (startAnim) { + this._animatingZoom = true; + + // remember what center/zoom to set after animation + this._animateToCenter = center; + this._animateToZoom = zoom; + + addClass(this._mapPane, 'leaflet-zoom-anim'); + } + + // @section Other Events + // @event zoomanim: ZoomAnimEvent + // Fired at least once per zoom animation. For continuous zoom, like pinch zooming, fired once per frame during zoom. + this.fire('zoomanim', { + center: center, + zoom: zoom, + noUpdate: noUpdate + }); + + // Work around webkit not firing 'transitionend', see https://github.com/Leaflet/Leaflet/issues/3689, 2693 + setTimeout(bind(this._onZoomTransitionEnd, this), 250); + }, + + _onZoomTransitionEnd: function () { + if (!this._animatingZoom) { return; } + + if (this._mapPane) { + removeClass(this._mapPane, 'leaflet-zoom-anim'); + } + + this._animatingZoom = false; + + this._move(this._animateToCenter, this._animateToZoom); + + // This anim frame should prevent an obscure iOS webkit tile loading race condition. + requestAnimFrame(function () { + this._moveEnd(true); + }, this); + } +}); + +// @section + +// @factory L.map(id: String, options?: Map options) +// Instantiates a map object given the DOM ID of a `
` element +// and optionally an object literal with `Map options`. +// +// @alternative +// @factory L.map(el: HTMLElement, options?: Map options) +// Instantiates a map object given an instance of a `
` HTML element +// and optionally an object literal with `Map options`. +function createMap(id, options) { + return new Map(id, options); +} + +/* + * @class Control + * @aka L.Control + * @inherits Class + * + * L.Control is a base class for implementing map controls. Handles positioning. + * All other controls extend from this class. + */ + +var Control = Class.extend({ + // @section + // @aka Control options + options: { + // @option position: String = 'topright' + // The position of the control (one of the map corners). Possible values are `'topleft'`, + // `'topright'`, `'bottomleft'` or `'bottomright'` + position: 'topright' + }, + + initialize: function (options) { + setOptions(this, options); + }, + + /* @section + * Classes extending L.Control will inherit the following methods: + * + * @method getPosition: string + * Returns the position of the control. + */ + getPosition: function () { + return this.options.position; + }, + + // @method setPosition(position: string): this + // Sets the position of the control. + setPosition: function (position) { + var map = this._map; + + if (map) { + map.removeControl(this); + } + + this.options.position = position; + + if (map) { + map.addControl(this); + } + + return this; + }, + + // @method getContainer: HTMLElement + // Returns the HTMLElement that contains the control. + getContainer: function () { + return this._container; + }, + + // @method addTo(map: Map): this + // Adds the control to the given map. + addTo: function (map) { + this.remove(); + this._map = map; + + var container = this._container = this.onAdd(map), + pos = this.getPosition(), + corner = map._controlCorners[pos]; + + addClass(container, 'leaflet-control'); + + if (pos.indexOf('bottom') !== -1) { + corner.insertBefore(container, corner.firstChild); + } else { + corner.appendChild(container); + } + + this._map.on('unload', this.remove, this); + + return this; + }, + + // @method remove: this + // Removes the control from the map it is currently active on. + remove: function () { + if (!this._map) { + return this; + } + + remove(this._container); + + if (this.onRemove) { + this.onRemove(this._map); + } + + this._map.off('unload', this.remove, this); + this._map = null; + + return this; + }, + + _refocusOnMap: function (e) { + // if map exists and event is not a keyboard event + if (this._map && e && e.screenX > 0 && e.screenY > 0) { + this._map.getContainer().focus(); + } + } +}); + +var control = function (options) { + return new Control(options); +}; + +/* @section Extension methods + * @uninheritable + * + * Every control should extend from `L.Control` and (re-)implement the following methods. + * + * @method onAdd(map: Map): HTMLElement + * Should return the container DOM element for the control and add listeners on relevant map events. Called on [`control.addTo(map)`](#control-addTo). + * + * @method onRemove(map: Map) + * Optional method. Should contain all clean up code that removes the listeners previously added in [`onAdd`](#control-onadd). Called on [`control.remove()`](#control-remove). + */ + +/* @namespace Map + * @section Methods for Layers and Controls + */ +Map.include({ + // @method addControl(control: Control): this + // Adds the given control to the map + addControl: function (control) { + control.addTo(this); + return this; + }, + + // @method removeControl(control: Control): this + // Removes the given control from the map + removeControl: function (control) { + control.remove(); + return this; + }, + + _initControlPos: function () { + var corners = this._controlCorners = {}, + l = 'leaflet-', + container = this._controlContainer = + create$1('div', l + 'control-container', this._container); + + function createCorner(vSide, hSide) { + var className = l + vSide + ' ' + l + hSide; + + corners[vSide + hSide] = create$1('div', className, container); + } + + createCorner('top', 'left'); + createCorner('top', 'right'); + createCorner('bottom', 'left'); + createCorner('bottom', 'right'); + }, + + _clearControlPos: function () { + for (var i in this._controlCorners) { + remove(this._controlCorners[i]); + } + remove(this._controlContainer); + delete this._controlCorners; + delete this._controlContainer; + } +}); + +/* + * @class Control.Layers + * @aka L.Control.Layers + * @inherits Control + * + * The layers control gives users the ability to switch between different base layers and switch overlays on/off (check out the [detailed example](http://leafletjs.com/examples/layers-control/)). Extends `Control`. + * + * @example + * + * ```js + * var baseLayers = { + * "Mapbox": mapbox, + * "OpenStreetMap": osm + * }; + * + * var overlays = { + * "Marker": marker, + * "Roads": roadsLayer + * }; + * + * L.control.layers(baseLayers, overlays).addTo(map); + * ``` + * + * The `baseLayers` and `overlays` parameters are object literals with layer names as keys and `Layer` objects as values: + * + * ```js + * { + * "": layer1, + * "": layer2 + * } + * ``` + * + * The layer names can contain HTML, which allows you to add additional styling to the items: + * + * ```js + * {" My Layer": myLayer} + * ``` + */ + +var Layers = Control.extend({ + // @section + // @aka Control.Layers options + options: { + // @option collapsed: Boolean = true + // If `true`, the control will be collapsed into an icon and expanded on mouse hover or touch. + collapsed: true, + position: 'topright', + + // @option autoZIndex: Boolean = true + // If `true`, the control will assign zIndexes in increasing order to all of its layers so that the order is preserved when switching them on/off. + autoZIndex: true, + + // @option hideSingleBase: Boolean = false + // If `true`, the base layers in the control will be hidden when there is only one. + hideSingleBase: false, + + // @option sortLayers: Boolean = false + // Whether to sort the layers. When `false`, layers will keep the order + // in which they were added to the control. + sortLayers: false, + + // @option sortFunction: Function = * + // A [compare function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) + // that will be used for sorting the layers, when `sortLayers` is `true`. + // The function receives both the `L.Layer` instances and their names, as in + // `sortFunction(layerA, layerB, nameA, nameB)`. + // By default, it sorts layers alphabetically by their name. + sortFunction: function (layerA, layerB, nameA, nameB) { + return nameA < nameB ? -1 : (nameB < nameA ? 1 : 0); + } + }, + + initialize: function (baseLayers, overlays, options) { + setOptions(this, options); + + this._layerControlInputs = []; + this._layers = []; + this._lastZIndex = 0; + this._handlingClick = false; + + for (var i in baseLayers) { + this._addLayer(baseLayers[i], i); + } + + for (i in overlays) { + this._addLayer(overlays[i], i, true); + } + }, + + onAdd: function (map) { + this._initLayout(); + this._update(); + + this._map = map; + map.on('zoomend', this._checkDisabledLayers, this); + + for (var i = 0; i < this._layers.length; i++) { + this._layers[i].layer.on('add remove', this._onLayerChange, this); + } + + return this._container; + }, + + addTo: function (map) { + Control.prototype.addTo.call(this, map); + // Trigger expand after Layers Control has been inserted into DOM so that is now has an actual height. + return this._expandIfNotCollapsed(); + }, + + onRemove: function () { + this._map.off('zoomend', this._checkDisabledLayers, this); + + for (var i = 0; i < this._layers.length; i++) { + this._layers[i].layer.off('add remove', this._onLayerChange, this); + } + }, + + // @method addBaseLayer(layer: Layer, name: String): this + // Adds a base layer (radio button entry) with the given name to the control. + addBaseLayer: function (layer, name) { + this._addLayer(layer, name); + return (this._map) ? this._update() : this; + }, + + // @method addOverlay(layer: Layer, name: String): this + // Adds an overlay (checkbox entry) with the given name to the control. + addOverlay: function (layer, name) { + this._addLayer(layer, name, true); + return (this._map) ? this._update() : this; + }, + + // @method removeLayer(layer: Layer): this + // Remove the given layer from the control. + removeLayer: function (layer) { + layer.off('add remove', this._onLayerChange, this); + + var obj = this._getLayer(stamp(layer)); + if (obj) { + this._layers.splice(this._layers.indexOf(obj), 1); + } + return (this._map) ? this._update() : this; + }, + + // @method expand(): this + // Expand the control container if collapsed. + expand: function () { + addClass(this._container, 'leaflet-control-layers-expanded'); + this._section.style.height = null; + var acceptableHeight = this._map.getSize().y - (this._container.offsetTop + 50); + if (acceptableHeight < this._section.clientHeight) { + addClass(this._section, 'leaflet-control-layers-scrollbar'); + this._section.style.height = acceptableHeight + 'px'; + } else { + removeClass(this._section, 'leaflet-control-layers-scrollbar'); + } + this._checkDisabledLayers(); + return this; + }, + + // @method collapse(): this + // Collapse the control container if expanded. + collapse: function () { + removeClass(this._container, 'leaflet-control-layers-expanded'); + return this; + }, + + _initLayout: function () { + var className = 'leaflet-control-layers', + container = this._container = create$1('div', className), + collapsed = this.options.collapsed; + + // makes this work on IE touch devices by stopping it from firing a mouseout event when the touch is released + container.setAttribute('aria-haspopup', true); + + disableClickPropagation(container); + disableScrollPropagation(container); + + var section = this._section = create$1('section', className + '-list'); + + if (collapsed) { + this._map.on('click', this.collapse, this); + + if (!android) { + on(container, { + mouseenter: this.expand, + mouseleave: this.collapse + }, this); + } + } + + var link = this._layersLink = create$1('a', className + '-toggle', container); + link.href = '#'; + link.title = 'Layers'; + + if (touch) { + on(link, 'click', stop); + on(link, 'click', this.expand, this); + } else { + on(link, 'focus', this.expand, this); + } + + if (!collapsed) { + this.expand(); + } + + this._baseLayersList = create$1('div', className + '-base', section); + this._separator = create$1('div', className + '-separator', section); + this._overlaysList = create$1('div', className + '-overlays', section); + + container.appendChild(section); + }, + + _getLayer: function (id) { + for (var i = 0; i < this._layers.length; i++) { + + if (this._layers[i] && stamp(this._layers[i].layer) === id) { + return this._layers[i]; + } + } + }, + + _addLayer: function (layer, name, overlay) { + if (this._map) { + layer.on('add remove', this._onLayerChange, this); + } + + this._layers.push({ + layer: layer, + name: name, + overlay: overlay + }); + + if (this.options.sortLayers) { + this._layers.sort(bind(function (a, b) { + return this.options.sortFunction(a.layer, b.layer, a.name, b.name); + }, this)); + } + + if (this.options.autoZIndex && layer.setZIndex) { + this._lastZIndex++; + layer.setZIndex(this._lastZIndex); + } + + this._expandIfNotCollapsed(); + }, + + _update: function () { + if (!this._container) { return this; } + + empty(this._baseLayersList); + empty(this._overlaysList); + + this._layerControlInputs = []; + var baseLayersPresent, overlaysPresent, i, obj, baseLayersCount = 0; + + for (i = 0; i < this._layers.length; i++) { + obj = this._layers[i]; + this._addItem(obj); + overlaysPresent = overlaysPresent || obj.overlay; + baseLayersPresent = baseLayersPresent || !obj.overlay; + baseLayersCount += !obj.overlay ? 1 : 0; + } + + // Hide base layers section if there's only one layer. + if (this.options.hideSingleBase) { + baseLayersPresent = baseLayersPresent && baseLayersCount > 1; + this._baseLayersList.style.display = baseLayersPresent ? '' : 'none'; + } + + this._separator.style.display = overlaysPresent && baseLayersPresent ? '' : 'none'; + + return this; + }, + + _onLayerChange: function (e) { + if (!this._handlingClick) { + this._update(); + } + + var obj = this._getLayer(stamp(e.target)); + + // @namespace Map + // @section Layer events + // @event baselayerchange: LayersControlEvent + // Fired when the base layer is changed through the [layer control](#control-layers). + // @event overlayadd: LayersControlEvent + // Fired when an overlay is selected through the [layer control](#control-layers). + // @event overlayremove: LayersControlEvent + // Fired when an overlay is deselected through the [layer control](#control-layers). + // @namespace Control.Layers + var type = obj.overlay ? + (e.type === 'add' ? 'overlayadd' : 'overlayremove') : + (e.type === 'add' ? 'baselayerchange' : null); + + if (type) { + this._map.fire(type, obj); + } + }, + + // IE7 bugs out if you create a radio dynamically, so you have to do it this hacky way (see http://bit.ly/PqYLBe) + _createRadioElement: function (name, checked) { + + var radioHtml = ''; + + var radioFragment = document.createElement('div'); + radioFragment.innerHTML = radioHtml; + + return radioFragment.firstChild; + }, + + _addItem: function (obj) { + var label = document.createElement('label'), + checked = this._map.hasLayer(obj.layer), + input; + + if (obj.overlay) { + input = document.createElement('input'); + input.type = 'checkbox'; + input.className = 'leaflet-control-layers-selector'; + input.defaultChecked = checked; + } else { + input = this._createRadioElement('leaflet-base-layers_' + stamp(this), checked); + } + + this._layerControlInputs.push(input); + input.layerId = stamp(obj.layer); + + on(input, 'click', this._onInputClick, this); + + var name = document.createElement('span'); + name.innerHTML = ' ' + obj.name; + + // Helps from preventing layer control flicker when checkboxes are disabled + // https://github.com/Leaflet/Leaflet/issues/2771 + var holder = document.createElement('div'); + + label.appendChild(holder); + holder.appendChild(input); + holder.appendChild(name); + + var container = obj.overlay ? this._overlaysList : this._baseLayersList; + container.appendChild(label); + + this._checkDisabledLayers(); + return label; + }, + + _onInputClick: function () { + var inputs = this._layerControlInputs, + input, layer; + var addedLayers = [], + removedLayers = []; + + this._handlingClick = true; + + for (var i = inputs.length - 1; i >= 0; i--) { + input = inputs[i]; + layer = this._getLayer(input.layerId).layer; + + if (input.checked) { + addedLayers.push(layer); + } else if (!input.checked) { + removedLayers.push(layer); + } + } + + // Bugfix issue 2318: Should remove all old layers before readding new ones + for (i = 0; i < removedLayers.length; i++) { + if (this._map.hasLayer(removedLayers[i])) { + this._map.removeLayer(removedLayers[i]); + } + } + for (i = 0; i < addedLayers.length; i++) { + if (!this._map.hasLayer(addedLayers[i])) { + this._map.addLayer(addedLayers[i]); + } + } + + this._handlingClick = false; + + this._refocusOnMap(); + }, + + _checkDisabledLayers: function () { + var inputs = this._layerControlInputs, + input, + layer, + zoom = this._map.getZoom(); + + for (var i = inputs.length - 1; i >= 0; i--) { + input = inputs[i]; + layer = this._getLayer(input.layerId).layer; + input.disabled = (layer.options.minZoom !== undefined && zoom < layer.options.minZoom) || + (layer.options.maxZoom !== undefined && zoom > layer.options.maxZoom); + + } + }, + + _expandIfNotCollapsed: function () { + if (this._map && !this.options.collapsed) { + this.expand(); + } + return this; + }, + + _expand: function () { + // Backward compatibility, remove me in 1.1. + return this.expand(); + }, + + _collapse: function () { + // Backward compatibility, remove me in 1.1. + return this.collapse(); + } + +}); + + +// @factory L.control.layers(baselayers?: Object, overlays?: Object, options?: Control.Layers options) +// Creates a layers control with the given layers. Base layers will be switched with radio buttons, while overlays will be switched with checkboxes. Note that all base layers should be passed in the base layers object, but only one should be added to the map during map instantiation. +var layers = function (baseLayers, overlays, options) { + return new Layers(baseLayers, overlays, options); +}; + +/* + * @class Control.Zoom + * @aka L.Control.Zoom + * @inherits Control + * + * A basic zoom control with two buttons (zoom in and zoom out). It is put on the map by default unless you set its [`zoomControl` option](#map-zoomcontrol) to `false`. Extends `Control`. + */ + +var Zoom = Control.extend({ + // @section + // @aka Control.Zoom options + options: { + position: 'topleft', + + // @option zoomInText: String = '+' + // The text set on the 'zoom in' button. + zoomInText: '+', + + // @option zoomInTitle: String = 'Zoom in' + // The title set on the 'zoom in' button. + zoomInTitle: 'Zoom in', + + // @option zoomOutText: String = '−' + // The text set on the 'zoom out' button. + zoomOutText: '−', + + // @option zoomOutTitle: String = 'Zoom out' + // The title set on the 'zoom out' button. + zoomOutTitle: 'Zoom out' + }, + + onAdd: function (map) { + var zoomName = 'leaflet-control-zoom', + container = create$1('div', zoomName + ' leaflet-bar'), + options = this.options; + + this._zoomInButton = this._createButton(options.zoomInText, options.zoomInTitle, + zoomName + '-in', container, this._zoomIn); + this._zoomOutButton = this._createButton(options.zoomOutText, options.zoomOutTitle, + zoomName + '-out', container, this._zoomOut); + + this._updateDisabled(); + map.on('zoomend zoomlevelschange', this._updateDisabled, this); + + return container; + }, + + onRemove: function (map) { + map.off('zoomend zoomlevelschange', this._updateDisabled, this); + }, + + disable: function () { + this._disabled = true; + this._updateDisabled(); + return this; + }, + + enable: function () { + this._disabled = false; + this._updateDisabled(); + return this; + }, + + _zoomIn: function (e) { + if (!this._disabled && this._map._zoom < this._map.getMaxZoom()) { + this._map.zoomIn(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1)); + } + }, + + _zoomOut: function (e) { + if (!this._disabled && this._map._zoom > this._map.getMinZoom()) { + this._map.zoomOut(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1)); + } + }, + + _createButton: function (html, title, className, container, fn) { + var link = create$1('a', className, container); + link.innerHTML = html; + link.href = '#'; + link.title = title; + + /* + * Will force screen readers like VoiceOver to read this as "Zoom in - button" + */ + link.setAttribute('role', 'button'); + link.setAttribute('aria-label', title); + + disableClickPropagation(link); + on(link, 'click', stop); + on(link, 'click', fn, this); + on(link, 'click', this._refocusOnMap, this); + + return link; + }, + + _updateDisabled: function () { + var map = this._map, + className = 'leaflet-disabled'; + + removeClass(this._zoomInButton, className); + removeClass(this._zoomOutButton, className); + + if (this._disabled || map._zoom === map.getMinZoom()) { + addClass(this._zoomOutButton, className); + } + if (this._disabled || map._zoom === map.getMaxZoom()) { + addClass(this._zoomInButton, className); + } + } +}); + +// @namespace Map +// @section Control options +// @option zoomControl: Boolean = true +// Whether a [zoom control](#control-zoom) is added to the map by default. +Map.mergeOptions({ + zoomControl: true +}); + +Map.addInitHook(function () { + if (this.options.zoomControl) { + // @section Controls + // @property zoomControl: Control.Zoom + // The default zoom control (only available if the + // [`zoomControl` option](#map-zoomcontrol) was `true` when creating the map). + this.zoomControl = new Zoom(); + this.addControl(this.zoomControl); + } +}); + +// @namespace Control.Zoom +// @factory L.control.zoom(options: Control.Zoom options) +// Creates a zoom control +var zoom = function (options) { + return new Zoom(options); +}; + +/* + * @class Control.Scale + * @aka L.Control.Scale + * @inherits Control + * + * A simple scale control that shows the scale of the current center of screen in metric (m/km) and imperial (mi/ft) systems. Extends `Control`. + * + * @example + * + * ```js + * L.control.scale().addTo(map); + * ``` + */ + +var Scale = Control.extend({ + // @section + // @aka Control.Scale options + options: { + position: 'bottomleft', + + // @option maxWidth: Number = 100 + // Maximum width of the control in pixels. The width is set dynamically to show round values (e.g. 100, 200, 500). + maxWidth: 100, + + // @option metric: Boolean = True + // Whether to show the metric scale line (m/km). + metric: true, + + // @option imperial: Boolean = True + // Whether to show the imperial scale line (mi/ft). + imperial: true + + // @option updateWhenIdle: Boolean = false + // If `true`, the control is updated on [`moveend`](#map-moveend), otherwise it's always up-to-date (updated on [`move`](#map-move)). + }, + + onAdd: function (map) { + var className = 'leaflet-control-scale', + container = create$1('div', className), + options = this.options; + + this._addScales(options, className + '-line', container); + + map.on(options.updateWhenIdle ? 'moveend' : 'move', this._update, this); + map.whenReady(this._update, this); + + return container; + }, + + onRemove: function (map) { + map.off(this.options.updateWhenIdle ? 'moveend' : 'move', this._update, this); + }, + + _addScales: function (options, className, container) { + if (options.metric) { + this._mScale = create$1('div', className, container); + } + if (options.imperial) { + this._iScale = create$1('div', className, container); + } + }, + + _update: function () { + var map = this._map, + y = map.getSize().y / 2; + + var maxMeters = map.distance( + map.containerPointToLatLng([0, y]), + map.containerPointToLatLng([this.options.maxWidth, y])); + + this._updateScales(maxMeters); + }, + + _updateScales: function (maxMeters) { + if (this.options.metric && maxMeters) { + this._updateMetric(maxMeters); + } + if (this.options.imperial && maxMeters) { + this._updateImperial(maxMeters); + } + }, + + _updateMetric: function (maxMeters) { + var meters = this._getRoundNum(maxMeters), + label = meters < 1000 ? meters + ' m' : (meters / 1000) + ' km'; + + this._updateScale(this._mScale, label, meters / maxMeters); + }, + + _updateImperial: function (maxMeters) { + var maxFeet = maxMeters * 3.2808399, + maxMiles, miles, feet; + + if (maxFeet > 5280) { + maxMiles = maxFeet / 5280; + miles = this._getRoundNum(maxMiles); + this._updateScale(this._iScale, miles + ' mi', miles / maxMiles); + + } else { + feet = this._getRoundNum(maxFeet); + this._updateScale(this._iScale, feet + ' ft', feet / maxFeet); + } + }, + + _updateScale: function (scale, text, ratio) { + scale.style.width = Math.round(this.options.maxWidth * ratio) + 'px'; + scale.innerHTML = text; + }, + + _getRoundNum: function (num) { + var pow10 = Math.pow(10, (Math.floor(num) + '').length - 1), + d = num / pow10; + + d = d >= 10 ? 10 : + d >= 5 ? 5 : + d >= 3 ? 3 : + d >= 2 ? 2 : 1; + + return pow10 * d; + } +}); + + +// @factory L.control.scale(options?: Control.Scale options) +// Creates an scale control with the given options. +var scale = function (options) { + return new Scale(options); +}; + +/* + * @class Control.Attribution + * @aka L.Control.Attribution + * @inherits Control + * + * The attribution control allows you to display attribution data in a small text box on a map. It is put on the map by default unless you set its [`attributionControl` option](#map-attributioncontrol) to `false`, and it fetches attribution texts from layers with the [`getAttribution` method](#layer-getattribution) automatically. Extends Control. + */ + +var Attribution = Control.extend({ + // @section + // @aka Control.Attribution options + options: { + position: 'bottomright', + + // @option prefix: String = 'Leaflet' + // The HTML text shown before the attributions. Pass `false` to disable. + prefix: 'Leaflet' + }, + + initialize: function (options) { + setOptions(this, options); + + this._attributions = {}; + }, + + onAdd: function (map) { + map.attributionControl = this; + this._container = create$1('div', 'leaflet-control-attribution'); + disableClickPropagation(this._container); + + // TODO ugly, refactor + for (var i in map._layers) { + if (map._layers[i].getAttribution) { + this.addAttribution(map._layers[i].getAttribution()); + } + } + + this._update(); + + return this._container; + }, + + // @method setPrefix(prefix: String): this + // Sets the text before the attributions. + setPrefix: function (prefix) { + this.options.prefix = prefix; + this._update(); + return this; + }, + + // @method addAttribution(text: String): this + // Adds an attribution text (e.g. `'Vector data © Mapbox'`). + addAttribution: function (text) { + if (!text) { return this; } + + if (!this._attributions[text]) { + this._attributions[text] = 0; + } + this._attributions[text]++; + + this._update(); + + return this; + }, + + // @method removeAttribution(text: String): this + // Removes an attribution text. + removeAttribution: function (text) { + if (!text) { return this; } + + if (this._attributions[text]) { + this._attributions[text]--; + this._update(); + } + + return this; + }, + + _update: function () { + if (!this._map) { return; } + + var attribs = []; + + for (var i in this._attributions) { + if (this._attributions[i]) { + attribs.push(i); + } + } + + var prefixAndAttribs = []; + + if (this.options.prefix) { + prefixAndAttribs.push(this.options.prefix); + } + if (attribs.length) { + prefixAndAttribs.push(attribs.join(', ')); + } + + this._container.innerHTML = prefixAndAttribs.join(' | '); + } +}); + +// @namespace Map +// @section Control options +// @option attributionControl: Boolean = true +// Whether a [attribution control](#control-attribution) is added to the map by default. +Map.mergeOptions({ + attributionControl: true +}); + +Map.addInitHook(function () { + if (this.options.attributionControl) { + new Attribution().addTo(this); + } +}); + +// @namespace Control.Attribution +// @factory L.control.attribution(options: Control.Attribution options) +// Creates an attribution control. +var attribution = function (options) { + return new Attribution(options); +}; + +Control.Layers = Layers; +Control.Zoom = Zoom; +Control.Scale = Scale; +Control.Attribution = Attribution; + +control.layers = layers; +control.zoom = zoom; +control.scale = scale; +control.attribution = attribution; + +/* + L.Handler is a base class for handler classes that are used internally to inject + interaction features like dragging to classes like Map and Marker. +*/ + +// @class Handler +// @aka L.Handler +// Abstract class for map interaction handlers + +var Handler = Class.extend({ + initialize: function (map) { + this._map = map; + }, + + // @method enable(): this + // Enables the handler + enable: function () { + if (this._enabled) { return this; } + + this._enabled = true; + this.addHooks(); + return this; + }, + + // @method disable(): this + // Disables the handler + disable: function () { + if (!this._enabled) { return this; } + + this._enabled = false; + this.removeHooks(); + return this; + }, + + // @method enabled(): Boolean + // Returns `true` if the handler is enabled + enabled: function () { + return !!this._enabled; + } + + // @section Extension methods + // Classes inheriting from `Handler` must implement the two following methods: + // @method addHooks() + // Called when the handler is enabled, should add event hooks. + // @method removeHooks() + // Called when the handler is disabled, should remove the event hooks added previously. +}); + +// @section There is static function which can be called without instantiating L.Handler: +// @function addTo(map: Map, name: String): this +// Adds a new Handler to the given map with the given name. +Handler.addTo = function (map, name) { + map.addHandler(name, this); + return this; +}; + +var Mixin = {Events: Events}; + +/* + * @class Draggable + * @aka L.Draggable + * @inherits Evented + * + * A class for making DOM elements draggable (including touch support). + * Used internally for map and marker dragging. Only works for elements + * that were positioned with [`L.DomUtil.setPosition`](#domutil-setposition). + * + * @example + * ```js + * var draggable = new L.Draggable(elementToDrag); + * draggable.enable(); + * ``` + */ + +var START = touch ? 'touchstart mousedown' : 'mousedown'; +var END = { + mousedown: 'mouseup', + touchstart: 'touchend', + pointerdown: 'touchend', + MSPointerDown: 'touchend' +}; +var MOVE = { + mousedown: 'mousemove', + touchstart: 'touchmove', + pointerdown: 'touchmove', + MSPointerDown: 'touchmove' +}; + + +var Draggable = Evented.extend({ + + options: { + // @section + // @aka Draggable options + // @option clickTolerance: Number = 3 + // The max number of pixels a user can shift the mouse pointer during a click + // for it to be considered a valid click (as opposed to a mouse drag). + clickTolerance: 3 + }, + + // @constructor L.Draggable(el: HTMLElement, dragHandle?: HTMLElement, preventOutline?: Boolean, options?: Draggable options) + // Creates a `Draggable` object for moving `el` when you start dragging the `dragHandle` element (equals `el` itself by default). + initialize: function (element, dragStartTarget, preventOutline$$1, options) { + setOptions(this, options); + + this._element = element; + this._dragStartTarget = dragStartTarget || element; + this._preventOutline = preventOutline$$1; + }, + + // @method enable() + // Enables the dragging ability + enable: function () { + if (this._enabled) { return; } + + on(this._dragStartTarget, START, this._onDown, this); + + this._enabled = true; + }, + + // @method disable() + // Disables the dragging ability + disable: function () { + if (!this._enabled) { return; } + + // If we're currently dragging this draggable, + // disabling it counts as first ending the drag. + if (Draggable._dragging === this) { + this.finishDrag(); + } + + off(this._dragStartTarget, START, this._onDown, this); + + this._enabled = false; + this._moved = false; + }, + + _onDown: function (e) { + // Ignore simulated events, since we handle both touch and + // mouse explicitly; otherwise we risk getting duplicates of + // touch events, see #4315. + // Also ignore the event if disabled; this happens in IE11 + // under some circumstances, see #3666. + if (e._simulated || !this._enabled) { return; } + + this._moved = false; + + if (hasClass(this._element, 'leaflet-zoom-anim')) { return; } + + if (Draggable._dragging || e.shiftKey || ((e.which !== 1) && (e.button !== 1) && !e.touches)) { return; } + Draggable._dragging = this; // Prevent dragging multiple objects at once. + + if (this._preventOutline) { + preventOutline(this._element); + } + + disableImageDrag(); + disableTextSelection(); + + if (this._moving) { return; } + + // @event down: Event + // Fired when a drag is about to start. + this.fire('down'); + + var first = e.touches ? e.touches[0] : e, + sizedParent = getSizedParentNode(this._element); + + this._startPoint = new Point(first.clientX, first.clientY); + + // Cache the scale, so that we can continuously compensate for it during drag (_onMove). + this._parentScale = getScale(sizedParent); + + on(document, MOVE[e.type], this._onMove, this); + on(document, END[e.type], this._onUp, this); + }, + + _onMove: function (e) { + // Ignore simulated events, since we handle both touch and + // mouse explicitly; otherwise we risk getting duplicates of + // touch events, see #4315. + // Also ignore the event if disabled; this happens in IE11 + // under some circumstances, see #3666. + if (e._simulated || !this._enabled) { return; } + + if (e.touches && e.touches.length > 1) { + this._moved = true; + return; + } + + var first = (e.touches && e.touches.length === 1 ? e.touches[0] : e), + offset = new Point(first.clientX, first.clientY)._subtract(this._startPoint); + + if (!offset.x && !offset.y) { return; } + if (Math.abs(offset.x) + Math.abs(offset.y) < this.options.clickTolerance) { return; } + + // We assume that the parent container's position, border and scale do not change for the duration of the drag. + // Therefore there is no need to account for the position and border (they are eliminated by the subtraction) + // and we can use the cached value for the scale. + offset.x /= this._parentScale.x; + offset.y /= this._parentScale.y; + + preventDefault(e); + + if (!this._moved) { + // @event dragstart: Event + // Fired when a drag starts + this.fire('dragstart'); + + this._moved = true; + this._startPos = getPosition(this._element).subtract(offset); + + addClass(document.body, 'leaflet-dragging'); + + this._lastTarget = e.target || e.srcElement; + // IE and Edge do not give the element, so fetch it + // if necessary + if ((window.SVGElementInstance) && (this._lastTarget instanceof SVGElementInstance)) { + this._lastTarget = this._lastTarget.correspondingUseElement; + } + addClass(this._lastTarget, 'leaflet-drag-target'); + } + + this._newPos = this._startPos.add(offset); + this._moving = true; + + cancelAnimFrame(this._animRequest); + this._lastEvent = e; + this._animRequest = requestAnimFrame(this._updatePosition, this, true); + }, + + _updatePosition: function () { + var e = {originalEvent: this._lastEvent}; + + // @event predrag: Event + // Fired continuously during dragging *before* each corresponding + // update of the element's position. + this.fire('predrag', e); + setPosition(this._element, this._newPos); + + // @event drag: Event + // Fired continuously during dragging. + this.fire('drag', e); + }, + + _onUp: function (e) { + // Ignore simulated events, since we handle both touch and + // mouse explicitly; otherwise we risk getting duplicates of + // touch events, see #4315. + // Also ignore the event if disabled; this happens in IE11 + // under some circumstances, see #3666. + if (e._simulated || !this._enabled) { return; } + this.finishDrag(); + }, + + finishDrag: function () { + removeClass(document.body, 'leaflet-dragging'); + + if (this._lastTarget) { + removeClass(this._lastTarget, 'leaflet-drag-target'); + this._lastTarget = null; + } + + for (var i in MOVE) { + off(document, MOVE[i], this._onMove, this); + off(document, END[i], this._onUp, this); + } + + enableImageDrag(); + enableTextSelection(); + + if (this._moved && this._moving) { + // ensure drag is not fired after dragend + cancelAnimFrame(this._animRequest); + + // @event dragend: DragEndEvent + // Fired when the drag ends. + this.fire('dragend', { + distance: this._newPos.distanceTo(this._startPos) + }); + } + + this._moving = false; + Draggable._dragging = false; + } + +}); + +/* + * @namespace LineUtil + * + * Various utility functions for polyline points processing, used by Leaflet internally to make polylines lightning-fast. + */ + +// Simplify polyline with vertex reduction and Douglas-Peucker simplification. +// Improves rendering performance dramatically by lessening the number of points to draw. + +// @function simplify(points: Point[], tolerance: Number): Point[] +// Dramatically reduces the number of points in a polyline while retaining +// its shape and returns a new array of simplified points, using the +// [Douglas-Peucker algorithm](http://en.wikipedia.org/wiki/Douglas-Peucker_algorithm). +// Used for a huge performance boost when processing/displaying Leaflet polylines for +// each zoom level and also reducing visual noise. tolerance affects the amount of +// simplification (lesser value means higher quality but slower and with more points). +// Also released as a separated micro-library [Simplify.js](http://mourner.github.com/simplify-js/). +function simplify(points, tolerance) { + if (!tolerance || !points.length) { + return points.slice(); + } + + var sqTolerance = tolerance * tolerance; + + // stage 1: vertex reduction + points = _reducePoints(points, sqTolerance); + + // stage 2: Douglas-Peucker simplification + points = _simplifyDP(points, sqTolerance); + + return points; +} + +// @function pointToSegmentDistance(p: Point, p1: Point, p2: Point): Number +// Returns the distance between point `p` and segment `p1` to `p2`. +function pointToSegmentDistance(p, p1, p2) { + return Math.sqrt(_sqClosestPointOnSegment(p, p1, p2, true)); +} + +// @function closestPointOnSegment(p: Point, p1: Point, p2: Point): Number +// Returns the closest point from a point `p` on a segment `p1` to `p2`. +function closestPointOnSegment(p, p1, p2) { + return _sqClosestPointOnSegment(p, p1, p2); +} + +// Douglas-Peucker simplification, see http://en.wikipedia.org/wiki/Douglas-Peucker_algorithm +function _simplifyDP(points, sqTolerance) { + + var len = points.length, + ArrayConstructor = typeof Uint8Array !== undefined + '' ? Uint8Array : Array, + markers = new ArrayConstructor(len); + + markers[0] = markers[len - 1] = 1; + + _simplifyDPStep(points, markers, sqTolerance, 0, len - 1); + + var i, + newPoints = []; + + for (i = 0; i < len; i++) { + if (markers[i]) { + newPoints.push(points[i]); + } + } + + return newPoints; +} + +function _simplifyDPStep(points, markers, sqTolerance, first, last) { + + var maxSqDist = 0, + index, i, sqDist; + + for (i = first + 1; i <= last - 1; i++) { + sqDist = _sqClosestPointOnSegment(points[i], points[first], points[last], true); + + if (sqDist > maxSqDist) { + index = i; + maxSqDist = sqDist; + } + } + + if (maxSqDist > sqTolerance) { + markers[index] = 1; + + _simplifyDPStep(points, markers, sqTolerance, first, index); + _simplifyDPStep(points, markers, sqTolerance, index, last); + } +} + +// reduce points that are too close to each other to a single point +function _reducePoints(points, sqTolerance) { + var reducedPoints = [points[0]]; + + for (var i = 1, prev = 0, len = points.length; i < len; i++) { + if (_sqDist(points[i], points[prev]) > sqTolerance) { + reducedPoints.push(points[i]); + prev = i; + } + } + if (prev < len - 1) { + reducedPoints.push(points[len - 1]); + } + return reducedPoints; +} + +var _lastCode; + +// @function clipSegment(a: Point, b: Point, bounds: Bounds, useLastCode?: Boolean, round?: Boolean): Point[]|Boolean +// Clips the segment a to b by rectangular bounds with the +// [Cohen-Sutherland algorithm](https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm) +// (modifying the segment points directly!). Used by Leaflet to only show polyline +// points that are on the screen or near, increasing performance. +function clipSegment(a, b, bounds, useLastCode, round) { + var codeA = useLastCode ? _lastCode : _getBitCode(a, bounds), + codeB = _getBitCode(b, bounds), + + codeOut, p, newCode; + + // save 2nd code to avoid calculating it on the next segment + _lastCode = codeB; + + while (true) { + // if a,b is inside the clip window (trivial accept) + if (!(codeA | codeB)) { + return [a, b]; + } + + // if a,b is outside the clip window (trivial reject) + if (codeA & codeB) { + return false; + } + + // other cases + codeOut = codeA || codeB; + p = _getEdgeIntersection(a, b, codeOut, bounds, round); + newCode = _getBitCode(p, bounds); + + if (codeOut === codeA) { + a = p; + codeA = newCode; + } else { + b = p; + codeB = newCode; + } + } +} + +function _getEdgeIntersection(a, b, code, bounds, round) { + var dx = b.x - a.x, + dy = b.y - a.y, + min = bounds.min, + max = bounds.max, + x, y; + + if (code & 8) { // top + x = a.x + dx * (max.y - a.y) / dy; + y = max.y; + + } else if (code & 4) { // bottom + x = a.x + dx * (min.y - a.y) / dy; + y = min.y; + + } else if (code & 2) { // right + x = max.x; + y = a.y + dy * (max.x - a.x) / dx; + + } else if (code & 1) { // left + x = min.x; + y = a.y + dy * (min.x - a.x) / dx; + } + + return new Point(x, y, round); +} + +function _getBitCode(p, bounds) { + var code = 0; + + if (p.x < bounds.min.x) { // left + code |= 1; + } else if (p.x > bounds.max.x) { // right + code |= 2; + } + + if (p.y < bounds.min.y) { // bottom + code |= 4; + } else if (p.y > bounds.max.y) { // top + code |= 8; + } + + return code; +} + +// square distance (to avoid unnecessary Math.sqrt calls) +function _sqDist(p1, p2) { + var dx = p2.x - p1.x, + dy = p2.y - p1.y; + return dx * dx + dy * dy; +} + +// return closest point on segment or distance to that point +function _sqClosestPointOnSegment(p, p1, p2, sqDist) { + var x = p1.x, + y = p1.y, + dx = p2.x - x, + dy = p2.y - y, + dot = dx * dx + dy * dy, + t; + + if (dot > 0) { + t = ((p.x - x) * dx + (p.y - y) * dy) / dot; + + if (t > 1) { + x = p2.x; + y = p2.y; + } else if (t > 0) { + x += dx * t; + y += dy * t; + } + } + + dx = p.x - x; + dy = p.y - y; + + return sqDist ? dx * dx + dy * dy : new Point(x, y); +} + + +// @function isFlat(latlngs: LatLng[]): Boolean +// Returns true if `latlngs` is a flat array, false is nested. +function isFlat(latlngs) { + return !isArray(latlngs[0]) || (typeof latlngs[0][0] !== 'object' && typeof latlngs[0][0] !== 'undefined'); +} + +function _flat(latlngs) { + console.warn('Deprecated use of _flat, please use L.LineUtil.isFlat instead.'); + return isFlat(latlngs); +} + + +var LineUtil = (Object.freeze || Object)({ + simplify: simplify, + pointToSegmentDistance: pointToSegmentDistance, + closestPointOnSegment: closestPointOnSegment, + clipSegment: clipSegment, + _getEdgeIntersection: _getEdgeIntersection, + _getBitCode: _getBitCode, + _sqClosestPointOnSegment: _sqClosestPointOnSegment, + isFlat: isFlat, + _flat: _flat +}); + +/* + * @namespace PolyUtil + * Various utility functions for polygon geometries. + */ + +/* @function clipPolygon(points: Point[], bounds: Bounds, round?: Boolean): Point[] + * Clips the polygon geometry defined by the given `points` by the given bounds (using the [Sutherland-Hodgman algorithm](https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm)). + * Used by Leaflet to only show polygon points that are on the screen or near, increasing + * performance. Note that polygon points needs different algorithm for clipping + * than polyline, so there's a separate method for it. + */ +function clipPolygon(points, bounds, round) { + var clippedPoints, + edges = [1, 4, 2, 8], + i, j, k, + a, b, + len, edge, p; + + for (i = 0, len = points.length; i < len; i++) { + points[i]._code = _getBitCode(points[i], bounds); + } + + // for each edge (left, bottom, right, top) + for (k = 0; k < 4; k++) { + edge = edges[k]; + clippedPoints = []; + + for (i = 0, len = points.length, j = len - 1; i < len; j = i++) { + a = points[i]; + b = points[j]; + + // if a is inside the clip window + if (!(a._code & edge)) { + // if b is outside the clip window (a->b goes out of screen) + if (b._code & edge) { + p = _getEdgeIntersection(b, a, edge, bounds, round); + p._code = _getBitCode(p, bounds); + clippedPoints.push(p); + } + clippedPoints.push(a); + + // else if b is inside the clip window (a->b enters the screen) + } else if (!(b._code & edge)) { + p = _getEdgeIntersection(b, a, edge, bounds, round); + p._code = _getBitCode(p, bounds); + clippedPoints.push(p); + } + } + points = clippedPoints; + } + + return points; +} + + +var PolyUtil = (Object.freeze || Object)({ + clipPolygon: clipPolygon +}); + +/* + * @namespace Projection + * @section + * Leaflet comes with a set of already defined Projections out of the box: + * + * @projection L.Projection.LonLat + * + * Equirectangular, or Plate Carree projection — the most simple projection, + * mostly used by GIS enthusiasts. Directly maps `x` as longitude, and `y` as + * latitude. Also suitable for flat worlds, e.g. game maps. Used by the + * `EPSG:4326` and `Simple` CRS. + */ + +var LonLat = { + project: function (latlng) { + return new Point(latlng.lng, latlng.lat); + }, + + unproject: function (point) { + return new LatLng(point.y, point.x); + }, + + bounds: new Bounds([-180, -90], [180, 90]) +}; + +/* + * @namespace Projection + * @projection L.Projection.Mercator + * + * Elliptical Mercator projection — more complex than Spherical Mercator. Assumes that Earth is an ellipsoid. Used by the EPSG:3395 CRS. + */ + +var Mercator = { + R: 6378137, + R_MINOR: 6356752.314245179, + + bounds: new Bounds([-20037508.34279, -15496570.73972], [20037508.34279, 18764656.23138]), + + project: function (latlng) { + var d = Math.PI / 180, + r = this.R, + y = latlng.lat * d, + tmp = this.R_MINOR / r, + e = Math.sqrt(1 - tmp * tmp), + con = e * Math.sin(y); + + var ts = Math.tan(Math.PI / 4 - y / 2) / Math.pow((1 - con) / (1 + con), e / 2); + y = -r * Math.log(Math.max(ts, 1E-10)); + + return new Point(latlng.lng * d * r, y); + }, + + unproject: function (point) { + var d = 180 / Math.PI, + r = this.R, + tmp = this.R_MINOR / r, + e = Math.sqrt(1 - tmp * tmp), + ts = Math.exp(-point.y / r), + phi = Math.PI / 2 - 2 * Math.atan(ts); + + for (var i = 0, dphi = 0.1, con; i < 15 && Math.abs(dphi) > 1e-7; i++) { + con = e * Math.sin(phi); + con = Math.pow((1 - con) / (1 + con), e / 2); + dphi = Math.PI / 2 - 2 * Math.atan(ts * con) - phi; + phi += dphi; + } + + return new LatLng(phi * d, point.x * d / r); + } +}; + +/* + * @class Projection + + * An object with methods for projecting geographical coordinates of the world onto + * a flat surface (and back). See [Map projection](http://en.wikipedia.org/wiki/Map_projection). + + * @property bounds: Bounds + * The bounds (specified in CRS units) where the projection is valid + + * @method project(latlng: LatLng): Point + * Projects geographical coordinates into a 2D point. + * Only accepts actual `L.LatLng` instances, not arrays. + + * @method unproject(point: Point): LatLng + * The inverse of `project`. Projects a 2D point into a geographical location. + * Only accepts actual `L.Point` instances, not arrays. + + * Note that the projection instances do not inherit from Leafet's `Class` object, + * and can't be instantiated. Also, new classes can't inherit from them, + * and methods can't be added to them with the `include` function. + + */ + + + + +var index = (Object.freeze || Object)({ + LonLat: LonLat, + Mercator: Mercator, + SphericalMercator: SphericalMercator +}); + +/* + * @namespace CRS + * @crs L.CRS.EPSG3395 + * + * Rarely used by some commercial tile providers. Uses Elliptical Mercator projection. + */ +var EPSG3395 = extend({}, Earth, { + code: 'EPSG:3395', + projection: Mercator, + + transformation: (function () { + var scale = 0.5 / (Math.PI * Mercator.R); + return toTransformation(scale, 0.5, -scale, 0.5); + }()) +}); + +/* + * @namespace CRS + * @crs L.CRS.EPSG4326 + * + * A common CRS among GIS enthusiasts. Uses simple Equirectangular projection. + * + * Leaflet 1.0.x complies with the [TMS coordinate scheme for EPSG:4326](https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification#global-geodetic), + * which is a breaking change from 0.7.x behaviour. If you are using a `TileLayer` + * with this CRS, ensure that there are two 256x256 pixel tiles covering the + * whole earth at zoom level zero, and that the tile coordinate origin is (-180,+90), + * or (-180,-90) for `TileLayer`s with [the `tms` option](#tilelayer-tms) set. + */ + +var EPSG4326 = extend({}, Earth, { + code: 'EPSG:4326', + projection: LonLat, + transformation: toTransformation(1 / 180, 1, -1 / 180, 0.5) +}); + +/* + * @namespace CRS + * @crs L.CRS.Simple + * + * A simple CRS that maps longitude and latitude into `x` and `y` directly. + * May be used for maps of flat surfaces (e.g. game maps). Note that the `y` + * axis should still be inverted (going from bottom to top). `distance()` returns + * simple euclidean distance. + */ + +var Simple = extend({}, CRS, { + projection: LonLat, + transformation: toTransformation(1, 0, -1, 0), + + scale: function (zoom) { + return Math.pow(2, zoom); + }, + + zoom: function (scale) { + return Math.log(scale) / Math.LN2; + }, + + distance: function (latlng1, latlng2) { + var dx = latlng2.lng - latlng1.lng, + dy = latlng2.lat - latlng1.lat; + + return Math.sqrt(dx * dx + dy * dy); + }, + + infinite: true +}); + +CRS.Earth = Earth; +CRS.EPSG3395 = EPSG3395; +CRS.EPSG3857 = EPSG3857; +CRS.EPSG900913 = EPSG900913; +CRS.EPSG4326 = EPSG4326; +CRS.Simple = Simple; + +/* + * @class Layer + * @inherits Evented + * @aka L.Layer + * @aka ILayer + * + * A set of methods from the Layer base class that all Leaflet layers use. + * Inherits all methods, options and events from `L.Evented`. + * + * @example + * + * ```js + * var layer = L.marker(latlng).addTo(map); + * layer.addTo(map); + * layer.remove(); + * ``` + * + * @event add: Event + * Fired after the layer is added to a map + * + * @event remove: Event + * Fired after the layer is removed from a map + */ + + +var Layer = Evented.extend({ + + // Classes extending `L.Layer` will inherit the following options: + options: { + // @option pane: String = 'overlayPane' + // By default the layer will be added to the map's [overlay pane](#map-overlaypane). Overriding this option will cause the layer to be placed on another pane by default. + pane: 'overlayPane', + + // @option attribution: String = null + // String to be shown in the attribution control, e.g. "© OpenStreetMap contributors". It describes the layer data and is often a legal obligation towards copyright holders and tile providers. + attribution: null, + + bubblingMouseEvents: true + }, + + /* @section + * Classes extending `L.Layer` will inherit the following methods: + * + * @method addTo(map: Map|LayerGroup): this + * Adds the layer to the given map or layer group. + */ + addTo: function (map) { + map.addLayer(this); + return this; + }, + + // @method remove: this + // Removes the layer from the map it is currently active on. + remove: function () { + return this.removeFrom(this._map || this._mapToAdd); + }, + + // @method removeFrom(map: Map): this + // Removes the layer from the given map + removeFrom: function (obj) { + if (obj) { + obj.removeLayer(this); + } + return this; + }, + + // @method getPane(name? : String): HTMLElement + // Returns the `HTMLElement` representing the named pane on the map. If `name` is omitted, returns the pane for this layer. + getPane: function (name) { + return this._map.getPane(name ? (this.options[name] || name) : this.options.pane); + }, + + addInteractiveTarget: function (targetEl) { + this._map._targets[stamp(targetEl)] = this; + return this; + }, + + removeInteractiveTarget: function (targetEl) { + delete this._map._targets[stamp(targetEl)]; + return this; + }, + + // @method getAttribution: String + // Used by the `attribution control`, returns the [attribution option](#gridlayer-attribution). + getAttribution: function () { + return this.options.attribution; + }, + + _layerAdd: function (e) { + var map = e.target; + + // check in case layer gets added and then removed before the map is ready + if (!map.hasLayer(this)) { return; } + + this._map = map; + this._zoomAnimated = map._zoomAnimated; + + if (this.getEvents) { + var events = this.getEvents(); + map.on(events, this); + this.once('remove', function () { + map.off(events, this); + }, this); + } + + this.onAdd(map); + + if (this.getAttribution && map.attributionControl) { + map.attributionControl.addAttribution(this.getAttribution()); + } + + this.fire('add'); + map.fire('layeradd', {layer: this}); + } +}); + +/* @section Extension methods + * @uninheritable + * + * Every layer should extend from `L.Layer` and (re-)implement the following methods. + * + * @method onAdd(map: Map): this + * Should contain code that creates DOM elements for the layer, adds them to `map panes` where they should belong and puts listeners on relevant map events. Called on [`map.addLayer(layer)`](#map-addlayer). + * + * @method onRemove(map: Map): this + * Should contain all clean up code that removes the layer's elements from the DOM and removes listeners previously added in [`onAdd`](#layer-onadd). Called on [`map.removeLayer(layer)`](#map-removelayer). + * + * @method getEvents(): Object + * This optional method should return an object like `{ viewreset: this._reset }` for [`addEventListener`](#evented-addeventlistener). The event handlers in this object will be automatically added and removed from the map with your layer. + * + * @method getAttribution(): String + * This optional method should return a string containing HTML to be shown on the `Attribution control` whenever the layer is visible. + * + * @method beforeAdd(map: Map): this + * Optional method. Called on [`map.addLayer(layer)`](#map-addlayer), before the layer is added to the map, before events are initialized, without waiting until the map is in a usable state. Use for early initialization only. + */ + + +/* @namespace Map + * @section Layer events + * + * @event layeradd: LayerEvent + * Fired when a new layer is added to the map. + * + * @event layerremove: LayerEvent + * Fired when some layer is removed from the map + * + * @section Methods for Layers and Controls + */ +Map.include({ + // @method addLayer(layer: Layer): this + // Adds the given layer to the map + addLayer: function (layer) { + if (!layer._layerAdd) { + throw new Error('The provided object is not a Layer.'); + } + + var id = stamp(layer); + if (this._layers[id]) { return this; } + this._layers[id] = layer; + + layer._mapToAdd = this; + + if (layer.beforeAdd) { + layer.beforeAdd(this); + } + + this.whenReady(layer._layerAdd, layer); + + return this; + }, + + // @method removeLayer(layer: Layer): this + // Removes the given layer from the map. + removeLayer: function (layer) { + var id = stamp(layer); + + if (!this._layers[id]) { return this; } + + if (this._loaded) { + layer.onRemove(this); + } + + if (layer.getAttribution && this.attributionControl) { + this.attributionControl.removeAttribution(layer.getAttribution()); + } + + delete this._layers[id]; + + if (this._loaded) { + this.fire('layerremove', {layer: layer}); + layer.fire('remove'); + } + + layer._map = layer._mapToAdd = null; + + return this; + }, + + // @method hasLayer(layer: Layer): Boolean + // Returns `true` if the given layer is currently added to the map + hasLayer: function (layer) { + return !!layer && (stamp(layer) in this._layers); + }, + + /* @method eachLayer(fn: Function, context?: Object): this + * Iterates over the layers of the map, optionally specifying context of the iterator function. + * ``` + * map.eachLayer(function(layer){ + * layer.bindPopup('Hello'); + * }); + * ``` + */ + eachLayer: function (method, context) { + for (var i in this._layers) { + method.call(context, this._layers[i]); + } + return this; + }, + + _addLayers: function (layers) { + layers = layers ? (isArray(layers) ? layers : [layers]) : []; + + for (var i = 0, len = layers.length; i < len; i++) { + this.addLayer(layers[i]); + } + }, + + _addZoomLimit: function (layer) { + if (isNaN(layer.options.maxZoom) || !isNaN(layer.options.minZoom)) { + this._zoomBoundLayers[stamp(layer)] = layer; + this._updateZoomLevels(); + } + }, + + _removeZoomLimit: function (layer) { + var id = stamp(layer); + + if (this._zoomBoundLayers[id]) { + delete this._zoomBoundLayers[id]; + this._updateZoomLevels(); + } + }, + + _updateZoomLevels: function () { + var minZoom = Infinity, + maxZoom = -Infinity, + oldZoomSpan = this._getZoomSpan(); + + for (var i in this._zoomBoundLayers) { + var options = this._zoomBoundLayers[i].options; + + minZoom = options.minZoom === undefined ? minZoom : Math.min(minZoom, options.minZoom); + maxZoom = options.maxZoom === undefined ? maxZoom : Math.max(maxZoom, options.maxZoom); + } + + this._layersMaxZoom = maxZoom === -Infinity ? undefined : maxZoom; + this._layersMinZoom = minZoom === Infinity ? undefined : minZoom; + + // @section Map state change events + // @event zoomlevelschange: Event + // Fired when the number of zoomlevels on the map is changed due + // to adding or removing a layer. + if (oldZoomSpan !== this._getZoomSpan()) { + this.fire('zoomlevelschange'); + } + + if (this.options.maxZoom === undefined && this._layersMaxZoom && this.getZoom() > this._layersMaxZoom) { + this.setZoom(this._layersMaxZoom); + } + if (this.options.minZoom === undefined && this._layersMinZoom && this.getZoom() < this._layersMinZoom) { + this.setZoom(this._layersMinZoom); + } + } +}); + +/* + * @class LayerGroup + * @aka L.LayerGroup + * @inherits Layer + * + * Used to group several layers and handle them as one. If you add it to the map, + * any layers added or removed from the group will be added/removed on the map as + * well. Extends `Layer`. + * + * @example + * + * ```js + * L.layerGroup([marker1, marker2]) + * .addLayer(polyline) + * .addTo(map); + * ``` + */ + +var LayerGroup = Layer.extend({ + + initialize: function (layers, options) { + setOptions(this, options); + + this._layers = {}; + + var i, len; + + if (layers) { + for (i = 0, len = layers.length; i < len; i++) { + this.addLayer(layers[i]); + } + } + }, + + // @method addLayer(layer: Layer): this + // Adds the given layer to the group. + addLayer: function (layer) { + var id = this.getLayerId(layer); + + this._layers[id] = layer; + + if (this._map) { + this._map.addLayer(layer); + } + + return this; + }, + + // @method removeLayer(layer: Layer): this + // Removes the given layer from the group. + // @alternative + // @method removeLayer(id: Number): this + // Removes the layer with the given internal ID from the group. + removeLayer: function (layer) { + var id = layer in this._layers ? layer : this.getLayerId(layer); + + if (this._map && this._layers[id]) { + this._map.removeLayer(this._layers[id]); + } + + delete this._layers[id]; + + return this; + }, + + // @method hasLayer(layer: Layer): Boolean + // Returns `true` if the given layer is currently added to the group. + // @alternative + // @method hasLayer(id: Number): Boolean + // Returns `true` if the given internal ID is currently added to the group. + hasLayer: function (layer) { + return !!layer && (layer in this._layers || this.getLayerId(layer) in this._layers); + }, + + // @method clearLayers(): this + // Removes all the layers from the group. + clearLayers: function () { + return this.eachLayer(this.removeLayer, this); + }, + + // @method invoke(methodName: String, …): this + // Calls `methodName` on every layer contained in this group, passing any + // additional parameters. Has no effect if the layers contained do not + // implement `methodName`. + invoke: function (methodName) { + var args = Array.prototype.slice.call(arguments, 1), + i, layer; + + for (i in this._layers) { + layer = this._layers[i]; + + if (layer[methodName]) { + layer[methodName].apply(layer, args); + } + } + + return this; + }, + + onAdd: function (map) { + this.eachLayer(map.addLayer, map); + }, + + onRemove: function (map) { + this.eachLayer(map.removeLayer, map); + }, + + // @method eachLayer(fn: Function, context?: Object): this + // Iterates over the layers of the group, optionally specifying context of the iterator function. + // ```js + // group.eachLayer(function (layer) { + // layer.bindPopup('Hello'); + // }); + // ``` + eachLayer: function (method, context) { + for (var i in this._layers) { + method.call(context, this._layers[i]); + } + return this; + }, + + // @method getLayer(id: Number): Layer + // Returns the layer with the given internal ID. + getLayer: function (id) { + return this._layers[id]; + }, + + // @method getLayers(): Layer[] + // Returns an array of all the layers added to the group. + getLayers: function () { + var layers = []; + this.eachLayer(layers.push, layers); + return layers; + }, + + // @method setZIndex(zIndex: Number): this + // Calls `setZIndex` on every layer contained in this group, passing the z-index. + setZIndex: function (zIndex) { + return this.invoke('setZIndex', zIndex); + }, + + // @method getLayerId(layer: Layer): Number + // Returns the internal ID for a layer + getLayerId: function (layer) { + return stamp(layer); + } +}); + + +// @factory L.layerGroup(layers?: Layer[], options?: Object) +// Create a layer group, optionally given an initial set of layers and an `options` object. +var layerGroup = function (layers, options) { + return new LayerGroup(layers, options); +}; + +/* + * @class FeatureGroup + * @aka L.FeatureGroup + * @inherits LayerGroup + * + * Extended `LayerGroup` that makes it easier to do the same thing to all its member layers: + * * [`bindPopup`](#layer-bindpopup) binds a popup to all of the layers at once (likewise with [`bindTooltip`](#layer-bindtooltip)) + * * Events are propagated to the `FeatureGroup`, so if the group has an event + * handler, it will handle events from any of the layers. This includes mouse events + * and custom events. + * * Has `layeradd` and `layerremove` events + * + * @example + * + * ```js + * L.featureGroup([marker1, marker2, polyline]) + * .bindPopup('Hello world!') + * .on('click', function() { alert('Clicked on a member of the group!'); }) + * .addTo(map); + * ``` + */ + +var FeatureGroup = LayerGroup.extend({ + + addLayer: function (layer) { + if (this.hasLayer(layer)) { + return this; + } + + layer.addEventParent(this); + + LayerGroup.prototype.addLayer.call(this, layer); + + // @event layeradd: LayerEvent + // Fired when a layer is added to this `FeatureGroup` + return this.fire('layeradd', {layer: layer}); + }, + + removeLayer: function (layer) { + if (!this.hasLayer(layer)) { + return this; + } + if (layer in this._layers) { + layer = this._layers[layer]; + } + + layer.removeEventParent(this); + + LayerGroup.prototype.removeLayer.call(this, layer); + + // @event layerremove: LayerEvent + // Fired when a layer is removed from this `FeatureGroup` + return this.fire('layerremove', {layer: layer}); + }, + + // @method setStyle(style: Path options): this + // Sets the given path options to each layer of the group that has a `setStyle` method. + setStyle: function (style) { + return this.invoke('setStyle', style); + }, + + // @method bringToFront(): this + // Brings the layer group to the top of all other layers + bringToFront: function () { + return this.invoke('bringToFront'); + }, + + // @method bringToBack(): this + // Brings the layer group to the back of all other layers + bringToBack: function () { + return this.invoke('bringToBack'); + }, + + // @method getBounds(): LatLngBounds + // Returns the LatLngBounds of the Feature Group (created from bounds and coordinates of its children). + getBounds: function () { + var bounds = new LatLngBounds(); + + for (var id in this._layers) { + var layer = this._layers[id]; + bounds.extend(layer.getBounds ? layer.getBounds() : layer.getLatLng()); + } + return bounds; + } +}); + +// @factory L.featureGroup(layers: Layer[]) +// Create a feature group, optionally given an initial set of layers. +var featureGroup = function (layers) { + return new FeatureGroup(layers); +}; + +/* + * @class Icon + * @aka L.Icon + * + * Represents an icon to provide when creating a marker. + * + * @example + * + * ```js + * var myIcon = L.icon({ + * iconUrl: 'my-icon.png', + * iconRetinaUrl: 'my-icon@2x.png', + * iconSize: [38, 95], + * iconAnchor: [22, 94], + * popupAnchor: [-3, -76], + * shadowUrl: 'my-icon-shadow.png', + * shadowRetinaUrl: 'my-icon-shadow@2x.png', + * shadowSize: [68, 95], + * shadowAnchor: [22, 94] + * }); + * + * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map); + * ``` + * + * `L.Icon.Default` extends `L.Icon` and is the blue icon Leaflet uses for markers by default. + * + */ + +var Icon = Class.extend({ + + /* @section + * @aka Icon options + * + * @option iconUrl: String = null + * **(required)** The URL to the icon image (absolute or relative to your script path). + * + * @option iconRetinaUrl: String = null + * The URL to a retina sized version of the icon image (absolute or relative to your + * script path). Used for Retina screen devices. + * + * @option iconSize: Point = null + * Size of the icon image in pixels. + * + * @option iconAnchor: Point = null + * The coordinates of the "tip" of the icon (relative to its top left corner). The icon + * will be aligned so that this point is at the marker's geographical location. Centered + * by default if size is specified, also can be set in CSS with negative margins. + * + * @option popupAnchor: Point = [0, 0] + * The coordinates of the point from which popups will "open", relative to the icon anchor. + * + * @option tooltipAnchor: Point = [0, 0] + * The coordinates of the point from which tooltips will "open", relative to the icon anchor. + * + * @option shadowUrl: String = null + * The URL to the icon shadow image. If not specified, no shadow image will be created. + * + * @option shadowRetinaUrl: String = null + * + * @option shadowSize: Point = null + * Size of the shadow image in pixels. + * + * @option shadowAnchor: Point = null + * The coordinates of the "tip" of the shadow (relative to its top left corner) (the same + * as iconAnchor if not specified). + * + * @option className: String = '' + * A custom class name to assign to both icon and shadow images. Empty by default. + */ + + options: { + popupAnchor: [0, 0], + tooltipAnchor: [0, 0] + }, + + initialize: function (options) { + setOptions(this, options); + }, + + // @method createIcon(oldIcon?: HTMLElement): HTMLElement + // Called internally when the icon has to be shown, returns a `` HTML element + // styled according to the options. + createIcon: function (oldIcon) { + return this._createIcon('icon', oldIcon); + }, + + // @method createShadow(oldIcon?: HTMLElement): HTMLElement + // As `createIcon`, but for the shadow beneath it. + createShadow: function (oldIcon) { + return this._createIcon('shadow', oldIcon); + }, + + _createIcon: function (name, oldIcon) { + var src = this._getIconUrl(name); + + if (!src) { + if (name === 'icon') { + throw new Error('iconUrl not set in Icon options (see the docs).'); + } + return null; + } + + var img = this._createImg(src, oldIcon && oldIcon.tagName === 'IMG' ? oldIcon : null); + this._setIconStyles(img, name); + + return img; + }, + + _setIconStyles: function (img, name) { + var options = this.options; + var sizeOption = options[name + 'Size']; + + if (typeof sizeOption === 'number') { + sizeOption = [sizeOption, sizeOption]; + } + + var size = toPoint(sizeOption), + anchor = toPoint(name === 'shadow' && options.shadowAnchor || options.iconAnchor || + size && size.divideBy(2, true)); + + img.className = 'leaflet-marker-' + name + ' ' + (options.className || ''); + + if (anchor) { + img.style.marginLeft = (-anchor.x) + 'px'; + img.style.marginTop = (-anchor.y) + 'px'; + } + + if (size) { + img.style.width = size.x + 'px'; + img.style.height = size.y + 'px'; + } + }, + + _createImg: function (src, el) { + el = el || document.createElement('img'); + el.src = src; + return el; + }, + + _getIconUrl: function (name) { + return retina && this.options[name + 'RetinaUrl'] || this.options[name + 'Url']; + } +}); + + +// @factory L.icon(options: Icon options) +// Creates an icon instance with the given options. +function icon(options) { + return new Icon(options); +} + +/* + * @miniclass Icon.Default (Icon) + * @aka L.Icon.Default + * @section + * + * A trivial subclass of `Icon`, represents the icon to use in `Marker`s when + * no icon is specified. Points to the blue marker image distributed with Leaflet + * releases. + * + * In order to customize the default icon, just change the properties of `L.Icon.Default.prototype.options` + * (which is a set of `Icon options`). + * + * If you want to _completely_ replace the default icon, override the + * `L.Marker.prototype.options.icon` with your own icon instead. + */ + +var IconDefault = Icon.extend({ + + options: { + iconUrl: 'marker-icon.png', + iconRetinaUrl: 'marker-icon-2x.png', + shadowUrl: 'marker-shadow.png', + iconSize: [25, 41], + iconAnchor: [12, 41], + popupAnchor: [1, -34], + tooltipAnchor: [16, -28], + shadowSize: [41, 41] + }, + + _getIconUrl: function (name) { + if (!IconDefault.imagePath) { // Deprecated, backwards-compatibility only + IconDefault.imagePath = this._detectIconPath(); + } + + // @option imagePath: String + // `Icon.Default` will try to auto-detect the location of the + // blue icon images. If you are placing these images in a non-standard + // way, set this option to point to the right path. + return (this.options.imagePath || IconDefault.imagePath) + Icon.prototype._getIconUrl.call(this, name); + }, + + _detectIconPath: function () { + var el = create$1('div', 'leaflet-default-icon-path', document.body); + var path = getStyle(el, 'background-image') || + getStyle(el, 'backgroundImage'); // IE8 + + document.body.removeChild(el); + + if (path === null || path.indexOf('url') !== 0) { + path = ''; + } else { + path = path.replace(/^url\(["']?/, '').replace(/marker-icon\.png["']?\)$/, ''); + } + + return path; + } +}); + +/* + * L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable. + */ + + +/* @namespace Marker + * @section Interaction handlers + * + * Interaction handlers are properties of a marker instance that allow you to control interaction behavior in runtime, enabling or disabling certain features such as dragging (see `Handler` methods). Example: + * + * ```js + * marker.dragging.disable(); + * ``` + * + * @property dragging: Handler + * Marker dragging handler (by both mouse and touch). Only valid when the marker is on the map (Otherwise set [`marker.options.draggable`](#marker-draggable)). + */ + +var MarkerDrag = Handler.extend({ + initialize: function (marker) { + this._marker = marker; + }, + + addHooks: function () { + var icon = this._marker._icon; + + if (!this._draggable) { + this._draggable = new Draggable(icon, icon, true); + } + + this._draggable.on({ + dragstart: this._onDragStart, + predrag: this._onPreDrag, + drag: this._onDrag, + dragend: this._onDragEnd + }, this).enable(); + + addClass(icon, 'leaflet-marker-draggable'); + }, + + removeHooks: function () { + this._draggable.off({ + dragstart: this._onDragStart, + predrag: this._onPreDrag, + drag: this._onDrag, + dragend: this._onDragEnd + }, this).disable(); + + if (this._marker._icon) { + removeClass(this._marker._icon, 'leaflet-marker-draggable'); + } + }, + + moved: function () { + return this._draggable && this._draggable._moved; + }, + + _adjustPan: function (e) { + var marker = this._marker, + map = marker._map, + speed = this._marker.options.autoPanSpeed, + padding = this._marker.options.autoPanPadding, + iconPos = getPosition(marker._icon), + bounds = map.getPixelBounds(), + origin = map.getPixelOrigin(); + + var panBounds = toBounds( + bounds.min._subtract(origin).add(padding), + bounds.max._subtract(origin).subtract(padding) + ); + + if (!panBounds.contains(iconPos)) { + // Compute incremental movement + var movement = toPoint( + (Math.max(panBounds.max.x, iconPos.x) - panBounds.max.x) / (bounds.max.x - panBounds.max.x) - + (Math.min(panBounds.min.x, iconPos.x) - panBounds.min.x) / (bounds.min.x - panBounds.min.x), + + (Math.max(panBounds.max.y, iconPos.y) - panBounds.max.y) / (bounds.max.y - panBounds.max.y) - + (Math.min(panBounds.min.y, iconPos.y) - panBounds.min.y) / (bounds.min.y - panBounds.min.y) + ).multiplyBy(speed); + + map.panBy(movement, {animate: false}); + + this._draggable._newPos._add(movement); + this._draggable._startPos._add(movement); + + setPosition(marker._icon, this._draggable._newPos); + this._onDrag(e); + + this._panRequest = requestAnimFrame(this._adjustPan.bind(this, e)); + } + }, + + _onDragStart: function () { + // @section Dragging events + // @event dragstart: Event + // Fired when the user starts dragging the marker. + + // @event movestart: Event + // Fired when the marker starts moving (because of dragging). + + this._oldLatLng = this._marker.getLatLng(); + this._marker + .closePopup() + .fire('movestart') + .fire('dragstart'); + }, + + _onPreDrag: function (e) { + if (this._marker.options.autoPan) { + cancelAnimFrame(this._panRequest); + this._panRequest = requestAnimFrame(this._adjustPan.bind(this, e)); + } + }, + + _onDrag: function (e) { + var marker = this._marker, + shadow = marker._shadow, + iconPos = getPosition(marker._icon), + latlng = marker._map.layerPointToLatLng(iconPos); + + // update shadow position + if (shadow) { + setPosition(shadow, iconPos); + } + + marker._latlng = latlng; + e.latlng = latlng; + e.oldLatLng = this._oldLatLng; + + // @event drag: Event + // Fired repeatedly while the user drags the marker. + marker + .fire('move', e) + .fire('drag', e); + }, + + _onDragEnd: function (e) { + // @event dragend: DragEndEvent + // Fired when the user stops dragging the marker. + + cancelAnimFrame(this._panRequest); + + // @event moveend: Event + // Fired when the marker stops moving (because of dragging). + delete this._oldLatLng; + this._marker + .fire('moveend') + .fire('dragend', e); + } +}); + +/* + * @class Marker + * @inherits Interactive layer + * @aka L.Marker + * L.Marker is used to display clickable/draggable icons on the map. Extends `Layer`. + * + * @example + * + * ```js + * L.marker([50.5, 30.5]).addTo(map); + * ``` + */ + +var Marker = Layer.extend({ + + // @section + // @aka Marker options + options: { + // @option icon: Icon = * + // Icon instance to use for rendering the marker. + // See [Icon documentation](#L.Icon) for details on how to customize the marker icon. + // If not specified, a common instance of `L.Icon.Default` is used. + icon: new IconDefault(), + + // Option inherited from "Interactive layer" abstract class + interactive: true, + + // @option keyboard: Boolean = true + // Whether the marker can be tabbed to with a keyboard and clicked by pressing enter. + keyboard: true, + + // @option title: String = '' + // Text for the browser tooltip that appear on marker hover (no tooltip by default). + title: '', + + // @option alt: String = '' + // Text for the `alt` attribute of the icon image (useful for accessibility). + alt: '', + + // @option zIndexOffset: Number = 0 + // By default, marker images zIndex is set automatically based on its latitude. Use this option if you want to put the marker on top of all others (or below), specifying a high value like `1000` (or high negative value, respectively). + zIndexOffset: 0, + + // @option opacity: Number = 1.0 + // The opacity of the marker. + opacity: 1, + + // @option riseOnHover: Boolean = false + // If `true`, the marker will get on top of others when you hover the mouse over it. + riseOnHover: false, + + // @option riseOffset: Number = 250 + // The z-index offset used for the `riseOnHover` feature. + riseOffset: 250, + + // @option pane: String = 'markerPane' + // `Map pane` where the markers icon will be added. + pane: 'markerPane', + + // @option pane: String = 'shadowPane' + // `Map pane` where the markers shadow will be added. + shadowPane: 'shadowPane', + + // @option bubblingMouseEvents: Boolean = false + // When `true`, a mouse event on this marker will trigger the same event on the map + // (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used). + bubblingMouseEvents: false, + + // @section Draggable marker options + // @option draggable: Boolean = false + // Whether the marker is draggable with mouse/touch or not. + draggable: false, + + // @option autoPan: Boolean = false + // Whether to pan the map when dragging this marker near its edge or not. + autoPan: false, + + // @option autoPanPadding: Point = Point(50, 50) + // Distance (in pixels to the left/right and to the top/bottom) of the + // map edge to start panning the map. + autoPanPadding: [50, 50], + + // @option autoPanSpeed: Number = 10 + // Number of pixels the map should pan by. + autoPanSpeed: 10 + }, + + /* @section + * + * In addition to [shared layer methods](#Layer) like `addTo()` and `remove()` and [popup methods](#Popup) like bindPopup() you can also use the following methods: + */ + + initialize: function (latlng, options) { + setOptions(this, options); + this._latlng = toLatLng(latlng); + }, + + onAdd: function (map) { + this._zoomAnimated = this._zoomAnimated && map.options.markerZoomAnimation; + + if (this._zoomAnimated) { + map.on('zoomanim', this._animateZoom, this); + } + + this._initIcon(); + this.update(); + }, + + onRemove: function (map) { + if (this.dragging && this.dragging.enabled()) { + this.options.draggable = true; + this.dragging.removeHooks(); + } + delete this.dragging; + + if (this._zoomAnimated) { + map.off('zoomanim', this._animateZoom, this); + } + + this._removeIcon(); + this._removeShadow(); + }, + + getEvents: function () { + return { + zoom: this.update, + viewreset: this.update + }; + }, + + // @method getLatLng: LatLng + // Returns the current geographical position of the marker. + getLatLng: function () { + return this._latlng; + }, + + // @method setLatLng(latlng: LatLng): this + // Changes the marker position to the given point. + setLatLng: function (latlng) { + var oldLatLng = this._latlng; + this._latlng = toLatLng(latlng); + this.update(); + + // @event move: Event + // Fired when the marker is moved via [`setLatLng`](#marker-setlatlng) or by [dragging](#marker-dragging). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`. + return this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng}); + }, + + // @method setZIndexOffset(offset: Number): this + // Changes the [zIndex offset](#marker-zindexoffset) of the marker. + setZIndexOffset: function (offset) { + this.options.zIndexOffset = offset; + return this.update(); + }, + + // @method getIcon: Icon + // Returns the current icon used by the marker + getIcon: function () { + return this.options.icon; + }, + + // @method setIcon(icon: Icon): this + // Changes the marker icon. + setIcon: function (icon) { + + this.options.icon = icon; + + if (this._map) { + this._initIcon(); + this.update(); + } + + if (this._popup) { + this.bindPopup(this._popup, this._popup.options); + } + + return this; + }, + + getElement: function () { + return this._icon; + }, + + update: function () { + + if (this._icon && this._map) { + var pos = this._map.latLngToLayerPoint(this._latlng).round(); + this._setPos(pos); + } + + return this; + }, + + _initIcon: function () { + var options = this.options, + classToAdd = 'leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide'); + + var icon = options.icon.createIcon(this._icon), + addIcon = false; + + // if we're not reusing the icon, remove the old one and init new one + if (icon !== this._icon) { + if (this._icon) { + this._removeIcon(); + } + addIcon = true; + + if (options.title) { + icon.title = options.title; + } + + if (icon.tagName === 'IMG') { + icon.alt = options.alt || ''; + } + } + + addClass(icon, classToAdd); + + if (options.keyboard) { + icon.tabIndex = '0'; + } + + this._icon = icon; + + if (options.riseOnHover) { + this.on({ + mouseover: this._bringToFront, + mouseout: this._resetZIndex + }); + } + + var newShadow = options.icon.createShadow(this._shadow), + addShadow = false; + + if (newShadow !== this._shadow) { + this._removeShadow(); + addShadow = true; + } + + if (newShadow) { + addClass(newShadow, classToAdd); + newShadow.alt = ''; + } + this._shadow = newShadow; + + + if (options.opacity < 1) { + this._updateOpacity(); + } + + + if (addIcon) { + this.getPane().appendChild(this._icon); + } + this._initInteraction(); + if (newShadow && addShadow) { + this.getPane(options.shadowPane).appendChild(this._shadow); + } + }, + + _removeIcon: function () { + if (this.options.riseOnHover) { + this.off({ + mouseover: this._bringToFront, + mouseout: this._resetZIndex + }); + } + + remove(this._icon); + this.removeInteractiveTarget(this._icon); + + this._icon = null; + }, + + _removeShadow: function () { + if (this._shadow) { + remove(this._shadow); + } + this._shadow = null; + }, + + _setPos: function (pos) { + + if (this._icon) { + setPosition(this._icon, pos); + } + + if (this._shadow) { + setPosition(this._shadow, pos); + } + + this._zIndex = pos.y + this.options.zIndexOffset; + + this._resetZIndex(); + }, + + _updateZIndex: function (offset) { + if (this._icon) { + this._icon.style.zIndex = this._zIndex + offset; + } + }, + + _animateZoom: function (opt) { + var pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center).round(); + + this._setPos(pos); + }, + + _initInteraction: function () { + + if (!this.options.interactive) { return; } + + addClass(this._icon, 'leaflet-interactive'); + + this.addInteractiveTarget(this._icon); + + if (MarkerDrag) { + var draggable = this.options.draggable; + if (this.dragging) { + draggable = this.dragging.enabled(); + this.dragging.disable(); + } + + this.dragging = new MarkerDrag(this); + + if (draggable) { + this.dragging.enable(); + } + } + }, + + // @method setOpacity(opacity: Number): this + // Changes the opacity of the marker. + setOpacity: function (opacity) { + this.options.opacity = opacity; + if (this._map) { + this._updateOpacity(); + } + + return this; + }, + + _updateOpacity: function () { + var opacity = this.options.opacity; + + if (this._icon) { + setOpacity(this._icon, opacity); + } + + if (this._shadow) { + setOpacity(this._shadow, opacity); + } + }, + + _bringToFront: function () { + this._updateZIndex(this.options.riseOffset); + }, + + _resetZIndex: function () { + this._updateZIndex(0); + }, + + _getPopupAnchor: function () { + return this.options.icon.options.popupAnchor; + }, + + _getTooltipAnchor: function () { + return this.options.icon.options.tooltipAnchor; + } +}); + + +// factory L.marker(latlng: LatLng, options? : Marker options) + +// @factory L.marker(latlng: LatLng, options? : Marker options) +// Instantiates a Marker object given a geographical point and optionally an options object. +function marker(latlng, options) { + return new Marker(latlng, options); +} + +/* + * @class Path + * @aka L.Path + * @inherits Interactive layer + * + * An abstract class that contains options and constants shared between vector + * overlays (Polygon, Polyline, Circle). Do not use it directly. Extends `Layer`. + */ + +var Path = Layer.extend({ + + // @section + // @aka Path options + options: { + // @option stroke: Boolean = true + // Whether to draw stroke along the path. Set it to `false` to disable borders on polygons or circles. + stroke: true, + + // @option color: String = '#3388ff' + // Stroke color + color: '#3388ff', + + // @option weight: Number = 3 + // Stroke width in pixels + weight: 3, + + // @option opacity: Number = 1.0 + // Stroke opacity + opacity: 1, + + // @option lineCap: String= 'round' + // A string that defines [shape to be used at the end](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linecap) of the stroke. + lineCap: 'round', + + // @option lineJoin: String = 'round' + // A string that defines [shape to be used at the corners](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linejoin) of the stroke. + lineJoin: 'round', + + // @option dashArray: String = null + // A string that defines the stroke [dash pattern](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dasharray). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility). + dashArray: null, + + // @option dashOffset: String = null + // A string that defines the [distance into the dash pattern to start the dash](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dashoffset). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility). + dashOffset: null, + + // @option fill: Boolean = depends + // Whether to fill the path with color. Set it to `false` to disable filling on polygons or circles. + fill: false, + + // @option fillColor: String = * + // Fill color. Defaults to the value of the [`color`](#path-color) option + fillColor: null, + + // @option fillOpacity: Number = 0.2 + // Fill opacity. + fillOpacity: 0.2, + + // @option fillRule: String = 'evenodd' + // A string that defines [how the inside of a shape](https://developer.mozilla.org/docs/Web/SVG/Attribute/fill-rule) is determined. + fillRule: 'evenodd', + + // className: '', + + // Option inherited from "Interactive layer" abstract class + interactive: true, + + // @option bubblingMouseEvents: Boolean = true + // When `true`, a mouse event on this path will trigger the same event on the map + // (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used). + bubblingMouseEvents: true + }, + + beforeAdd: function (map) { + // Renderer is set here because we need to call renderer.getEvents + // before this.getEvents. + this._renderer = map.getRenderer(this); + }, + + onAdd: function () { + this._renderer._initPath(this); + this._reset(); + this._renderer._addPath(this); + }, + + onRemove: function () { + this._renderer._removePath(this); + }, + + // @method redraw(): this + // Redraws the layer. Sometimes useful after you changed the coordinates that the path uses. + redraw: function () { + if (this._map) { + this._renderer._updatePath(this); + } + return this; + }, + + // @method setStyle(style: Path options): this + // Changes the appearance of a Path based on the options in the `Path options` object. + setStyle: function (style) { + setOptions(this, style); + if (this._renderer) { + this._renderer._updateStyle(this); + if (this.options.stroke && style && style.hasOwnProperty('weight')) { + this._updateBounds(); + } + } + return this; + }, + + // @method bringToFront(): this + // Brings the layer to the top of all path layers. + bringToFront: function () { + if (this._renderer) { + this._renderer._bringToFront(this); + } + return this; + }, + + // @method bringToBack(): this + // Brings the layer to the bottom of all path layers. + bringToBack: function () { + if (this._renderer) { + this._renderer._bringToBack(this); + } + return this; + }, + + getElement: function () { + return this._path; + }, + + _reset: function () { + // defined in child classes + this._project(); + this._update(); + }, + + _clickTolerance: function () { + // used when doing hit detection for Canvas layers + return (this.options.stroke ? this.options.weight / 2 : 0) + this._renderer.options.tolerance; + } +}); + +/* + * @class CircleMarker + * @aka L.CircleMarker + * @inherits Path + * + * A circle of a fixed size with radius specified in pixels. Extends `Path`. + */ + +var CircleMarker = Path.extend({ + + // @section + // @aka CircleMarker options + options: { + fill: true, + + // @option radius: Number = 10 + // Radius of the circle marker, in pixels + radius: 10 + }, + + initialize: function (latlng, options) { + setOptions(this, options); + this._latlng = toLatLng(latlng); + this._radius = this.options.radius; + }, + + // @method setLatLng(latLng: LatLng): this + // Sets the position of a circle marker to a new location. + setLatLng: function (latlng) { + var oldLatLng = this._latlng; + this._latlng = toLatLng(latlng); + this.redraw(); + + // @event move: Event + // Fired when the marker is moved via [`setLatLng`](#circlemarker-setlatlng). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`. + return this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng}); + }, + + // @method getLatLng(): LatLng + // Returns the current geographical position of the circle marker + getLatLng: function () { + return this._latlng; + }, + + // @method setRadius(radius: Number): this + // Sets the radius of a circle marker. Units are in pixels. + setRadius: function (radius) { + this.options.radius = this._radius = radius; + return this.redraw(); + }, + + // @method getRadius(): Number + // Returns the current radius of the circle + getRadius: function () { + return this._radius; + }, + + setStyle : function (options) { + var radius = options && options.radius || this._radius; + Path.prototype.setStyle.call(this, options); + this.setRadius(radius); + return this; + }, + + _project: function () { + this._point = this._map.latLngToLayerPoint(this._latlng); + this._updateBounds(); + }, + + _updateBounds: function () { + var r = this._radius, + r2 = this._radiusY || r, + w = this._clickTolerance(), + p = [r + w, r2 + w]; + this._pxBounds = new Bounds(this._point.subtract(p), this._point.add(p)); + }, + + _update: function () { + if (this._map) { + this._updatePath(); + } + }, + + _updatePath: function () { + this._renderer._updateCircle(this); + }, + + _empty: function () { + return this._radius && !this._renderer._bounds.intersects(this._pxBounds); + }, + + // Needed by the `Canvas` renderer for interactivity + _containsPoint: function (p) { + return p.distanceTo(this._point) <= this._radius + this._clickTolerance(); + } +}); + + +// @factory L.circleMarker(latlng: LatLng, options?: CircleMarker options) +// Instantiates a circle marker object given a geographical point, and an optional options object. +function circleMarker(latlng, options) { + return new CircleMarker(latlng, options); +} + +/* + * @class Circle + * @aka L.Circle + * @inherits CircleMarker + * + * A class for drawing circle overlays on a map. Extends `CircleMarker`. + * + * It's an approximation and starts to diverge from a real circle closer to poles (due to projection distortion). + * + * @example + * + * ```js + * L.circle([50.5, 30.5], {radius: 200}).addTo(map); + * ``` + */ + +var Circle = CircleMarker.extend({ + + initialize: function (latlng, options, legacyOptions) { + if (typeof options === 'number') { + // Backwards compatibility with 0.7.x factory (latlng, radius, options?) + options = extend({}, legacyOptions, {radius: options}); + } + setOptions(this, options); + this._latlng = toLatLng(latlng); + + if (isNaN(this.options.radius)) { throw new Error('Circle radius cannot be NaN'); } + + // @section + // @aka Circle options + // @option radius: Number; Radius of the circle, in meters. + this._mRadius = this.options.radius; + }, + + // @method setRadius(radius: Number): this + // Sets the radius of a circle. Units are in meters. + setRadius: function (radius) { + this._mRadius = radius; + return this.redraw(); + }, + + // @method getRadius(): Number + // Returns the current radius of a circle. Units are in meters. + getRadius: function () { + return this._mRadius; + }, + + // @method getBounds(): LatLngBounds + // Returns the `LatLngBounds` of the path. + getBounds: function () { + var half = [this._radius, this._radiusY || this._radius]; + + return new LatLngBounds( + this._map.layerPointToLatLng(this._point.subtract(half)), + this._map.layerPointToLatLng(this._point.add(half))); + }, + + setStyle: Path.prototype.setStyle, + + _project: function () { + + var lng = this._latlng.lng, + lat = this._latlng.lat, + map = this._map, + crs = map.options.crs; + + if (crs.distance === Earth.distance) { + var d = Math.PI / 180, + latR = (this._mRadius / Earth.R) / d, + top = map.project([lat + latR, lng]), + bottom = map.project([lat - latR, lng]), + p = top.add(bottom).divideBy(2), + lat2 = map.unproject(p).lat, + lngR = Math.acos((Math.cos(latR * d) - Math.sin(lat * d) * Math.sin(lat2 * d)) / + (Math.cos(lat * d) * Math.cos(lat2 * d))) / d; + + if (isNaN(lngR) || lngR === 0) { + lngR = latR / Math.cos(Math.PI / 180 * lat); // Fallback for edge case, #2425 + } + + this._point = p.subtract(map.getPixelOrigin()); + this._radius = isNaN(lngR) ? 0 : p.x - map.project([lat2, lng - lngR]).x; + this._radiusY = p.y - top.y; + + } else { + var latlng2 = crs.unproject(crs.project(this._latlng).subtract([this._mRadius, 0])); + + this._point = map.latLngToLayerPoint(this._latlng); + this._radius = this._point.x - map.latLngToLayerPoint(latlng2).x; + } + + this._updateBounds(); + } +}); + +// @factory L.circle(latlng: LatLng, options?: Circle options) +// Instantiates a circle object given a geographical point, and an options object +// which contains the circle radius. +// @alternative +// @factory L.circle(latlng: LatLng, radius: Number, options?: Circle options) +// Obsolete way of instantiating a circle, for compatibility with 0.7.x code. +// Do not use in new applications or plugins. +function circle(latlng, options, legacyOptions) { + return new Circle(latlng, options, legacyOptions); +} + +/* + * @class Polyline + * @aka L.Polyline + * @inherits Path + * + * A class for drawing polyline overlays on a map. Extends `Path`. + * + * @example + * + * ```js + * // create a red polyline from an array of LatLng points + * var latlngs = [ + * [45.51, -122.68], + * [37.77, -122.43], + * [34.04, -118.2] + * ]; + * + * var polyline = L.polyline(latlngs, {color: 'red'}).addTo(map); + * + * // zoom the map to the polyline + * map.fitBounds(polyline.getBounds()); + * ``` + * + * You can also pass a multi-dimensional array to represent a `MultiPolyline` shape: + * + * ```js + * // create a red polyline from an array of arrays of LatLng points + * var latlngs = [ + * [[45.51, -122.68], + * [37.77, -122.43], + * [34.04, -118.2]], + * [[40.78, -73.91], + * [41.83, -87.62], + * [32.76, -96.72]] + * ]; + * ``` + */ + + +var Polyline = Path.extend({ + + // @section + // @aka Polyline options + options: { + // @option smoothFactor: Number = 1.0 + // How much to simplify the polyline on each zoom level. More means + // better performance and smoother look, and less means more accurate representation. + smoothFactor: 1.0, + + // @option noClip: Boolean = false + // Disable polyline clipping. + noClip: false + }, + + initialize: function (latlngs, options) { + setOptions(this, options); + this._setLatLngs(latlngs); + }, + + // @method getLatLngs(): LatLng[] + // Returns an array of the points in the path, or nested arrays of points in case of multi-polyline. + getLatLngs: function () { + return this._latlngs; + }, + + // @method setLatLngs(latlngs: LatLng[]): this + // Replaces all the points in the polyline with the given array of geographical points. + setLatLngs: function (latlngs) { + this._setLatLngs(latlngs); + return this.redraw(); + }, + + // @method isEmpty(): Boolean + // Returns `true` if the Polyline has no LatLngs. + isEmpty: function () { + return !this._latlngs.length; + }, + + // @method closestLayerPoint(p: Point): Point + // Returns the point closest to `p` on the Polyline. + closestLayerPoint: function (p) { + var minDistance = Infinity, + minPoint = null, + closest = _sqClosestPointOnSegment, + p1, p2; + + for (var j = 0, jLen = this._parts.length; j < jLen; j++) { + var points = this._parts[j]; + + for (var i = 1, len = points.length; i < len; i++) { + p1 = points[i - 1]; + p2 = points[i]; + + var sqDist = closest(p, p1, p2, true); + + if (sqDist < minDistance) { + minDistance = sqDist; + minPoint = closest(p, p1, p2); + } + } + } + if (minPoint) { + minPoint.distance = Math.sqrt(minDistance); + } + return minPoint; + }, + + // @method getCenter(): LatLng + // Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the polyline. + getCenter: function () { + // throws error when not yet added to map as this center calculation requires projected coordinates + if (!this._map) { + throw new Error('Must add layer to map before using getCenter()'); + } + + var i, halfDist, segDist, dist, p1, p2, ratio, + points = this._rings[0], + len = points.length; + + if (!len) { return null; } + + // polyline centroid algorithm; only uses the first ring if there are multiple + + for (i = 0, halfDist = 0; i < len - 1; i++) { + halfDist += points[i].distanceTo(points[i + 1]) / 2; + } + + // The line is so small in the current view that all points are on the same pixel. + if (halfDist === 0) { + return this._map.layerPointToLatLng(points[0]); + } + + for (i = 0, dist = 0; i < len - 1; i++) { + p1 = points[i]; + p2 = points[i + 1]; + segDist = p1.distanceTo(p2); + dist += segDist; + + if (dist > halfDist) { + ratio = (dist - halfDist) / segDist; + return this._map.layerPointToLatLng([ + p2.x - ratio * (p2.x - p1.x), + p2.y - ratio * (p2.y - p1.y) + ]); + } + } + }, + + // @method getBounds(): LatLngBounds + // Returns the `LatLngBounds` of the path. + getBounds: function () { + return this._bounds; + }, + + // @method addLatLng(latlng: LatLng, latlngs? LatLng[]): this + // Adds a given point to the polyline. By default, adds to the first ring of + // the polyline in case of a multi-polyline, but can be overridden by passing + // a specific ring as a LatLng array (that you can earlier access with [`getLatLngs`](#polyline-getlatlngs)). + addLatLng: function (latlng, latlngs) { + latlngs = latlngs || this._defaultShape(); + latlng = toLatLng(latlng); + latlngs.push(latlng); + this._bounds.extend(latlng); + return this.redraw(); + }, + + _setLatLngs: function (latlngs) { + this._bounds = new LatLngBounds(); + this._latlngs = this._convertLatLngs(latlngs); + }, + + _defaultShape: function () { + return isFlat(this._latlngs) ? this._latlngs : this._latlngs[0]; + }, + + // recursively convert latlngs input into actual LatLng instances; calculate bounds along the way + _convertLatLngs: function (latlngs) { + var result = [], + flat = isFlat(latlngs); + + for (var i = 0, len = latlngs.length; i < len; i++) { + if (flat) { + result[i] = toLatLng(latlngs[i]); + this._bounds.extend(result[i]); + } else { + result[i] = this._convertLatLngs(latlngs[i]); + } + } + + return result; + }, + + _project: function () { + var pxBounds = new Bounds(); + this._rings = []; + this._projectLatlngs(this._latlngs, this._rings, pxBounds); + + if (this._bounds.isValid() && pxBounds.isValid()) { + this._rawPxBounds = pxBounds; + this._updateBounds(); + } + }, + + _updateBounds: function () { + var w = this._clickTolerance(), + p = new Point(w, w); + this._pxBounds = new Bounds([ + this._rawPxBounds.min.subtract(p), + this._rawPxBounds.max.add(p) + ]); + }, + + // recursively turns latlngs into a set of rings with projected coordinates + _projectLatlngs: function (latlngs, result, projectedBounds) { + var flat = latlngs[0] instanceof LatLng, + len = latlngs.length, + i, ring; + + if (flat) { + ring = []; + for (i = 0; i < len; i++) { + ring[i] = this._map.latLngToLayerPoint(latlngs[i]); + projectedBounds.extend(ring[i]); + } + result.push(ring); + } else { + for (i = 0; i < len; i++) { + this._projectLatlngs(latlngs[i], result, projectedBounds); + } + } + }, + + // clip polyline by renderer bounds so that we have less to render for performance + _clipPoints: function () { + var bounds = this._renderer._bounds; + + this._parts = []; + if (!this._pxBounds || !this._pxBounds.intersects(bounds)) { + return; + } + + if (this.options.noClip) { + this._parts = this._rings; + return; + } + + var parts = this._parts, + i, j, k, len, len2, segment, points; + + for (i = 0, k = 0, len = this._rings.length; i < len; i++) { + points = this._rings[i]; + + for (j = 0, len2 = points.length; j < len2 - 1; j++) { + segment = clipSegment(points[j], points[j + 1], bounds, j, true); + + if (!segment) { continue; } + + parts[k] = parts[k] || []; + parts[k].push(segment[0]); + + // if segment goes out of screen, or it's the last one, it's the end of the line part + if ((segment[1] !== points[j + 1]) || (j === len2 - 2)) { + parts[k].push(segment[1]); + k++; + } + } + } + }, + + // simplify each clipped part of the polyline for performance + _simplifyPoints: function () { + var parts = this._parts, + tolerance = this.options.smoothFactor; + + for (var i = 0, len = parts.length; i < len; i++) { + parts[i] = simplify(parts[i], tolerance); + } + }, + + _update: function () { + if (!this._map) { return; } + + this._clipPoints(); + this._simplifyPoints(); + this._updatePath(); + }, + + _updatePath: function () { + this._renderer._updatePoly(this); + }, + + // Needed by the `Canvas` renderer for interactivity + _containsPoint: function (p, closed) { + var i, j, k, len, len2, part, + w = this._clickTolerance(); + + if (!this._pxBounds || !this._pxBounds.contains(p)) { return false; } + + // hit detection for polylines + for (i = 0, len = this._parts.length; i < len; i++) { + part = this._parts[i]; + + for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) { + if (!closed && (j === 0)) { continue; } + + if (pointToSegmentDistance(p, part[k], part[j]) <= w) { + return true; + } + } + } + return false; + } +}); + +// @factory L.polyline(latlngs: LatLng[], options?: Polyline options) +// Instantiates a polyline object given an array of geographical points and +// optionally an options object. You can create a `Polyline` object with +// multiple separate lines (`MultiPolyline`) by passing an array of arrays +// of geographic points. +function polyline(latlngs, options) { + return new Polyline(latlngs, options); +} + +// Retrocompat. Allow plugins to support Leaflet versions before and after 1.1. +Polyline._flat = _flat; + +/* + * @class Polygon + * @aka L.Polygon + * @inherits Polyline + * + * A class for drawing polygon overlays on a map. Extends `Polyline`. + * + * Note that points you pass when creating a polygon shouldn't have an additional last point equal to the first one — it's better to filter out such points. + * + * + * @example + * + * ```js + * // create a red polygon from an array of LatLng points + * var latlngs = [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]]; + * + * var polygon = L.polygon(latlngs, {color: 'red'}).addTo(map); + * + * // zoom the map to the polygon + * map.fitBounds(polygon.getBounds()); + * ``` + * + * You can also pass an array of arrays of latlngs, with the first array representing the outer shape and the other arrays representing holes in the outer shape: + * + * ```js + * var latlngs = [ + * [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring + * [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole + * ]; + * ``` + * + * Additionally, you can pass a multi-dimensional array to represent a MultiPolygon shape. + * + * ```js + * var latlngs = [ + * [ // first polygon + * [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring + * [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole + * ], + * [ // second polygon + * [[41, -111.03],[45, -111.04],[45, -104.05],[41, -104.05]] + * ] + * ]; + * ``` + */ + +var Polygon = Polyline.extend({ + + options: { + fill: true + }, + + isEmpty: function () { + return !this._latlngs.length || !this._latlngs[0].length; + }, + + getCenter: function () { + // throws error when not yet added to map as this center calculation requires projected coordinates + if (!this._map) { + throw new Error('Must add layer to map before using getCenter()'); + } + + var i, j, p1, p2, f, area, x, y, center, + points = this._rings[0], + len = points.length; + + if (!len) { return null; } + + // polygon centroid algorithm; only uses the first ring if there are multiple + + area = x = y = 0; + + for (i = 0, j = len - 1; i < len; j = i++) { + p1 = points[i]; + p2 = points[j]; + + f = p1.y * p2.x - p2.y * p1.x; + x += (p1.x + p2.x) * f; + y += (p1.y + p2.y) * f; + area += f * 3; + } + + if (area === 0) { + // Polygon is so small that all points are on same pixel. + center = points[0]; + } else { + center = [x / area, y / area]; + } + return this._map.layerPointToLatLng(center); + }, + + _convertLatLngs: function (latlngs) { + var result = Polyline.prototype._convertLatLngs.call(this, latlngs), + len = result.length; + + // remove last point if it equals first one + if (len >= 2 && result[0] instanceof LatLng && result[0].equals(result[len - 1])) { + result.pop(); + } + return result; + }, + + _setLatLngs: function (latlngs) { + Polyline.prototype._setLatLngs.call(this, latlngs); + if (isFlat(this._latlngs)) { + this._latlngs = [this._latlngs]; + } + }, + + _defaultShape: function () { + return isFlat(this._latlngs[0]) ? this._latlngs[0] : this._latlngs[0][0]; + }, + + _clipPoints: function () { + // polygons need a different clipping algorithm so we redefine that + + var bounds = this._renderer._bounds, + w = this.options.weight, + p = new Point(w, w); + + // increase clip padding by stroke width to avoid stroke on clip edges + bounds = new Bounds(bounds.min.subtract(p), bounds.max.add(p)); + + this._parts = []; + if (!this._pxBounds || !this._pxBounds.intersects(bounds)) { + return; + } + + if (this.options.noClip) { + this._parts = this._rings; + return; + } + + for (var i = 0, len = this._rings.length, clipped; i < len; i++) { + clipped = clipPolygon(this._rings[i], bounds, true); + if (clipped.length) { + this._parts.push(clipped); + } + } + }, + + _updatePath: function () { + this._renderer._updatePoly(this, true); + }, + + // Needed by the `Canvas` renderer for interactivity + _containsPoint: function (p) { + var inside = false, + part, p1, p2, i, j, k, len, len2; + + if (!this._pxBounds || !this._pxBounds.contains(p)) { return false; } + + // ray casting algorithm for detecting if point is in polygon + for (i = 0, len = this._parts.length; i < len; i++) { + part = this._parts[i]; + + for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) { + p1 = part[j]; + p2 = part[k]; + + if (((p1.y > p.y) !== (p2.y > p.y)) && (p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) { + inside = !inside; + } + } + } + + // also check if it's on polygon stroke + return inside || Polyline.prototype._containsPoint.call(this, p, true); + } + +}); + + +// @factory L.polygon(latlngs: LatLng[], options?: Polyline options) +function polygon(latlngs, options) { + return new Polygon(latlngs, options); +} + +/* + * @class GeoJSON + * @aka L.GeoJSON + * @inherits FeatureGroup + * + * Represents a GeoJSON object or an array of GeoJSON objects. Allows you to parse + * GeoJSON data and display it on the map. Extends `FeatureGroup`. + * + * @example + * + * ```js + * L.geoJSON(data, { + * style: function (feature) { + * return {color: feature.properties.color}; + * } + * }).bindPopup(function (layer) { + * return layer.feature.properties.description; + * }).addTo(map); + * ``` + */ + +var GeoJSON = FeatureGroup.extend({ + + /* @section + * @aka GeoJSON options + * + * @option pointToLayer: Function = * + * A `Function` defining how GeoJSON points spawn Leaflet layers. It is internally + * called when data is added, passing the GeoJSON point feature and its `LatLng`. + * The default is to spawn a default `Marker`: + * ```js + * function(geoJsonPoint, latlng) { + * return L.marker(latlng); + * } + * ``` + * + * @option style: Function = * + * A `Function` defining the `Path options` for styling GeoJSON lines and polygons, + * called internally when data is added. + * The default value is to not override any defaults: + * ```js + * function (geoJsonFeature) { + * return {} + * } + * ``` + * + * @option onEachFeature: Function = * + * A `Function` that will be called once for each created `Feature`, after it has + * been created and styled. Useful for attaching events and popups to features. + * The default is to do nothing with the newly created layers: + * ```js + * function (feature, layer) {} + * ``` + * + * @option filter: Function = * + * A `Function` that will be used to decide whether to include a feature or not. + * The default is to include all features: + * ```js + * function (geoJsonFeature) { + * return true; + * } + * ``` + * Note: dynamically changing the `filter` option will have effect only on newly + * added data. It will _not_ re-evaluate already included features. + * + * @option coordsToLatLng: Function = * + * A `Function` that will be used for converting GeoJSON coordinates to `LatLng`s. + * The default is the `coordsToLatLng` static method. + * + * @option markersInheritOptions: Boolean = false + * Whether default Markers for "Point" type Features inherit from group options. + */ + + initialize: function (geojson, options) { + setOptions(this, options); + + this._layers = {}; + + if (geojson) { + this.addData(geojson); + } + }, + + // @method addData( data ): this + // Adds a GeoJSON object to the layer. + addData: function (geojson) { + var features = isArray(geojson) ? geojson : geojson.features, + i, len, feature; + + if (features) { + for (i = 0, len = features.length; i < len; i++) { + // only add this if geometry or geometries are set and not null + feature = features[i]; + if (feature.geometries || feature.geometry || feature.features || feature.coordinates) { + this.addData(feature); + } + } + return this; + } + + var options = this.options; + + if (options.filter && !options.filter(geojson)) { return this; } + + var layer = geometryToLayer(geojson, options); + if (!layer) { + return this; + } + layer.feature = asFeature(geojson); + + layer.defaultOptions = layer.options; + this.resetStyle(layer); + + if (options.onEachFeature) { + options.onEachFeature(geojson, layer); + } + + return this.addLayer(layer); + }, + + // @method resetStyle( layer? ): this + // Resets the given vector layer's style to the original GeoJSON style, useful for resetting style after hover events. + // If `layer` is omitted, the style of all features in the current layer is reset. + resetStyle: function (layer) { + if (layer === undefined) { + return this.eachLayer(this.resetStyle, this); + } + // reset any custom styles + layer.options = extend({}, layer.defaultOptions); + this._setLayerStyle(layer, this.options.style); + return this; + }, + + // @method setStyle( style ): this + // Changes styles of GeoJSON vector layers with the given style function. + setStyle: function (style) { + return this.eachLayer(function (layer) { + this._setLayerStyle(layer, style); + }, this); + }, + + _setLayerStyle: function (layer, style) { + if (layer.setStyle) { + if (typeof style === 'function') { + style = style(layer.feature); + } + layer.setStyle(style); + } + } +}); + +// @section +// There are several static functions which can be called without instantiating L.GeoJSON: + +// @function geometryToLayer(featureData: Object, options?: GeoJSON options): Layer +// Creates a `Layer` from a given GeoJSON feature. Can use a custom +// [`pointToLayer`](#geojson-pointtolayer) and/or [`coordsToLatLng`](#geojson-coordstolatlng) +// functions if provided as options. +function geometryToLayer(geojson, options) { + + var geometry = geojson.type === 'Feature' ? geojson.geometry : geojson, + coords = geometry ? geometry.coordinates : null, + layers = [], + pointToLayer = options && options.pointToLayer, + _coordsToLatLng = options && options.coordsToLatLng || coordsToLatLng, + latlng, latlngs, i, len; + + if (!coords && !geometry) { + return null; + } + + switch (geometry.type) { + case 'Point': + latlng = _coordsToLatLng(coords); + return _pointToLayer(pointToLayer, geojson, latlng, options); + + case 'MultiPoint': + for (i = 0, len = coords.length; i < len; i++) { + latlng = _coordsToLatLng(coords[i]); + layers.push(_pointToLayer(pointToLayer, geojson, latlng, options)); + } + return new FeatureGroup(layers); + + case 'LineString': + case 'MultiLineString': + latlngs = coordsToLatLngs(coords, geometry.type === 'LineString' ? 0 : 1, _coordsToLatLng); + return new Polyline(latlngs, options); + + case 'Polygon': + case 'MultiPolygon': + latlngs = coordsToLatLngs(coords, geometry.type === 'Polygon' ? 1 : 2, _coordsToLatLng); + return new Polygon(latlngs, options); + + case 'GeometryCollection': + for (i = 0, len = geometry.geometries.length; i < len; i++) { + var layer = geometryToLayer({ + geometry: geometry.geometries[i], + type: 'Feature', + properties: geojson.properties + }, options); + + if (layer) { + layers.push(layer); + } + } + return new FeatureGroup(layers); + + default: + throw new Error('Invalid GeoJSON object.'); + } +} + +function _pointToLayer(pointToLayerFn, geojson, latlng, options) { + return pointToLayerFn ? + pointToLayerFn(geojson, latlng) : + new Marker(latlng, options && options.markersInheritOptions && options); +} + +// @function coordsToLatLng(coords: Array): LatLng +// Creates a `LatLng` object from an array of 2 numbers (longitude, latitude) +// or 3 numbers (longitude, latitude, altitude) used in GeoJSON for points. +function coordsToLatLng(coords) { + return new LatLng(coords[1], coords[0], coords[2]); +} + +// @function coordsToLatLngs(coords: Array, levelsDeep?: Number, coordsToLatLng?: Function): Array +// Creates a multidimensional array of `LatLng`s from a GeoJSON coordinates array. +// `levelsDeep` specifies the nesting level (0 is for an array of points, 1 for an array of arrays of points, etc., 0 by default). +// Can use a custom [`coordsToLatLng`](#geojson-coordstolatlng) function. +function coordsToLatLngs(coords, levelsDeep, _coordsToLatLng) { + var latlngs = []; + + for (var i = 0, len = coords.length, latlng; i < len; i++) { + latlng = levelsDeep ? + coordsToLatLngs(coords[i], levelsDeep - 1, _coordsToLatLng) : + (_coordsToLatLng || coordsToLatLng)(coords[i]); + + latlngs.push(latlng); + } + + return latlngs; +} + +// @function latLngToCoords(latlng: LatLng, precision?: Number): Array +// Reverse of [`coordsToLatLng`](#geojson-coordstolatlng) +function latLngToCoords(latlng, precision) { + precision = typeof precision === 'number' ? precision : 6; + return latlng.alt !== undefined ? + [formatNum(latlng.lng, precision), formatNum(latlng.lat, precision), formatNum(latlng.alt, precision)] : + [formatNum(latlng.lng, precision), formatNum(latlng.lat, precision)]; +} + +// @function latLngsToCoords(latlngs: Array, levelsDeep?: Number, closed?: Boolean): Array +// Reverse of [`coordsToLatLngs`](#geojson-coordstolatlngs) +// `closed` determines whether the first point should be appended to the end of the array to close the feature, only used when `levelsDeep` is 0. False by default. +function latLngsToCoords(latlngs, levelsDeep, closed, precision) { + var coords = []; + + for (var i = 0, len = latlngs.length; i < len; i++) { + coords.push(levelsDeep ? + latLngsToCoords(latlngs[i], levelsDeep - 1, closed, precision) : + latLngToCoords(latlngs[i], precision)); + } + + if (!levelsDeep && closed) { + coords.push(coords[0]); + } + + return coords; +} + +function getFeature(layer, newGeometry) { + return layer.feature ? + extend({}, layer.feature, {geometry: newGeometry}) : + asFeature(newGeometry); +} + +// @function asFeature(geojson: Object): Object +// Normalize GeoJSON geometries/features into GeoJSON features. +function asFeature(geojson) { + if (geojson.type === 'Feature' || geojson.type === 'FeatureCollection') { + return geojson; + } + + return { + type: 'Feature', + properties: {}, + geometry: geojson + }; +} + +var PointToGeoJSON = { + toGeoJSON: function (precision) { + return getFeature(this, { + type: 'Point', + coordinates: latLngToCoords(this.getLatLng(), precision) + }); + } +}; + +// @namespace Marker +// @section Other methods +// @method toGeoJSON(precision?: Number): Object +// `precision` is the number of decimal places for coordinates. +// The default value is 6 places. +// Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the marker (as a GeoJSON `Point` Feature). +Marker.include(PointToGeoJSON); + +// @namespace CircleMarker +// @method toGeoJSON(precision?: Number): Object +// `precision` is the number of decimal places for coordinates. +// The default value is 6 places. +// Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the circle marker (as a GeoJSON `Point` Feature). +Circle.include(PointToGeoJSON); +CircleMarker.include(PointToGeoJSON); + + +// @namespace Polyline +// @method toGeoJSON(precision?: Number): Object +// `precision` is the number of decimal places for coordinates. +// The default value is 6 places. +// Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the polyline (as a GeoJSON `LineString` or `MultiLineString` Feature). +Polyline.include({ + toGeoJSON: function (precision) { + var multi = !isFlat(this._latlngs); + + var coords = latLngsToCoords(this._latlngs, multi ? 1 : 0, false, precision); + + return getFeature(this, { + type: (multi ? 'Multi' : '') + 'LineString', + coordinates: coords + }); + } +}); + +// @namespace Polygon +// @method toGeoJSON(precision?: Number): Object +// `precision` is the number of decimal places for coordinates. +// The default value is 6 places. +// Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the polygon (as a GeoJSON `Polygon` or `MultiPolygon` Feature). +Polygon.include({ + toGeoJSON: function (precision) { + var holes = !isFlat(this._latlngs), + multi = holes && !isFlat(this._latlngs[0]); + + var coords = latLngsToCoords(this._latlngs, multi ? 2 : holes ? 1 : 0, true, precision); + + if (!holes) { + coords = [coords]; + } + + return getFeature(this, { + type: (multi ? 'Multi' : '') + 'Polygon', + coordinates: coords + }); + } +}); + + +// @namespace LayerGroup +LayerGroup.include({ + toMultiPoint: function (precision) { + var coords = []; + + this.eachLayer(function (layer) { + coords.push(layer.toGeoJSON(precision).geometry.coordinates); + }); + + return getFeature(this, { + type: 'MultiPoint', + coordinates: coords + }); + }, + + // @method toGeoJSON(precision?: Number): Object + // `precision` is the number of decimal places for coordinates. + // The default value is 6 places. + // Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the layer group (as a GeoJSON `FeatureCollection`, `GeometryCollection`, or `MultiPoint`). + toGeoJSON: function (precision) { + + var type = this.feature && this.feature.geometry && this.feature.geometry.type; + + if (type === 'MultiPoint') { + return this.toMultiPoint(precision); + } + + var isGeometryCollection = type === 'GeometryCollection', + jsons = []; + + this.eachLayer(function (layer) { + if (layer.toGeoJSON) { + var json = layer.toGeoJSON(precision); + if (isGeometryCollection) { + jsons.push(json.geometry); + } else { + var feature = asFeature(json); + // Squash nested feature collections + if (feature.type === 'FeatureCollection') { + jsons.push.apply(jsons, feature.features); + } else { + jsons.push(feature); + } + } + } + }); + + if (isGeometryCollection) { + return getFeature(this, { + geometries: jsons, + type: 'GeometryCollection' + }); + } + + return { + type: 'FeatureCollection', + features: jsons + }; + } +}); + +// @namespace GeoJSON +// @factory L.geoJSON(geojson?: Object, options?: GeoJSON options) +// Creates a GeoJSON layer. Optionally accepts an object in +// [GeoJSON format](https://tools.ietf.org/html/rfc7946) to display on the map +// (you can alternatively add it later with `addData` method) and an `options` object. +function geoJSON(geojson, options) { + return new GeoJSON(geojson, options); +} + +// Backward compatibility. +var geoJson = geoJSON; + +/* + * @class ImageOverlay + * @aka L.ImageOverlay + * @inherits Interactive layer + * + * Used to load and display a single image over specific bounds of the map. Extends `Layer`. + * + * @example + * + * ```js + * var imageUrl = 'http://www.lib.utexas.edu/maps/historical/newark_nj_1922.jpg', + * imageBounds = [[40.712216, -74.22655], [40.773941, -74.12544]]; + * L.imageOverlay(imageUrl, imageBounds).addTo(map); + * ``` + */ + +var ImageOverlay = Layer.extend({ + + // @section + // @aka ImageOverlay options + options: { + // @option opacity: Number = 1.0 + // The opacity of the image overlay. + opacity: 1, + + // @option alt: String = '' + // Text for the `alt` attribute of the image (useful for accessibility). + alt: '', + + // @option interactive: Boolean = false + // If `true`, the image overlay will emit [mouse events](#interactive-layer) when clicked or hovered. + interactive: false, + + // @option crossOrigin: Boolean|String = false + // Whether the crossOrigin attribute will be added to the image. + // If a String is provided, the image will have its crossOrigin attribute set to the String provided. This is needed if you want to access image pixel data. + // Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values. + crossOrigin: false, + + // @option errorOverlayUrl: String = '' + // URL to the overlay image to show in place of the overlay that failed to load. + errorOverlayUrl: '', + + // @option zIndex: Number = 1 + // The explicit [zIndex](https://developer.mozilla.org/docs/Web/CSS/CSS_Positioning/Understanding_z_index) of the overlay layer. + zIndex: 1, + + // @option className: String = '' + // A custom class name to assign to the image. Empty by default. + className: '' + }, + + initialize: function (url, bounds, options) { // (String, LatLngBounds, Object) + this._url = url; + this._bounds = toLatLngBounds(bounds); + + setOptions(this, options); + }, + + onAdd: function () { + if (!this._image) { + this._initImage(); + + if (this.options.opacity < 1) { + this._updateOpacity(); + } + } + + if (this.options.interactive) { + addClass(this._image, 'leaflet-interactive'); + this.addInteractiveTarget(this._image); + } + + this.getPane().appendChild(this._image); + this._reset(); + }, + + onRemove: function () { + remove(this._image); + if (this.options.interactive) { + this.removeInteractiveTarget(this._image); + } + }, + + // @method setOpacity(opacity: Number): this + // Sets the opacity of the overlay. + setOpacity: function (opacity) { + this.options.opacity = opacity; + + if (this._image) { + this._updateOpacity(); + } + return this; + }, + + setStyle: function (styleOpts) { + if (styleOpts.opacity) { + this.setOpacity(styleOpts.opacity); + } + return this; + }, + + // @method bringToFront(): this + // Brings the layer to the top of all overlays. + bringToFront: function () { + if (this._map) { + toFront(this._image); + } + return this; + }, + + // @method bringToBack(): this + // Brings the layer to the bottom of all overlays. + bringToBack: function () { + if (this._map) { + toBack(this._image); + } + return this; + }, + + // @method setUrl(url: String): this + // Changes the URL of the image. + setUrl: function (url) { + this._url = url; + + if (this._image) { + this._image.src = url; + } + return this; + }, + + // @method setBounds(bounds: LatLngBounds): this + // Update the bounds that this ImageOverlay covers + setBounds: function (bounds) { + this._bounds = toLatLngBounds(bounds); + + if (this._map) { + this._reset(); + } + return this; + }, + + getEvents: function () { + var events = { + zoom: this._reset, + viewreset: this._reset + }; + + if (this._zoomAnimated) { + events.zoomanim = this._animateZoom; + } + + return events; + }, + + // @method setZIndex(value: Number): this + // Changes the [zIndex](#imageoverlay-zindex) of the image overlay. + setZIndex: function (value) { + this.options.zIndex = value; + this._updateZIndex(); + return this; + }, + + // @method getBounds(): LatLngBounds + // Get the bounds that this ImageOverlay covers + getBounds: function () { + return this._bounds; + }, + + // @method getElement(): HTMLElement + // Returns the instance of [`HTMLImageElement`](https://developer.mozilla.org/docs/Web/API/HTMLImageElement) + // used by this overlay. + getElement: function () { + return this._image; + }, + + _initImage: function () { + var wasElementSupplied = this._url.tagName === 'IMG'; + var img = this._image = wasElementSupplied ? this._url : create$1('img'); + + addClass(img, 'leaflet-image-layer'); + if (this._zoomAnimated) { addClass(img, 'leaflet-zoom-animated'); } + if (this.options.className) { addClass(img, this.options.className); } + + img.onselectstart = falseFn; + img.onmousemove = falseFn; + + // @event load: Event + // Fired when the ImageOverlay layer has loaded its image + img.onload = bind(this.fire, this, 'load'); + img.onerror = bind(this._overlayOnError, this, 'error'); + + if (this.options.crossOrigin || this.options.crossOrigin === '') { + img.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin; + } + + if (this.options.zIndex) { + this._updateZIndex(); + } + + if (wasElementSupplied) { + this._url = img.src; + return; + } + + img.src = this._url; + img.alt = this.options.alt; + }, + + _animateZoom: function (e) { + var scale = this._map.getZoomScale(e.zoom), + offset = this._map._latLngBoundsToNewLayerBounds(this._bounds, e.zoom, e.center).min; + + setTransform(this._image, offset, scale); + }, + + _reset: function () { + var image = this._image, + bounds = new Bounds( + this._map.latLngToLayerPoint(this._bounds.getNorthWest()), + this._map.latLngToLayerPoint(this._bounds.getSouthEast())), + size = bounds.getSize(); + + setPosition(image, bounds.min); + + image.style.width = size.x + 'px'; + image.style.height = size.y + 'px'; + }, + + _updateOpacity: function () { + setOpacity(this._image, this.options.opacity); + }, + + _updateZIndex: function () { + if (this._image && this.options.zIndex !== undefined && this.options.zIndex !== null) { + this._image.style.zIndex = this.options.zIndex; + } + }, + + _overlayOnError: function () { + // @event error: Event + // Fired when the ImageOverlay layer fails to load its image + this.fire('error'); + + var errorUrl = this.options.errorOverlayUrl; + if (errorUrl && this._url !== errorUrl) { + this._url = errorUrl; + this._image.src = errorUrl; + } + } +}); + +// @factory L.imageOverlay(imageUrl: String, bounds: LatLngBounds, options?: ImageOverlay options) +// Instantiates an image overlay object given the URL of the image and the +// geographical bounds it is tied to. +var imageOverlay = function (url, bounds, options) { + return new ImageOverlay(url, bounds, options); +}; + +/* + * @class VideoOverlay + * @aka L.VideoOverlay + * @inherits ImageOverlay + * + * Used to load and display a video player over specific bounds of the map. Extends `ImageOverlay`. + * + * A video overlay uses the [`
` + * element instead of an image. Inherits from `Icon` but ignores the `iconUrl` and shadow options. + * + * @example + * ```js + * var myIcon = L.divIcon({className: 'my-div-icon'}); + * // you can set .my-div-icon styles in CSS + * + * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map); + * ``` + * + * By default, it has a 'leaflet-div-icon' CSS class and is styled as a little white square with a shadow. + */ + +var DivIcon = Icon.extend({ + options: { + // @section + // @aka DivIcon options + iconSize: [12, 12], // also can be set through CSS + + // iconAnchor: (Point), + // popupAnchor: (Point), + + // @option html: String|HTMLElement = '' + // Custom HTML code to put inside the div element, empty by default. Alternatively, + // an instance of `HTMLElement`. + html: false, + + // @option bgPos: Point = [0, 0] + // Optional relative position of the background, in pixels + bgPos: null, + + className: 'leaflet-div-icon' + }, + + createIcon: function (oldIcon) { + var div = (oldIcon && oldIcon.tagName === 'DIV') ? oldIcon : document.createElement('div'), + options = this.options; + + if (options.html instanceof Element) { + empty(div); + div.appendChild(options.html); + } else { + div.innerHTML = options.html !== false ? options.html : ''; + } + + if (options.bgPos) { + var bgPos = toPoint(options.bgPos); + div.style.backgroundPosition = (-bgPos.x) + 'px ' + (-bgPos.y) + 'px'; + } + this._setIconStyles(div, 'icon'); + + return div; + }, + + createShadow: function () { + return null; + } +}); + +// @factory L.divIcon(options: DivIcon options) +// Creates a `DivIcon` instance with the given options. +function divIcon(options) { + return new DivIcon(options); +} + +Icon.Default = IconDefault; + +/* + * @class GridLayer + * @inherits Layer + * @aka L.GridLayer + * + * Generic class for handling a tiled grid of HTML elements. This is the base class for all tile layers and replaces `TileLayer.Canvas`. + * GridLayer can be extended to create a tiled grid of HTML elements like ``, `` or `
`. GridLayer will handle creating and animating these DOM elements for you. + * + * + * @section Synchronous usage + * @example + * + * To create a custom layer, extend GridLayer and implement the `createTile()` method, which will be passed a `Point` object with the `x`, `y`, and `z` (zoom level) coordinates to draw your tile. + * + * ```js + * var CanvasLayer = L.GridLayer.extend({ + * createTile: function(coords){ + * // create a element for drawing + * var tile = L.DomUtil.create('canvas', 'leaflet-tile'); + * + * // setup tile width and height according to the options + * var size = this.getTileSize(); + * tile.width = size.x; + * tile.height = size.y; + * + * // get a canvas context and draw something on it using coords.x, coords.y and coords.z + * var ctx = tile.getContext('2d'); + * + * // return the tile so it can be rendered on screen + * return tile; + * } + * }); + * ``` + * + * @section Asynchronous usage + * @example + * + * Tile creation can also be asynchronous, this is useful when using a third-party drawing library. Once the tile is finished drawing it can be passed to the `done()` callback. + * + * ```js + * var CanvasLayer = L.GridLayer.extend({ + * createTile: function(coords, done){ + * var error; + * + * // create a element for drawing + * var tile = L.DomUtil.create('canvas', 'leaflet-tile'); + * + * // setup tile width and height according to the options + * var size = this.getTileSize(); + * tile.width = size.x; + * tile.height = size.y; + * + * // draw something asynchronously and pass the tile to the done() callback + * setTimeout(function() { + * done(error, tile); + * }, 1000); + * + * return tile; + * } + * }); + * ``` + * + * @section + */ + + +var GridLayer = Layer.extend({ + + // @section + // @aka GridLayer options + options: { + // @option tileSize: Number|Point = 256 + // Width and height of tiles in the grid. Use a number if width and height are equal, or `L.point(width, height)` otherwise. + tileSize: 256, + + // @option opacity: Number = 1.0 + // Opacity of the tiles. Can be used in the `createTile()` function. + opacity: 1, + + // @option updateWhenIdle: Boolean = (depends) + // Load new tiles only when panning ends. + // `true` by default on mobile browsers, in order to avoid too many requests and keep smooth navigation. + // `false` otherwise in order to display new tiles _during_ panning, since it is easy to pan outside the + // [`keepBuffer`](#gridlayer-keepbuffer) option in desktop browsers. + updateWhenIdle: mobile, + + // @option updateWhenZooming: Boolean = true + // By default, a smooth zoom animation (during a [touch zoom](#map-touchzoom) or a [`flyTo()`](#map-flyto)) will update grid layers every integer zoom level. Setting this option to `false` will update the grid layer only when the smooth animation ends. + updateWhenZooming: true, + + // @option updateInterval: Number = 200 + // Tiles will not update more than once every `updateInterval` milliseconds when panning. + updateInterval: 200, + + // @option zIndex: Number = 1 + // The explicit zIndex of the tile layer. + zIndex: 1, + + // @option bounds: LatLngBounds = undefined + // If set, tiles will only be loaded inside the set `LatLngBounds`. + bounds: null, + + // @option minZoom: Number = 0 + // The minimum zoom level down to which this layer will be displayed (inclusive). + minZoom: 0, + + // @option maxZoom: Number = undefined + // The maximum zoom level up to which this layer will be displayed (inclusive). + maxZoom: undefined, + + // @option maxNativeZoom: Number = undefined + // Maximum zoom number the tile source has available. If it is specified, + // the tiles on all zoom levels higher than `maxNativeZoom` will be loaded + // from `maxNativeZoom` level and auto-scaled. + maxNativeZoom: undefined, + + // @option minNativeZoom: Number = undefined + // Minimum zoom number the tile source has available. If it is specified, + // the tiles on all zoom levels lower than `minNativeZoom` will be loaded + // from `minNativeZoom` level and auto-scaled. + minNativeZoom: undefined, + + // @option noWrap: Boolean = false + // Whether the layer is wrapped around the antimeridian. If `true`, the + // GridLayer will only be displayed once at low zoom levels. Has no + // effect when the [map CRS](#map-crs) doesn't wrap around. Can be used + // in combination with [`bounds`](#gridlayer-bounds) to prevent requesting + // tiles outside the CRS limits. + noWrap: false, + + // @option pane: String = 'tilePane' + // `Map pane` where the grid layer will be added. + pane: 'tilePane', + + // @option className: String = '' + // A custom class name to assign to the tile layer. Empty by default. + className: '', + + // @option keepBuffer: Number = 2 + // When panning the map, keep this many rows and columns of tiles before unloading them. + keepBuffer: 2 + }, + + initialize: function (options) { + setOptions(this, options); + }, + + onAdd: function () { + this._initContainer(); + + this._levels = {}; + this._tiles = {}; + + this._resetView(); + this._update(); + }, + + beforeAdd: function (map) { + map._addZoomLimit(this); + }, + + onRemove: function (map) { + this._removeAllTiles(); + remove(this._container); + map._removeZoomLimit(this); + this._container = null; + this._tileZoom = undefined; + }, + + // @method bringToFront: this + // Brings the tile layer to the top of all tile layers. + bringToFront: function () { + if (this._map) { + toFront(this._container); + this._setAutoZIndex(Math.max); + } + return this; + }, + + // @method bringToBack: this + // Brings the tile layer to the bottom of all tile layers. + bringToBack: function () { + if (this._map) { + toBack(this._container); + this._setAutoZIndex(Math.min); + } + return this; + }, + + // @method getContainer: HTMLElement + // Returns the HTML element that contains the tiles for this layer. + getContainer: function () { + return this._container; + }, + + // @method setOpacity(opacity: Number): this + // Changes the [opacity](#gridlayer-opacity) of the grid layer. + setOpacity: function (opacity) { + this.options.opacity = opacity; + this._updateOpacity(); + return this; + }, + + // @method setZIndex(zIndex: Number): this + // Changes the [zIndex](#gridlayer-zindex) of the grid layer. + setZIndex: function (zIndex) { + this.options.zIndex = zIndex; + this._updateZIndex(); + + return this; + }, + + // @method isLoading: Boolean + // Returns `true` if any tile in the grid layer has not finished loading. + isLoading: function () { + return this._loading; + }, + + // @method redraw: this + // Causes the layer to clear all the tiles and request them again. + redraw: function () { + if (this._map) { + this._removeAllTiles(); + this._update(); + } + return this; + }, + + getEvents: function () { + var events = { + viewprereset: this._invalidateAll, + viewreset: this._resetView, + zoom: this._resetView, + moveend: this._onMoveEnd + }; + + if (!this.options.updateWhenIdle) { + // update tiles on move, but not more often than once per given interval + if (!this._onMove) { + this._onMove = throttle(this._onMoveEnd, this.options.updateInterval, this); + } + + events.move = this._onMove; + } + + if (this._zoomAnimated) { + events.zoomanim = this._animateZoom; + } + + return events; + }, + + // @section Extension methods + // Layers extending `GridLayer` shall reimplement the following method. + // @method createTile(coords: Object, done?: Function): HTMLElement + // Called only internally, must be overridden by classes extending `GridLayer`. + // Returns the `HTMLElement` corresponding to the given `coords`. If the `done` callback + // is specified, it must be called when the tile has finished loading and drawing. + createTile: function () { + return document.createElement('div'); + }, + + // @section + // @method getTileSize: Point + // Normalizes the [tileSize option](#gridlayer-tilesize) into a point. Used by the `createTile()` method. + getTileSize: function () { + var s = this.options.tileSize; + return s instanceof Point ? s : new Point(s, s); + }, + + _updateZIndex: function () { + if (this._container && this.options.zIndex !== undefined && this.options.zIndex !== null) { + this._container.style.zIndex = this.options.zIndex; + } + }, + + _setAutoZIndex: function (compare) { + // go through all other layers of the same pane, set zIndex to max + 1 (front) or min - 1 (back) + + var layers = this.getPane().children, + edgeZIndex = -compare(-Infinity, Infinity); // -Infinity for max, Infinity for min + + for (var i = 0, len = layers.length, zIndex; i < len; i++) { + + zIndex = layers[i].style.zIndex; + + if (layers[i] !== this._container && zIndex) { + edgeZIndex = compare(edgeZIndex, +zIndex); + } + } + + if (isFinite(edgeZIndex)) { + this.options.zIndex = edgeZIndex + compare(-1, 1); + this._updateZIndex(); + } + }, + + _updateOpacity: function () { + if (!this._map) { return; } + + // IE doesn't inherit filter opacity properly, so we're forced to set it on tiles + if (ielt9) { return; } + + setOpacity(this._container, this.options.opacity); + + var now = +new Date(), + nextFrame = false, + willPrune = false; + + for (var key in this._tiles) { + var tile = this._tiles[key]; + if (!tile.current || !tile.loaded) { continue; } + + var fade = Math.min(1, (now - tile.loaded) / 200); + + setOpacity(tile.el, fade); + if (fade < 1) { + nextFrame = true; + } else { + if (tile.active) { + willPrune = true; + } else { + this._onOpaqueTile(tile); + } + tile.active = true; + } + } + + if (willPrune && !this._noPrune) { this._pruneTiles(); } + + if (nextFrame) { + cancelAnimFrame(this._fadeFrame); + this._fadeFrame = requestAnimFrame(this._updateOpacity, this); + } + }, + + _onOpaqueTile: falseFn, + + _initContainer: function () { + if (this._container) { return; } + + this._container = create$1('div', 'leaflet-layer ' + (this.options.className || '')); + this._updateZIndex(); + + if (this.options.opacity < 1) { + this._updateOpacity(); + } + + this.getPane().appendChild(this._container); + }, + + _updateLevels: function () { + + var zoom = this._tileZoom, + maxZoom = this.options.maxZoom; + + if (zoom === undefined) { return undefined; } + + for (var z in this._levels) { + if (this._levels[z].el.children.length || z === zoom) { + this._levels[z].el.style.zIndex = maxZoom - Math.abs(zoom - z); + this._onUpdateLevel(z); + } else { + remove(this._levels[z].el); + this._removeTilesAtZoom(z); + this._onRemoveLevel(z); + delete this._levels[z]; + } + } + + var level = this._levels[zoom], + map = this._map; + + if (!level) { + level = this._levels[zoom] = {}; + + level.el = create$1('div', 'leaflet-tile-container leaflet-zoom-animated', this._container); + level.el.style.zIndex = maxZoom; + + level.origin = map.project(map.unproject(map.getPixelOrigin()), zoom).round(); + level.zoom = zoom; + + this._setZoomTransform(level, map.getCenter(), map.getZoom()); + + // force the browser to consider the newly added element for transition + falseFn(level.el.offsetWidth); + + this._onCreateLevel(level); + } + + this._level = level; + + return level; + }, + + _onUpdateLevel: falseFn, + + _onRemoveLevel: falseFn, + + _onCreateLevel: falseFn, + + _pruneTiles: function () { + if (!this._map) { + return; + } + + var key, tile; + + var zoom = this._map.getZoom(); + if (zoom > this.options.maxZoom || + zoom < this.options.minZoom) { + this._removeAllTiles(); + return; + } + + for (key in this._tiles) { + tile = this._tiles[key]; + tile.retain = tile.current; + } + + for (key in this._tiles) { + tile = this._tiles[key]; + if (tile.current && !tile.active) { + var coords = tile.coords; + if (!this._retainParent(coords.x, coords.y, coords.z, coords.z - 5)) { + this._retainChildren(coords.x, coords.y, coords.z, coords.z + 2); + } + } + } + + for (key in this._tiles) { + if (!this._tiles[key].retain) { + this._removeTile(key); + } + } + }, + + _removeTilesAtZoom: function (zoom) { + for (var key in this._tiles) { + if (this._tiles[key].coords.z !== zoom) { + continue; + } + this._removeTile(key); + } + }, + + _removeAllTiles: function () { + for (var key in this._tiles) { + this._removeTile(key); + } + }, + + _invalidateAll: function () { + for (var z in this._levels) { + remove(this._levels[z].el); + this._onRemoveLevel(z); + delete this._levels[z]; + } + this._removeAllTiles(); + + this._tileZoom = undefined; + }, + + _retainParent: function (x, y, z, minZoom) { + var x2 = Math.floor(x / 2), + y2 = Math.floor(y / 2), + z2 = z - 1, + coords2 = new Point(+x2, +y2); + coords2.z = +z2; + + var key = this._tileCoordsToKey(coords2), + tile = this._tiles[key]; + + if (tile && tile.active) { + tile.retain = true; + return true; + + } else if (tile && tile.loaded) { + tile.retain = true; + } + + if (z2 > minZoom) { + return this._retainParent(x2, y2, z2, minZoom); + } + + return false; + }, + + _retainChildren: function (x, y, z, maxZoom) { + + for (var i = 2 * x; i < 2 * x + 2; i++) { + for (var j = 2 * y; j < 2 * y + 2; j++) { + + var coords = new Point(i, j); + coords.z = z + 1; + + var key = this._tileCoordsToKey(coords), + tile = this._tiles[key]; + + if (tile && tile.active) { + tile.retain = true; + continue; + + } else if (tile && tile.loaded) { + tile.retain = true; + } + + if (z + 1 < maxZoom) { + this._retainChildren(i, j, z + 1, maxZoom); + } + } + } + }, + + _resetView: function (e) { + var animating = e && (e.pinch || e.flyTo); + this._setView(this._map.getCenter(), this._map.getZoom(), animating, animating); + }, + + _animateZoom: function (e) { + this._setView(e.center, e.zoom, true, e.noUpdate); + }, + + _clampZoom: function (zoom) { + var options = this.options; + + if (undefined !== options.minNativeZoom && zoom < options.minNativeZoom) { + return options.minNativeZoom; + } + + if (undefined !== options.maxNativeZoom && options.maxNativeZoom < zoom) { + return options.maxNativeZoom; + } + + return zoom; + }, + + _setView: function (center, zoom, noPrune, noUpdate) { + var tileZoom = this._clampZoom(Math.round(zoom)); + if ((this.options.maxZoom !== undefined && tileZoom > this.options.maxZoom) || + (this.options.minZoom !== undefined && tileZoom < this.options.minZoom)) { + tileZoom = undefined; + } + + var tileZoomChanged = this.options.updateWhenZooming && (tileZoom !== this._tileZoom); + + if (!noUpdate || tileZoomChanged) { + + this._tileZoom = tileZoom; + + if (this._abortLoading) { + this._abortLoading(); + } + + this._updateLevels(); + this._resetGrid(); + + if (tileZoom !== undefined) { + this._update(center); + } + + if (!noPrune) { + this._pruneTiles(); + } + + // Flag to prevent _updateOpacity from pruning tiles during + // a zoom anim or a pinch gesture + this._noPrune = !!noPrune; + } + + this._setZoomTransforms(center, zoom); + }, + + _setZoomTransforms: function (center, zoom) { + for (var i in this._levels) { + this._setZoomTransform(this._levels[i], center, zoom); + } + }, + + _setZoomTransform: function (level, center, zoom) { + var scale = this._map.getZoomScale(zoom, level.zoom), + translate = level.origin.multiplyBy(scale) + .subtract(this._map._getNewPixelOrigin(center, zoom)).round(); + + if (any3d) { + setTransform(level.el, translate, scale); + } else { + setPosition(level.el, translate); + } + }, + + _resetGrid: function () { + var map = this._map, + crs = map.options.crs, + tileSize = this._tileSize = this.getTileSize(), + tileZoom = this._tileZoom; + + var bounds = this._map.getPixelWorldBounds(this._tileZoom); + if (bounds) { + this._globalTileRange = this._pxBoundsToTileRange(bounds); + } + + this._wrapX = crs.wrapLng && !this.options.noWrap && [ + Math.floor(map.project([0, crs.wrapLng[0]], tileZoom).x / tileSize.x), + Math.ceil(map.project([0, crs.wrapLng[1]], tileZoom).x / tileSize.y) + ]; + this._wrapY = crs.wrapLat && !this.options.noWrap && [ + Math.floor(map.project([crs.wrapLat[0], 0], tileZoom).y / tileSize.x), + Math.ceil(map.project([crs.wrapLat[1], 0], tileZoom).y / tileSize.y) + ]; + }, + + _onMoveEnd: function () { + if (!this._map || this._map._animatingZoom) { return; } + + this._update(); + }, + + _getTiledPixelBounds: function (center) { + var map = this._map, + mapZoom = map._animatingZoom ? Math.max(map._animateToZoom, map.getZoom()) : map.getZoom(), + scale = map.getZoomScale(mapZoom, this._tileZoom), + pixelCenter = map.project(center, this._tileZoom).floor(), + halfSize = map.getSize().divideBy(scale * 2); + + return new Bounds(pixelCenter.subtract(halfSize), pixelCenter.add(halfSize)); + }, + + // Private method to load tiles in the grid's active zoom level according to map bounds + _update: function (center) { + var map = this._map; + if (!map) { return; } + var zoom = this._clampZoom(map.getZoom()); + + if (center === undefined) { center = map.getCenter(); } + if (this._tileZoom === undefined) { return; } // if out of minzoom/maxzoom + + var pixelBounds = this._getTiledPixelBounds(center), + tileRange = this._pxBoundsToTileRange(pixelBounds), + tileCenter = tileRange.getCenter(), + queue = [], + margin = this.options.keepBuffer, + noPruneRange = new Bounds(tileRange.getBottomLeft().subtract([margin, -margin]), + tileRange.getTopRight().add([margin, -margin])); + + // Sanity check: panic if the tile range contains Infinity somewhere. + if (!(isFinite(tileRange.min.x) && + isFinite(tileRange.min.y) && + isFinite(tileRange.max.x) && + isFinite(tileRange.max.y))) { throw new Error('Attempted to load an infinite number of tiles'); } + + for (var key in this._tiles) { + var c = this._tiles[key].coords; + if (c.z !== this._tileZoom || !noPruneRange.contains(new Point(c.x, c.y))) { + this._tiles[key].current = false; + } + } + + // _update just loads more tiles. If the tile zoom level differs too much + // from the map's, let _setView reset levels and prune old tiles. + if (Math.abs(zoom - this._tileZoom) > 1) { this._setView(center, zoom); return; } + + // create a queue of coordinates to load tiles from + for (var j = tileRange.min.y; j <= tileRange.max.y; j++) { + for (var i = tileRange.min.x; i <= tileRange.max.x; i++) { + var coords = new Point(i, j); + coords.z = this._tileZoom; + + if (!this._isValidTile(coords)) { continue; } + + var tile = this._tiles[this._tileCoordsToKey(coords)]; + if (tile) { + tile.current = true; + } else { + queue.push(coords); + } + } + } + + // sort tile queue to load tiles in order of their distance to center + queue.sort(function (a, b) { + return a.distanceTo(tileCenter) - b.distanceTo(tileCenter); + }); + + if (queue.length !== 0) { + // if it's the first batch of tiles to load + if (!this._loading) { + this._loading = true; + // @event loading: Event + // Fired when the grid layer starts loading tiles. + this.fire('loading'); + } + + // create DOM fragment to append tiles in one batch + var fragment = document.createDocumentFragment(); + + for (i = 0; i < queue.length; i++) { + this._addTile(queue[i], fragment); + } + + this._level.el.appendChild(fragment); + } + }, + + _isValidTile: function (coords) { + var crs = this._map.options.crs; + + if (!crs.infinite) { + // don't load tile if it's out of bounds and not wrapped + var bounds = this._globalTileRange; + if ((!crs.wrapLng && (coords.x < bounds.min.x || coords.x > bounds.max.x)) || + (!crs.wrapLat && (coords.y < bounds.min.y || coords.y > bounds.max.y))) { return false; } + } + + if (!this.options.bounds) { return true; } + + // don't load tile if it doesn't intersect the bounds in options + var tileBounds = this._tileCoordsToBounds(coords); + return toLatLngBounds(this.options.bounds).overlaps(tileBounds); + }, + + _keyToBounds: function (key) { + return this._tileCoordsToBounds(this._keyToTileCoords(key)); + }, + + _tileCoordsToNwSe: function (coords) { + var map = this._map, + tileSize = this.getTileSize(), + nwPoint = coords.scaleBy(tileSize), + sePoint = nwPoint.add(tileSize), + nw = map.unproject(nwPoint, coords.z), + se = map.unproject(sePoint, coords.z); + return [nw, se]; + }, + + // converts tile coordinates to its geographical bounds + _tileCoordsToBounds: function (coords) { + var bp = this._tileCoordsToNwSe(coords), + bounds = new LatLngBounds(bp[0], bp[1]); + + if (!this.options.noWrap) { + bounds = this._map.wrapLatLngBounds(bounds); + } + return bounds; + }, + // converts tile coordinates to key for the tile cache + _tileCoordsToKey: function (coords) { + return coords.x + ':' + coords.y + ':' + coords.z; + }, + + // converts tile cache key to coordinates + _keyToTileCoords: function (key) { + var k = key.split(':'), + coords = new Point(+k[0], +k[1]); + coords.z = +k[2]; + return coords; + }, + + _removeTile: function (key) { + var tile = this._tiles[key]; + if (!tile) { return; } + + remove(tile.el); + + delete this._tiles[key]; + + // @event tileunload: TileEvent + // Fired when a tile is removed (e.g. when a tile goes off the screen). + this.fire('tileunload', { + tile: tile.el, + coords: this._keyToTileCoords(key) + }); + }, + + _initTile: function (tile) { + addClass(tile, 'leaflet-tile'); + + var tileSize = this.getTileSize(); + tile.style.width = tileSize.x + 'px'; + tile.style.height = tileSize.y + 'px'; + + tile.onselectstart = falseFn; + tile.onmousemove = falseFn; + + // update opacity on tiles in IE7-8 because of filter inheritance problems + if (ielt9 && this.options.opacity < 1) { + setOpacity(tile, this.options.opacity); + } + + // without this hack, tiles disappear after zoom on Chrome for Android + // https://github.com/Leaflet/Leaflet/issues/2078 + if (android && !android23) { + tile.style.WebkitBackfaceVisibility = 'hidden'; + } + }, + + _addTile: function (coords, container) { + var tilePos = this._getTilePos(coords), + key = this._tileCoordsToKey(coords); + + var tile = this.createTile(this._wrapCoords(coords), bind(this._tileReady, this, coords)); + + this._initTile(tile); + + // if createTile is defined with a second argument ("done" callback), + // we know that tile is async and will be ready later; otherwise + if (this.createTile.length < 2) { + // mark tile as ready, but delay one frame for opacity animation to happen + requestAnimFrame(bind(this._tileReady, this, coords, null, tile)); + } + + setPosition(tile, tilePos); + + // save tile in cache + this._tiles[key] = { + el: tile, + coords: coords, + current: true + }; + + container.appendChild(tile); + // @event tileloadstart: TileEvent + // Fired when a tile is requested and starts loading. + this.fire('tileloadstart', { + tile: tile, + coords: coords + }); + }, + + _tileReady: function (coords, err, tile) { + if (err) { + // @event tileerror: TileErrorEvent + // Fired when there is an error loading a tile. + this.fire('tileerror', { + error: err, + tile: tile, + coords: coords + }); + } + + var key = this._tileCoordsToKey(coords); + + tile = this._tiles[key]; + if (!tile) { return; } + + tile.loaded = +new Date(); + if (this._map._fadeAnimated) { + setOpacity(tile.el, 0); + cancelAnimFrame(this._fadeFrame); + this._fadeFrame = requestAnimFrame(this._updateOpacity, this); + } else { + tile.active = true; + this._pruneTiles(); + } + + if (!err) { + addClass(tile.el, 'leaflet-tile-loaded'); + + // @event tileload: TileEvent + // Fired when a tile loads. + this.fire('tileload', { + tile: tile.el, + coords: coords + }); + } + + if (this._noTilesToLoad()) { + this._loading = false; + // @event load: Event + // Fired when the grid layer loaded all visible tiles. + this.fire('load'); + + if (ielt9 || !this._map._fadeAnimated) { + requestAnimFrame(this._pruneTiles, this); + } else { + // Wait a bit more than 0.2 secs (the duration of the tile fade-in) + // to trigger a pruning. + setTimeout(bind(this._pruneTiles, this), 250); + } + } + }, + + _getTilePos: function (coords) { + return coords.scaleBy(this.getTileSize()).subtract(this._level.origin); + }, + + _wrapCoords: function (coords) { + var newCoords = new Point( + this._wrapX ? wrapNum(coords.x, this._wrapX) : coords.x, + this._wrapY ? wrapNum(coords.y, this._wrapY) : coords.y); + newCoords.z = coords.z; + return newCoords; + }, + + _pxBoundsToTileRange: function (bounds) { + var tileSize = this.getTileSize(); + return new Bounds( + bounds.min.unscaleBy(tileSize).floor(), + bounds.max.unscaleBy(tileSize).ceil().subtract([1, 1])); + }, + + _noTilesToLoad: function () { + for (var key in this._tiles) { + if (!this._tiles[key].loaded) { return false; } + } + return true; + } +}); + +// @factory L.gridLayer(options?: GridLayer options) +// Creates a new instance of GridLayer with the supplied options. +function gridLayer(options) { + return new GridLayer(options); +} + +/* + * @class TileLayer + * @inherits GridLayer + * @aka L.TileLayer + * Used to load and display tile layers on the map. Note that most tile servers require attribution, which you can set under `Layer`. Extends `GridLayer`. + * + * @example + * + * ```js + * L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png?{foo}', {foo: 'bar', attribution: 'Map data © OpenStreetMap contributors, CC-BY-SA'}).addTo(map); + * ``` + * + * @section URL template + * @example + * + * A string of the following form: + * + * ``` + * 'http://{s}.somedomain.com/blabla/{z}/{x}/{y}{r}.png' + * ``` + * + * `{s}` means one of the available subdomains (used sequentially to help with browser parallel requests per domain limitation; subdomain values are specified in options; `a`, `b` or `c` by default, can be omitted), `{z}` — zoom level, `{x}` and `{y}` — tile coordinates. `{r}` can be used to add "@2x" to the URL to load retina tiles. + * + * You can use custom keys in the template, which will be [evaluated](#util-template) from TileLayer options, like this: + * + * ``` + * L.tileLayer('http://{s}.somedomain.com/{foo}/{z}/{x}/{y}.png', {foo: 'bar'}); + * ``` + */ + + +var TileLayer = GridLayer.extend({ + + // @section + // @aka TileLayer options + options: { + // @option minZoom: Number = 0 + // The minimum zoom level down to which this layer will be displayed (inclusive). + minZoom: 0, + + // @option maxZoom: Number = 18 + // The maximum zoom level up to which this layer will be displayed (inclusive). + maxZoom: 18, + + // @option subdomains: String|String[] = 'abc' + // Subdomains of the tile service. Can be passed in the form of one string (where each letter is a subdomain name) or an array of strings. + subdomains: 'abc', + + // @option errorTileUrl: String = '' + // URL to the tile image to show in place of the tile that failed to load. + errorTileUrl: '', + + // @option zoomOffset: Number = 0 + // The zoom number used in tile URLs will be offset with this value. + zoomOffset: 0, + + // @option tms: Boolean = false + // If `true`, inverses Y axis numbering for tiles (turn this on for [TMS](https://en.wikipedia.org/wiki/Tile_Map_Service) services). + tms: false, + + // @option zoomReverse: Boolean = false + // If set to true, the zoom number used in tile URLs will be reversed (`maxZoom - zoom` instead of `zoom`) + zoomReverse: false, + + // @option detectRetina: Boolean = false + // If `true` and user is on a retina display, it will request four tiles of half the specified size and a bigger zoom level in place of one to utilize the high resolution. + detectRetina: false, + + // @option crossOrigin: Boolean|String = false + // Whether the crossOrigin attribute will be added to the tiles. + // If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data. + // Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values. + crossOrigin: false + }, + + initialize: function (url, options) { + + this._url = url; + + options = setOptions(this, options); + + // detecting retina displays, adjusting tileSize and zoom levels + if (options.detectRetina && retina && options.maxZoom > 0) { + + options.tileSize = Math.floor(options.tileSize / 2); + + if (!options.zoomReverse) { + options.zoomOffset++; + options.maxZoom--; + } else { + options.zoomOffset--; + options.minZoom++; + } + + options.minZoom = Math.max(0, options.minZoom); + } + + if (typeof options.subdomains === 'string') { + options.subdomains = options.subdomains.split(''); + } + + // for https://github.com/Leaflet/Leaflet/issues/137 + if (!android) { + this.on('tileunload', this._onTileRemove); + } + }, + + // @method setUrl(url: String, noRedraw?: Boolean): this + // Updates the layer's URL template and redraws it (unless `noRedraw` is set to `true`). + // If the URL does not change, the layer will not be redrawn unless + // the noRedraw parameter is set to false. + setUrl: function (url, noRedraw) { + if (this._url === url && noRedraw === undefined) { + noRedraw = true; + } + + this._url = url; + + if (!noRedraw) { + this.redraw(); + } + return this; + }, + + // @method createTile(coords: Object, done?: Function): HTMLElement + // Called only internally, overrides GridLayer's [`createTile()`](#gridlayer-createtile) + // to return an `` HTML element with the appropriate image URL given `coords`. The `done` + // callback is called when the tile has been loaded. + createTile: function (coords, done) { + var tile = document.createElement('img'); + + on(tile, 'load', bind(this._tileOnLoad, this, done, tile)); + on(tile, 'error', bind(this._tileOnError, this, done, tile)); + + if (this.options.crossOrigin || this.options.crossOrigin === '') { + tile.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin; + } + + /* + Alt tag is set to empty string to keep screen readers from reading URL and for compliance reasons + http://www.w3.org/TR/WCAG20-TECHS/H67 + */ + tile.alt = ''; + + /* + Set role="presentation" to force screen readers to ignore this + https://www.w3.org/TR/wai-aria/roles#textalternativecomputation + */ + tile.setAttribute('role', 'presentation'); + + tile.src = this.getTileUrl(coords); + + return tile; + }, + + // @section Extension methods + // @uninheritable + // Layers extending `TileLayer` might reimplement the following method. + // @method getTileUrl(coords: Object): String + // Called only internally, returns the URL for a tile given its coordinates. + // Classes extending `TileLayer` can override this function to provide custom tile URL naming schemes. + getTileUrl: function (coords) { + var data = { + r: retina ? '@2x' : '', + s: this._getSubdomain(coords), + x: coords.x, + y: coords.y, + z: this._getZoomForUrl() + }; + if (this._map && !this._map.options.crs.infinite) { + var invertedY = this._globalTileRange.max.y - coords.y; + if (this.options.tms) { + data['y'] = invertedY; + } + data['-y'] = invertedY; + } + + return template(this._url, extend(data, this.options)); + }, + + _tileOnLoad: function (done, tile) { + // For https://github.com/Leaflet/Leaflet/issues/3332 + if (ielt9) { + setTimeout(bind(done, this, null, tile), 0); + } else { + done(null, tile); + } + }, + + _tileOnError: function (done, tile, e) { + var errorUrl = this.options.errorTileUrl; + if (errorUrl && tile.getAttribute('src') !== errorUrl) { + tile.src = errorUrl; + } + done(e, tile); + }, + + _onTileRemove: function (e) { + e.tile.onload = null; + }, + + _getZoomForUrl: function () { + var zoom = this._tileZoom, + maxZoom = this.options.maxZoom, + zoomReverse = this.options.zoomReverse, + zoomOffset = this.options.zoomOffset; + + if (zoomReverse) { + zoom = maxZoom - zoom; + } + + return zoom + zoomOffset; + }, + + _getSubdomain: function (tilePoint) { + var index = Math.abs(tilePoint.x + tilePoint.y) % this.options.subdomains.length; + return this.options.subdomains[index]; + }, + + // stops loading all tiles in the background layer + _abortLoading: function () { + var i, tile; + for (i in this._tiles) { + if (this._tiles[i].coords.z !== this._tileZoom) { + tile = this._tiles[i].el; + + tile.onload = falseFn; + tile.onerror = falseFn; + + if (!tile.complete) { + tile.src = emptyImageUrl; + remove(tile); + delete this._tiles[i]; + } + } + } + }, + + _removeTile: function (key) { + var tile = this._tiles[key]; + if (!tile) { return; } + + // Cancels any pending http requests associated with the tile + // unless we're on Android's stock browser, + // see https://github.com/Leaflet/Leaflet/issues/137 + if (!androidStock) { + tile.el.setAttribute('src', emptyImageUrl); + } + + return GridLayer.prototype._removeTile.call(this, key); + }, + + _tileReady: function (coords, err, tile) { + if (!this._map || (tile && tile.getAttribute('src') === emptyImageUrl)) { + return; + } + + return GridLayer.prototype._tileReady.call(this, coords, err, tile); + } +}); + + +// @factory L.tilelayer(urlTemplate: String, options?: TileLayer options) +// Instantiates a tile layer object given a `URL template` and optionally an options object. + +function tileLayer(url, options) { + return new TileLayer(url, options); +} + +/* + * @class TileLayer.WMS + * @inherits TileLayer + * @aka L.TileLayer.WMS + * Used to display [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services as tile layers on the map. Extends `TileLayer`. + * + * @example + * + * ```js + * var nexrad = L.tileLayer.wms("http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi", { + * layers: 'nexrad-n0r-900913', + * format: 'image/png', + * transparent: true, + * attribution: "Weather data © 2012 IEM Nexrad" + * }); + * ``` + */ + +var TileLayerWMS = TileLayer.extend({ + + // @section + // @aka TileLayer.WMS options + // If any custom options not documented here are used, they will be sent to the + // WMS server as extra parameters in each request URL. This can be useful for + // [non-standard vendor WMS parameters](http://docs.geoserver.org/stable/en/user/services/wms/vendor.html). + defaultWmsParams: { + service: 'WMS', + request: 'GetMap', + + // @option layers: String = '' + // **(required)** Comma-separated list of WMS layers to show. + layers: '', + + // @option styles: String = '' + // Comma-separated list of WMS styles. + styles: '', + + // @option format: String = 'image/jpeg' + // WMS image format (use `'image/png'` for layers with transparency). + format: 'image/jpeg', + + // @option transparent: Boolean = false + // If `true`, the WMS service will return images with transparency. + transparent: false, + + // @option version: String = '1.1.1' + // Version of the WMS service to use + version: '1.1.1' + }, + + options: { + // @option crs: CRS = null + // Coordinate Reference System to use for the WMS requests, defaults to + // map CRS. Don't change this if you're not sure what it means. + crs: null, + + // @option uppercase: Boolean = false + // If `true`, WMS request parameter keys will be uppercase. + uppercase: false + }, + + initialize: function (url, options) { + + this._url = url; + + var wmsParams = extend({}, this.defaultWmsParams); + + // all keys that are not TileLayer options go to WMS params + for (var i in options) { + if (!(i in this.options)) { + wmsParams[i] = options[i]; + } + } + + options = setOptions(this, options); + + var realRetina = options.detectRetina && retina ? 2 : 1; + var tileSize = this.getTileSize(); + wmsParams.width = tileSize.x * realRetina; + wmsParams.height = tileSize.y * realRetina; + + this.wmsParams = wmsParams; + }, + + onAdd: function (map) { + + this._crs = this.options.crs || map.options.crs; + this._wmsVersion = parseFloat(this.wmsParams.version); + + var projectionKey = this._wmsVersion >= 1.3 ? 'crs' : 'srs'; + this.wmsParams[projectionKey] = this._crs.code; + + TileLayer.prototype.onAdd.call(this, map); + }, + + getTileUrl: function (coords) { + + var tileBounds = this._tileCoordsToNwSe(coords), + crs = this._crs, + bounds = toBounds(crs.project(tileBounds[0]), crs.project(tileBounds[1])), + min = bounds.min, + max = bounds.max, + bbox = (this._wmsVersion >= 1.3 && this._crs === EPSG4326 ? + [min.y, min.x, max.y, max.x] : + [min.x, min.y, max.x, max.y]).join(','), + url = TileLayer.prototype.getTileUrl.call(this, coords); + return url + + getParamString(this.wmsParams, url, this.options.uppercase) + + (this.options.uppercase ? '&BBOX=' : '&bbox=') + bbox; + }, + + // @method setParams(params: Object, noRedraw?: Boolean): this + // Merges an object with the new parameters and re-requests tiles on the current screen (unless `noRedraw` was set to true). + setParams: function (params, noRedraw) { + + extend(this.wmsParams, params); + + if (!noRedraw) { + this.redraw(); + } + + return this; + } +}); + + +// @factory L.tileLayer.wms(baseUrl: String, options: TileLayer.WMS options) +// Instantiates a WMS tile layer object given a base URL of the WMS service and a WMS parameters/options object. +function tileLayerWMS(url, options) { + return new TileLayerWMS(url, options); +} + +TileLayer.WMS = TileLayerWMS; +tileLayer.wms = tileLayerWMS; + +/* + * @class Renderer + * @inherits Layer + * @aka L.Renderer + * + * Base class for vector renderer implementations (`SVG`, `Canvas`). Handles the + * DOM container of the renderer, its bounds, and its zoom animation. + * + * A `Renderer` works as an implicit layer group for all `Path`s - the renderer + * itself can be added or removed to the map. All paths use a renderer, which can + * be implicit (the map will decide the type of renderer and use it automatically) + * or explicit (using the [`renderer`](#path-renderer) option of the path). + * + * Do not use this class directly, use `SVG` and `Canvas` instead. + * + * @event update: Event + * Fired when the renderer updates its bounds, center and zoom, for example when + * its map has moved + */ + +var Renderer = Layer.extend({ + + // @section + // @aka Renderer options + options: { + // @option padding: Number = 0.1 + // How much to extend the clip area around the map view (relative to its size) + // e.g. 0.1 would be 10% of map view in each direction + padding: 0.1, + + // @option tolerance: Number = 0 + // How much to extend click tolerance round a path/object on the map + tolerance : 0 + }, + + initialize: function (options) { + setOptions(this, options); + stamp(this); + this._layers = this._layers || {}; + }, + + onAdd: function () { + if (!this._container) { + this._initContainer(); // defined by renderer implementations + + if (this._zoomAnimated) { + addClass(this._container, 'leaflet-zoom-animated'); + } + } + + this.getPane().appendChild(this._container); + this._update(); + this.on('update', this._updatePaths, this); + }, + + onRemove: function () { + this.off('update', this._updatePaths, this); + this._destroyContainer(); + }, + + getEvents: function () { + var events = { + viewreset: this._reset, + zoom: this._onZoom, + moveend: this._update, + zoomend: this._onZoomEnd + }; + if (this._zoomAnimated) { + events.zoomanim = this._onAnimZoom; + } + return events; + }, + + _onAnimZoom: function (ev) { + this._updateTransform(ev.center, ev.zoom); + }, + + _onZoom: function () { + this._updateTransform(this._map.getCenter(), this._map.getZoom()); + }, + + _updateTransform: function (center, zoom) { + var scale = this._map.getZoomScale(zoom, this._zoom), + position = getPosition(this._container), + viewHalf = this._map.getSize().multiplyBy(0.5 + this.options.padding), + currentCenterPoint = this._map.project(this._center, zoom), + destCenterPoint = this._map.project(center, zoom), + centerOffset = destCenterPoint.subtract(currentCenterPoint), + + topLeftOffset = viewHalf.multiplyBy(-scale).add(position).add(viewHalf).subtract(centerOffset); + + if (any3d) { + setTransform(this._container, topLeftOffset, scale); + } else { + setPosition(this._container, topLeftOffset); + } + }, + + _reset: function () { + this._update(); + this._updateTransform(this._center, this._zoom); + + for (var id in this._layers) { + this._layers[id]._reset(); + } + }, + + _onZoomEnd: function () { + for (var id in this._layers) { + this._layers[id]._project(); + } + }, + + _updatePaths: function () { + for (var id in this._layers) { + this._layers[id]._update(); + } + }, + + _update: function () { + // Update pixel bounds of renderer container (for positioning/sizing/clipping later) + // Subclasses are responsible of firing the 'update' event. + var p = this.options.padding, + size = this._map.getSize(), + min = this._map.containerPointToLayerPoint(size.multiplyBy(-p)).round(); + + this._bounds = new Bounds(min, min.add(size.multiplyBy(1 + p * 2)).round()); + + this._center = this._map.getCenter(); + this._zoom = this._map.getZoom(); + } +}); + +/* + * @class Canvas + * @inherits Renderer + * @aka L.Canvas + * + * Allows vector layers to be displayed with [``](https://developer.mozilla.org/docs/Web/API/Canvas_API). + * Inherits `Renderer`. + * + * Due to [technical limitations](http://caniuse.com/#search=canvas), Canvas is not + * available in all web browsers, notably IE8, and overlapping geometries might + * not display properly in some edge cases. + * + * @example + * + * Use Canvas by default for all paths in the map: + * + * ```js + * var map = L.map('map', { + * renderer: L.canvas() + * }); + * ``` + * + * Use a Canvas renderer with extra padding for specific vector geometries: + * + * ```js + * var map = L.map('map'); + * var myRenderer = L.canvas({ padding: 0.5 }); + * var line = L.polyline( coordinates, { renderer: myRenderer } ); + * var circle = L.circle( center, { renderer: myRenderer } ); + * ``` + */ + +var Canvas = Renderer.extend({ + getEvents: function () { + var events = Renderer.prototype.getEvents.call(this); + events.viewprereset = this._onViewPreReset; + return events; + }, + + _onViewPreReset: function () { + // Set a flag so that a viewprereset+moveend+viewreset only updates&redraws once + this._postponeUpdatePaths = true; + }, + + onAdd: function () { + Renderer.prototype.onAdd.call(this); + + // Redraw vectors since canvas is cleared upon removal, + // in case of removing the renderer itself from the map. + this._draw(); + }, + + _initContainer: function () { + var container = this._container = document.createElement('canvas'); + + on(container, 'mousemove', this._onMouseMove, this); + on(container, 'click dblclick mousedown mouseup contextmenu', this._onClick, this); + on(container, 'mouseout', this._handleMouseOut, this); + + this._ctx = container.getContext('2d'); + }, + + _destroyContainer: function () { + cancelAnimFrame(this._redrawRequest); + delete this._ctx; + remove(this._container); + off(this._container); + delete this._container; + }, + + _updatePaths: function () { + if (this._postponeUpdatePaths) { return; } + + var layer; + this._redrawBounds = null; + for (var id in this._layers) { + layer = this._layers[id]; + layer._update(); + } + this._redraw(); + }, + + _update: function () { + if (this._map._animatingZoom && this._bounds) { return; } + + Renderer.prototype._update.call(this); + + var b = this._bounds, + container = this._container, + size = b.getSize(), + m = retina ? 2 : 1; + + setPosition(container, b.min); + + // set canvas size (also clearing it); use double size on retina + container.width = m * size.x; + container.height = m * size.y; + container.style.width = size.x + 'px'; + container.style.height = size.y + 'px'; + + if (retina) { + this._ctx.scale(2, 2); + } + + // translate so we use the same path coordinates after canvas element moves + this._ctx.translate(-b.min.x, -b.min.y); + + // Tell paths to redraw themselves + this.fire('update'); + }, + + _reset: function () { + Renderer.prototype._reset.call(this); + + if (this._postponeUpdatePaths) { + this._postponeUpdatePaths = false; + this._updatePaths(); + } + }, + + _initPath: function (layer) { + this._updateDashArray(layer); + this._layers[stamp(layer)] = layer; + + var order = layer._order = { + layer: layer, + prev: this._drawLast, + next: null + }; + if (this._drawLast) { this._drawLast.next = order; } + this._drawLast = order; + this._drawFirst = this._drawFirst || this._drawLast; + }, + + _addPath: function (layer) { + this._requestRedraw(layer); + }, + + _removePath: function (layer) { + var order = layer._order; + var next = order.next; + var prev = order.prev; + + if (next) { + next.prev = prev; + } else { + this._drawLast = prev; + } + if (prev) { + prev.next = next; + } else { + this._drawFirst = next; + } + + delete layer._order; + + delete this._layers[stamp(layer)]; + + this._requestRedraw(layer); + }, + + _updatePath: function (layer) { + // Redraw the union of the layer's old pixel + // bounds and the new pixel bounds. + this._extendRedrawBounds(layer); + layer._project(); + layer._update(); + // The redraw will extend the redraw bounds + // with the new pixel bounds. + this._requestRedraw(layer); + }, + + _updateStyle: function (layer) { + this._updateDashArray(layer); + this._requestRedraw(layer); + }, + + _updateDashArray: function (layer) { + if (typeof layer.options.dashArray === 'string') { + var parts = layer.options.dashArray.split(/[, ]+/), + dashArray = [], + dashValue, + i; + for (i = 0; i < parts.length; i++) { + dashValue = Number(parts[i]); + // Ignore dash array containing invalid lengths + if (isNaN(dashValue)) { return; } + dashArray.push(dashValue); + } + layer.options._dashArray = dashArray; + } else { + layer.options._dashArray = layer.options.dashArray; + } + }, + + _requestRedraw: function (layer) { + if (!this._map) { return; } + + this._extendRedrawBounds(layer); + this._redrawRequest = this._redrawRequest || requestAnimFrame(this._redraw, this); + }, + + _extendRedrawBounds: function (layer) { + if (layer._pxBounds) { + var padding = (layer.options.weight || 0) + 1; + this._redrawBounds = this._redrawBounds || new Bounds(); + this._redrawBounds.extend(layer._pxBounds.min.subtract([padding, padding])); + this._redrawBounds.extend(layer._pxBounds.max.add([padding, padding])); + } + }, + + _redraw: function () { + this._redrawRequest = null; + + if (this._redrawBounds) { + this._redrawBounds.min._floor(); + this._redrawBounds.max._ceil(); + } + + this._clear(); // clear layers in redraw bounds + this._draw(); // draw layers + + this._redrawBounds = null; + }, + + _clear: function () { + var bounds = this._redrawBounds; + if (bounds) { + var size = bounds.getSize(); + this._ctx.clearRect(bounds.min.x, bounds.min.y, size.x, size.y); + } else { + this._ctx.clearRect(0, 0, this._container.width, this._container.height); + } + }, + + _draw: function () { + var layer, bounds = this._redrawBounds; + this._ctx.save(); + if (bounds) { + var size = bounds.getSize(); + this._ctx.beginPath(); + this._ctx.rect(bounds.min.x, bounds.min.y, size.x, size.y); + this._ctx.clip(); + } + + this._drawing = true; + + for (var order = this._drawFirst; order; order = order.next) { + layer = order.layer; + if (!bounds || (layer._pxBounds && layer._pxBounds.intersects(bounds))) { + layer._updatePath(); + } + } + + this._drawing = false; + + this._ctx.restore(); // Restore state before clipping. + }, + + _updatePoly: function (layer, closed) { + if (!this._drawing) { return; } + + var i, j, len2, p, + parts = layer._parts, + len = parts.length, + ctx = this._ctx; + + if (!len) { return; } + + ctx.beginPath(); + + for (i = 0; i < len; i++) { + for (j = 0, len2 = parts[i].length; j < len2; j++) { + p = parts[i][j]; + ctx[j ? 'lineTo' : 'moveTo'](p.x, p.y); + } + if (closed) { + ctx.closePath(); + } + } + + this._fillStroke(ctx, layer); + + // TODO optimization: 1 fill/stroke for all features with equal style instead of 1 for each feature + }, + + _updateCircle: function (layer) { + + if (!this._drawing || layer._empty()) { return; } + + var p = layer._point, + ctx = this._ctx, + r = Math.max(Math.round(layer._radius), 1), + s = (Math.max(Math.round(layer._radiusY), 1) || r) / r; + + if (s !== 1) { + ctx.save(); + ctx.scale(1, s); + } + + ctx.beginPath(); + ctx.arc(p.x, p.y / s, r, 0, Math.PI * 2, false); + + if (s !== 1) { + ctx.restore(); + } + + this._fillStroke(ctx, layer); + }, + + _fillStroke: function (ctx, layer) { + var options = layer.options; + + if (options.fill) { + ctx.globalAlpha = options.fillOpacity; + ctx.fillStyle = options.fillColor || options.color; + ctx.fill(options.fillRule || 'evenodd'); + } + + if (options.stroke && options.weight !== 0) { + if (ctx.setLineDash) { + ctx.setLineDash(layer.options && layer.options._dashArray || []); + } + ctx.globalAlpha = options.opacity; + ctx.lineWidth = options.weight; + ctx.strokeStyle = options.color; + ctx.lineCap = options.lineCap; + ctx.lineJoin = options.lineJoin; + ctx.stroke(); + } + }, + + // Canvas obviously doesn't have mouse events for individual drawn objects, + // so we emulate that by calculating what's under the mouse on mousemove/click manually + + _onClick: function (e) { + var point = this._map.mouseEventToLayerPoint(e), layer, clickedLayer; + + for (var order = this._drawFirst; order; order = order.next) { + layer = order.layer; + if (layer.options.interactive && layer._containsPoint(point) && !this._map._draggableMoved(layer)) { + clickedLayer = layer; + } + } + if (clickedLayer) { + fakeStop(e); + this._fireEvent([clickedLayer], e); + } + }, + + _onMouseMove: function (e) { + if (!this._map || this._map.dragging.moving() || this._map._animatingZoom) { return; } + + var point = this._map.mouseEventToLayerPoint(e); + this._handleMouseHover(e, point); + }, + + + _handleMouseOut: function (e) { + var layer = this._hoveredLayer; + if (layer) { + // if we're leaving the layer, fire mouseout + removeClass(this._container, 'leaflet-interactive'); + this._fireEvent([layer], e, 'mouseout'); + this._hoveredLayer = null; + this._mouseHoverThrottled = false; + } + }, + + _handleMouseHover: function (e, point) { + if (this._mouseHoverThrottled) { + return; + } + + var layer, candidateHoveredLayer; + + for (var order = this._drawFirst; order; order = order.next) { + layer = order.layer; + if (layer.options.interactive && layer._containsPoint(point)) { + candidateHoveredLayer = layer; + } + } + + if (candidateHoveredLayer !== this._hoveredLayer) { + this._handleMouseOut(e); + + if (candidateHoveredLayer) { + addClass(this._container, 'leaflet-interactive'); // change cursor + this._fireEvent([candidateHoveredLayer], e, 'mouseover'); + this._hoveredLayer = candidateHoveredLayer; + } + } + + if (this._hoveredLayer) { + this._fireEvent([this._hoveredLayer], e); + } + + this._mouseHoverThrottled = true; + setTimeout(L.bind(function () { + this._mouseHoverThrottled = false; + }, this), 32); + }, + + _fireEvent: function (layers, e, type) { + this._map._fireDOMEvent(e, type || e.type, layers); + }, + + _bringToFront: function (layer) { + var order = layer._order; + + if (!order) { return; } + + var next = order.next; + var prev = order.prev; + + if (next) { + next.prev = prev; + } else { + // Already last + return; + } + if (prev) { + prev.next = next; + } else if (next) { + // Update first entry unless this is the + // single entry + this._drawFirst = next; + } + + order.prev = this._drawLast; + this._drawLast.next = order; + + order.next = null; + this._drawLast = order; + + this._requestRedraw(layer); + }, + + _bringToBack: function (layer) { + var order = layer._order; + + if (!order) { return; } + + var next = order.next; + var prev = order.prev; + + if (prev) { + prev.next = next; + } else { + // Already first + return; + } + if (next) { + next.prev = prev; + } else if (prev) { + // Update last entry unless this is the + // single entry + this._drawLast = prev; + } + + order.prev = null; + + order.next = this._drawFirst; + this._drawFirst.prev = order; + this._drawFirst = order; + + this._requestRedraw(layer); + } +}); + +// @factory L.canvas(options?: Renderer options) +// Creates a Canvas renderer with the given options. +function canvas$1(options) { + return canvas ? new Canvas(options) : null; +} + +/* + * Thanks to Dmitry Baranovsky and his Raphael library for inspiration! + */ + + +var vmlCreate = (function () { + try { + document.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml'); + return function (name) { + return document.createElement(''); + }; + } catch (e) { + return function (name) { + return document.createElement('<' + name + ' xmlns="urn:schemas-microsoft.com:vml" class="lvml">'); + }; + } +})(); + + +/* + * @class SVG + * + * + * VML was deprecated in 2012, which means VML functionality exists only for backwards compatibility + * with old versions of Internet Explorer. + */ + +// mixin to redefine some SVG methods to handle VML syntax which is similar but with some differences +var vmlMixin = { + + _initContainer: function () { + this._container = create$1('div', 'leaflet-vml-container'); + }, + + _update: function () { + if (this._map._animatingZoom) { return; } + Renderer.prototype._update.call(this); + this.fire('update'); + }, + + _initPath: function (layer) { + var container = layer._container = vmlCreate('shape'); + + addClass(container, 'leaflet-vml-shape ' + (this.options.className || '')); + + container.coordsize = '1 1'; + + layer._path = vmlCreate('path'); + container.appendChild(layer._path); + + this._updateStyle(layer); + this._layers[stamp(layer)] = layer; + }, + + _addPath: function (layer) { + var container = layer._container; + this._container.appendChild(container); + + if (layer.options.interactive) { + layer.addInteractiveTarget(container); + } + }, + + _removePath: function (layer) { + var container = layer._container; + remove(container); + layer.removeInteractiveTarget(container); + delete this._layers[stamp(layer)]; + }, + + _updateStyle: function (layer) { + var stroke = layer._stroke, + fill = layer._fill, + options = layer.options, + container = layer._container; + + container.stroked = !!options.stroke; + container.filled = !!options.fill; + + if (options.stroke) { + if (!stroke) { + stroke = layer._stroke = vmlCreate('stroke'); + } + container.appendChild(stroke); + stroke.weight = options.weight + 'px'; + stroke.color = options.color; + stroke.opacity = options.opacity; + + if (options.dashArray) { + stroke.dashStyle = isArray(options.dashArray) ? + options.dashArray.join(' ') : + options.dashArray.replace(/( *, *)/g, ' '); + } else { + stroke.dashStyle = ''; + } + stroke.endcap = options.lineCap.replace('butt', 'flat'); + stroke.joinstyle = options.lineJoin; + + } else if (stroke) { + container.removeChild(stroke); + layer._stroke = null; + } + + if (options.fill) { + if (!fill) { + fill = layer._fill = vmlCreate('fill'); + } + container.appendChild(fill); + fill.color = options.fillColor || options.color; + fill.opacity = options.fillOpacity; + + } else if (fill) { + container.removeChild(fill); + layer._fill = null; + } + }, + + _updateCircle: function (layer) { + var p = layer._point.round(), + r = Math.round(layer._radius), + r2 = Math.round(layer._radiusY || r); + + this._setPath(layer, layer._empty() ? 'M0 0' : + 'AL ' + p.x + ',' + p.y + ' ' + r + ',' + r2 + ' 0,' + (65535 * 360)); + }, + + _setPath: function (layer, path) { + layer._path.v = path; + }, + + _bringToFront: function (layer) { + toFront(layer._container); + }, + + _bringToBack: function (layer) { + toBack(layer._container); + } +}; + +var create$2 = vml ? vmlCreate : svgCreate; + +/* + * @class SVG + * @inherits Renderer + * @aka L.SVG + * + * Allows vector layers to be displayed with [SVG](https://developer.mozilla.org/docs/Web/SVG). + * Inherits `Renderer`. + * + * Due to [technical limitations](http://caniuse.com/#search=svg), SVG is not + * available in all web browsers, notably Android 2.x and 3.x. + * + * Although SVG is not available on IE7 and IE8, these browsers support + * [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language) + * (a now deprecated technology), and the SVG renderer will fall back to VML in + * this case. + * + * @example + * + * Use SVG by default for all paths in the map: + * + * ```js + * var map = L.map('map', { + * renderer: L.svg() + * }); + * ``` + * + * Use a SVG renderer with extra padding for specific vector geometries: + * + * ```js + * var map = L.map('map'); + * var myRenderer = L.svg({ padding: 0.5 }); + * var line = L.polyline( coordinates, { renderer: myRenderer } ); + * var circle = L.circle( center, { renderer: myRenderer } ); + * ``` + */ + +var SVG = Renderer.extend({ + + getEvents: function () { + var events = Renderer.prototype.getEvents.call(this); + events.zoomstart = this._onZoomStart; + return events; + }, + + _initContainer: function () { + this._container = create$2('svg'); + + // makes it possible to click through svg root; we'll reset it back in individual paths + this._container.setAttribute('pointer-events', 'none'); + + this._rootGroup = create$2('g'); + this._container.appendChild(this._rootGroup); + }, + + _destroyContainer: function () { + remove(this._container); + off(this._container); + delete this._container; + delete this._rootGroup; + delete this._svgSize; + }, + + _onZoomStart: function () { + // Drag-then-pinch interactions might mess up the center and zoom. + // In this case, the easiest way to prevent this is re-do the renderer + // bounds and padding when the zooming starts. + this._update(); + }, + + _update: function () { + if (this._map._animatingZoom && this._bounds) { return; } + + Renderer.prototype._update.call(this); + + var b = this._bounds, + size = b.getSize(), + container = this._container; + + // set size of svg-container if changed + if (!this._svgSize || !this._svgSize.equals(size)) { + this._svgSize = size; + container.setAttribute('width', size.x); + container.setAttribute('height', size.y); + } + + // movement: update container viewBox so that we don't have to change coordinates of individual layers + setPosition(container, b.min); + container.setAttribute('viewBox', [b.min.x, b.min.y, size.x, size.y].join(' ')); + + this.fire('update'); + }, + + // methods below are called by vector layers implementations + + _initPath: function (layer) { + var path = layer._path = create$2('path'); + + // @namespace Path + // @option className: String = null + // Custom class name set on an element. Only for SVG renderer. + if (layer.options.className) { + addClass(path, layer.options.className); + } + + if (layer.options.interactive) { + addClass(path, 'leaflet-interactive'); + } + + this._updateStyle(layer); + this._layers[stamp(layer)] = layer; + }, + + _addPath: function (layer) { + if (!this._rootGroup) { this._initContainer(); } + this._rootGroup.appendChild(layer._path); + layer.addInteractiveTarget(layer._path); + }, + + _removePath: function (layer) { + remove(layer._path); + layer.removeInteractiveTarget(layer._path); + delete this._layers[stamp(layer)]; + }, + + _updatePath: function (layer) { + layer._project(); + layer._update(); + }, + + _updateStyle: function (layer) { + var path = layer._path, + options = layer.options; + + if (!path) { return; } + + if (options.stroke) { + path.setAttribute('stroke', options.color); + path.setAttribute('stroke-opacity', options.opacity); + path.setAttribute('stroke-width', options.weight); + path.setAttribute('stroke-linecap', options.lineCap); + path.setAttribute('stroke-linejoin', options.lineJoin); + + if (options.dashArray) { + path.setAttribute('stroke-dasharray', options.dashArray); + } else { + path.removeAttribute('stroke-dasharray'); + } + + if (options.dashOffset) { + path.setAttribute('stroke-dashoffset', options.dashOffset); + } else { + path.removeAttribute('stroke-dashoffset'); + } + } else { + path.setAttribute('stroke', 'none'); + } + + if (options.fill) { + path.setAttribute('fill', options.fillColor || options.color); + path.setAttribute('fill-opacity', options.fillOpacity); + path.setAttribute('fill-rule', options.fillRule || 'evenodd'); + } else { + path.setAttribute('fill', 'none'); + } + }, + + _updatePoly: function (layer, closed) { + this._setPath(layer, pointsToPath(layer._parts, closed)); + }, + + _updateCircle: function (layer) { + var p = layer._point, + r = Math.max(Math.round(layer._radius), 1), + r2 = Math.max(Math.round(layer._radiusY), 1) || r, + arc = 'a' + r + ',' + r2 + ' 0 1,0 '; + + // drawing a circle with two half-arcs + var d = layer._empty() ? 'M0 0' : + 'M' + (p.x - r) + ',' + p.y + + arc + (r * 2) + ',0 ' + + arc + (-r * 2) + ',0 '; + + this._setPath(layer, d); + }, + + _setPath: function (layer, path) { + layer._path.setAttribute('d', path); + }, + + // SVG does not have the concept of zIndex so we resort to changing the DOM order of elements + _bringToFront: function (layer) { + toFront(layer._path); + }, + + _bringToBack: function (layer) { + toBack(layer._path); + } +}); + +if (vml) { + SVG.include(vmlMixin); +} + +// @namespace SVG +// @factory L.svg(options?: Renderer options) +// Creates a SVG renderer with the given options. +function svg$1(options) { + return svg || vml ? new SVG(options) : null; +} + +Map.include({ + // @namespace Map; @method getRenderer(layer: Path): Renderer + // Returns the instance of `Renderer` that should be used to render the given + // `Path`. It will ensure that the `renderer` options of the map and paths + // are respected, and that the renderers do exist on the map. + getRenderer: function (layer) { + // @namespace Path; @option renderer: Renderer + // Use this specific instance of `Renderer` for this path. Takes + // precedence over the map's [default renderer](#map-renderer). + var renderer = layer.options.renderer || this._getPaneRenderer(layer.options.pane) || this.options.renderer || this._renderer; + + if (!renderer) { + renderer = this._renderer = this._createRenderer(); + } + + if (!this.hasLayer(renderer)) { + this.addLayer(renderer); + } + return renderer; + }, + + _getPaneRenderer: function (name) { + if (name === 'overlayPane' || name === undefined) { + return false; + } + + var renderer = this._paneRenderers[name]; + if (renderer === undefined) { + renderer = this._createRenderer({pane: name}); + this._paneRenderers[name] = renderer; + } + return renderer; + }, + + _createRenderer: function (options) { + // @namespace Map; @option preferCanvas: Boolean = false + // Whether `Path`s should be rendered on a `Canvas` renderer. + // By default, all `Path`s are rendered in a `SVG` renderer. + return (this.options.preferCanvas && canvas$1(options)) || svg$1(options); + } +}); + +/* + * L.Rectangle extends Polygon and creates a rectangle when passed a LatLngBounds object. + */ + +/* + * @class Rectangle + * @aka L.Rectangle + * @inherits Polygon + * + * A class for drawing rectangle overlays on a map. Extends `Polygon`. + * + * @example + * + * ```js + * // define rectangle geographical bounds + * var bounds = [[54.559322, -5.767822], [56.1210604, -3.021240]]; + * + * // create an orange rectangle + * L.rectangle(bounds, {color: "#ff7800", weight: 1}).addTo(map); + * + * // zoom the map to the rectangle bounds + * map.fitBounds(bounds); + * ``` + * + */ + + +var Rectangle = Polygon.extend({ + initialize: function (latLngBounds, options) { + Polygon.prototype.initialize.call(this, this._boundsToLatLngs(latLngBounds), options); + }, + + // @method setBounds(latLngBounds: LatLngBounds): this + // Redraws the rectangle with the passed bounds. + setBounds: function (latLngBounds) { + return this.setLatLngs(this._boundsToLatLngs(latLngBounds)); + }, + + _boundsToLatLngs: function (latLngBounds) { + latLngBounds = toLatLngBounds(latLngBounds); + return [ + latLngBounds.getSouthWest(), + latLngBounds.getNorthWest(), + latLngBounds.getNorthEast(), + latLngBounds.getSouthEast() + ]; + } +}); + + +// @factory L.rectangle(latLngBounds: LatLngBounds, options?: Polyline options) +function rectangle(latLngBounds, options) { + return new Rectangle(latLngBounds, options); +} + +SVG.create = create$2; +SVG.pointsToPath = pointsToPath; + +GeoJSON.geometryToLayer = geometryToLayer; +GeoJSON.coordsToLatLng = coordsToLatLng; +GeoJSON.coordsToLatLngs = coordsToLatLngs; +GeoJSON.latLngToCoords = latLngToCoords; +GeoJSON.latLngsToCoords = latLngsToCoords; +GeoJSON.getFeature = getFeature; +GeoJSON.asFeature = asFeature; + +/* + * L.Handler.BoxZoom is used to add shift-drag zoom interaction to the map + * (zoom to a selected bounding box), enabled by default. + */ + +// @namespace Map +// @section Interaction Options +Map.mergeOptions({ + // @option boxZoom: Boolean = true + // Whether the map can be zoomed to a rectangular area specified by + // dragging the mouse while pressing the shift key. + boxZoom: true +}); + +var BoxZoom = Handler.extend({ + initialize: function (map) { + this._map = map; + this._container = map._container; + this._pane = map._panes.overlayPane; + this._resetStateTimeout = 0; + map.on('unload', this._destroy, this); + }, + + addHooks: function () { + on(this._container, 'mousedown', this._onMouseDown, this); + }, + + removeHooks: function () { + off(this._container, 'mousedown', this._onMouseDown, this); + }, + + moved: function () { + return this._moved; + }, + + _destroy: function () { + remove(this._pane); + delete this._pane; + }, + + _resetState: function () { + this._resetStateTimeout = 0; + this._moved = false; + }, + + _clearDeferredResetState: function () { + if (this._resetStateTimeout !== 0) { + clearTimeout(this._resetStateTimeout); + this._resetStateTimeout = 0; + } + }, + + _onMouseDown: function (e) { + if (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) { return false; } + + // Clear the deferred resetState if it hasn't executed yet, otherwise it + // will interrupt the interaction and orphan a box element in the container. + this._clearDeferredResetState(); + this._resetState(); + + disableTextSelection(); + disableImageDrag(); + + this._startPoint = this._map.mouseEventToContainerPoint(e); + + on(document, { + contextmenu: stop, + mousemove: this._onMouseMove, + mouseup: this._onMouseUp, + keydown: this._onKeyDown + }, this); + }, + + _onMouseMove: function (e) { + if (!this._moved) { + this._moved = true; + + this._box = create$1('div', 'leaflet-zoom-box', this._container); + addClass(this._container, 'leaflet-crosshair'); + + this._map.fire('boxzoomstart'); + } + + this._point = this._map.mouseEventToContainerPoint(e); + + var bounds = new Bounds(this._point, this._startPoint), + size = bounds.getSize(); + + setPosition(this._box, bounds.min); + + this._box.style.width = size.x + 'px'; + this._box.style.height = size.y + 'px'; + }, + + _finish: function () { + if (this._moved) { + remove(this._box); + removeClass(this._container, 'leaflet-crosshair'); + } + + enableTextSelection(); + enableImageDrag(); + + off(document, { + contextmenu: stop, + mousemove: this._onMouseMove, + mouseup: this._onMouseUp, + keydown: this._onKeyDown + }, this); + }, + + _onMouseUp: function (e) { + if ((e.which !== 1) && (e.button !== 1)) { return; } + + this._finish(); + + if (!this._moved) { return; } + // Postpone to next JS tick so internal click event handling + // still see it as "moved". + this._clearDeferredResetState(); + this._resetStateTimeout = setTimeout(bind(this._resetState, this), 0); + + var bounds = new LatLngBounds( + this._map.containerPointToLatLng(this._startPoint), + this._map.containerPointToLatLng(this._point)); + + this._map + .fitBounds(bounds) + .fire('boxzoomend', {boxZoomBounds: bounds}); + }, + + _onKeyDown: function (e) { + if (e.keyCode === 27) { + this._finish(); + } + } +}); + +// @section Handlers +// @property boxZoom: Handler +// Box (shift-drag with mouse) zoom handler. +Map.addInitHook('addHandler', 'boxZoom', BoxZoom); + +/* + * L.Handler.DoubleClickZoom is used to handle double-click zoom on the map, enabled by default. + */ + +// @namespace Map +// @section Interaction Options + +Map.mergeOptions({ + // @option doubleClickZoom: Boolean|String = true + // Whether the map can be zoomed in by double clicking on it and + // zoomed out by double clicking while holding shift. If passed + // `'center'`, double-click zoom will zoom to the center of the + // view regardless of where the mouse was. + doubleClickZoom: true +}); + +var DoubleClickZoom = Handler.extend({ + addHooks: function () { + this._map.on('dblclick', this._onDoubleClick, this); + }, + + removeHooks: function () { + this._map.off('dblclick', this._onDoubleClick, this); + }, + + _onDoubleClick: function (e) { + var map = this._map, + oldZoom = map.getZoom(), + delta = map.options.zoomDelta, + zoom = e.originalEvent.shiftKey ? oldZoom - delta : oldZoom + delta; + + if (map.options.doubleClickZoom === 'center') { + map.setZoom(zoom); + } else { + map.setZoomAround(e.containerPoint, zoom); + } + } +}); + +// @section Handlers +// +// Map properties include interaction handlers that allow you to control +// interaction behavior in runtime, enabling or disabling certain features such +// as dragging or touch zoom (see `Handler` methods). For example: +// +// ```js +// map.doubleClickZoom.disable(); +// ``` +// +// @property doubleClickZoom: Handler +// Double click zoom handler. +Map.addInitHook('addHandler', 'doubleClickZoom', DoubleClickZoom); + +/* + * L.Handler.MapDrag is used to make the map draggable (with panning inertia), enabled by default. + */ + +// @namespace Map +// @section Interaction Options +Map.mergeOptions({ + // @option dragging: Boolean = true + // Whether the map be draggable with mouse/touch or not. + dragging: true, + + // @section Panning Inertia Options + // @option inertia: Boolean = * + // If enabled, panning of the map will have an inertia effect where + // the map builds momentum while dragging and continues moving in + // the same direction for some time. Feels especially nice on touch + // devices. Enabled by default unless running on old Android devices. + inertia: !android23, + + // @option inertiaDeceleration: Number = 3000 + // The rate with which the inertial movement slows down, in pixels/second². + inertiaDeceleration: 3400, // px/s^2 + + // @option inertiaMaxSpeed: Number = Infinity + // Max speed of the inertial movement, in pixels/second. + inertiaMaxSpeed: Infinity, // px/s + + // @option easeLinearity: Number = 0.2 + easeLinearity: 0.2, + + // TODO refactor, move to CRS + // @option worldCopyJump: Boolean = false + // With this option enabled, the map tracks when you pan to another "copy" + // of the world and seamlessly jumps to the original one so that all overlays + // like markers and vector layers are still visible. + worldCopyJump: false, + + // @option maxBoundsViscosity: Number = 0.0 + // If `maxBounds` is set, this option will control how solid the bounds + // are when dragging the map around. The default value of `0.0` allows the + // user to drag outside the bounds at normal speed, higher values will + // slow down map dragging outside bounds, and `1.0` makes the bounds fully + // solid, preventing the user from dragging outside the bounds. + maxBoundsViscosity: 0.0 +}); + +var Drag = Handler.extend({ + addHooks: function () { + if (!this._draggable) { + var map = this._map; + + this._draggable = new Draggable(map._mapPane, map._container); + + this._draggable.on({ + dragstart: this._onDragStart, + drag: this._onDrag, + dragend: this._onDragEnd + }, this); + + this._draggable.on('predrag', this._onPreDragLimit, this); + if (map.options.worldCopyJump) { + this._draggable.on('predrag', this._onPreDragWrap, this); + map.on('zoomend', this._onZoomEnd, this); + + map.whenReady(this._onZoomEnd, this); + } + } + addClass(this._map._container, 'leaflet-grab leaflet-touch-drag'); + this._draggable.enable(); + this._positions = []; + this._times = []; + }, + + removeHooks: function () { + removeClass(this._map._container, 'leaflet-grab'); + removeClass(this._map._container, 'leaflet-touch-drag'); + this._draggable.disable(); + }, + + moved: function () { + return this._draggable && this._draggable._moved; + }, + + moving: function () { + return this._draggable && this._draggable._moving; + }, + + _onDragStart: function () { + var map = this._map; + + map._stop(); + if (this._map.options.maxBounds && this._map.options.maxBoundsViscosity) { + var bounds = toLatLngBounds(this._map.options.maxBounds); + + this._offsetLimit = toBounds( + this._map.latLngToContainerPoint(bounds.getNorthWest()).multiplyBy(-1), + this._map.latLngToContainerPoint(bounds.getSouthEast()).multiplyBy(-1) + .add(this._map.getSize())); + + this._viscosity = Math.min(1.0, Math.max(0.0, this._map.options.maxBoundsViscosity)); + } else { + this._offsetLimit = null; + } + + map + .fire('movestart') + .fire('dragstart'); + + if (map.options.inertia) { + this._positions = []; + this._times = []; + } + }, + + _onDrag: function (e) { + if (this._map.options.inertia) { + var time = this._lastTime = +new Date(), + pos = this._lastPos = this._draggable._absPos || this._draggable._newPos; + + this._positions.push(pos); + this._times.push(time); + + this._prunePositions(time); + } + + this._map + .fire('move', e) + .fire('drag', e); + }, + + _prunePositions: function (time) { + while (this._positions.length > 1 && time - this._times[0] > 50) { + this._positions.shift(); + this._times.shift(); + } + }, + + _onZoomEnd: function () { + var pxCenter = this._map.getSize().divideBy(2), + pxWorldCenter = this._map.latLngToLayerPoint([0, 0]); + + this._initialWorldOffset = pxWorldCenter.subtract(pxCenter).x; + this._worldWidth = this._map.getPixelWorldBounds().getSize().x; + }, + + _viscousLimit: function (value, threshold) { + return value - (value - threshold) * this._viscosity; + }, + + _onPreDragLimit: function () { + if (!this._viscosity || !this._offsetLimit) { return; } + + var offset = this._draggable._newPos.subtract(this._draggable._startPos); + + var limit = this._offsetLimit; + if (offset.x < limit.min.x) { offset.x = this._viscousLimit(offset.x, limit.min.x); } + if (offset.y < limit.min.y) { offset.y = this._viscousLimit(offset.y, limit.min.y); } + if (offset.x > limit.max.x) { offset.x = this._viscousLimit(offset.x, limit.max.x); } + if (offset.y > limit.max.y) { offset.y = this._viscousLimit(offset.y, limit.max.y); } + + this._draggable._newPos = this._draggable._startPos.add(offset); + }, + + _onPreDragWrap: function () { + // TODO refactor to be able to adjust map pane position after zoom + var worldWidth = this._worldWidth, + halfWidth = Math.round(worldWidth / 2), + dx = this._initialWorldOffset, + x = this._draggable._newPos.x, + newX1 = (x - halfWidth + dx) % worldWidth + halfWidth - dx, + newX2 = (x + halfWidth + dx) % worldWidth - halfWidth - dx, + newX = Math.abs(newX1 + dx) < Math.abs(newX2 + dx) ? newX1 : newX2; + + this._draggable._absPos = this._draggable._newPos.clone(); + this._draggable._newPos.x = newX; + }, + + _onDragEnd: function (e) { + var map = this._map, + options = map.options, + + noInertia = !options.inertia || this._times.length < 2; + + map.fire('dragend', e); + + if (noInertia) { + map.fire('moveend'); + + } else { + this._prunePositions(+new Date()); + + var direction = this._lastPos.subtract(this._positions[0]), + duration = (this._lastTime - this._times[0]) / 1000, + ease = options.easeLinearity, + + speedVector = direction.multiplyBy(ease / duration), + speed = speedVector.distanceTo([0, 0]), + + limitedSpeed = Math.min(options.inertiaMaxSpeed, speed), + limitedSpeedVector = speedVector.multiplyBy(limitedSpeed / speed), + + decelerationDuration = limitedSpeed / (options.inertiaDeceleration * ease), + offset = limitedSpeedVector.multiplyBy(-decelerationDuration / 2).round(); + + if (!offset.x && !offset.y) { + map.fire('moveend'); + + } else { + offset = map._limitOffset(offset, map.options.maxBounds); + + requestAnimFrame(function () { + map.panBy(offset, { + duration: decelerationDuration, + easeLinearity: ease, + noMoveStart: true, + animate: true + }); + }); + } + } + } +}); + +// @section Handlers +// @property dragging: Handler +// Map dragging handler (by both mouse and touch). +Map.addInitHook('addHandler', 'dragging', Drag); + +/* + * L.Map.Keyboard is handling keyboard interaction with the map, enabled by default. + */ + +// @namespace Map +// @section Keyboard Navigation Options +Map.mergeOptions({ + // @option keyboard: Boolean = true + // Makes the map focusable and allows users to navigate the map with keyboard + // arrows and `+`/`-` keys. + keyboard: true, + + // @option keyboardPanDelta: Number = 80 + // Amount of pixels to pan when pressing an arrow key. + keyboardPanDelta: 80 +}); + +var Keyboard = Handler.extend({ + + keyCodes: { + left: [37], + right: [39], + down: [40], + up: [38], + zoomIn: [187, 107, 61, 171], + zoomOut: [189, 109, 54, 173] + }, + + initialize: function (map) { + this._map = map; + + this._setPanDelta(map.options.keyboardPanDelta); + this._setZoomDelta(map.options.zoomDelta); + }, + + addHooks: function () { + var container = this._map._container; + + // make the container focusable by tabbing + if (container.tabIndex <= 0) { + container.tabIndex = '0'; + } + + on(container, { + focus: this._onFocus, + blur: this._onBlur, + mousedown: this._onMouseDown + }, this); + + this._map.on({ + focus: this._addHooks, + blur: this._removeHooks + }, this); + }, + + removeHooks: function () { + this._removeHooks(); + + off(this._map._container, { + focus: this._onFocus, + blur: this._onBlur, + mousedown: this._onMouseDown + }, this); + + this._map.off({ + focus: this._addHooks, + blur: this._removeHooks + }, this); + }, + + _onMouseDown: function () { + if (this._focused) { return; } + + var body = document.body, + docEl = document.documentElement, + top = body.scrollTop || docEl.scrollTop, + left = body.scrollLeft || docEl.scrollLeft; + + this._map._container.focus(); + + window.scrollTo(left, top); + }, + + _onFocus: function () { + this._focused = true; + this._map.fire('focus'); + }, + + _onBlur: function () { + this._focused = false; + this._map.fire('blur'); + }, + + _setPanDelta: function (panDelta) { + var keys = this._panKeys = {}, + codes = this.keyCodes, + i, len; + + for (i = 0, len = codes.left.length; i < len; i++) { + keys[codes.left[i]] = [-1 * panDelta, 0]; + } + for (i = 0, len = codes.right.length; i < len; i++) { + keys[codes.right[i]] = [panDelta, 0]; + } + for (i = 0, len = codes.down.length; i < len; i++) { + keys[codes.down[i]] = [0, panDelta]; + } + for (i = 0, len = codes.up.length; i < len; i++) { + keys[codes.up[i]] = [0, -1 * panDelta]; + } + }, + + _setZoomDelta: function (zoomDelta) { + var keys = this._zoomKeys = {}, + codes = this.keyCodes, + i, len; + + for (i = 0, len = codes.zoomIn.length; i < len; i++) { + keys[codes.zoomIn[i]] = zoomDelta; + } + for (i = 0, len = codes.zoomOut.length; i < len; i++) { + keys[codes.zoomOut[i]] = -zoomDelta; + } + }, + + _addHooks: function () { + on(document, 'keydown', this._onKeyDown, this); + }, + + _removeHooks: function () { + off(document, 'keydown', this._onKeyDown, this); + }, + + _onKeyDown: function (e) { + if (e.altKey || e.ctrlKey || e.metaKey) { return; } + + var key = e.keyCode, + map = this._map, + offset; + + if (key in this._panKeys) { + if (!map._panAnim || !map._panAnim._inProgress) { + offset = this._panKeys[key]; + if (e.shiftKey) { + offset = toPoint(offset).multiplyBy(3); + } + + map.panBy(offset); + + if (map.options.maxBounds) { + map.panInsideBounds(map.options.maxBounds); + } + } + } else if (key in this._zoomKeys) { + map.setZoom(map.getZoom() + (e.shiftKey ? 3 : 1) * this._zoomKeys[key]); + + } else if (key === 27 && map._popup && map._popup.options.closeOnEscapeKey) { + map.closePopup(); + + } else { + return; + } + + stop(e); + } +}); + +// @section Handlers +// @section Handlers +// @property keyboard: Handler +// Keyboard navigation handler. +Map.addInitHook('addHandler', 'keyboard', Keyboard); + +/* + * L.Handler.ScrollWheelZoom is used by L.Map to enable mouse scroll wheel zoom on the map. + */ + +// @namespace Map +// @section Interaction Options +Map.mergeOptions({ + // @section Mousewheel options + // @option scrollWheelZoom: Boolean|String = true + // Whether the map can be zoomed by using the mouse wheel. If passed `'center'`, + // it will zoom to the center of the view regardless of where the mouse was. + scrollWheelZoom: true, + + // @option wheelDebounceTime: Number = 40 + // Limits the rate at which a wheel can fire (in milliseconds). By default + // user can't zoom via wheel more often than once per 40 ms. + wheelDebounceTime: 40, + + // @option wheelPxPerZoomLevel: Number = 60 + // How many scroll pixels (as reported by [L.DomEvent.getWheelDelta](#domevent-getwheeldelta)) + // mean a change of one full zoom level. Smaller values will make wheel-zooming + // faster (and vice versa). + wheelPxPerZoomLevel: 60 +}); + +var ScrollWheelZoom = Handler.extend({ + addHooks: function () { + on(this._map._container, 'mousewheel', this._onWheelScroll, this); + + this._delta = 0; + }, + + removeHooks: function () { + off(this._map._container, 'mousewheel', this._onWheelScroll, this); + }, + + _onWheelScroll: function (e) { + var delta = getWheelDelta(e); + + var debounce = this._map.options.wheelDebounceTime; + + this._delta += delta; + this._lastMousePos = this._map.mouseEventToContainerPoint(e); + + if (!this._startTime) { + this._startTime = +new Date(); + } + + var left = Math.max(debounce - (+new Date() - this._startTime), 0); + + clearTimeout(this._timer); + this._timer = setTimeout(bind(this._performZoom, this), left); + + stop(e); + }, + + _performZoom: function () { + var map = this._map, + zoom = map.getZoom(), + snap = this._map.options.zoomSnap || 0; + + map._stop(); // stop panning and fly animations if any + + // map the delta with a sigmoid function to -4..4 range leaning on -1..1 + var d2 = this._delta / (this._map.options.wheelPxPerZoomLevel * 4), + d3 = 4 * Math.log(2 / (1 + Math.exp(-Math.abs(d2)))) / Math.LN2, + d4 = snap ? Math.ceil(d3 / snap) * snap : d3, + delta = map._limitZoom(zoom + (this._delta > 0 ? d4 : -d4)) - zoom; + + this._delta = 0; + this._startTime = null; + + if (!delta) { return; } + + if (map.options.scrollWheelZoom === 'center') { + map.setZoom(zoom + delta); + } else { + map.setZoomAround(this._lastMousePos, zoom + delta); + } + } +}); + +// @section Handlers +// @property scrollWheelZoom: Handler +// Scroll wheel zoom handler. +Map.addInitHook('addHandler', 'scrollWheelZoom', ScrollWheelZoom); + +/* + * L.Map.Tap is used to enable mobile hacks like quick taps and long hold. + */ + +// @namespace Map +// @section Interaction Options +Map.mergeOptions({ + // @section Touch interaction options + // @option tap: Boolean = true + // Enables mobile hacks for supporting instant taps (fixing 200ms click + // delay on iOS/Android) and touch holds (fired as `contextmenu` events). + tap: true, + + // @option tapTolerance: Number = 15 + // The max number of pixels a user can shift his finger during touch + // for it to be considered a valid tap. + tapTolerance: 15 +}); + +var Tap = Handler.extend({ + addHooks: function () { + on(this._map._container, 'touchstart', this._onDown, this); + }, + + removeHooks: function () { + off(this._map._container, 'touchstart', this._onDown, this); + }, + + _onDown: function (e) { + if (!e.touches) { return; } + + preventDefault(e); + + this._fireClick = true; + + // don't simulate click or track longpress if more than 1 touch + if (e.touches.length > 1) { + this._fireClick = false; + clearTimeout(this._holdTimeout); + return; + } + + var first = e.touches[0], + el = first.target; + + this._startPos = this._newPos = new Point(first.clientX, first.clientY); + + // if touching a link, highlight it + if (el.tagName && el.tagName.toLowerCase() === 'a') { + addClass(el, 'leaflet-active'); + } + + // simulate long hold but setting a timeout + this._holdTimeout = setTimeout(bind(function () { + if (this._isTapValid()) { + this._fireClick = false; + this._onUp(); + this._simulateEvent('contextmenu', first); + } + }, this), 1000); + + this._simulateEvent('mousedown', first); + + on(document, { + touchmove: this._onMove, + touchend: this._onUp + }, this); + }, + + _onUp: function (e) { + clearTimeout(this._holdTimeout); + + off(document, { + touchmove: this._onMove, + touchend: this._onUp + }, this); + + if (this._fireClick && e && e.changedTouches) { + + var first = e.changedTouches[0], + el = first.target; + + if (el && el.tagName && el.tagName.toLowerCase() === 'a') { + removeClass(el, 'leaflet-active'); + } + + this._simulateEvent('mouseup', first); + + // simulate click if the touch didn't move too much + if (this._isTapValid()) { + this._simulateEvent('click', first); + } + } + }, + + _isTapValid: function () { + return this._newPos.distanceTo(this._startPos) <= this._map.options.tapTolerance; + }, + + _onMove: function (e) { + var first = e.touches[0]; + this._newPos = new Point(first.clientX, first.clientY); + this._simulateEvent('mousemove', first); + }, + + _simulateEvent: function (type, e) { + var simulatedEvent = document.createEvent('MouseEvents'); + + simulatedEvent._simulated = true; + e.target._simulatedClick = true; + + simulatedEvent.initMouseEvent( + type, true, true, window, 1, + e.screenX, e.screenY, + e.clientX, e.clientY, + false, false, false, false, 0, null); + + e.target.dispatchEvent(simulatedEvent); + } +}); + +// @section Handlers +// @property tap: Handler +// Mobile touch hacks (quick tap and touch hold) handler. +if (touch && !pointer) { + Map.addInitHook('addHandler', 'tap', Tap); +} + +/* + * L.Handler.TouchZoom is used by L.Map to add pinch zoom on supported mobile browsers. + */ + +// @namespace Map +// @section Interaction Options +Map.mergeOptions({ + // @section Touch interaction options + // @option touchZoom: Boolean|String = * + // Whether the map can be zoomed by touch-dragging with two fingers. If + // passed `'center'`, it will zoom to the center of the view regardless of + // where the touch events (fingers) were. Enabled for touch-capable web + // browsers except for old Androids. + touchZoom: touch && !android23, + + // @option bounceAtZoomLimits: Boolean = true + // Set it to false if you don't want the map to zoom beyond min/max zoom + // and then bounce back when pinch-zooming. + bounceAtZoomLimits: true +}); + +var TouchZoom = Handler.extend({ + addHooks: function () { + addClass(this._map._container, 'leaflet-touch-zoom'); + on(this._map._container, 'touchstart', this._onTouchStart, this); + }, + + removeHooks: function () { + removeClass(this._map._container, 'leaflet-touch-zoom'); + off(this._map._container, 'touchstart', this._onTouchStart, this); + }, + + _onTouchStart: function (e) { + var map = this._map; + if (!e.touches || e.touches.length !== 2 || map._animatingZoom || this._zooming) { return; } + + var p1 = map.mouseEventToContainerPoint(e.touches[0]), + p2 = map.mouseEventToContainerPoint(e.touches[1]); + + this._centerPoint = map.getSize()._divideBy(2); + this._startLatLng = map.containerPointToLatLng(this._centerPoint); + if (map.options.touchZoom !== 'center') { + this._pinchStartLatLng = map.containerPointToLatLng(p1.add(p2)._divideBy(2)); + } + + this._startDist = p1.distanceTo(p2); + this._startZoom = map.getZoom(); + + this._moved = false; + this._zooming = true; + + map._stop(); + + on(document, 'touchmove', this._onTouchMove, this); + on(document, 'touchend', this._onTouchEnd, this); + + preventDefault(e); + }, + + _onTouchMove: function (e) { + if (!e.touches || e.touches.length !== 2 || !this._zooming) { return; } + + var map = this._map, + p1 = map.mouseEventToContainerPoint(e.touches[0]), + p2 = map.mouseEventToContainerPoint(e.touches[1]), + scale = p1.distanceTo(p2) / this._startDist; + + this._zoom = map.getScaleZoom(scale, this._startZoom); + + if (!map.options.bounceAtZoomLimits && ( + (this._zoom < map.getMinZoom() && scale < 1) || + (this._zoom > map.getMaxZoom() && scale > 1))) { + this._zoom = map._limitZoom(this._zoom); + } + + if (map.options.touchZoom === 'center') { + this._center = this._startLatLng; + if (scale === 1) { return; } + } else { + // Get delta from pinch to center, so centerLatLng is delta applied to initial pinchLatLng + var delta = p1._add(p2)._divideBy(2)._subtract(this._centerPoint); + if (scale === 1 && delta.x === 0 && delta.y === 0) { return; } + this._center = map.unproject(map.project(this._pinchStartLatLng, this._zoom).subtract(delta), this._zoom); + } + + if (!this._moved) { + map._moveStart(true, false); + this._moved = true; + } + + cancelAnimFrame(this._animRequest); + + var moveFn = bind(map._move, map, this._center, this._zoom, {pinch: true, round: false}); + this._animRequest = requestAnimFrame(moveFn, this, true); + + preventDefault(e); + }, + + _onTouchEnd: function () { + if (!this._moved || !this._zooming) { + this._zooming = false; + return; + } + + this._zooming = false; + cancelAnimFrame(this._animRequest); + + off(document, 'touchmove', this._onTouchMove); + off(document, 'touchend', this._onTouchEnd); + + // Pinch updates GridLayers' levels only when zoomSnap is off, so zoomSnap becomes noUpdate. + if (this._map.options.zoomAnimation) { + this._map._animateZoom(this._center, this._map._limitZoom(this._zoom), true, this._map.options.zoomSnap); + } else { + this._map._resetView(this._center, this._map._limitZoom(this._zoom)); + } + } +}); + +// @section Handlers +// @property touchZoom: Handler +// Touch zoom handler. +Map.addInitHook('addHandler', 'touchZoom', TouchZoom); + +Map.BoxZoom = BoxZoom; +Map.DoubleClickZoom = DoubleClickZoom; +Map.Drag = Drag; +Map.Keyboard = Keyboard; +Map.ScrollWheelZoom = ScrollWheelZoom; +Map.Tap = Tap; +Map.TouchZoom = TouchZoom; + +Object.freeze = freeze; + +export { version, Control, control, Browser, Evented, Mixin, Util, Class, Handler, extend, bind, stamp, setOptions, DomEvent, DomUtil, PosAnimation, Draggable, LineUtil, PolyUtil, Point, toPoint as point, Bounds, toBounds as bounds, Transformation, toTransformation as transformation, index as Projection, LatLng, toLatLng as latLng, LatLngBounds, toLatLngBounds as latLngBounds, CRS, GeoJSON, geoJSON, geoJson, Layer, LayerGroup, layerGroup, FeatureGroup, featureGroup, ImageOverlay, imageOverlay, VideoOverlay, videoOverlay, SVGOverlay, svgOverlay, DivOverlay, Popup, popup, Tooltip, tooltip, Icon, icon, DivIcon, divIcon, Marker, marker, TileLayer, tileLayer, GridLayer, gridLayer, SVG, svg$1 as svg, Renderer, Canvas, canvas$1 as canvas, Path, CircleMarker, circleMarker, Circle, circle, Polyline, polyline, Polygon, polygon, Rectangle, rectangle, Map, createMap as map }; +//# sourceMappingURL=leaflet-src.esm.js.map diff --git a/deploy/grafana-map-plugin/dist/vendor/leaflet/leaflet-src.esm.js.map b/deploy/grafana-map-plugin/dist/vendor/leaflet/leaflet-src.esm.js.map new file mode 100755 index 0000000..bf2a31d --- /dev/null +++ b/deploy/grafana-map-plugin/dist/vendor/leaflet/leaflet-src.esm.js.map @@ -0,0 +1 @@ +{"version":3,"file":"leaflet-src.esm.js","sources":["../src/core/Util.js","../src/core/Class.js","../src/core/Events.js","../src/geometry/Point.js","../src/geometry/Bounds.js","../src/geo/LatLngBounds.js","../src/geo/LatLng.js","../src/geo/crs/CRS.js","../src/geo/crs/CRS.Earth.js","../src/geo/projection/Projection.SphericalMercator.js","../src/geometry/Transformation.js","../src/geo/crs/CRS.EPSG3857.js","../src/layer/vector/SVG.Util.js","../src/core/Browser.js","../src/dom/DomEvent.Pointer.js","../src/dom/DomEvent.DoubleTap.js","../src/dom/DomUtil.js","../src/dom/DomEvent.js","../src/dom/PosAnimation.js","../src/map/Map.js","../src/control/Control.js","../src/control/Control.Layers.js","../src/control/Control.Zoom.js","../src/control/Control.Scale.js","../src/control/Control.Attribution.js","../src/control/index.js","../src/core/Handler.js","../src/core/index.js","../src/dom/Draggable.js","../src/geometry/LineUtil.js","../src/geometry/PolyUtil.js","../src/geo/projection/Projection.LonLat.js","../src/geo/projection/Projection.Mercator.js","../src/geo/projection/index.js","../src/geo/crs/CRS.EPSG3395.js","../src/geo/crs/CRS.EPSG4326.js","../src/geo/crs/CRS.Simple.js","../src/geo/crs/index.js","../src/layer/Layer.js","../src/layer/LayerGroup.js","../src/layer/FeatureGroup.js","../src/layer/marker/Icon.js","../src/layer/marker/Icon.Default.js","../src/layer/marker/Marker.Drag.js","../src/layer/marker/Marker.js","../src/layer/vector/Path.js","../src/layer/vector/CircleMarker.js","../src/layer/vector/Circle.js","../src/layer/vector/Polyline.js","../src/layer/vector/Polygon.js","../src/layer/GeoJSON.js","../src/layer/ImageOverlay.js","../src/layer/VideoOverlay.js","../src/layer/SVGOverlay.js","../src/layer/DivOverlay.js","../src/layer/Popup.js","../src/layer/Tooltip.js","../src/layer/marker/DivIcon.js","../src/layer/marker/index.js","../src/layer/tile/GridLayer.js","../src/layer/tile/TileLayer.js","../src/layer/tile/TileLayer.WMS.js","../src/layer/tile/index.js","../src/layer/vector/Renderer.js","../src/layer/vector/Canvas.js","../src/layer/vector/SVG.VML.js","../src/layer/vector/SVG.js","../src/layer/vector/Renderer.getRenderer.js","../src/layer/vector/Rectangle.js","../src/layer/vector/index.js","../src/layer/index.js","../src/map/handler/Map.BoxZoom.js","../src/map/handler/Map.DoubleClickZoom.js","../src/map/handler/Map.Drag.js","../src/map/handler/Map.Keyboard.js","../src/map/handler/Map.ScrollWheelZoom.js","../src/map/handler/Map.Tap.js","../src/map/handler/Map.TouchZoom.js","../src/map/index.js","../src/Leaflet.js"],"sourcesContent":["/*\r\n * @namespace Util\r\n *\r\n * Various utility functions, used by Leaflet internally.\r\n */\r\n\r\nexport var freeze = Object.freeze;\r\nObject.freeze = function (obj) { return obj; };\r\n\r\n// @function extend(dest: Object, src?: Object): Object\r\n// Merges the properties of the `src` object (or multiple objects) into `dest` object and returns the latter. Has an `L.extend` shortcut.\r\nexport function extend(dest) {\r\n\tvar i, j, len, src;\r\n\r\n\tfor (j = 1, len = arguments.length; j < len; j++) {\r\n\t\tsrc = arguments[j];\r\n\t\tfor (i in src) {\r\n\t\t\tdest[i] = src[i];\r\n\t\t}\r\n\t}\r\n\treturn dest;\r\n}\r\n\r\n// @function create(proto: Object, properties?: Object): Object\r\n// Compatibility polyfill for [Object.create](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/create)\r\nexport var create = Object.create || (function () {\r\n\tfunction F() {}\r\n\treturn function (proto) {\r\n\t\tF.prototype = proto;\r\n\t\treturn new F();\r\n\t};\r\n})();\r\n\r\n// @function bind(fn: Function, …): Function\r\n// Returns a new function bound to the arguments passed, like [Function.prototype.bind](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).\r\n// Has a `L.bind()` shortcut.\r\nexport function bind(fn, obj) {\r\n\tvar slice = Array.prototype.slice;\r\n\r\n\tif (fn.bind) {\r\n\t\treturn fn.bind.apply(fn, slice.call(arguments, 1));\r\n\t}\r\n\r\n\tvar args = slice.call(arguments, 2);\r\n\r\n\treturn function () {\r\n\t\treturn fn.apply(obj, args.length ? args.concat(slice.call(arguments)) : arguments);\r\n\t};\r\n}\r\n\r\n// @property lastId: Number\r\n// Last unique ID used by [`stamp()`](#util-stamp)\r\nexport var lastId = 0;\r\n\r\n// @function stamp(obj: Object): Number\r\n// Returns the unique ID of an object, assigning it one if it doesn't have it.\r\nexport function stamp(obj) {\r\n\t/*eslint-disable */\r\n\tobj._leaflet_id = obj._leaflet_id || ++lastId;\r\n\treturn obj._leaflet_id;\r\n\t/* eslint-enable */\r\n}\r\n\r\n// @function throttle(fn: Function, time: Number, context: Object): Function\r\n// Returns a function which executes function `fn` with the given scope `context`\r\n// (so that the `this` keyword refers to `context` inside `fn`'s code). The function\r\n// `fn` will be called no more than one time per given amount of `time`. The arguments\r\n// received by the bound function will be any arguments passed when binding the\r\n// function, followed by any arguments passed when invoking the bound function.\r\n// Has an `L.throttle` shortcut.\r\nexport function throttle(fn, time, context) {\r\n\tvar lock, args, wrapperFn, later;\r\n\r\n\tlater = function () {\r\n\t\t// reset lock and call if queued\r\n\t\tlock = false;\r\n\t\tif (args) {\r\n\t\t\twrapperFn.apply(context, args);\r\n\t\t\targs = false;\r\n\t\t}\r\n\t};\r\n\r\n\twrapperFn = function () {\r\n\t\tif (lock) {\r\n\t\t\t// called too soon, queue to call later\r\n\t\t\targs = arguments;\r\n\r\n\t\t} else {\r\n\t\t\t// call and lock until later\r\n\t\t\tfn.apply(context, arguments);\r\n\t\t\tsetTimeout(later, time);\r\n\t\t\tlock = true;\r\n\t\t}\r\n\t};\r\n\r\n\treturn wrapperFn;\r\n}\r\n\r\n// @function wrapNum(num: Number, range: Number[], includeMax?: Boolean): Number\r\n// Returns the number `num` modulo `range` in such a way so it lies within\r\n// `range[0]` and `range[1]`. The returned value will be always smaller than\r\n// `range[1]` unless `includeMax` is set to `true`.\r\nexport function wrapNum(x, range, includeMax) {\r\n\tvar max = range[1],\r\n\t min = range[0],\r\n\t d = max - min;\r\n\treturn x === max && includeMax ? x : ((x - min) % d + d) % d + min;\r\n}\r\n\r\n// @function falseFn(): Function\r\n// Returns a function which always returns `false`.\r\nexport function falseFn() { return false; }\r\n\r\n// @function formatNum(num: Number, digits?: Number): Number\r\n// Returns the number `num` rounded to `digits` decimals, or to 6 decimals by default.\r\nexport function formatNum(num, digits) {\r\n\tvar pow = Math.pow(10, (digits === undefined ? 6 : digits));\r\n\treturn Math.round(num * pow) / pow;\r\n}\r\n\r\n// @function trim(str: String): String\r\n// Compatibility polyfill for [String.prototype.trim](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)\r\nexport function trim(str) {\r\n\treturn str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\r\n}\r\n\r\n// @function splitWords(str: String): String[]\r\n// Trims and splits the string on whitespace and returns the array of parts.\r\nexport function splitWords(str) {\r\n\treturn trim(str).split(/\\s+/);\r\n}\r\n\r\n// @function setOptions(obj: Object, options: Object): Object\r\n// Merges the given properties to the `options` of the `obj` object, returning the resulting options. See `Class options`. Has an `L.setOptions` shortcut.\r\nexport function setOptions(obj, options) {\r\n\tif (!obj.hasOwnProperty('options')) {\r\n\t\tobj.options = obj.options ? create(obj.options) : {};\r\n\t}\r\n\tfor (var i in options) {\r\n\t\tobj.options[i] = options[i];\r\n\t}\r\n\treturn obj.options;\r\n}\r\n\r\n// @function getParamString(obj: Object, existingUrl?: String, uppercase?: Boolean): String\r\n// Converts an object into a parameter URL string, e.g. `{a: \"foo\", b: \"bar\"}`\r\n// translates to `'?a=foo&b=bar'`. If `existingUrl` is set, the parameters will\r\n// be appended at the end. If `uppercase` is `true`, the parameter names will\r\n// be uppercased (e.g. `'?A=foo&B=bar'`)\r\nexport function getParamString(obj, existingUrl, uppercase) {\r\n\tvar params = [];\r\n\tfor (var i in obj) {\r\n\t\tparams.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i]));\r\n\t}\r\n\treturn ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&');\r\n}\r\n\r\nvar templateRe = /\\{ *([\\w_-]+) *\\}/g;\r\n\r\n// @function template(str: String, data: Object): String\r\n// Simple templating facility, accepts a template string of the form `'Hello {a}, {b}'`\r\n// and a data object like `{a: 'foo', b: 'bar'}`, returns evaluated string\r\n// `('Hello foo, bar')`. You can also specify functions instead of strings for\r\n// data values — they will be evaluated passing `data` as an argument.\r\nexport function template(str, data) {\r\n\treturn str.replace(templateRe, function (str, key) {\r\n\t\tvar value = data[key];\r\n\r\n\t\tif (value === undefined) {\r\n\t\t\tthrow new Error('No value provided for variable ' + str);\r\n\r\n\t\t} else if (typeof value === 'function') {\r\n\t\t\tvalue = value(data);\r\n\t\t}\r\n\t\treturn value;\r\n\t});\r\n}\r\n\r\n// @function isArray(obj): Boolean\r\n// Compatibility polyfill for [Array.isArray](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray)\r\nexport var isArray = Array.isArray || function (obj) {\r\n\treturn (Object.prototype.toString.call(obj) === '[object Array]');\r\n};\r\n\r\n// @function indexOf(array: Array, el: Object): Number\r\n// Compatibility polyfill for [Array.prototype.indexOf](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)\r\nexport function indexOf(array, el) {\r\n\tfor (var i = 0; i < array.length; i++) {\r\n\t\tif (array[i] === el) { return i; }\r\n\t}\r\n\treturn -1;\r\n}\r\n\r\n// @property emptyImageUrl: String\r\n// Data URI string containing a base64-encoded empty GIF image.\r\n// Used as a hack to free memory from unused images on WebKit-powered\r\n// mobile devices (by setting image `src` to this string).\r\nexport var emptyImageUrl = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\r\n\r\n// inspired by http://paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n\r\nfunction getPrefixed(name) {\r\n\treturn window['webkit' + name] || window['moz' + name] || window['ms' + name];\r\n}\r\n\r\nvar lastTime = 0;\r\n\r\n// fallback for IE 7-8\r\nfunction timeoutDefer(fn) {\r\n\tvar time = +new Date(),\r\n\t timeToCall = Math.max(0, 16 - (time - lastTime));\r\n\r\n\tlastTime = time + timeToCall;\r\n\treturn window.setTimeout(fn, timeToCall);\r\n}\r\n\r\nexport var requestFn = window.requestAnimationFrame || getPrefixed('RequestAnimationFrame') || timeoutDefer;\r\nexport var cancelFn = window.cancelAnimationFrame || getPrefixed('CancelAnimationFrame') ||\r\n\t\tgetPrefixed('CancelRequestAnimationFrame') || function (id) { window.clearTimeout(id); };\r\n\r\n// @function requestAnimFrame(fn: Function, context?: Object, immediate?: Boolean): Number\r\n// Schedules `fn` to be executed when the browser repaints. `fn` is bound to\r\n// `context` if given. When `immediate` is set, `fn` is called immediately if\r\n// the browser doesn't have native support for\r\n// [`window.requestAnimationFrame`](https://developer.mozilla.org/docs/Web/API/window/requestAnimationFrame),\r\n// otherwise it's delayed. Returns a request ID that can be used to cancel the request.\r\nexport function requestAnimFrame(fn, context, immediate) {\r\n\tif (immediate && requestFn === timeoutDefer) {\r\n\t\tfn.call(context);\r\n\t} else {\r\n\t\treturn requestFn.call(window, bind(fn, context));\r\n\t}\r\n}\r\n\r\n// @function cancelAnimFrame(id: Number): undefined\r\n// Cancels a previous `requestAnimFrame`. See also [window.cancelAnimationFrame](https://developer.mozilla.org/docs/Web/API/window/cancelAnimationFrame).\r\nexport function cancelAnimFrame(id) {\r\n\tif (id) {\r\n\t\tcancelFn.call(window, id);\r\n\t}\r\n}\r\n","import * as Util from './Util';\r\n\r\n// @class Class\r\n// @aka L.Class\r\n\r\n// @section\r\n// @uninheritable\r\n\r\n// Thanks to John Resig and Dean Edwards for inspiration!\r\n\r\nexport function Class() {}\r\n\r\nClass.extend = function (props) {\r\n\r\n\t// @function extend(props: Object): Function\r\n\t// [Extends the current class](#class-inheritance) given the properties to be included.\r\n\t// Returns a Javascript function that is a class constructor (to be called with `new`).\r\n\tvar NewClass = function () {\r\n\r\n\t\t// call the constructor\r\n\t\tif (this.initialize) {\r\n\t\t\tthis.initialize.apply(this, arguments);\r\n\t\t}\r\n\r\n\t\t// call all constructor hooks\r\n\t\tthis.callInitHooks();\r\n\t};\r\n\r\n\tvar parentProto = NewClass.__super__ = this.prototype;\r\n\r\n\tvar proto = Util.create(parentProto);\r\n\tproto.constructor = NewClass;\r\n\r\n\tNewClass.prototype = proto;\r\n\r\n\t// inherit parent's statics\r\n\tfor (var i in this) {\r\n\t\tif (this.hasOwnProperty(i) && i !== 'prototype' && i !== '__super__') {\r\n\t\t\tNewClass[i] = this[i];\r\n\t\t}\r\n\t}\r\n\r\n\t// mix static properties into the class\r\n\tif (props.statics) {\r\n\t\tUtil.extend(NewClass, props.statics);\r\n\t\tdelete props.statics;\r\n\t}\r\n\r\n\t// mix includes into the prototype\r\n\tif (props.includes) {\r\n\t\tcheckDeprecatedMixinEvents(props.includes);\r\n\t\tUtil.extend.apply(null, [proto].concat(props.includes));\r\n\t\tdelete props.includes;\r\n\t}\r\n\r\n\t// merge options\r\n\tif (proto.options) {\r\n\t\tprops.options = Util.extend(Util.create(proto.options), props.options);\r\n\t}\r\n\r\n\t// mix given properties into the prototype\r\n\tUtil.extend(proto, props);\r\n\r\n\tproto._initHooks = [];\r\n\r\n\t// add method for calling all hooks\r\n\tproto.callInitHooks = function () {\r\n\r\n\t\tif (this._initHooksCalled) { return; }\r\n\r\n\t\tif (parentProto.callInitHooks) {\r\n\t\t\tparentProto.callInitHooks.call(this);\r\n\t\t}\r\n\r\n\t\tthis._initHooksCalled = true;\r\n\r\n\t\tfor (var i = 0, len = proto._initHooks.length; i < len; i++) {\r\n\t\t\tproto._initHooks[i].call(this);\r\n\t\t}\r\n\t};\r\n\r\n\treturn NewClass;\r\n};\r\n\r\n\r\n// @function include(properties: Object): this\r\n// [Includes a mixin](#class-includes) into the current class.\r\nClass.include = function (props) {\r\n\tUtil.extend(this.prototype, props);\r\n\treturn this;\r\n};\r\n\r\n// @function mergeOptions(options: Object): this\r\n// [Merges `options`](#class-options) into the defaults of the class.\r\nClass.mergeOptions = function (options) {\r\n\tUtil.extend(this.prototype.options, options);\r\n\treturn this;\r\n};\r\n\r\n// @function addInitHook(fn: Function): this\r\n// Adds a [constructor hook](#class-constructor-hooks) to the class.\r\nClass.addInitHook = function (fn) { // (Function) || (String, args...)\r\n\tvar args = Array.prototype.slice.call(arguments, 1);\r\n\r\n\tvar init = typeof fn === 'function' ? fn : function () {\r\n\t\tthis[fn].apply(this, args);\r\n\t};\r\n\r\n\tthis.prototype._initHooks = this.prototype._initHooks || [];\r\n\tthis.prototype._initHooks.push(init);\r\n\treturn this;\r\n};\r\n\r\nfunction checkDeprecatedMixinEvents(includes) {\r\n\tif (typeof L === 'undefined' || !L || !L.Mixin) { return; }\r\n\r\n\tincludes = Util.isArray(includes) ? includes : [includes];\r\n\r\n\tfor (var i = 0; i < includes.length; i++) {\r\n\t\tif (includes[i] === L.Mixin.Events) {\r\n\t\t\tconsole.warn('Deprecated include of L.Mixin.Events: ' +\r\n\t\t\t\t'this property will be removed in future releases, ' +\r\n\t\t\t\t'please inherit from L.Evented instead.', new Error().stack);\r\n\t\t}\r\n\t}\r\n}\r\n","import {Class} from './Class';\r\nimport * as Util from './Util';\r\n\r\n/*\r\n * @class Evented\r\n * @aka L.Evented\r\n * @inherits Class\r\n *\r\n * A set of methods shared between event-powered classes (like `Map` and `Marker`). Generally, events allow you to execute some function when something happens with an object (e.g. the user clicks on the map, causing the map to fire `'click'` event).\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * map.on('click', function(e) {\r\n * \talert(e.latlng);\r\n * } );\r\n * ```\r\n *\r\n * Leaflet deals with event listeners by reference, so if you want to add a listener and then remove it, define it as a function:\r\n *\r\n * ```js\r\n * function onClick(e) { ... }\r\n *\r\n * map.on('click', onClick);\r\n * map.off('click', onClick);\r\n * ```\r\n */\r\n\r\nexport var Events = {\r\n\t/* @method on(type: String, fn: Function, context?: Object): this\r\n\t * Adds a listener function (`fn`) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. `'click dblclick'`).\r\n\t *\r\n\t * @alternative\r\n\t * @method on(eventMap: Object): this\r\n\t * Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\n\t */\r\n\ton: function (types, fn, context) {\r\n\r\n\t\t// types can be a map of types/handlers\r\n\t\tif (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\t// we don't process space-separated events here for performance;\r\n\t\t\t\t// it's a hot path since Layer uses the on(obj) syntax\r\n\t\t\t\tthis._on(type, types[type], fn);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\t// types can be a string of space-separated words\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tthis._on(types[i], fn, context);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* @method off(type: String, fn?: Function, context?: Object): this\r\n\t * Removes a previously added listener function. If no function is specified, it will remove all the listeners of that particular event from the object. Note that if you passed a custom context to `on`, you must pass the same context to `off` in order to remove the listener.\r\n\t *\r\n\t * @alternative\r\n\t * @method off(eventMap: Object): this\r\n\t * Removes a set of type/listener pairs.\r\n\t *\r\n\t * @alternative\r\n\t * @method off: this\r\n\t * Removes all listeners to all events on the object. This includes implicitly attached events.\r\n\t */\r\n\toff: function (types, fn, context) {\r\n\r\n\t\tif (!types) {\r\n\t\t\t// clear all listeners if called without arguments\r\n\t\t\tdelete this._events;\r\n\r\n\t\t} else if (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\tthis._off(type, types[type], fn);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tthis._off(types[i], fn, context);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// attach listener (without syntactic sugar now)\r\n\t_on: function (type, fn, context) {\r\n\t\tthis._events = this._events || {};\r\n\r\n\t\t/* get/init listeners for type */\r\n\t\tvar typeListeners = this._events[type];\r\n\t\tif (!typeListeners) {\r\n\t\t\ttypeListeners = [];\r\n\t\t\tthis._events[type] = typeListeners;\r\n\t\t}\r\n\r\n\t\tif (context === this) {\r\n\t\t\t// Less memory footprint.\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\t\tvar newListener = {fn: fn, ctx: context},\r\n\t\t listeners = typeListeners;\r\n\r\n\t\t// check if fn already there\r\n\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\tif (listeners[i].fn === fn && listeners[i].ctx === context) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlisteners.push(newListener);\r\n\t},\r\n\r\n\t_off: function (type, fn, context) {\r\n\t\tvar listeners,\r\n\t\t i,\r\n\t\t len;\r\n\r\n\t\tif (!this._events) { return; }\r\n\r\n\t\tlisteners = this._events[type];\r\n\r\n\t\tif (!listeners) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!fn) {\r\n\t\t\t// Set all removed listeners to noop so they are not called if remove happens in fire\r\n\t\t\tfor (i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\tlisteners[i].fn = Util.falseFn;\r\n\t\t\t}\r\n\t\t\t// clear all listeners for a type if function isn't specified\r\n\t\t\tdelete this._events[type];\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (context === this) {\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\r\n\t\tif (listeners) {\r\n\r\n\t\t\t// find fn and remove it\r\n\t\t\tfor (i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\tvar l = listeners[i];\r\n\t\t\t\tif (l.ctx !== context) { continue; }\r\n\t\t\t\tif (l.fn === fn) {\r\n\r\n\t\t\t\t\t// set the removed listener to noop so that's not called if remove happens in fire\r\n\t\t\t\t\tl.fn = Util.falseFn;\r\n\r\n\t\t\t\t\tif (this._firingCount) {\r\n\t\t\t\t\t\t/* copy array in case events are being fired */\r\n\t\t\t\t\t\tthis._events[type] = listeners = listeners.slice();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlisteners.splice(i, 1);\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// @method fire(type: String, data?: Object, propagate?: Boolean): this\r\n\t// Fires an event of the specified type. You can optionally provide an data\r\n\t// object — the first argument of the listener function will contain its\r\n\t// properties. The event can optionally be propagated to event parents.\r\n\tfire: function (type, data, propagate) {\r\n\t\tif (!this.listens(type, propagate)) { return this; }\r\n\r\n\t\tvar event = Util.extend({}, data, {\r\n\t\t\ttype: type,\r\n\t\t\ttarget: this,\r\n\t\t\tsourceTarget: data && data.sourceTarget || this\r\n\t\t});\r\n\r\n\t\tif (this._events) {\r\n\t\t\tvar listeners = this._events[type];\r\n\r\n\t\t\tif (listeners) {\r\n\t\t\t\tthis._firingCount = (this._firingCount + 1) || 1;\r\n\t\t\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\t\tvar l = listeners[i];\r\n\t\t\t\t\tl.fn.call(l.ctx || this, event);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._firingCount--;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (propagate) {\r\n\t\t\t// propagate the event to parents (set with addEventParent)\r\n\t\t\tthis._propagateEvent(event);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method listens(type: String): Boolean\r\n\t// Returns `true` if a particular event type has any listeners attached to it.\r\n\tlistens: function (type, propagate) {\r\n\t\tvar listeners = this._events && this._events[type];\r\n\t\tif (listeners && listeners.length) { return true; }\r\n\r\n\t\tif (propagate) {\r\n\t\t\t// also check parents for listeners if event propagates\r\n\t\t\tfor (var id in this._eventParents) {\r\n\t\t\t\tif (this._eventParents[id].listens(type, propagate)) { return true; }\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t// @method once(…): this\r\n\t// Behaves as [`on(…)`](#evented-on), except the listener will only get fired once and then removed.\r\n\tonce: function (types, fn, context) {\r\n\r\n\t\tif (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\tthis.once(type, types[type], fn);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tvar handler = Util.bind(function () {\r\n\t\t\tthis\r\n\t\t\t .off(types, fn, context)\r\n\t\t\t .off(types, handler, context);\r\n\t\t}, this);\r\n\r\n\t\t// add a listener that's executed once and removed after that\r\n\t\treturn this\r\n\t\t .on(types, fn, context)\r\n\t\t .on(types, handler, context);\r\n\t},\r\n\r\n\t// @method addEventParent(obj: Evented): this\r\n\t// Adds an event parent - an `Evented` that will receive propagated events\r\n\taddEventParent: function (obj) {\r\n\t\tthis._eventParents = this._eventParents || {};\r\n\t\tthis._eventParents[Util.stamp(obj)] = obj;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeEventParent(obj: Evented): this\r\n\t// Removes an event parent, so it will stop receiving propagated events\r\n\tremoveEventParent: function (obj) {\r\n\t\tif (this._eventParents) {\r\n\t\t\tdelete this._eventParents[Util.stamp(obj)];\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_propagateEvent: function (e) {\r\n\t\tfor (var id in this._eventParents) {\r\n\t\t\tthis._eventParents[id].fire(e.type, Util.extend({\r\n\t\t\t\tlayer: e.target,\r\n\t\t\t\tpropagatedFrom: e.target\r\n\t\t\t}, e), true);\r\n\t\t}\r\n\t}\r\n};\r\n\r\n// aliases; we should ditch those eventually\r\n\r\n// @method addEventListener(…): this\r\n// Alias to [`on(…)`](#evented-on)\r\nEvents.addEventListener = Events.on;\r\n\r\n// @method removeEventListener(…): this\r\n// Alias to [`off(…)`](#evented-off)\r\n\r\n// @method clearAllEventListeners(…): this\r\n// Alias to [`off()`](#evented-off)\r\nEvents.removeEventListener = Events.clearAllEventListeners = Events.off;\r\n\r\n// @method addOneTimeEventListener(…): this\r\n// Alias to [`once(…)`](#evented-once)\r\nEvents.addOneTimeEventListener = Events.once;\r\n\r\n// @method fireEvent(…): this\r\n// Alias to [`fire(…)`](#evented-fire)\r\nEvents.fireEvent = Events.fire;\r\n\r\n// @method hasEventListeners(…): Boolean\r\n// Alias to [`listens(…)`](#evented-listens)\r\nEvents.hasEventListeners = Events.listens;\r\n\r\nexport var Evented = Class.extend(Events);\r\n","import {isArray, formatNum} from '../core/Util';\r\n\r\n/*\r\n * @class Point\r\n * @aka L.Point\r\n *\r\n * Represents a point with `x` and `y` coordinates in pixels.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var point = L.point(200, 300);\r\n * ```\r\n *\r\n * All Leaflet methods and options that accept `Point` objects also accept them in a simple Array form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```js\r\n * map.panBy([200, 300]);\r\n * map.panBy(L.point(200, 300));\r\n * ```\r\n *\r\n * Note that `Point` does not inherit from Leafet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function Point(x, y, round) {\r\n\t// @property x: Number; The `x` coordinate of the point\r\n\tthis.x = (round ? Math.round(x) : x);\r\n\t// @property y: Number; The `y` coordinate of the point\r\n\tthis.y = (round ? Math.round(y) : y);\r\n}\r\n\r\nvar trunc = Math.trunc || function (v) {\r\n\treturn v > 0 ? Math.floor(v) : Math.ceil(v);\r\n};\r\n\r\nPoint.prototype = {\r\n\r\n\t// @method clone(): Point\r\n\t// Returns a copy of the current point.\r\n\tclone: function () {\r\n\t\treturn new Point(this.x, this.y);\r\n\t},\r\n\r\n\t// @method add(otherPoint: Point): Point\r\n\t// Returns the result of addition of the current and the given points.\r\n\tadd: function (point) {\r\n\t\t// non-destructive, returns a new point\r\n\t\treturn this.clone()._add(toPoint(point));\r\n\t},\r\n\r\n\t_add: function (point) {\r\n\t\t// destructive, used directly for performance in situations where it's safe to modify existing point\r\n\t\tthis.x += point.x;\r\n\t\tthis.y += point.y;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method subtract(otherPoint: Point): Point\r\n\t// Returns the result of subtraction of the given point from the current.\r\n\tsubtract: function (point) {\r\n\t\treturn this.clone()._subtract(toPoint(point));\r\n\t},\r\n\r\n\t_subtract: function (point) {\r\n\t\tthis.x -= point.x;\r\n\t\tthis.y -= point.y;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method divideBy(num: Number): Point\r\n\t// Returns the result of division of the current point by the given number.\r\n\tdivideBy: function (num) {\r\n\t\treturn this.clone()._divideBy(num);\r\n\t},\r\n\r\n\t_divideBy: function (num) {\r\n\t\tthis.x /= num;\r\n\t\tthis.y /= num;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method multiplyBy(num: Number): Point\r\n\t// Returns the result of multiplication of the current point by the given number.\r\n\tmultiplyBy: function (num) {\r\n\t\treturn this.clone()._multiplyBy(num);\r\n\t},\r\n\r\n\t_multiplyBy: function (num) {\r\n\t\tthis.x *= num;\r\n\t\tthis.y *= num;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method scaleBy(scale: Point): Point\r\n\t// Multiply each coordinate of the current point by each coordinate of\r\n\t// `scale`. In linear algebra terms, multiply the point by the\r\n\t// [scaling matrix](https://en.wikipedia.org/wiki/Scaling_%28geometry%29#Matrix_representation)\r\n\t// defined by `scale`.\r\n\tscaleBy: function (point) {\r\n\t\treturn new Point(this.x * point.x, this.y * point.y);\r\n\t},\r\n\r\n\t// @method unscaleBy(scale: Point): Point\r\n\t// Inverse of `scaleBy`. Divide each coordinate of the current point by\r\n\t// each coordinate of `scale`.\r\n\tunscaleBy: function (point) {\r\n\t\treturn new Point(this.x / point.x, this.y / point.y);\r\n\t},\r\n\r\n\t// @method round(): Point\r\n\t// Returns a copy of the current point with rounded coordinates.\r\n\tround: function () {\r\n\t\treturn this.clone()._round();\r\n\t},\r\n\r\n\t_round: function () {\r\n\t\tthis.x = Math.round(this.x);\r\n\t\tthis.y = Math.round(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method floor(): Point\r\n\t// Returns a copy of the current point with floored coordinates (rounded down).\r\n\tfloor: function () {\r\n\t\treturn this.clone()._floor();\r\n\t},\r\n\r\n\t_floor: function () {\r\n\t\tthis.x = Math.floor(this.x);\r\n\t\tthis.y = Math.floor(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method ceil(): Point\r\n\t// Returns a copy of the current point with ceiled coordinates (rounded up).\r\n\tceil: function () {\r\n\t\treturn this.clone()._ceil();\r\n\t},\r\n\r\n\t_ceil: function () {\r\n\t\tthis.x = Math.ceil(this.x);\r\n\t\tthis.y = Math.ceil(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method trunc(): Point\r\n\t// Returns a copy of the current point with truncated coordinates (rounded towards zero).\r\n\ttrunc: function () {\r\n\t\treturn this.clone()._trunc();\r\n\t},\r\n\r\n\t_trunc: function () {\r\n\t\tthis.x = trunc(this.x);\r\n\t\tthis.y = trunc(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method distanceTo(otherPoint: Point): Number\r\n\t// Returns the cartesian distance between the current and the given points.\r\n\tdistanceTo: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\tvar x = point.x - this.x,\r\n\t\t y = point.y - this.y;\r\n\r\n\t\treturn Math.sqrt(x * x + y * y);\r\n\t},\r\n\r\n\t// @method equals(otherPoint: Point): Boolean\r\n\t// Returns `true` if the given point has the same coordinates.\r\n\tequals: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\treturn point.x === this.x &&\r\n\t\t point.y === this.y;\r\n\t},\r\n\r\n\t// @method contains(otherPoint: Point): Boolean\r\n\t// Returns `true` if both coordinates of the given point are less than the corresponding current point coordinates (in absolute values).\r\n\tcontains: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\treturn Math.abs(point.x) <= Math.abs(this.x) &&\r\n\t\t Math.abs(point.y) <= Math.abs(this.y);\r\n\t},\r\n\r\n\t// @method toString(): String\r\n\t// Returns a string representation of the point for debugging purposes.\r\n\ttoString: function () {\r\n\t\treturn 'Point(' +\r\n\t\t formatNum(this.x) + ', ' +\r\n\t\t formatNum(this.y) + ')';\r\n\t}\r\n};\r\n\r\n// @factory L.point(x: Number, y: Number, round?: Boolean)\r\n// Creates a Point object with the given `x` and `y` coordinates. If optional `round` is set to true, rounds the `x` and `y` values.\r\n\r\n// @alternative\r\n// @factory L.point(coords: Number[])\r\n// Expects an array of the form `[x, y]` instead.\r\n\r\n// @alternative\r\n// @factory L.point(coords: Object)\r\n// Expects a plain object of the form `{x: Number, y: Number}` instead.\r\nexport function toPoint(x, y, round) {\r\n\tif (x instanceof Point) {\r\n\t\treturn x;\r\n\t}\r\n\tif (isArray(x)) {\r\n\t\treturn new Point(x[0], x[1]);\r\n\t}\r\n\tif (x === undefined || x === null) {\r\n\t\treturn x;\r\n\t}\r\n\tif (typeof x === 'object' && 'x' in x && 'y' in x) {\r\n\t\treturn new Point(x.x, x.y);\r\n\t}\r\n\treturn new Point(x, y, round);\r\n}\r\n","import {Point, toPoint} from './Point';\r\n\r\n/*\r\n * @class Bounds\r\n * @aka L.Bounds\r\n *\r\n * Represents a rectangular area in pixel coordinates.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var p1 = L.point(10, 10),\r\n * p2 = L.point(40, 60),\r\n * bounds = L.bounds(p1, p2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept `Bounds` objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * otherBounds.intersects([[10, 10], [40, 60]]);\r\n * ```\r\n *\r\n * Note that `Bounds` does not inherit from Leafet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function Bounds(a, b) {\r\n\tif (!a) { return; }\r\n\r\n\tvar points = b ? [a, b] : a;\r\n\r\n\tfor (var i = 0, len = points.length; i < len; i++) {\r\n\t\tthis.extend(points[i]);\r\n\t}\r\n}\r\n\r\nBounds.prototype = {\r\n\t// @method extend(point: Point): this\r\n\t// Extends the bounds to contain the given point.\r\n\textend: function (point) { // (Point)\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\t// @property min: Point\r\n\t\t// The top left corner of the rectangle.\r\n\t\t// @property max: Point\r\n\t\t// The bottom right corner of the rectangle.\r\n\t\tif (!this.min && !this.max) {\r\n\t\t\tthis.min = point.clone();\r\n\t\t\tthis.max = point.clone();\r\n\t\t} else {\r\n\t\t\tthis.min.x = Math.min(point.x, this.min.x);\r\n\t\t\tthis.max.x = Math.max(point.x, this.max.x);\r\n\t\t\tthis.min.y = Math.min(point.y, this.min.y);\r\n\t\t\tthis.max.y = Math.max(point.y, this.max.y);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getCenter(round?: Boolean): Point\r\n\t// Returns the center point of the bounds.\r\n\tgetCenter: function (round) {\r\n\t\treturn new Point(\r\n\t\t (this.min.x + this.max.x) / 2,\r\n\t\t (this.min.y + this.max.y) / 2, round);\r\n\t},\r\n\r\n\t// @method getBottomLeft(): Point\r\n\t// Returns the bottom-left point of the bounds.\r\n\tgetBottomLeft: function () {\r\n\t\treturn new Point(this.min.x, this.max.y);\r\n\t},\r\n\r\n\t// @method getTopRight(): Point\r\n\t// Returns the top-right point of the bounds.\r\n\tgetTopRight: function () { // -> Point\r\n\t\treturn new Point(this.max.x, this.min.y);\r\n\t},\r\n\r\n\t// @method getTopLeft(): Point\r\n\t// Returns the top-left point of the bounds (i.e. [`this.min`](#bounds-min)).\r\n\tgetTopLeft: function () {\r\n\t\treturn this.min; // left, top\r\n\t},\r\n\r\n\t// @method getBottomRight(): Point\r\n\t// Returns the bottom-right point of the bounds (i.e. [`this.max`](#bounds-max)).\r\n\tgetBottomRight: function () {\r\n\t\treturn this.max; // right, bottom\r\n\t},\r\n\r\n\t// @method getSize(): Point\r\n\t// Returns the size of the given bounds\r\n\tgetSize: function () {\r\n\t\treturn this.max.subtract(this.min);\r\n\t},\r\n\r\n\t// @method contains(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle contains the given one.\r\n\t// @alternative\r\n\t// @method contains(point: Point): Boolean\r\n\t// Returns `true` if the rectangle contains the given point.\r\n\tcontains: function (obj) {\r\n\t\tvar min, max;\r\n\r\n\t\tif (typeof obj[0] === 'number' || obj instanceof Point) {\r\n\t\t\tobj = toPoint(obj);\r\n\t\t} else {\r\n\t\t\tobj = toBounds(obj);\r\n\t\t}\r\n\r\n\t\tif (obj instanceof Bounds) {\r\n\t\t\tmin = obj.min;\r\n\t\t\tmax = obj.max;\r\n\t\t} else {\r\n\t\t\tmin = max = obj;\r\n\t\t}\r\n\r\n\t\treturn (min.x >= this.min.x) &&\r\n\t\t (max.x <= this.max.x) &&\r\n\t\t (min.y >= this.min.y) &&\r\n\t\t (max.y <= this.max.y);\r\n\t},\r\n\r\n\t// @method intersects(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle intersects the given bounds. Two bounds\r\n\t// intersect if they have at least one point in common.\r\n\tintersects: function (bounds) { // (Bounds) -> Boolean\r\n\t\tbounds = toBounds(bounds);\r\n\r\n\t\tvar min = this.min,\r\n\t\t max = this.max,\r\n\t\t min2 = bounds.min,\r\n\t\t max2 = bounds.max,\r\n\t\t xIntersects = (max2.x >= min.x) && (min2.x <= max.x),\r\n\t\t yIntersects = (max2.y >= min.y) && (min2.y <= max.y);\r\n\r\n\t\treturn xIntersects && yIntersects;\r\n\t},\r\n\r\n\t// @method overlaps(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle overlaps the given bounds. Two bounds\r\n\t// overlap if their intersection is an area.\r\n\toverlaps: function (bounds) { // (Bounds) -> Boolean\r\n\t\tbounds = toBounds(bounds);\r\n\r\n\t\tvar min = this.min,\r\n\t\t max = this.max,\r\n\t\t min2 = bounds.min,\r\n\t\t max2 = bounds.max,\r\n\t\t xOverlaps = (max2.x > min.x) && (min2.x < max.x),\r\n\t\t yOverlaps = (max2.y > min.y) && (min2.y < max.y);\r\n\r\n\t\treturn xOverlaps && yOverlaps;\r\n\t},\r\n\r\n\tisValid: function () {\r\n\t\treturn !!(this.min && this.max);\r\n\t}\r\n};\r\n\r\n\r\n// @factory L.bounds(corner1: Point, corner2: Point)\r\n// Creates a Bounds object from two corners coordinate pairs.\r\n// @alternative\r\n// @factory L.bounds(points: Point[])\r\n// Creates a Bounds object from the given array of points.\r\nexport function toBounds(a, b) {\r\n\tif (!a || a instanceof Bounds) {\r\n\t\treturn a;\r\n\t}\r\n\treturn new Bounds(a, b);\r\n}\r\n","import {LatLng, toLatLng} from './LatLng';\r\n\r\n/*\r\n * @class LatLngBounds\r\n * @aka L.LatLngBounds\r\n *\r\n * Represents a rectangular geographical area on a map.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var corner1 = L.latLng(40.712, -74.227),\r\n * corner2 = L.latLng(40.774, -74.125),\r\n * bounds = L.latLngBounds(corner1, corner2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLngBounds objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * map.fitBounds([\r\n * \t[40.712, -74.227],\r\n * \t[40.774, -74.125]\r\n * ]);\r\n * ```\r\n *\r\n * Caution: if the area crosses the antimeridian (often confused with the International Date Line), you must specify corners _outside_ the [-180, 180] degrees longitude range.\r\n *\r\n * Note that `LatLngBounds` does not inherit from Leafet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function LatLngBounds(corner1, corner2) { // (LatLng, LatLng) or (LatLng[])\r\n\tif (!corner1) { return; }\r\n\r\n\tvar latlngs = corner2 ? [corner1, corner2] : corner1;\r\n\r\n\tfor (var i = 0, len = latlngs.length; i < len; i++) {\r\n\t\tthis.extend(latlngs[i]);\r\n\t}\r\n}\r\n\r\nLatLngBounds.prototype = {\r\n\r\n\t// @method extend(latlng: LatLng): this\r\n\t// Extend the bounds to contain the given point\r\n\r\n\t// @alternative\r\n\t// @method extend(otherBounds: LatLngBounds): this\r\n\t// Extend the bounds to contain the given bounds\r\n\textend: function (obj) {\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t sw2, ne2;\r\n\r\n\t\tif (obj instanceof LatLng) {\r\n\t\t\tsw2 = obj;\r\n\t\t\tne2 = obj;\r\n\r\n\t\t} else if (obj instanceof LatLngBounds) {\r\n\t\t\tsw2 = obj._southWest;\r\n\t\t\tne2 = obj._northEast;\r\n\r\n\t\t\tif (!sw2 || !ne2) { return this; }\r\n\r\n\t\t} else {\r\n\t\t\treturn obj ? this.extend(toLatLng(obj) || toLatLngBounds(obj)) : this;\r\n\t\t}\r\n\r\n\t\tif (!sw && !ne) {\r\n\t\t\tthis._southWest = new LatLng(sw2.lat, sw2.lng);\r\n\t\t\tthis._northEast = new LatLng(ne2.lat, ne2.lng);\r\n\t\t} else {\r\n\t\t\tsw.lat = Math.min(sw2.lat, sw.lat);\r\n\t\t\tsw.lng = Math.min(sw2.lng, sw.lng);\r\n\t\t\tne.lat = Math.max(ne2.lat, ne.lat);\r\n\t\t\tne.lng = Math.max(ne2.lng, ne.lng);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method pad(bufferRatio: Number): LatLngBounds\r\n\t// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.\r\n\t// For example, a ratio of 0.5 extends the bounds by 50% in each direction.\r\n\t// Negative values will retract the bounds.\r\n\tpad: function (bufferRatio) {\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio,\r\n\t\t widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio;\r\n\r\n\t\treturn new LatLngBounds(\r\n\t\t new LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer),\r\n\t\t new LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer));\r\n\t},\r\n\r\n\t// @method getCenter(): LatLng\r\n\t// Returns the center point of the bounds.\r\n\tgetCenter: function () {\r\n\t\treturn new LatLng(\r\n\t\t (this._southWest.lat + this._northEast.lat) / 2,\r\n\t\t (this._southWest.lng + this._northEast.lng) / 2);\r\n\t},\r\n\r\n\t// @method getSouthWest(): LatLng\r\n\t// Returns the south-west point of the bounds.\r\n\tgetSouthWest: function () {\r\n\t\treturn this._southWest;\r\n\t},\r\n\r\n\t// @method getNorthEast(): LatLng\r\n\t// Returns the north-east point of the bounds.\r\n\tgetNorthEast: function () {\r\n\t\treturn this._northEast;\r\n\t},\r\n\r\n\t// @method getNorthWest(): LatLng\r\n\t// Returns the north-west point of the bounds.\r\n\tgetNorthWest: function () {\r\n\t\treturn new LatLng(this.getNorth(), this.getWest());\r\n\t},\r\n\r\n\t// @method getSouthEast(): LatLng\r\n\t// Returns the south-east point of the bounds.\r\n\tgetSouthEast: function () {\r\n\t\treturn new LatLng(this.getSouth(), this.getEast());\r\n\t},\r\n\r\n\t// @method getWest(): Number\r\n\t// Returns the west longitude of the bounds\r\n\tgetWest: function () {\r\n\t\treturn this._southWest.lng;\r\n\t},\r\n\r\n\t// @method getSouth(): Number\r\n\t// Returns the south latitude of the bounds\r\n\tgetSouth: function () {\r\n\t\treturn this._southWest.lat;\r\n\t},\r\n\r\n\t// @method getEast(): Number\r\n\t// Returns the east longitude of the bounds\r\n\tgetEast: function () {\r\n\t\treturn this._northEast.lng;\r\n\t},\r\n\r\n\t// @method getNorth(): Number\r\n\t// Returns the north latitude of the bounds\r\n\tgetNorth: function () {\r\n\t\treturn this._northEast.lat;\r\n\t},\r\n\r\n\t// @method contains(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle contains the given one.\r\n\r\n\t// @alternative\r\n\t// @method contains (latlng: LatLng): Boolean\r\n\t// Returns `true` if the rectangle contains the given point.\r\n\tcontains: function (obj) { // (LatLngBounds) or (LatLng) -> Boolean\r\n\t\tif (typeof obj[0] === 'number' || obj instanceof LatLng || 'lat' in obj) {\r\n\t\t\tobj = toLatLng(obj);\r\n\t\t} else {\r\n\t\t\tobj = toLatLngBounds(obj);\r\n\t\t}\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t sw2, ne2;\r\n\r\n\t\tif (obj instanceof LatLngBounds) {\r\n\t\t\tsw2 = obj.getSouthWest();\r\n\t\t\tne2 = obj.getNorthEast();\r\n\t\t} else {\r\n\t\t\tsw2 = ne2 = obj;\r\n\t\t}\r\n\r\n\t\treturn (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&\r\n\t\t (sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);\r\n\t},\r\n\r\n\t// @method intersects(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle intersects the given bounds. Two bounds intersect if they have at least one point in common.\r\n\tintersects: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t sw2 = bounds.getSouthWest(),\r\n\t\t ne2 = bounds.getNorthEast(),\r\n\r\n\t\t latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),\r\n\t\t lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);\r\n\r\n\t\treturn latIntersects && lngIntersects;\r\n\t},\r\n\r\n\t// @method overlaps(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle overlaps the given bounds. Two bounds overlap if their intersection is an area.\r\n\toverlaps: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t sw2 = bounds.getSouthWest(),\r\n\t\t ne2 = bounds.getNorthEast(),\r\n\r\n\t\t latOverlaps = (ne2.lat > sw.lat) && (sw2.lat < ne.lat),\r\n\t\t lngOverlaps = (ne2.lng > sw.lng) && (sw2.lng < ne.lng);\r\n\r\n\t\treturn latOverlaps && lngOverlaps;\r\n\t},\r\n\r\n\t// @method toBBoxString(): String\r\n\t// Returns a string with bounding box coordinates in a 'southwest_lng,southwest_lat,northeast_lng,northeast_lat' format. Useful for sending requests to web services that return geo data.\r\n\ttoBBoxString: function () {\r\n\t\treturn [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(',');\r\n\t},\r\n\r\n\t// @method equals(otherBounds: LatLngBounds, maxMargin?: Number): Boolean\r\n\t// Returns `true` if the rectangle is equivalent (within a small margin of error) to the given bounds. The margin of error can be overridden by setting `maxMargin` to a small number.\r\n\tequals: function (bounds, maxMargin) {\r\n\t\tif (!bounds) { return false; }\r\n\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\treturn this._southWest.equals(bounds.getSouthWest(), maxMargin) &&\r\n\t\t this._northEast.equals(bounds.getNorthEast(), maxMargin);\r\n\t},\r\n\r\n\t// @method isValid(): Boolean\r\n\t// Returns `true` if the bounds are properly initialized.\r\n\tisValid: function () {\r\n\t\treturn !!(this._southWest && this._northEast);\r\n\t}\r\n};\r\n\r\n// TODO International date line?\r\n\r\n// @factory L.latLngBounds(corner1: LatLng, corner2: LatLng)\r\n// Creates a `LatLngBounds` object by defining two diagonally opposite corners of the rectangle.\r\n\r\n// @alternative\r\n// @factory L.latLngBounds(latlngs: LatLng[])\r\n// Creates a `LatLngBounds` object defined by the geographical points it contains. Very useful for zooming the map to fit a particular set of locations with [`fitBounds`](#map-fitbounds).\r\nexport function toLatLngBounds(a, b) {\r\n\tif (a instanceof LatLngBounds) {\r\n\t\treturn a;\r\n\t}\r\n\treturn new LatLngBounds(a, b);\r\n}\r\n","import * as Util from '../core/Util';\r\nimport {Earth} from './crs/CRS.Earth';\r\nimport {toLatLngBounds} from './LatLngBounds';\r\n\r\n/* @class LatLng\r\n * @aka L.LatLng\r\n *\r\n * Represents a geographical point with a certain latitude and longitude.\r\n *\r\n * @example\r\n *\r\n * ```\r\n * var latlng = L.latLng(50.5, 30.5);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLng objects also accept them in a simple Array form and simple object form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```\r\n * map.panTo([50, 30]);\r\n * map.panTo({lon: 30, lat: 50});\r\n * map.panTo({lat: 50, lng: 30});\r\n * map.panTo(L.latLng(50, 30));\r\n * ```\r\n *\r\n * Note that `LatLng` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function LatLng(lat, lng, alt) {\r\n\tif (isNaN(lat) || isNaN(lng)) {\r\n\t\tthrow new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')');\r\n\t}\r\n\r\n\t// @property lat: Number\r\n\t// Latitude in degrees\r\n\tthis.lat = +lat;\r\n\r\n\t// @property lng: Number\r\n\t// Longitude in degrees\r\n\tthis.lng = +lng;\r\n\r\n\t// @property alt: Number\r\n\t// Altitude in meters (optional)\r\n\tif (alt !== undefined) {\r\n\t\tthis.alt = +alt;\r\n\t}\r\n}\r\n\r\nLatLng.prototype = {\r\n\t// @method equals(otherLatLng: LatLng, maxMargin?: Number): Boolean\r\n\t// Returns `true` if the given `LatLng` point is at the same position (within a small margin of error). The margin of error can be overridden by setting `maxMargin` to a small number.\r\n\tequals: function (obj, maxMargin) {\r\n\t\tif (!obj) { return false; }\r\n\r\n\t\tobj = toLatLng(obj);\r\n\r\n\t\tvar margin = Math.max(\r\n\t\t Math.abs(this.lat - obj.lat),\r\n\t\t Math.abs(this.lng - obj.lng));\r\n\r\n\t\treturn margin <= (maxMargin === undefined ? 1.0E-9 : maxMargin);\r\n\t},\r\n\r\n\t// @method toString(): String\r\n\t// Returns a string representation of the point (for debugging purposes).\r\n\ttoString: function (precision) {\r\n\t\treturn 'LatLng(' +\r\n\t\t Util.formatNum(this.lat, precision) + ', ' +\r\n\t\t Util.formatNum(this.lng, precision) + ')';\r\n\t},\r\n\r\n\t// @method distanceTo(otherLatLng: LatLng): Number\r\n\t// Returns the distance (in meters) to the given `LatLng` calculated using the [Spherical Law of Cosines](https://en.wikipedia.org/wiki/Spherical_law_of_cosines).\r\n\tdistanceTo: function (other) {\r\n\t\treturn Earth.distance(this, toLatLng(other));\r\n\t},\r\n\r\n\t// @method wrap(): LatLng\r\n\t// Returns a new `LatLng` object with the longitude wrapped so it's always between -180 and +180 degrees.\r\n\twrap: function () {\r\n\t\treturn Earth.wrapLatLng(this);\r\n\t},\r\n\r\n\t// @method toBounds(sizeInMeters: Number): LatLngBounds\r\n\t// Returns a new `LatLngBounds` object in which each boundary is `sizeInMeters/2` meters apart from the `LatLng`.\r\n\ttoBounds: function (sizeInMeters) {\r\n\t\tvar latAccuracy = 180 * sizeInMeters / 40075017,\r\n\t\t lngAccuracy = latAccuracy / Math.cos((Math.PI / 180) * this.lat);\r\n\r\n\t\treturn toLatLngBounds(\r\n\t\t [this.lat - latAccuracy, this.lng - lngAccuracy],\r\n\t\t [this.lat + latAccuracy, this.lng + lngAccuracy]);\r\n\t},\r\n\r\n\tclone: function () {\r\n\t\treturn new LatLng(this.lat, this.lng, this.alt);\r\n\t}\r\n};\r\n\r\n\r\n\r\n// @factory L.latLng(latitude: Number, longitude: Number, altitude?: Number): LatLng\r\n// Creates an object representing a geographical point with the given latitude and longitude (and optionally altitude).\r\n\r\n// @alternative\r\n// @factory L.latLng(coords: Array): LatLng\r\n// Expects an array of the form `[Number, Number]` or `[Number, Number, Number]` instead.\r\n\r\n// @alternative\r\n// @factory L.latLng(coords: Object): LatLng\r\n// Expects an plain object of the form `{lat: Number, lng: Number}` or `{lat: Number, lng: Number, alt: Number}` instead.\r\n\r\nexport function toLatLng(a, b, c) {\r\n\tif (a instanceof LatLng) {\r\n\t\treturn a;\r\n\t}\r\n\tif (Util.isArray(a) && typeof a[0] !== 'object') {\r\n\t\tif (a.length === 3) {\r\n\t\t\treturn new LatLng(a[0], a[1], a[2]);\r\n\t\t}\r\n\t\tif (a.length === 2) {\r\n\t\t\treturn new LatLng(a[0], a[1]);\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\tif (a === undefined || a === null) {\r\n\t\treturn a;\r\n\t}\r\n\tif (typeof a === 'object' && 'lat' in a) {\r\n\t\treturn new LatLng(a.lat, 'lng' in a ? a.lng : a.lon, a.alt);\r\n\t}\r\n\tif (b === undefined) {\r\n\t\treturn null;\r\n\t}\r\n\treturn new LatLng(a, b, c);\r\n}\r\n","\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {LatLng} from '../LatLng';\r\nimport {LatLngBounds} from '../LatLngBounds';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.Base\r\n * Object that defines coordinate reference systems for projecting\r\n * geographical points into pixel (screen) coordinates and back (and to\r\n * coordinates in other units for [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services). See\r\n * [spatial reference system](http://en.wikipedia.org/wiki/Coordinate_reference_system).\r\n *\r\n * Leaflet defines the most usual CRSs by default. If you want to use a\r\n * CRS not defined by default, take a look at the\r\n * [Proj4Leaflet](https://github.com/kartena/Proj4Leaflet) plugin.\r\n *\r\n * Note that the CRS instances do not inherit from Leafet's `Class` object,\r\n * and can't be instantiated. Also, new classes can't inherit from them,\r\n * and methods can't be added to them with the `include` function.\r\n */\r\n\r\nexport var CRS = {\r\n\t// @method latLngToPoint(latlng: LatLng, zoom: Number): Point\r\n\t// Projects geographical coordinates into pixel coordinates for a given zoom.\r\n\tlatLngToPoint: function (latlng, zoom) {\r\n\t\tvar projectedPoint = this.projection.project(latlng),\r\n\t\t scale = this.scale(zoom);\r\n\r\n\t\treturn this.transformation._transform(projectedPoint, scale);\r\n\t},\r\n\r\n\t// @method pointToLatLng(point: Point, zoom: Number): LatLng\r\n\t// The inverse of `latLngToPoint`. Projects pixel coordinates on a given\r\n\t// zoom into geographical coordinates.\r\n\tpointToLatLng: function (point, zoom) {\r\n\t\tvar scale = this.scale(zoom),\r\n\t\t untransformedPoint = this.transformation.untransform(point, scale);\r\n\r\n\t\treturn this.projection.unproject(untransformedPoint);\r\n\t},\r\n\r\n\t// @method project(latlng: LatLng): Point\r\n\t// Projects geographical coordinates into coordinates in units accepted for\r\n\t// this CRS (e.g. meters for EPSG:3857, for passing it to WMS services).\r\n\tproject: function (latlng) {\r\n\t\treturn this.projection.project(latlng);\r\n\t},\r\n\r\n\t// @method unproject(point: Point): LatLng\r\n\t// Given a projected coordinate returns the corresponding LatLng.\r\n\t// The inverse of `project`.\r\n\tunproject: function (point) {\r\n\t\treturn this.projection.unproject(point);\r\n\t},\r\n\r\n\t// @method scale(zoom: Number): Number\r\n\t// Returns the scale used when transforming projected coordinates into\r\n\t// pixel coordinates for a particular zoom. For example, it returns\r\n\t// `256 * 2^zoom` for Mercator-based CRS.\r\n\tscale: function (zoom) {\r\n\t\treturn 256 * Math.pow(2, zoom);\r\n\t},\r\n\r\n\t// @method zoom(scale: Number): Number\r\n\t// Inverse of `scale()`, returns the zoom level corresponding to a scale\r\n\t// factor of `scale`.\r\n\tzoom: function (scale) {\r\n\t\treturn Math.log(scale / 256) / Math.LN2;\r\n\t},\r\n\r\n\t// @method getProjectedBounds(zoom: Number): Bounds\r\n\t// Returns the projection's bounds scaled and transformed for the provided `zoom`.\r\n\tgetProjectedBounds: function (zoom) {\r\n\t\tif (this.infinite) { return null; }\r\n\r\n\t\tvar b = this.projection.bounds,\r\n\t\t s = this.scale(zoom),\r\n\t\t min = this.transformation.transform(b.min, s),\r\n\t\t max = this.transformation.transform(b.max, s);\r\n\r\n\t\treturn new Bounds(min, max);\r\n\t},\r\n\r\n\t// @method distance(latlng1: LatLng, latlng2: LatLng): Number\r\n\t// Returns the distance between two geographical coordinates.\r\n\r\n\t// @property code: String\r\n\t// Standard code name of the CRS passed into WMS services (e.g. `'EPSG:3857'`)\r\n\t//\r\n\t// @property wrapLng: Number[]\r\n\t// An array of two numbers defining whether the longitude (horizontal) coordinate\r\n\t// axis wraps around a given range and how. Defaults to `[-180, 180]` in most\r\n\t// geographical CRSs. If `undefined`, the longitude axis does not wrap around.\r\n\t//\r\n\t// @property wrapLat: Number[]\r\n\t// Like `wrapLng`, but for the latitude (vertical) axis.\r\n\r\n\t// wrapLng: [min, max],\r\n\t// wrapLat: [min, max],\r\n\r\n\t// @property infinite: Boolean\r\n\t// If true, the coordinate space will be unbounded (infinite in both axes)\r\n\tinfinite: false,\r\n\r\n\t// @method wrapLatLng(latlng: LatLng): LatLng\r\n\t// Returns a `LatLng` where lat and lng has been wrapped according to the\r\n\t// CRS's `wrapLat` and `wrapLng` properties, if they are outside the CRS's bounds.\r\n\twrapLatLng: function (latlng) {\r\n\t\tvar lng = this.wrapLng ? Util.wrapNum(latlng.lng, this.wrapLng, true) : latlng.lng,\r\n\t\t lat = this.wrapLat ? Util.wrapNum(latlng.lat, this.wrapLat, true) : latlng.lat,\r\n\t\t alt = latlng.alt;\r\n\r\n\t\treturn new LatLng(lat, lng, alt);\r\n\t},\r\n\r\n\t// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\r\n\t// Returns a `LatLngBounds` with the same size as the given one, ensuring\r\n\t// that its center is within the CRS's bounds.\r\n\t// Only accepts actual `L.LatLngBounds` instances, not arrays.\r\n\twrapLatLngBounds: function (bounds) {\r\n\t\tvar center = bounds.getCenter(),\r\n\t\t newCenter = this.wrapLatLng(center),\r\n\t\t latShift = center.lat - newCenter.lat,\r\n\t\t lngShift = center.lng - newCenter.lng;\r\n\r\n\t\tif (latShift === 0 && lngShift === 0) {\r\n\t\t\treturn bounds;\r\n\t\t}\r\n\r\n\t\tvar sw = bounds.getSouthWest(),\r\n\t\t ne = bounds.getNorthEast(),\r\n\t\t newSw = new LatLng(sw.lat - latShift, sw.lng - lngShift),\r\n\t\t newNe = new LatLng(ne.lat - latShift, ne.lng - lngShift);\r\n\r\n\t\treturn new LatLngBounds(newSw, newNe);\r\n\t}\r\n};\r\n","import {CRS} from './CRS';\nimport * as Util from '../../core/Util';\n\n/*\n * @namespace CRS\n * @crs L.CRS.Earth\n *\n * Serves as the base for CRS that are global such that they cover the earth.\n * Can only be used as the base for other CRS and cannot be used directly,\n * since it does not have a `code`, `projection` or `transformation`. `distance()` returns\n * meters.\n */\n\nexport var Earth = Util.extend({}, CRS, {\n\twrapLng: [-180, 180],\n\n\t// Mean Earth Radius, as recommended for use by\n\t// the International Union of Geodesy and Geophysics,\n\t// see http://rosettacode.org/wiki/Haversine_formula\n\tR: 6371000,\n\n\t// distance between two geographical points using spherical law of cosines approximation\n\tdistance: function (latlng1, latlng2) {\n\t\tvar rad = Math.PI / 180,\n\t\t lat1 = latlng1.lat * rad,\n\t\t lat2 = latlng2.lat * rad,\n\t\t sinDLat = Math.sin((latlng2.lat - latlng1.lat) * rad / 2),\n\t\t sinDLon = Math.sin((latlng2.lng - latlng1.lng) * rad / 2),\n\t\t a = sinDLat * sinDLat + Math.cos(lat1) * Math.cos(lat2) * sinDLon * sinDLon,\n\t\t c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n\t\treturn this.R * c;\n\t}\n});\n","import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @projection L.Projection.SphericalMercator\r\n *\r\n * Spherical Mercator projection — the most common projection for online maps,\r\n * used by almost all free and commercial tile providers. Assumes that Earth is\r\n * a sphere. Used by the `EPSG:3857` CRS.\r\n */\r\n\r\nvar earthRadius = 6378137;\r\n\r\nexport var SphericalMercator = {\r\n\r\n\tR: earthRadius,\r\n\tMAX_LATITUDE: 85.0511287798,\r\n\r\n\tproject: function (latlng) {\r\n\t\tvar d = Math.PI / 180,\r\n\t\t max = this.MAX_LATITUDE,\r\n\t\t lat = Math.max(Math.min(max, latlng.lat), -max),\r\n\t\t sin = Math.sin(lat * d);\r\n\r\n\t\treturn new Point(\r\n\t\t\tthis.R * latlng.lng * d,\r\n\t\t\tthis.R * Math.log((1 + sin) / (1 - sin)) / 2);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\tvar d = 180 / Math.PI;\r\n\r\n\t\treturn new LatLng(\r\n\t\t\t(2 * Math.atan(Math.exp(point.y / this.R)) - (Math.PI / 2)) * d,\r\n\t\t\tpoint.x * d / this.R);\r\n\t},\r\n\r\n\tbounds: (function () {\r\n\t\tvar d = earthRadius * Math.PI;\r\n\t\treturn new Bounds([-d, -d], [d, d]);\r\n\t})()\r\n};\r\n","import {Point} from './Point';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class Transformation\r\n * @aka L.Transformation\r\n *\r\n * Represents an affine transformation: a set of coefficients `a`, `b`, `c`, `d`\r\n * for transforming a point of a form `(x, y)` into `(a*x + b, c*y + d)` and doing\r\n * the reverse. Used by Leaflet in its projections code.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var transformation = L.transformation(2, 5, -1, 10),\r\n * \tp = L.point(1, 2),\r\n * \tp2 = transformation.transform(p), // L.point(7, 8)\r\n * \tp3 = transformation.untransform(p2); // L.point(1, 2)\r\n * ```\r\n */\r\n\r\n\r\n// factory new L.Transformation(a: Number, b: Number, c: Number, d: Number)\r\n// Creates a `Transformation` object with the given coefficients.\r\nexport function Transformation(a, b, c, d) {\r\n\tif (Util.isArray(a)) {\r\n\t\t// use array properties\r\n\t\tthis._a = a[0];\r\n\t\tthis._b = a[1];\r\n\t\tthis._c = a[2];\r\n\t\tthis._d = a[3];\r\n\t\treturn;\r\n\t}\r\n\tthis._a = a;\r\n\tthis._b = b;\r\n\tthis._c = c;\r\n\tthis._d = d;\r\n}\r\n\r\nTransformation.prototype = {\r\n\t// @method transform(point: Point, scale?: Number): Point\r\n\t// Returns a transformed point, optionally multiplied by the given scale.\r\n\t// Only accepts actual `L.Point` instances, not arrays.\r\n\ttransform: function (point, scale) { // (Point, Number) -> Point\r\n\t\treturn this._transform(point.clone(), scale);\r\n\t},\r\n\r\n\t// destructive transform (faster)\r\n\t_transform: function (point, scale) {\r\n\t\tscale = scale || 1;\r\n\t\tpoint.x = scale * (this._a * point.x + this._b);\r\n\t\tpoint.y = scale * (this._c * point.y + this._d);\r\n\t\treturn point;\r\n\t},\r\n\r\n\t// @method untransform(point: Point, scale?: Number): Point\r\n\t// Returns the reverse transformation of the given point, optionally divided\r\n\t// by the given scale. Only accepts actual `L.Point` instances, not arrays.\r\n\tuntransform: function (point, scale) {\r\n\t\tscale = scale || 1;\r\n\t\treturn new Point(\r\n\t\t (point.x / scale - this._b) / this._a,\r\n\t\t (point.y / scale - this._d) / this._c);\r\n\t}\r\n};\r\n\r\n// factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n\r\n// @factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n// Instantiates a Transformation object with the given coefficients.\r\n\r\n// @alternative\r\n// @factory L.transformation(coefficients: Array): Transformation\r\n// Expects an coefficients array of the form\r\n// `[a: Number, b: Number, c: Number, d: Number]`.\r\n\r\nexport function toTransformation(a, b, c, d) {\r\n\treturn new Transformation(a, b, c, d);\r\n}\r\n","import {Earth} from './CRS.Earth';\r\nimport {SphericalMercator} from '../projection/Projection.SphericalMercator';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG3857\r\n *\r\n * The most common CRS for online maps, used by almost all free and commercial\r\n * tile providers. Uses Spherical Mercator projection. Set in by default in\r\n * Map's `crs` option.\r\n */\r\n\r\nexport var EPSG3857 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:3857',\r\n\tprojection: SphericalMercator,\r\n\r\n\ttransformation: (function () {\r\n\t\tvar scale = 0.5 / (Math.PI * SphericalMercator.R);\r\n\t\treturn toTransformation(scale, 0.5, -scale, 0.5);\r\n\t}())\r\n});\r\n\r\nexport var EPSG900913 = Util.extend({}, EPSG3857, {\r\n\tcode: 'EPSG:900913'\r\n});\r\n","import * as Browser from '../../core/Browser';\n\n// @namespace SVG; @section\n// There are several static functions which can be called without instantiating L.SVG:\n\n// @function create(name: String): SVGElement\n// Returns a instance of [SVGElement](https://developer.mozilla.org/docs/Web/API/SVGElement),\n// corresponding to the class name passed. For example, using 'line' will return\n// an instance of [SVGLineElement](https://developer.mozilla.org/docs/Web/API/SVGLineElement).\nexport function svgCreate(name) {\n\treturn document.createElementNS('http://www.w3.org/2000/svg', name);\n}\n\n// @function pointsToPath(rings: Point[], closed: Boolean): String\n// Generates a SVG path string for multiple rings, with each ring turning\n// into \"M..L..L..\" instructions\nexport function pointsToPath(rings, closed) {\n\tvar str = '',\n\ti, j, len, len2, points, p;\n\n\tfor (i = 0, len = rings.length; i < len; i++) {\n\t\tpoints = rings[i];\n\n\t\tfor (j = 0, len2 = points.length; j < len2; j++) {\n\t\t\tp = points[j];\n\t\t\tstr += (j ? 'L' : 'M') + p.x + ' ' + p.y;\n\t\t}\n\n\t\t// closes the ring for polygons; \"x\" is VML syntax\n\t\tstr += closed ? (Browser.svg ? 'z' : 'x') : '';\n\t}\n\n\t// SVG complains about empty path strings\n\treturn str || 'M0 0';\n}\n\n\n\n\n","import * as Util from './Util';\r\nimport {svgCreate} from '../layer/vector/SVG.Util';\r\n\r\n/*\r\n * @namespace Browser\r\n * @aka L.Browser\r\n *\r\n * A namespace with static properties for browser/feature detection used by Leaflet internally.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * if (L.Browser.ielt9) {\r\n * alert('Upgrade your browser, dude!');\r\n * }\r\n * ```\r\n */\r\n\r\nvar style = document.documentElement.style;\r\n\r\n// @property ie: Boolean; `true` for all Internet Explorer versions (not Edge).\r\nexport var ie = 'ActiveXObject' in window;\r\n\r\n// @property ielt9: Boolean; `true` for Internet Explorer versions less than 9.\r\nexport var ielt9 = ie && !document.addEventListener;\r\n\r\n// @property edge: Boolean; `true` for the Edge web browser.\r\nexport var edge = 'msLaunchUri' in navigator && !('documentMode' in document);\r\n\r\n// @property webkit: Boolean;\r\n// `true` for webkit-based browsers like Chrome and Safari (including mobile versions).\r\nexport var webkit = userAgentContains('webkit');\r\n\r\n// @property android: Boolean\r\n// `true` for any browser running on an Android platform.\r\nexport var android = userAgentContains('android');\r\n\r\n// @property android23: Boolean; `true` for browsers running on Android 2 or Android 3.\r\nexport var android23 = userAgentContains('android 2') || userAgentContains('android 3');\r\n\r\n/* See https://stackoverflow.com/a/17961266 for details on detecting stock Android */\r\nvar webkitVer = parseInt(/WebKit\\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10); // also matches AppleWebKit\r\n// @property androidStock: Boolean; `true` for the Android stock browser (i.e. not Chrome)\r\nexport var androidStock = android && userAgentContains('Google') && webkitVer < 537 && !('AudioNode' in window);\r\n\r\n// @property opera: Boolean; `true` for the Opera browser\r\nexport var opera = !!window.opera;\r\n\r\n// @property chrome: Boolean; `true` for the Chrome browser.\r\nexport var chrome = userAgentContains('chrome');\r\n\r\n// @property gecko: Boolean; `true` for gecko-based browsers like Firefox.\r\nexport var gecko = userAgentContains('gecko') && !webkit && !opera && !ie;\r\n\r\n// @property safari: Boolean; `true` for the Safari browser.\r\nexport var safari = !chrome && userAgentContains('safari');\r\n\r\nexport var phantom = userAgentContains('phantom');\r\n\r\n// @property opera12: Boolean\r\n// `true` for the Opera browser supporting CSS transforms (version 12 or later).\r\nexport var opera12 = 'OTransition' in style;\r\n\r\n// @property win: Boolean; `true` when the browser is running in a Windows platform\r\nexport var win = navigator.platform.indexOf('Win') === 0;\r\n\r\n// @property ie3d: Boolean; `true` for all Internet Explorer versions supporting CSS transforms.\r\nexport var ie3d = ie && ('transition' in style);\r\n\r\n// @property webkit3d: Boolean; `true` for webkit-based browsers supporting CSS transforms.\r\nexport var webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()) && !android23;\r\n\r\n// @property gecko3d: Boolean; `true` for gecko-based browsers supporting CSS transforms.\r\nexport var gecko3d = 'MozPerspective' in style;\r\n\r\n// @property any3d: Boolean\r\n// `true` for all browsers supporting CSS transforms.\r\nexport var any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d) && !opera12 && !phantom;\r\n\r\n// @property mobile: Boolean; `true` for all browsers running in a mobile device.\r\nexport var mobile = typeof orientation !== 'undefined' || userAgentContains('mobile');\r\n\r\n// @property mobileWebkit: Boolean; `true` for all webkit-based browsers in a mobile device.\r\nexport var mobileWebkit = mobile && webkit;\r\n\r\n// @property mobileWebkit3d: Boolean\r\n// `true` for all webkit-based browsers in a mobile device supporting CSS transforms.\r\nexport var mobileWebkit3d = mobile && webkit3d;\r\n\r\n// @property msPointer: Boolean\r\n// `true` for browsers implementing the Microsoft touch events model (notably IE10).\r\nexport var msPointer = !window.PointerEvent && window.MSPointerEvent;\r\n\r\n// @property pointer: Boolean\r\n// `true` for all browsers supporting [pointer events](https://msdn.microsoft.com/en-us/library/dn433244%28v=vs.85%29.aspx).\r\nexport var pointer = !webkit && !!(window.PointerEvent || msPointer);\r\n\r\n// @property touch: Boolean\r\n// `true` for all browsers supporting [touch events](https://developer.mozilla.org/docs/Web/API/Touch_events).\r\n// This does not necessarily mean that the browser is running in a computer with\r\n// a touchscreen, it only means that the browser is capable of understanding\r\n// touch events.\r\nexport var touch = !window.L_NO_TOUCH && (pointer || 'ontouchstart' in window ||\r\n\t\t(window.DocumentTouch && document instanceof window.DocumentTouch));\r\n\r\n// @property mobileOpera: Boolean; `true` for the Opera browser in a mobile device.\r\nexport var mobileOpera = mobile && opera;\r\n\r\n// @property mobileGecko: Boolean\r\n// `true` for gecko-based browsers running in a mobile device.\r\nexport var mobileGecko = mobile && gecko;\r\n\r\n// @property retina: Boolean\r\n// `true` for browsers on a high-resolution \"retina\" screen or on any screen when browser's display zoom is more than 100%.\r\nexport var retina = (window.devicePixelRatio || (window.screen.deviceXDPI / window.screen.logicalXDPI)) > 1;\r\n\r\n// @property passiveEvents: Boolean\r\n// `true` for browsers that support passive events.\r\nexport var passiveEvents = (function () {\r\n\tvar supportsPassiveOption = false;\r\n\ttry {\r\n\t\tvar opts = Object.defineProperty({}, 'passive', {\r\n\t\t\tget: function () {\r\n\t\t\t\tsupportsPassiveOption = true;\r\n\t\t\t}\r\n\t\t});\r\n\t\twindow.addEventListener('testPassiveEventSupport', Util.falseFn, opts);\r\n\t\twindow.removeEventListener('testPassiveEventSupport', Util.falseFn, opts);\r\n\t} catch (e) {\r\n\t\t// Errors can safely be ignored since this is only a browser support test.\r\n\t}\r\n\treturn supportsPassiveOption;\r\n});\r\n\r\n// @property canvas: Boolean\r\n// `true` when the browser supports [``](https://developer.mozilla.org/docs/Web/API/Canvas_API).\r\nexport var canvas = (function () {\r\n\treturn !!document.createElement('canvas').getContext;\r\n}());\r\n\r\n// @property svg: Boolean\r\n// `true` when the browser supports [SVG](https://developer.mozilla.org/docs/Web/SVG).\r\nexport var svg = !!(document.createElementNS && svgCreate('svg').createSVGRect);\r\n\r\n// @property vml: Boolean\r\n// `true` if the browser supports [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language).\r\nexport var vml = !svg && (function () {\r\n\ttry {\r\n\t\tvar div = document.createElement('div');\r\n\t\tdiv.innerHTML = '';\r\n\r\n\t\tvar shape = div.firstChild;\r\n\t\tshape.style.behavior = 'url(#default#VML)';\r\n\r\n\t\treturn shape && (typeof shape.adj === 'object');\r\n\r\n\t} catch (e) {\r\n\t\treturn false;\r\n\t}\r\n}());\r\n\r\n\r\nfunction userAgentContains(str) {\r\n\treturn navigator.userAgent.toLowerCase().indexOf(str) >= 0;\r\n}\r\n","import * as DomEvent from './DomEvent';\nimport * as Util from '../core/Util';\nimport * as Browser from '../core/Browser';\n\n/*\n * Extends L.DomEvent to provide touch support for Internet Explorer and Windows-based devices.\n */\n\n\nvar POINTER_DOWN = Browser.msPointer ? 'MSPointerDown' : 'pointerdown';\nvar POINTER_MOVE = Browser.msPointer ? 'MSPointerMove' : 'pointermove';\nvar POINTER_UP = Browser.msPointer ? 'MSPointerUp' : 'pointerup';\nvar POINTER_CANCEL = Browser.msPointer ? 'MSPointerCancel' : 'pointercancel';\nvar TAG_WHITE_LIST = ['INPUT', 'SELECT', 'OPTION'];\n\nvar _pointers = {};\nvar _pointerDocListener = false;\n\n// DomEvent.DoubleTap needs to know about this\nexport var _pointersCount = 0;\n\n// Provides a touch events wrapper for (ms)pointer events.\n// ref http://www.w3.org/TR/pointerevents/ https://www.w3.org/Bugs/Public/show_bug.cgi?id=22890\n\nexport function addPointerListener(obj, type, handler, id) {\n\tif (type === 'touchstart') {\n\t\t_addPointerStart(obj, handler, id);\n\n\t} else if (type === 'touchmove') {\n\t\t_addPointerMove(obj, handler, id);\n\n\t} else if (type === 'touchend') {\n\t\t_addPointerEnd(obj, handler, id);\n\t}\n\n\treturn this;\n}\n\nexport function removePointerListener(obj, type, id) {\n\tvar handler = obj['_leaflet_' + type + id];\n\n\tif (type === 'touchstart') {\n\t\tobj.removeEventListener(POINTER_DOWN, handler, false);\n\n\t} else if (type === 'touchmove') {\n\t\tobj.removeEventListener(POINTER_MOVE, handler, false);\n\n\t} else if (type === 'touchend') {\n\t\tobj.removeEventListener(POINTER_UP, handler, false);\n\t\tobj.removeEventListener(POINTER_CANCEL, handler, false);\n\t}\n\n\treturn this;\n}\n\nfunction _addPointerStart(obj, handler, id) {\n\tvar onDown = Util.bind(function (e) {\n\t\tif (e.pointerType !== 'mouse' && e.MSPOINTER_TYPE_MOUSE && e.pointerType !== e.MSPOINTER_TYPE_MOUSE) {\n\t\t\t// In IE11, some touch events needs to fire for form controls, or\n\t\t\t// the controls will stop working. We keep a whitelist of tag names that\n\t\t\t// need these events. For other target tags, we prevent default on the event.\n\t\t\tif (TAG_WHITE_LIST.indexOf(e.target.tagName) < 0) {\n\t\t\t\tDomEvent.preventDefault(e);\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t_handlePointer(e, handler);\n\t});\n\n\tobj['_leaflet_touchstart' + id] = onDown;\n\tobj.addEventListener(POINTER_DOWN, onDown, false);\n\n\t// need to keep track of what pointers and how many are active to provide e.touches emulation\n\tif (!_pointerDocListener) {\n\t\t// we listen documentElement as any drags that end by moving the touch off the screen get fired there\n\t\tdocument.documentElement.addEventListener(POINTER_DOWN, _globalPointerDown, true);\n\t\tdocument.documentElement.addEventListener(POINTER_MOVE, _globalPointerMove, true);\n\t\tdocument.documentElement.addEventListener(POINTER_UP, _globalPointerUp, true);\n\t\tdocument.documentElement.addEventListener(POINTER_CANCEL, _globalPointerUp, true);\n\n\t\t_pointerDocListener = true;\n\t}\n}\n\nfunction _globalPointerDown(e) {\n\t_pointers[e.pointerId] = e;\n\t_pointersCount++;\n}\n\nfunction _globalPointerMove(e) {\n\tif (_pointers[e.pointerId]) {\n\t\t_pointers[e.pointerId] = e;\n\t}\n}\n\nfunction _globalPointerUp(e) {\n\tdelete _pointers[e.pointerId];\n\t_pointersCount--;\n}\n\nfunction _handlePointer(e, handler) {\n\te.touches = [];\n\tfor (var i in _pointers) {\n\t\te.touches.push(_pointers[i]);\n\t}\n\te.changedTouches = [e];\n\n\thandler(e);\n}\n\nfunction _addPointerMove(obj, handler, id) {\n\tvar onMove = function (e) {\n\t\t// don't fire touch moves when mouse isn't down\n\t\tif ((e.pointerType === e.MSPOINTER_TYPE_MOUSE || e.pointerType === 'mouse') && e.buttons === 0) { return; }\n\n\t\t_handlePointer(e, handler);\n\t};\n\n\tobj['_leaflet_touchmove' + id] = onMove;\n\tobj.addEventListener(POINTER_MOVE, onMove, false);\n}\n\nfunction _addPointerEnd(obj, handler, id) {\n\tvar onUp = function (e) {\n\t\t_handlePointer(e, handler);\n\t};\n\n\tobj['_leaflet_touchend' + id] = onUp;\n\tobj.addEventListener(POINTER_UP, onUp, false);\n\tobj.addEventListener(POINTER_CANCEL, onUp, false);\n}\n\n","import * as Browser from '../core/Browser';\r\nimport {_pointersCount} from './DomEvent.Pointer';\r\n\r\n/*\r\n * Extends the event handling code with double tap support for mobile browsers.\r\n */\r\n\r\nvar _touchstart = Browser.msPointer ? 'MSPointerDown' : Browser.pointer ? 'pointerdown' : 'touchstart';\r\nvar _touchend = Browser.msPointer ? 'MSPointerUp' : Browser.pointer ? 'pointerup' : 'touchend';\r\nvar _pre = '_leaflet_';\r\n\r\n// inspired by Zepto touch code by Thomas Fuchs\r\nexport function addDoubleTapListener(obj, handler, id) {\r\n\tvar last, touch,\r\n\t doubleTap = false,\r\n\t delay = 250;\r\n\r\n\tfunction onTouchStart(e) {\r\n\t\tvar count;\r\n\r\n\t\tif (Browser.pointer) {\r\n\t\t\tif ((!Browser.edge) || e.pointerType === 'mouse') { return; }\r\n\t\t\tcount = _pointersCount;\r\n\t\t} else {\r\n\t\t\tcount = e.touches.length;\r\n\t\t}\r\n\r\n\t\tif (count > 1) { return; }\r\n\r\n\t\tvar now = Date.now(),\r\n\t\t delta = now - (last || now);\r\n\r\n\t\ttouch = e.touches ? e.touches[0] : e;\r\n\t\tdoubleTap = (delta > 0 && delta <= delay);\r\n\t\tlast = now;\r\n\t}\r\n\r\n\tfunction onTouchEnd(e) {\r\n\t\tif (doubleTap && !touch.cancelBubble) {\r\n\t\t\tif (Browser.pointer) {\r\n\t\t\t\tif ((!Browser.edge) || e.pointerType === 'mouse') { return; }\r\n\t\t\t\t// work around .type being readonly with MSPointer* events\r\n\t\t\t\tvar newTouch = {},\r\n\t\t\t\t prop, i;\r\n\r\n\t\t\t\tfor (i in touch) {\r\n\t\t\t\t\tprop = touch[i];\r\n\t\t\t\t\tnewTouch[i] = prop && prop.bind ? prop.bind(touch) : prop;\r\n\t\t\t\t}\r\n\t\t\t\ttouch = newTouch;\r\n\t\t\t}\r\n\t\t\ttouch.type = 'dblclick';\r\n\t\t\ttouch.button = 0;\r\n\t\t\thandler(touch);\r\n\t\t\tlast = null;\r\n\t\t}\r\n\t}\r\n\r\n\tobj[_pre + _touchstart + id] = onTouchStart;\r\n\tobj[_pre + _touchend + id] = onTouchEnd;\r\n\tobj[_pre + 'dblclick' + id] = handler;\r\n\r\n\tobj.addEventListener(_touchstart, onTouchStart, Browser.passiveEvents ? {passive: false} : false);\r\n\tobj.addEventListener(_touchend, onTouchEnd, Browser.passiveEvents ? {passive: false} : false);\r\n\r\n\t// On some platforms (notably, chrome<55 on win10 + touchscreen + mouse),\r\n\t// the browser doesn't fire touchend/pointerup events but does fire\r\n\t// native dblclicks. See #4127.\r\n\t// Edge 14 also fires native dblclicks, but only for pointerType mouse, see #5180.\r\n\tobj.addEventListener('dblclick', handler, false);\r\n\r\n\treturn this;\r\n}\r\n\r\nexport function removeDoubleTapListener(obj, id) {\r\n\tvar touchstart = obj[_pre + _touchstart + id],\r\n\t touchend = obj[_pre + _touchend + id],\r\n\t dblclick = obj[_pre + 'dblclick' + id];\r\n\r\n\tobj.removeEventListener(_touchstart, touchstart, Browser.passiveEvents ? {passive: false} : false);\r\n\tobj.removeEventListener(_touchend, touchend, Browser.passiveEvents ? {passive: false} : false);\r\n\tif (!Browser.edge) {\r\n\t\tobj.removeEventListener('dblclick', dblclick, false);\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n","import * as DomEvent from './DomEvent';\r\nimport * as Util from '../core/Util';\r\nimport {Point} from '../geometry/Point';\r\nimport * as Browser from '../core/Browser';\r\n\r\n/*\r\n * @namespace DomUtil\r\n *\r\n * Utility functions to work with the [DOM](https://developer.mozilla.org/docs/Web/API/Document_Object_Model)\r\n * tree, used by Leaflet internally.\r\n *\r\n * Most functions expecting or returning a `HTMLElement` also work for\r\n * SVG elements. The only difference is that classes refer to CSS classes\r\n * in HTML and SVG classes in SVG.\r\n */\r\n\r\n\r\n// @property TRANSFORM: String\r\n// Vendor-prefixed transform style name (e.g. `'webkitTransform'` for WebKit).\r\nexport var TRANSFORM = testProp(\r\n\t['transform', 'webkitTransform', 'OTransform', 'MozTransform', 'msTransform']);\r\n\r\n// webkitTransition comes first because some browser versions that drop vendor prefix don't do\r\n// the same for the transitionend event, in particular the Android 4.1 stock browser\r\n\r\n// @property TRANSITION: String\r\n// Vendor-prefixed transition style name.\r\nexport var TRANSITION = testProp(\r\n\t['webkitTransition', 'transition', 'OTransition', 'MozTransition', 'msTransition']);\r\n\r\n// @property TRANSITION_END: String\r\n// Vendor-prefixed transitionend event name.\r\nexport var TRANSITION_END =\r\n\tTRANSITION === 'webkitTransition' || TRANSITION === 'OTransition' ? TRANSITION + 'End' : 'transitionend';\r\n\r\n\r\n// @function get(id: String|HTMLElement): HTMLElement\r\n// Returns an element given its DOM id, or returns the element itself\r\n// if it was passed directly.\r\nexport function get(id) {\r\n\treturn typeof id === 'string' ? document.getElementById(id) : id;\r\n}\r\n\r\n// @function getStyle(el: HTMLElement, styleAttrib: String): String\r\n// Returns the value for a certain style attribute on an element,\r\n// including computed values or values set through CSS.\r\nexport function getStyle(el, style) {\r\n\tvar value = el.style[style] || (el.currentStyle && el.currentStyle[style]);\r\n\r\n\tif ((!value || value === 'auto') && document.defaultView) {\r\n\t\tvar css = document.defaultView.getComputedStyle(el, null);\r\n\t\tvalue = css ? css[style] : null;\r\n\t}\r\n\treturn value === 'auto' ? null : value;\r\n}\r\n\r\n// @function create(tagName: String, className?: String, container?: HTMLElement): HTMLElement\r\n// Creates an HTML element with `tagName`, sets its class to `className`, and optionally appends it to `container` element.\r\nexport function create(tagName, className, container) {\r\n\tvar el = document.createElement(tagName);\r\n\tel.className = className || '';\r\n\r\n\tif (container) {\r\n\t\tcontainer.appendChild(el);\r\n\t}\r\n\treturn el;\r\n}\r\n\r\n// @function remove(el: HTMLElement)\r\n// Removes `el` from its parent element\r\nexport function remove(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent) {\r\n\t\tparent.removeChild(el);\r\n\t}\r\n}\r\n\r\n// @function empty(el: HTMLElement)\r\n// Removes all of `el`'s children elements from `el`\r\nexport function empty(el) {\r\n\twhile (el.firstChild) {\r\n\t\tel.removeChild(el.firstChild);\r\n\t}\r\n}\r\n\r\n// @function toFront(el: HTMLElement)\r\n// Makes `el` the last child of its parent, so it renders in front of the other children.\r\nexport function toFront(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent && parent.lastChild !== el) {\r\n\t\tparent.appendChild(el);\r\n\t}\r\n}\r\n\r\n// @function toBack(el: HTMLElement)\r\n// Makes `el` the first child of its parent, so it renders behind the other children.\r\nexport function toBack(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent && parent.firstChild !== el) {\r\n\t\tparent.insertBefore(el, parent.firstChild);\r\n\t}\r\n}\r\n\r\n// @function hasClass(el: HTMLElement, name: String): Boolean\r\n// Returns `true` if the element's class attribute contains `name`.\r\nexport function hasClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\treturn el.classList.contains(name);\r\n\t}\r\n\tvar className = getClass(el);\r\n\treturn className.length > 0 && new RegExp('(^|\\\\s)' + name + '(\\\\s|$)').test(className);\r\n}\r\n\r\n// @function addClass(el: HTMLElement, name: String)\r\n// Adds `name` to the element's class attribute.\r\nexport function addClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\tvar classes = Util.splitWords(name);\r\n\t\tfor (var i = 0, len = classes.length; i < len; i++) {\r\n\t\t\tel.classList.add(classes[i]);\r\n\t\t}\r\n\t} else if (!hasClass(el, name)) {\r\n\t\tvar className = getClass(el);\r\n\t\tsetClass(el, (className ? className + ' ' : '') + name);\r\n\t}\r\n}\r\n\r\n// @function removeClass(el: HTMLElement, name: String)\r\n// Removes `name` from the element's class attribute.\r\nexport function removeClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\tel.classList.remove(name);\r\n\t} else {\r\n\t\tsetClass(el, Util.trim((' ' + getClass(el) + ' ').replace(' ' + name + ' ', ' ')));\r\n\t}\r\n}\r\n\r\n// @function setClass(el: HTMLElement, name: String)\r\n// Sets the element's class.\r\nexport function setClass(el, name) {\r\n\tif (el.className.baseVal === undefined) {\r\n\t\tel.className = name;\r\n\t} else {\r\n\t\t// in case of SVG element\r\n\t\tel.className.baseVal = name;\r\n\t}\r\n}\r\n\r\n// @function getClass(el: HTMLElement): String\r\n// Returns the element's class.\r\nexport function getClass(el) {\r\n\t// Check if the element is an SVGElementInstance and use the correspondingElement instead\r\n\t// (Required for linked SVG elements in IE11.)\r\n\tif (el.correspondingElement) {\r\n\t\tel = el.correspondingElement;\r\n\t}\r\n\treturn el.className.baseVal === undefined ? el.className : el.className.baseVal;\r\n}\r\n\r\n// @function setOpacity(el: HTMLElement, opacity: Number)\r\n// Set the opacity of an element (including old IE support).\r\n// `opacity` must be a number from `0` to `1`.\r\nexport function setOpacity(el, value) {\r\n\tif ('opacity' in el.style) {\r\n\t\tel.style.opacity = value;\r\n\t} else if ('filter' in el.style) {\r\n\t\t_setOpacityIE(el, value);\r\n\t}\r\n}\r\n\r\nfunction _setOpacityIE(el, value) {\r\n\tvar filter = false,\r\n\t filterName = 'DXImageTransform.Microsoft.Alpha';\r\n\r\n\t// filters collection throws an error if we try to retrieve a filter that doesn't exist\r\n\ttry {\r\n\t\tfilter = el.filters.item(filterName);\r\n\t} catch (e) {\r\n\t\t// don't set opacity to 1 if we haven't already set an opacity,\r\n\t\t// it isn't needed and breaks transparent pngs.\r\n\t\tif (value === 1) { return; }\r\n\t}\r\n\r\n\tvalue = Math.round(value * 100);\r\n\r\n\tif (filter) {\r\n\t\tfilter.Enabled = (value !== 100);\r\n\t\tfilter.Opacity = value;\r\n\t} else {\r\n\t\tel.style.filter += ' progid:' + filterName + '(opacity=' + value + ')';\r\n\t}\r\n}\r\n\r\n// @function testProp(props: String[]): String|false\r\n// Goes through the array of style names and returns the first name\r\n// that is a valid style name for an element. If no such name is found,\r\n// it returns false. Useful for vendor-prefixed styles like `transform`.\r\nexport function testProp(props) {\r\n\tvar style = document.documentElement.style;\r\n\r\n\tfor (var i = 0; i < props.length; i++) {\r\n\t\tif (props[i] in style) {\r\n\t\t\treturn props[i];\r\n\t\t}\r\n\t}\r\n\treturn false;\r\n}\r\n\r\n// @function setTransform(el: HTMLElement, offset: Point, scale?: Number)\r\n// Resets the 3D CSS transform of `el` so it is translated by `offset` pixels\r\n// and optionally scaled by `scale`. Does not have an effect if the\r\n// browser doesn't support 3D CSS transforms.\r\nexport function setTransform(el, offset, scale) {\r\n\tvar pos = offset || new Point(0, 0);\r\n\r\n\tel.style[TRANSFORM] =\r\n\t\t(Browser.ie3d ?\r\n\t\t\t'translate(' + pos.x + 'px,' + pos.y + 'px)' :\r\n\t\t\t'translate3d(' + pos.x + 'px,' + pos.y + 'px,0)') +\r\n\t\t(scale ? ' scale(' + scale + ')' : '');\r\n}\r\n\r\n// @function setPosition(el: HTMLElement, position: Point)\r\n// Sets the position of `el` to coordinates specified by `position`,\r\n// using CSS translate or top/left positioning depending on the browser\r\n// (used by Leaflet internally to position its layers).\r\nexport function setPosition(el, point) {\r\n\r\n\t/*eslint-disable */\r\n\tel._leaflet_pos = point;\r\n\t/* eslint-enable */\r\n\r\n\tif (Browser.any3d) {\r\n\t\tsetTransform(el, point);\r\n\t} else {\r\n\t\tel.style.left = point.x + 'px';\r\n\t\tel.style.top = point.y + 'px';\r\n\t}\r\n}\r\n\r\n// @function getPosition(el: HTMLElement): Point\r\n// Returns the coordinates of an element previously positioned with setPosition.\r\nexport function getPosition(el) {\r\n\t// this method is only used for elements previously positioned using setPosition,\r\n\t// so it's safe to cache the position for performance\r\n\r\n\treturn el._leaflet_pos || new Point(0, 0);\r\n}\r\n\r\n// @function disableTextSelection()\r\n// Prevents the user from generating `selectstart` DOM events, usually generated\r\n// when the user drags the mouse through a page with text. Used internally\r\n// by Leaflet to override the behaviour of any click-and-drag interaction on\r\n// the map. Affects drag interactions on the whole document.\r\n\r\n// @function enableTextSelection()\r\n// Cancels the effects of a previous [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection).\r\nexport var disableTextSelection;\r\nexport var enableTextSelection;\r\nvar _userSelect;\r\nif ('onselectstart' in document) {\r\n\tdisableTextSelection = function () {\r\n\t\tDomEvent.on(window, 'selectstart', DomEvent.preventDefault);\r\n\t};\r\n\tenableTextSelection = function () {\r\n\t\tDomEvent.off(window, 'selectstart', DomEvent.preventDefault);\r\n\t};\r\n} else {\r\n\tvar userSelectProperty = testProp(\r\n\t\t['userSelect', 'WebkitUserSelect', 'OUserSelect', 'MozUserSelect', 'msUserSelect']);\r\n\r\n\tdisableTextSelection = function () {\r\n\t\tif (userSelectProperty) {\r\n\t\t\tvar style = document.documentElement.style;\r\n\t\t\t_userSelect = style[userSelectProperty];\r\n\t\t\tstyle[userSelectProperty] = 'none';\r\n\t\t}\r\n\t};\r\n\tenableTextSelection = function () {\r\n\t\tif (userSelectProperty) {\r\n\t\t\tdocument.documentElement.style[userSelectProperty] = _userSelect;\r\n\t\t\t_userSelect = undefined;\r\n\t\t}\r\n\t};\r\n}\r\n\r\n// @function disableImageDrag()\r\n// As [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection), but\r\n// for `dragstart` DOM events, usually generated when the user drags an image.\r\nexport function disableImageDrag() {\r\n\tDomEvent.on(window, 'dragstart', DomEvent.preventDefault);\r\n}\r\n\r\n// @function enableImageDrag()\r\n// Cancels the effects of a previous [`L.DomUtil.disableImageDrag`](#domutil-disabletextselection).\r\nexport function enableImageDrag() {\r\n\tDomEvent.off(window, 'dragstart', DomEvent.preventDefault);\r\n}\r\n\r\nvar _outlineElement, _outlineStyle;\r\n// @function preventOutline(el: HTMLElement)\r\n// Makes the [outline](https://developer.mozilla.org/docs/Web/CSS/outline)\r\n// of the element `el` invisible. Used internally by Leaflet to prevent\r\n// focusable elements from displaying an outline when the user performs a\r\n// drag interaction on them.\r\nexport function preventOutline(element) {\r\n\twhile (element.tabIndex === -1) {\r\n\t\telement = element.parentNode;\r\n\t}\r\n\tif (!element.style) { return; }\r\n\trestoreOutline();\r\n\t_outlineElement = element;\r\n\t_outlineStyle = element.style.outline;\r\n\telement.style.outline = 'none';\r\n\tDomEvent.on(window, 'keydown', restoreOutline);\r\n}\r\n\r\n// @function restoreOutline()\r\n// Cancels the effects of a previous [`L.DomUtil.preventOutline`]().\r\nexport function restoreOutline() {\r\n\tif (!_outlineElement) { return; }\r\n\t_outlineElement.style.outline = _outlineStyle;\r\n\t_outlineElement = undefined;\r\n\t_outlineStyle = undefined;\r\n\tDomEvent.off(window, 'keydown', restoreOutline);\r\n}\r\n\r\n// @function getSizedParentNode(el: HTMLElement): HTMLElement\r\n// Finds the closest parent node which size (width and height) is not null.\r\nexport function getSizedParentNode(element) {\r\n\tdo {\r\n\t\telement = element.parentNode;\r\n\t} while ((!element.offsetWidth || !element.offsetHeight) && element !== document.body);\r\n\treturn element;\r\n}\r\n\r\n// @function getScale(el: HTMLElement): Object\r\n// Computes the CSS scale currently applied on the element.\r\n// Returns an object with `x` and `y` members as horizontal and vertical scales respectively,\r\n// and `boundingClientRect` as the result of [`getBoundingClientRect()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect).\r\nexport function getScale(element) {\r\n\tvar rect = element.getBoundingClientRect(); // Read-only in old browsers.\r\n\r\n\treturn {\r\n\t\tx: rect.width / element.offsetWidth || 1,\r\n\t\ty: rect.height / element.offsetHeight || 1,\r\n\t\tboundingClientRect: rect\r\n\t};\r\n}\r\n","import {Point} from '../geometry/Point';\r\nimport * as Util from '../core/Util';\r\nimport * as Browser from '../core/Browser';\r\nimport {addPointerListener, removePointerListener} from './DomEvent.Pointer';\r\nimport {addDoubleTapListener, removeDoubleTapListener} from './DomEvent.DoubleTap';\r\nimport {getScale} from './DomUtil';\r\n\r\n/*\r\n * @namespace DomEvent\r\n * Utility functions to work with the [DOM events](https://developer.mozilla.org/docs/Web/API/Event), used by Leaflet internally.\r\n */\r\n\r\n// Inspired by John Resig, Dean Edwards and YUI addEvent implementations.\r\n\r\n// @function on(el: HTMLElement, types: String, fn: Function, context?: Object): this\r\n// Adds a listener function (`fn`) to a particular DOM event type of the\r\n// element `el`. You can optionally specify the context of the listener\r\n// (object the `this` keyword will point to). You can also pass several\r\n// space-separated types (e.g. `'click dblclick'`).\r\n\r\n// @alternative\r\n// @function on(el: HTMLElement, eventMap: Object, context?: Object): this\r\n// Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\nexport function on(obj, types, fn, context) {\r\n\r\n\tif (typeof types === 'object') {\r\n\t\tfor (var type in types) {\r\n\t\t\taddOne(obj, type, types[type], fn);\r\n\t\t}\r\n\t} else {\r\n\t\ttypes = Util.splitWords(types);\r\n\r\n\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\taddOne(obj, types[i], fn, context);\r\n\t\t}\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\nvar eventsKey = '_leaflet_events';\r\n\r\n// @function off(el: HTMLElement, types: String, fn: Function, context?: Object): this\r\n// Removes a previously added listener function.\r\n// Note that if you passed a custom context to on, you must pass the same\r\n// context to `off` in order to remove the listener.\r\n\r\n// @alternative\r\n// @function off(el: HTMLElement, eventMap: Object, context?: Object): this\r\n// Removes a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\nexport function off(obj, types, fn, context) {\r\n\r\n\tif (typeof types === 'object') {\r\n\t\tfor (var type in types) {\r\n\t\t\tremoveOne(obj, type, types[type], fn);\r\n\t\t}\r\n\t} else if (types) {\r\n\t\ttypes = Util.splitWords(types);\r\n\r\n\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\tremoveOne(obj, types[i], fn, context);\r\n\t\t}\r\n\t} else {\r\n\t\tfor (var j in obj[eventsKey]) {\r\n\t\t\tremoveOne(obj, j, obj[eventsKey][j]);\r\n\t\t}\r\n\t\tdelete obj[eventsKey];\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\nfunction addOne(obj, type, fn, context) {\r\n\tvar id = type + Util.stamp(fn) + (context ? '_' + Util.stamp(context) : '');\r\n\r\n\tif (obj[eventsKey] && obj[eventsKey][id]) { return this; }\r\n\r\n\tvar handler = function (e) {\r\n\t\treturn fn.call(context || obj, e || window.event);\r\n\t};\r\n\r\n\tvar originalHandler = handler;\r\n\r\n\tif (Browser.pointer && type.indexOf('touch') === 0) {\r\n\t\t// Needs DomEvent.Pointer.js\r\n\t\taddPointerListener(obj, type, handler, id);\r\n\r\n\t} else if (Browser.touch && (type === 'dblclick') && addDoubleTapListener &&\r\n\t !(Browser.pointer && Browser.chrome)) {\r\n\t\t// Chrome >55 does not need the synthetic dblclicks from addDoubleTapListener\r\n\t\t// See #5180\r\n\t\taddDoubleTapListener(obj, handler, id);\r\n\r\n\t} else if ('addEventListener' in obj) {\r\n\r\n\t\tif (type === 'mousewheel') {\r\n\t\t\tobj.addEventListener('onwheel' in obj ? 'wheel' : 'mousewheel', handler, Browser.passiveEvents ? {passive: false} : false);\r\n\r\n\t\t} else if ((type === 'mouseenter') || (type === 'mouseleave')) {\r\n\t\t\thandler = function (e) {\r\n\t\t\t\te = e || window.event;\r\n\t\t\t\tif (isExternalTarget(obj, e)) {\r\n\t\t\t\t\toriginalHandler(e);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tobj.addEventListener(type === 'mouseenter' ? 'mouseover' : 'mouseout', handler, false);\r\n\r\n\t\t} else {\r\n\t\t\tif (type === 'click' && Browser.android) {\r\n\t\t\t\thandler = function (e) {\r\n\t\t\t\t\tfilterClick(e, originalHandler);\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\tobj.addEventListener(type, handler, false);\r\n\t\t}\r\n\r\n\t} else if ('attachEvent' in obj) {\r\n\t\tobj.attachEvent('on' + type, handler);\r\n\t}\r\n\r\n\tobj[eventsKey] = obj[eventsKey] || {};\r\n\tobj[eventsKey][id] = handler;\r\n}\r\n\r\nfunction removeOne(obj, type, fn, context) {\r\n\r\n\tvar id = type + Util.stamp(fn) + (context ? '_' + Util.stamp(context) : ''),\r\n\t handler = obj[eventsKey] && obj[eventsKey][id];\r\n\r\n\tif (!handler) { return this; }\r\n\r\n\tif (Browser.pointer && type.indexOf('touch') === 0) {\r\n\t\tremovePointerListener(obj, type, id);\r\n\r\n\t} else if (Browser.touch && (type === 'dblclick') && removeDoubleTapListener &&\r\n\t !(Browser.pointer && Browser.chrome)) {\r\n\t\tremoveDoubleTapListener(obj, id);\r\n\r\n\t} else if ('removeEventListener' in obj) {\r\n\r\n\t\tif (type === 'mousewheel') {\r\n\t\t\tobj.removeEventListener('onwheel' in obj ? 'wheel' : 'mousewheel', handler, Browser.passiveEvents ? {passive: false} : false);\r\n\r\n\t\t} else {\r\n\t\t\tobj.removeEventListener(\r\n\t\t\t\ttype === 'mouseenter' ? 'mouseover' :\r\n\t\t\t\ttype === 'mouseleave' ? 'mouseout' : type, handler, false);\r\n\t\t}\r\n\r\n\t} else if ('detachEvent' in obj) {\r\n\t\tobj.detachEvent('on' + type, handler);\r\n\t}\r\n\r\n\tobj[eventsKey][id] = null;\r\n}\r\n\r\n// @function stopPropagation(ev: DOMEvent): this\r\n// Stop the given event from propagation to parent elements. Used inside the listener functions:\r\n// ```js\r\n// L.DomEvent.on(div, 'click', function (ev) {\r\n// \tL.DomEvent.stopPropagation(ev);\r\n// });\r\n// ```\r\nexport function stopPropagation(e) {\r\n\r\n\tif (e.stopPropagation) {\r\n\t\te.stopPropagation();\r\n\t} else if (e.originalEvent) { // In case of Leaflet event.\r\n\t\te.originalEvent._stopped = true;\r\n\t} else {\r\n\t\te.cancelBubble = true;\r\n\t}\r\n\tskipped(e);\r\n\r\n\treturn this;\r\n}\r\n\r\n// @function disableScrollPropagation(el: HTMLElement): this\r\n// Adds `stopPropagation` to the element's `'mousewheel'` events (plus browser variants).\r\nexport function disableScrollPropagation(el) {\r\n\taddOne(el, 'mousewheel', stopPropagation);\r\n\treturn this;\r\n}\r\n\r\n// @function disableClickPropagation(el: HTMLElement): this\r\n// Adds `stopPropagation` to the element's `'click'`, `'doubleclick'`,\r\n// `'mousedown'` and `'touchstart'` events (plus browser variants).\r\nexport function disableClickPropagation(el) {\r\n\ton(el, 'mousedown touchstart dblclick', stopPropagation);\r\n\taddOne(el, 'click', fakeStop);\r\n\treturn this;\r\n}\r\n\r\n// @function preventDefault(ev: DOMEvent): this\r\n// Prevents the default action of the DOM Event `ev` from happening (such as\r\n// following a link in the href of the a element, or doing a POST request\r\n// with page reload when a `` is submitted).\r\n// Use it inside listener functions.\r\nexport function preventDefault(e) {\r\n\tif (e.preventDefault) {\r\n\t\te.preventDefault();\r\n\t} else {\r\n\t\te.returnValue = false;\r\n\t}\r\n\treturn this;\r\n}\r\n\r\n// @function stop(ev: DOMEvent): this\r\n// Does `stopPropagation` and `preventDefault` at the same time.\r\nexport function stop(e) {\r\n\tpreventDefault(e);\r\n\tstopPropagation(e);\r\n\treturn this;\r\n}\r\n\r\n// @function getMousePosition(ev: DOMEvent, container?: HTMLElement): Point\r\n// Gets normalized mouse position from a DOM event relative to the\r\n// `container` (border excluded) or to the whole page if not specified.\r\nexport function getMousePosition(e, container) {\r\n\tif (!container) {\r\n\t\treturn new Point(e.clientX, e.clientY);\r\n\t}\r\n\r\n\tvar scale = getScale(container),\r\n\t offset = scale.boundingClientRect; // left and top values are in page scale (like the event clientX/Y)\r\n\r\n\treturn new Point(\r\n\t\t// offset.left/top values are in page scale (like clientX/Y),\r\n\t\t// whereas clientLeft/Top (border width) values are the original values (before CSS scale applies).\r\n\t\t(e.clientX - offset.left) / scale.x - container.clientLeft,\r\n\t\t(e.clientY - offset.top) / scale.y - container.clientTop\r\n\t);\r\n}\r\n\r\n// Chrome on Win scrolls double the pixels as in other platforms (see #4538),\r\n// and Firefox scrolls device pixels, not CSS pixels\r\nvar wheelPxFactor =\r\n\t(Browser.win && Browser.chrome) ? 2 * window.devicePixelRatio :\r\n\tBrowser.gecko ? window.devicePixelRatio : 1;\r\n\r\n// @function getWheelDelta(ev: DOMEvent): Number\r\n// Gets normalized wheel delta from a mousewheel DOM event, in vertical\r\n// pixels scrolled (negative if scrolling down).\r\n// Events from pointing devices without precise scrolling are mapped to\r\n// a best guess of 60 pixels.\r\nexport function getWheelDelta(e) {\r\n\treturn (Browser.edge) ? e.wheelDeltaY / 2 : // Don't trust window-geometry-based delta\r\n\t (e.deltaY && e.deltaMode === 0) ? -e.deltaY / wheelPxFactor : // Pixels\r\n\t (e.deltaY && e.deltaMode === 1) ? -e.deltaY * 20 : // Lines\r\n\t (e.deltaY && e.deltaMode === 2) ? -e.deltaY * 60 : // Pages\r\n\t (e.deltaX || e.deltaZ) ? 0 :\t// Skip horizontal/depth wheel events\r\n\t e.wheelDelta ? (e.wheelDeltaY || e.wheelDelta) / 2 : // Legacy IE pixels\r\n\t (e.detail && Math.abs(e.detail) < 32765) ? -e.detail * 20 : // Legacy Moz lines\r\n\t e.detail ? e.detail / -32765 * 60 : // Legacy Moz pages\r\n\t 0;\r\n}\r\n\r\nvar skipEvents = {};\r\n\r\nexport function fakeStop(e) {\r\n\t// fakes stopPropagation by setting a special event flag, checked/reset with skipped(e)\r\n\tskipEvents[e.type] = true;\r\n}\r\n\r\nexport function skipped(e) {\r\n\tvar events = skipEvents[e.type];\r\n\t// reset when checking, as it's only used in map container and propagates outside of the map\r\n\tskipEvents[e.type] = false;\r\n\treturn events;\r\n}\r\n\r\n// check if element really left/entered the event target (for mouseenter/mouseleave)\r\nexport function isExternalTarget(el, e) {\r\n\r\n\tvar related = e.relatedTarget;\r\n\r\n\tif (!related) { return true; }\r\n\r\n\ttry {\r\n\t\twhile (related && (related !== el)) {\r\n\t\t\trelated = related.parentNode;\r\n\t\t}\r\n\t} catch (err) {\r\n\t\treturn false;\r\n\t}\r\n\treturn (related !== el);\r\n}\r\n\r\nvar lastClick;\r\n\r\n// this is a horrible workaround for a bug in Android where a single touch triggers two click events\r\nfunction filterClick(e, handler) {\r\n\tvar timeStamp = (e.timeStamp || (e.originalEvent && e.originalEvent.timeStamp)),\r\n\t elapsed = lastClick && (timeStamp - lastClick);\r\n\r\n\t// are they closer together than 500ms yet more than 100ms?\r\n\t// Android typically triggers them ~300ms apart while multiple listeners\r\n\t// on the same event should be triggered far faster;\r\n\t// or check if click is simulated on the element, and if it is, reject any non-simulated events\r\n\r\n\tif ((elapsed && elapsed > 100 && elapsed < 500) || (e.target._simulatedClick && !e._simulated)) {\r\n\t\tstop(e);\r\n\t\treturn;\r\n\t}\r\n\tlastClick = timeStamp;\r\n\r\n\thandler(e);\r\n}\r\n\r\n// @function addListener(…): this\r\n// Alias to [`L.DomEvent.on`](#domevent-on)\r\nexport {on as addListener};\r\n\r\n// @function removeListener(…): this\r\n// Alias to [`L.DomEvent.off`](#domevent-off)\r\nexport {off as removeListener};\r\n","import * as Util from '../core/Util';\nimport {Evented} from '../core/Events';\nimport * as DomUtil from '../dom/DomUtil';\n\n\n/*\n * @class PosAnimation\n * @aka L.PosAnimation\n * @inherits Evented\n * Used internally for panning animations, utilizing CSS3 Transitions for modern browsers and a timer fallback for IE6-9.\n *\n * @example\n * ```js\n * var fx = new L.PosAnimation();\n * fx.run(el, [300, 500], 0.5);\n * ```\n *\n * @constructor L.PosAnimation()\n * Creates a `PosAnimation` object.\n *\n */\n\nexport var PosAnimation = Evented.extend({\n\n\t// @method run(el: HTMLElement, newPos: Point, duration?: Number, easeLinearity?: Number)\n\t// Run an animation of a given element to a new position, optionally setting\n\t// duration in seconds (`0.25` by default) and easing linearity factor (3rd\n\t// argument of the [cubic bezier curve](http://cubic-bezier.com/#0,0,.5,1),\n\t// `0.5` by default).\n\trun: function (el, newPos, duration, easeLinearity) {\n\t\tthis.stop();\n\n\t\tthis._el = el;\n\t\tthis._inProgress = true;\n\t\tthis._duration = duration || 0.25;\n\t\tthis._easeOutPower = 1 / Math.max(easeLinearity || 0.5, 0.2);\n\n\t\tthis._startPos = DomUtil.getPosition(el);\n\t\tthis._offset = newPos.subtract(this._startPos);\n\t\tthis._startTime = +new Date();\n\n\t\t// @event start: Event\n\t\t// Fired when the animation starts\n\t\tthis.fire('start');\n\n\t\tthis._animate();\n\t},\n\n\t// @method stop()\n\t// Stops the animation (if currently running).\n\tstop: function () {\n\t\tif (!this._inProgress) { return; }\n\n\t\tthis._step(true);\n\t\tthis._complete();\n\t},\n\n\t_animate: function () {\n\t\t// animation loop\n\t\tthis._animId = Util.requestAnimFrame(this._animate, this);\n\t\tthis._step();\n\t},\n\n\t_step: function (round) {\n\t\tvar elapsed = (+new Date()) - this._startTime,\n\t\t duration = this._duration * 1000;\n\n\t\tif (elapsed < duration) {\n\t\t\tthis._runFrame(this._easeOut(elapsed / duration), round);\n\t\t} else {\n\t\t\tthis._runFrame(1);\n\t\t\tthis._complete();\n\t\t}\n\t},\n\n\t_runFrame: function (progress, round) {\n\t\tvar pos = this._startPos.add(this._offset.multiplyBy(progress));\n\t\tif (round) {\n\t\t\tpos._round();\n\t\t}\n\t\tDomUtil.setPosition(this._el, pos);\n\n\t\t// @event step: Event\n\t\t// Fired continuously during the animation.\n\t\tthis.fire('step');\n\t},\n\n\t_complete: function () {\n\t\tUtil.cancelAnimFrame(this._animId);\n\n\t\tthis._inProgress = false;\n\t\t// @event end: Event\n\t\t// Fired when the animation ends.\n\t\tthis.fire('end');\n\t},\n\n\t_easeOut: function (t) {\n\t\treturn 1 - Math.pow(1 - t, this._easeOutPower);\n\t}\n});\n","import * as Util from '../core/Util';\r\nimport {Evented} from '../core/Events';\r\nimport {EPSG3857} from '../geo/crs/CRS.EPSG3857';\r\nimport {Point, toPoint} from '../geometry/Point';\r\nimport {Bounds, toBounds} from '../geometry/Bounds';\r\nimport {LatLng, toLatLng} from '../geo/LatLng';\r\nimport {LatLngBounds, toLatLngBounds} from '../geo/LatLngBounds';\r\nimport * as Browser from '../core/Browser';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport {PosAnimation} from '../dom/PosAnimation';\r\n\r\n/*\r\n * @class Map\r\n * @aka L.Map\r\n * @inherits Evented\r\n *\r\n * The central class of the API — it is used to create a map on a page and manipulate it.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * // initialize the map on the \"map\" div with a given center and zoom\r\n * var map = L.map('map', {\r\n * \tcenter: [51.505, -0.09],\r\n * \tzoom: 13\r\n * });\r\n * ```\r\n *\r\n */\r\n\r\nexport var Map = Evented.extend({\r\n\r\n\toptions: {\r\n\t\t// @section Map State Options\r\n\t\t// @option crs: CRS = L.CRS.EPSG3857\r\n\t\t// The [Coordinate Reference System](#crs) to use. Don't change this if you're not\r\n\t\t// sure what it means.\r\n\t\tcrs: EPSG3857,\r\n\r\n\t\t// @option center: LatLng = undefined\r\n\t\t// Initial geographic center of the map\r\n\t\tcenter: undefined,\r\n\r\n\t\t// @option zoom: Number = undefined\r\n\t\t// Initial map zoom level\r\n\t\tzoom: undefined,\r\n\r\n\t\t// @option minZoom: Number = *\r\n\t\t// Minimum zoom level of the map.\r\n\t\t// If not specified and at least one `GridLayer` or `TileLayer` is in the map,\r\n\t\t// the lowest of their `minZoom` options will be used instead.\r\n\t\tminZoom: undefined,\r\n\r\n\t\t// @option maxZoom: Number = *\r\n\t\t// Maximum zoom level of the map.\r\n\t\t// If not specified and at least one `GridLayer` or `TileLayer` is in the map,\r\n\t\t// the highest of their `maxZoom` options will be used instead.\r\n\t\tmaxZoom: undefined,\r\n\r\n\t\t// @option layers: Layer[] = []\r\n\t\t// Array of layers that will be added to the map initially\r\n\t\tlayers: [],\r\n\r\n\t\t// @option maxBounds: LatLngBounds = null\r\n\t\t// When this option is set, the map restricts the view to the given\r\n\t\t// geographical bounds, bouncing the user back if the user tries to pan\r\n\t\t// outside the view. To set the restriction dynamically, use\r\n\t\t// [`setMaxBounds`](#map-setmaxbounds) method.\r\n\t\tmaxBounds: undefined,\r\n\r\n\t\t// @option renderer: Renderer = *\r\n\t\t// The default method for drawing vector layers on the map. `L.SVG`\r\n\t\t// or `L.Canvas` by default depending on browser support.\r\n\t\trenderer: undefined,\r\n\r\n\r\n\t\t// @section Animation Options\r\n\t\t// @option zoomAnimation: Boolean = true\r\n\t\t// Whether the map zoom animation is enabled. By default it's enabled\r\n\t\t// in all browsers that support CSS3 Transitions except Android.\r\n\t\tzoomAnimation: true,\r\n\r\n\t\t// @option zoomAnimationThreshold: Number = 4\r\n\t\t// Won't animate zoom if the zoom difference exceeds this value.\r\n\t\tzoomAnimationThreshold: 4,\r\n\r\n\t\t// @option fadeAnimation: Boolean = true\r\n\t\t// Whether the tile fade animation is enabled. By default it's enabled\r\n\t\t// in all browsers that support CSS3 Transitions except Android.\r\n\t\tfadeAnimation: true,\r\n\r\n\t\t// @option markerZoomAnimation: Boolean = true\r\n\t\t// Whether markers animate their zoom with the zoom animation, if disabled\r\n\t\t// they will disappear for the length of the animation. By default it's\r\n\t\t// enabled in all browsers that support CSS3 Transitions except Android.\r\n\t\tmarkerZoomAnimation: true,\r\n\r\n\t\t// @option transform3DLimit: Number = 2^23\r\n\t\t// Defines the maximum size of a CSS translation transform. The default\r\n\t\t// value should not be changed unless a web browser positions layers in\r\n\t\t// the wrong place after doing a large `panBy`.\r\n\t\ttransform3DLimit: 8388608, // Precision limit of a 32-bit float\r\n\r\n\t\t// @section Interaction Options\r\n\t\t// @option zoomSnap: Number = 1\r\n\t\t// Forces the map's zoom level to always be a multiple of this, particularly\r\n\t\t// right after a [`fitBounds()`](#map-fitbounds) or a pinch-zoom.\r\n\t\t// By default, the zoom level snaps to the nearest integer; lower values\r\n\t\t// (e.g. `0.5` or `0.1`) allow for greater granularity. A value of `0`\r\n\t\t// means the zoom level will not be snapped after `fitBounds` or a pinch-zoom.\r\n\t\tzoomSnap: 1,\r\n\r\n\t\t// @option zoomDelta: Number = 1\r\n\t\t// Controls how much the map's zoom level will change after a\r\n\t\t// [`zoomIn()`](#map-zoomin), [`zoomOut()`](#map-zoomout), pressing `+`\r\n\t\t// or `-` on the keyboard, or using the [zoom controls](#control-zoom).\r\n\t\t// Values smaller than `1` (e.g. `0.5`) allow for greater granularity.\r\n\t\tzoomDelta: 1,\r\n\r\n\t\t// @option trackResize: Boolean = true\r\n\t\t// Whether the map automatically handles browser window resize to update itself.\r\n\t\ttrackResize: true\r\n\t},\r\n\r\n\tinitialize: function (id, options) { // (HTMLElement or String, Object)\r\n\t\toptions = Util.setOptions(this, options);\r\n\r\n\t\t// Make sure to assign internal flags at the beginning,\r\n\t\t// to avoid inconsistent state in some edge cases.\r\n\t\tthis._handlers = [];\r\n\t\tthis._layers = {};\r\n\t\tthis._zoomBoundLayers = {};\r\n\t\tthis._sizeChanged = true;\r\n\r\n\t\tthis._initContainer(id);\r\n\t\tthis._initLayout();\r\n\r\n\t\t// hack for https://github.com/Leaflet/Leaflet/issues/1980\r\n\t\tthis._onResize = Util.bind(this._onResize, this);\r\n\r\n\t\tthis._initEvents();\r\n\r\n\t\tif (options.maxBounds) {\r\n\t\t\tthis.setMaxBounds(options.maxBounds);\r\n\t\t}\r\n\r\n\t\tif (options.zoom !== undefined) {\r\n\t\t\tthis._zoom = this._limitZoom(options.zoom);\r\n\t\t}\r\n\r\n\t\tif (options.center && options.zoom !== undefined) {\r\n\t\t\tthis.setView(toLatLng(options.center), options.zoom, {reset: true});\r\n\t\t}\r\n\r\n\t\tthis.callInitHooks();\r\n\r\n\t\t// don't animate on browsers without hardware-accelerated transitions or old Android/Opera\r\n\t\tthis._zoomAnimated = DomUtil.TRANSITION && Browser.any3d && !Browser.mobileOpera &&\r\n\t\t\t\tthis.options.zoomAnimation;\r\n\r\n\t\t// zoom transitions run with the same duration for all layers, so if one of transitionend events\r\n\t\t// happens after starting zoom animation (propagating to the map pane), we know that it ended globally\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tthis._createAnimProxy();\r\n\t\t\tDomEvent.on(this._proxy, DomUtil.TRANSITION_END, this._catchTransitionEnd, this);\r\n\t\t}\r\n\r\n\t\tthis._addLayers(this.options.layers);\r\n\t},\r\n\r\n\r\n\t// @section Methods for modifying map state\r\n\r\n\t// @method setView(center: LatLng, zoom: Number, options?: Zoom/pan options): this\r\n\t// Sets the view of the map (geographical center and zoom) with the given\r\n\t// animation options.\r\n\tsetView: function (center, zoom, options) {\r\n\r\n\t\tzoom = zoom === undefined ? this._zoom : this._limitZoom(zoom);\r\n\t\tcenter = this._limitCenter(toLatLng(center), zoom, this.options.maxBounds);\r\n\t\toptions = options || {};\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tif (this._loaded && !options.reset && options !== true) {\r\n\r\n\t\t\tif (options.animate !== undefined) {\r\n\t\t\t\toptions.zoom = Util.extend({animate: options.animate}, options.zoom);\r\n\t\t\t\toptions.pan = Util.extend({animate: options.animate, duration: options.duration}, options.pan);\r\n\t\t\t}\r\n\r\n\t\t\t// try animating pan or zoom\r\n\t\t\tvar moved = (this._zoom !== zoom) ?\r\n\t\t\t\tthis._tryAnimatedZoom && this._tryAnimatedZoom(center, zoom, options.zoom) :\r\n\t\t\t\tthis._tryAnimatedPan(center, options.pan);\r\n\r\n\t\t\tif (moved) {\r\n\t\t\t\t// prevent resize handler call, the view will refresh after animation anyway\r\n\t\t\t\tclearTimeout(this._sizeTimer);\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// animation didn't start, just reset the map view\r\n\t\tthis._resetView(center, zoom);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setZoom(zoom: Number, options?: Zoom/pan options): this\r\n\t// Sets the zoom of the map.\r\n\tsetZoom: function (zoom, options) {\r\n\t\tif (!this._loaded) {\r\n\t\t\tthis._zoom = zoom;\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\treturn this.setView(this.getCenter(), zoom, {zoom: options});\r\n\t},\r\n\r\n\t// @method zoomIn(delta?: Number, options?: Zoom options): this\r\n\t// Increases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).\r\n\tzoomIn: function (delta, options) {\r\n\t\tdelta = delta || (Browser.any3d ? this.options.zoomDelta : 1);\r\n\t\treturn this.setZoom(this._zoom + delta, options);\r\n\t},\r\n\r\n\t// @method zoomOut(delta?: Number, options?: Zoom options): this\r\n\t// Decreases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).\r\n\tzoomOut: function (delta, options) {\r\n\t\tdelta = delta || (Browser.any3d ? this.options.zoomDelta : 1);\r\n\t\treturn this.setZoom(this._zoom - delta, options);\r\n\t},\r\n\r\n\t// @method setZoomAround(latlng: LatLng, zoom: Number, options: Zoom options): this\r\n\t// Zooms the map while keeping a specified geographical point on the map\r\n\t// stationary (e.g. used internally for scroll zoom and double-click zoom).\r\n\t// @alternative\r\n\t// @method setZoomAround(offset: Point, zoom: Number, options: Zoom options): this\r\n\t// Zooms the map while keeping a specified pixel on the map (relative to the top-left corner) stationary.\r\n\tsetZoomAround: function (latlng, zoom, options) {\r\n\t\tvar scale = this.getZoomScale(zoom),\r\n\t\t viewHalf = this.getSize().divideBy(2),\r\n\t\t containerPoint = latlng instanceof Point ? latlng : this.latLngToContainerPoint(latlng),\r\n\r\n\t\t centerOffset = containerPoint.subtract(viewHalf).multiplyBy(1 - 1 / scale),\r\n\t\t newCenter = this.containerPointToLatLng(viewHalf.add(centerOffset));\r\n\r\n\t\treturn this.setView(newCenter, zoom, {zoom: options});\r\n\t},\r\n\r\n\t_getBoundsCenterZoom: function (bounds, options) {\r\n\r\n\t\toptions = options || {};\r\n\t\tbounds = bounds.getBounds ? bounds.getBounds() : toLatLngBounds(bounds);\r\n\r\n\t\tvar paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),\r\n\t\t paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),\r\n\r\n\t\t zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR));\r\n\r\n\t\tzoom = (typeof options.maxZoom === 'number') ? Math.min(options.maxZoom, zoom) : zoom;\r\n\r\n\t\tif (zoom === Infinity) {\r\n\t\t\treturn {\r\n\t\t\t\tcenter: bounds.getCenter(),\r\n\t\t\t\tzoom: zoom\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tvar paddingOffset = paddingBR.subtract(paddingTL).divideBy(2),\r\n\r\n\t\t swPoint = this.project(bounds.getSouthWest(), zoom),\r\n\t\t nePoint = this.project(bounds.getNorthEast(), zoom),\r\n\t\t center = this.unproject(swPoint.add(nePoint).divideBy(2).add(paddingOffset), zoom);\r\n\r\n\t\treturn {\r\n\t\t\tcenter: center,\r\n\t\t\tzoom: zoom\r\n\t\t};\r\n\t},\r\n\r\n\t// @method fitBounds(bounds: LatLngBounds, options?: fitBounds options): this\r\n\t// Sets a map view that contains the given geographical bounds with the\r\n\t// maximum zoom level possible.\r\n\tfitBounds: function (bounds, options) {\r\n\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (!bounds.isValid()) {\r\n\t\t\tthrow new Error('Bounds are not valid.');\r\n\t\t}\r\n\r\n\t\tvar target = this._getBoundsCenterZoom(bounds, options);\r\n\t\treturn this.setView(target.center, target.zoom, options);\r\n\t},\r\n\r\n\t// @method fitWorld(options?: fitBounds options): this\r\n\t// Sets a map view that mostly contains the whole world with the maximum\r\n\t// zoom level possible.\r\n\tfitWorld: function (options) {\r\n\t\treturn this.fitBounds([[-90, -180], [90, 180]], options);\r\n\t},\r\n\r\n\t// @method panTo(latlng: LatLng, options?: Pan options): this\r\n\t// Pans the map to a given center.\r\n\tpanTo: function (center, options) { // (LatLng)\r\n\t\treturn this.setView(center, this._zoom, {pan: options});\r\n\t},\r\n\r\n\t// @method panBy(offset: Point, options?: Pan options): this\r\n\t// Pans the map by a given number of pixels (animated).\r\n\tpanBy: function (offset, options) {\r\n\t\toffset = toPoint(offset).round();\r\n\t\toptions = options || {};\r\n\r\n\t\tif (!offset.x && !offset.y) {\r\n\t\t\treturn this.fire('moveend');\r\n\t\t}\r\n\t\t// If we pan too far, Chrome gets issues with tiles\r\n\t\t// and makes them disappear or appear in the wrong place (slightly offset) #2602\r\n\t\tif (options.animate !== true && !this.getSize().contains(offset)) {\r\n\t\t\tthis._resetView(this.unproject(this.project(this.getCenter()).add(offset)), this.getZoom());\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif (!this._panAnim) {\r\n\t\t\tthis._panAnim = new PosAnimation();\r\n\r\n\t\t\tthis._panAnim.on({\r\n\t\t\t\t'step': this._onPanTransitionStep,\r\n\t\t\t\t'end': this._onPanTransitionEnd\r\n\t\t\t}, this);\r\n\t\t}\r\n\r\n\t\t// don't fire movestart if animating inertia\r\n\t\tif (!options.noMoveStart) {\r\n\t\t\tthis.fire('movestart');\r\n\t\t}\r\n\r\n\t\t// animate pan unless animate: false specified\r\n\t\tif (options.animate !== false) {\r\n\t\t\tDomUtil.addClass(this._mapPane, 'leaflet-pan-anim');\r\n\r\n\t\t\tvar newPos = this._getMapPanePos().subtract(offset).round();\r\n\t\t\tthis._panAnim.run(this._mapPane, newPos, options.duration || 0.25, options.easeLinearity);\r\n\t\t} else {\r\n\t\t\tthis._rawPanBy(offset);\r\n\t\t\tthis.fire('move').fire('moveend');\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method flyTo(latlng: LatLng, zoom?: Number, options?: Zoom/pan options): this\r\n\t// Sets the view of the map (geographical center and zoom) performing a smooth\r\n\t// pan-zoom animation.\r\n\tflyTo: function (targetCenter, targetZoom, options) {\r\n\r\n\t\toptions = options || {};\r\n\t\tif (options.animate === false || !Browser.any3d) {\r\n\t\t\treturn this.setView(targetCenter, targetZoom, options);\r\n\t\t}\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tvar from = this.project(this.getCenter()),\r\n\t\t to = this.project(targetCenter),\r\n\t\t size = this.getSize(),\r\n\t\t startZoom = this._zoom;\r\n\r\n\t\ttargetCenter = toLatLng(targetCenter);\r\n\t\ttargetZoom = targetZoom === undefined ? startZoom : targetZoom;\r\n\r\n\t\tvar w0 = Math.max(size.x, size.y),\r\n\t\t w1 = w0 * this.getZoomScale(startZoom, targetZoom),\r\n\t\t u1 = (to.distanceTo(from)) || 1,\r\n\t\t rho = 1.42,\r\n\t\t rho2 = rho * rho;\r\n\r\n\t\tfunction r(i) {\r\n\t\t\tvar s1 = i ? -1 : 1,\r\n\t\t\t s2 = i ? w1 : w0,\r\n\t\t\t t1 = w1 * w1 - w0 * w0 + s1 * rho2 * rho2 * u1 * u1,\r\n\t\t\t b1 = 2 * s2 * rho2 * u1,\r\n\t\t\t b = t1 / b1,\r\n\t\t\t sq = Math.sqrt(b * b + 1) - b;\r\n\r\n\t\t\t // workaround for floating point precision bug when sq = 0, log = -Infinite,\r\n\t\t\t // thus triggering an infinite loop in flyTo\r\n\t\t\t var log = sq < 0.000000001 ? -18 : Math.log(sq);\r\n\r\n\t\t\treturn log;\r\n\t\t}\r\n\r\n\t\tfunction sinh(n) { return (Math.exp(n) - Math.exp(-n)) / 2; }\r\n\t\tfunction cosh(n) { return (Math.exp(n) + Math.exp(-n)) / 2; }\r\n\t\tfunction tanh(n) { return sinh(n) / cosh(n); }\r\n\r\n\t\tvar r0 = r(0);\r\n\r\n\t\tfunction w(s) { return w0 * (cosh(r0) / cosh(r0 + rho * s)); }\r\n\t\tfunction u(s) { return w0 * (cosh(r0) * tanh(r0 + rho * s) - sinh(r0)) / rho2; }\r\n\r\n\t\tfunction easeOut(t) { return 1 - Math.pow(1 - t, 1.5); }\r\n\r\n\t\tvar start = Date.now(),\r\n\t\t S = (r(1) - r0) / rho,\r\n\t\t duration = options.duration ? 1000 * options.duration : 1000 * S * 0.8;\r\n\r\n\t\tfunction frame() {\r\n\t\t\tvar t = (Date.now() - start) / duration,\r\n\t\t\t s = easeOut(t) * S;\r\n\r\n\t\t\tif (t <= 1) {\r\n\t\t\t\tthis._flyToFrame = Util.requestAnimFrame(frame, this);\r\n\r\n\t\t\t\tthis._move(\r\n\t\t\t\t\tthis.unproject(from.add(to.subtract(from).multiplyBy(u(s) / u1)), startZoom),\r\n\t\t\t\t\tthis.getScaleZoom(w0 / w(s), startZoom),\r\n\t\t\t\t\t{flyTo: true});\r\n\r\n\t\t\t} else {\r\n\t\t\t\tthis\r\n\t\t\t\t\t._move(targetCenter, targetZoom)\r\n\t\t\t\t\t._moveEnd(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._moveStart(true, options.noMoveStart);\r\n\r\n\t\tframe.call(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method flyToBounds(bounds: LatLngBounds, options?: fitBounds options): this\r\n\t// Sets the view of the map with a smooth animation like [`flyTo`](#map-flyto),\r\n\t// but takes a bounds parameter like [`fitBounds`](#map-fitbounds).\r\n\tflyToBounds: function (bounds, options) {\r\n\t\tvar target = this._getBoundsCenterZoom(bounds, options);\r\n\t\treturn this.flyTo(target.center, target.zoom, options);\r\n\t},\r\n\r\n\t// @method setMaxBounds(bounds: Bounds): this\r\n\t// Restricts the map view to the given bounds (see the [maxBounds](#map-maxbounds) option).\r\n\tsetMaxBounds: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (!bounds.isValid()) {\r\n\t\t\tthis.options.maxBounds = null;\r\n\t\t\treturn this.off('moveend', this._panInsideMaxBounds);\r\n\t\t} else if (this.options.maxBounds) {\r\n\t\t\tthis.off('moveend', this._panInsideMaxBounds);\r\n\t\t}\r\n\r\n\t\tthis.options.maxBounds = bounds;\r\n\r\n\t\tif (this._loaded) {\r\n\t\t\tthis._panInsideMaxBounds();\r\n\t\t}\r\n\r\n\t\treturn this.on('moveend', this._panInsideMaxBounds);\r\n\t},\r\n\r\n\t// @method setMinZoom(zoom: Number): this\r\n\t// Sets the lower limit for the available zoom levels (see the [minZoom](#map-minzoom) option).\r\n\tsetMinZoom: function (zoom) {\r\n\t\tvar oldZoom = this.options.minZoom;\r\n\t\tthis.options.minZoom = zoom;\r\n\r\n\t\tif (this._loaded && oldZoom !== zoom) {\r\n\t\t\tthis.fire('zoomlevelschange');\r\n\r\n\t\t\tif (this.getZoom() < this.options.minZoom) {\r\n\t\t\t\treturn this.setZoom(zoom);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setMaxZoom(zoom: Number): this\r\n\t// Sets the upper limit for the available zoom levels (see the [maxZoom](#map-maxzoom) option).\r\n\tsetMaxZoom: function (zoom) {\r\n\t\tvar oldZoom = this.options.maxZoom;\r\n\t\tthis.options.maxZoom = zoom;\r\n\r\n\t\tif (this._loaded && oldZoom !== zoom) {\r\n\t\t\tthis.fire('zoomlevelschange');\r\n\r\n\t\t\tif (this.getZoom() > this.options.maxZoom) {\r\n\t\t\t\treturn this.setZoom(zoom);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method panInsideBounds(bounds: LatLngBounds, options?: Pan options): this\r\n\t// Pans the map to the closest view that would lie inside the given bounds (if it's not already), controlling the animation using the options specific, if any.\r\n\tpanInsideBounds: function (bounds, options) {\r\n\t\tthis._enforcingBounds = true;\r\n\t\tvar center = this.getCenter(),\r\n\t\t newCenter = this._limitCenter(center, this._zoom, toLatLngBounds(bounds));\r\n\r\n\t\tif (!center.equals(newCenter)) {\r\n\t\t\tthis.panTo(newCenter, options);\r\n\t\t}\r\n\r\n\t\tthis._enforcingBounds = false;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method panInside(latlng: LatLng, options?: options): this\r\n\t// Pans the map the minimum amount to make the `latlng` visible. Use\r\n\t// `padding`, `paddingTopLeft` and `paddingTopRight` options to fit\r\n\t// the display to more restricted bounds, like [`fitBounds`](#map-fitbounds).\r\n\t// If `latlng` is already within the (optionally padded) display bounds,\r\n\t// the map will not be panned.\r\n\tpanInside: function (latlng, options) {\r\n\t\toptions = options || {};\r\n\r\n\t\tvar paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),\r\n\t\t paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),\r\n\t\t center = this.getCenter(),\r\n\t\t pixelCenter = this.project(center),\r\n\t\t pixelPoint = this.project(latlng),\r\n\t\t pixelBounds = this.getPixelBounds(),\r\n\t\t halfPixelBounds = pixelBounds.getSize().divideBy(2),\r\n\t\t paddedBounds = toBounds([pixelBounds.min.add(paddingTL), pixelBounds.max.subtract(paddingBR)]);\r\n\r\n\t\tif (!paddedBounds.contains(pixelPoint)) {\r\n\t\t\tthis._enforcingBounds = true;\r\n\t\t\tvar diff = pixelCenter.subtract(pixelPoint),\r\n\t\t\t newCenter = toPoint(pixelPoint.x + diff.x, pixelPoint.y + diff.y);\r\n\r\n\t\t\tif (pixelPoint.x < paddedBounds.min.x || pixelPoint.x > paddedBounds.max.x) {\r\n\t\t\t\tnewCenter.x = pixelCenter.x - diff.x;\r\n\t\t\t\tif (diff.x > 0) {\r\n\t\t\t\t\tnewCenter.x += halfPixelBounds.x - paddingTL.x;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnewCenter.x -= halfPixelBounds.x - paddingBR.x;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (pixelPoint.y < paddedBounds.min.y || pixelPoint.y > paddedBounds.max.y) {\r\n\t\t\t\tnewCenter.y = pixelCenter.y - diff.y;\r\n\t\t\t\tif (diff.y > 0) {\r\n\t\t\t\t\tnewCenter.y += halfPixelBounds.y - paddingTL.y;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnewCenter.y -= halfPixelBounds.y - paddingBR.y;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.panTo(this.unproject(newCenter), options);\r\n\t\t\tthis._enforcingBounds = false;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method invalidateSize(options: Zoom/pan options): this\r\n\t// Checks if the map container size changed and updates the map if so —\r\n\t// call it after you've changed the map size dynamically, also animating\r\n\t// pan by default. If `options.pan` is `false`, panning will not occur.\r\n\t// If `options.debounceMoveend` is `true`, it will delay `moveend` event so\r\n\t// that it doesn't happen often even if the method is called many\r\n\t// times in a row.\r\n\r\n\t// @alternative\r\n\t// @method invalidateSize(animate: Boolean): this\r\n\t// Checks if the map container size changed and updates the map if so —\r\n\t// call it after you've changed the map size dynamically, also animating\r\n\t// pan by default.\r\n\tinvalidateSize: function (options) {\r\n\t\tif (!this._loaded) { return this; }\r\n\r\n\t\toptions = Util.extend({\r\n\t\t\tanimate: false,\r\n\t\t\tpan: true\r\n\t\t}, options === true ? {animate: true} : options);\r\n\r\n\t\tvar oldSize = this.getSize();\r\n\t\tthis._sizeChanged = true;\r\n\t\tthis._lastCenter = null;\r\n\r\n\t\tvar newSize = this.getSize(),\r\n\t\t oldCenter = oldSize.divideBy(2).round(),\r\n\t\t newCenter = newSize.divideBy(2).round(),\r\n\t\t offset = oldCenter.subtract(newCenter);\r\n\r\n\t\tif (!offset.x && !offset.y) { return this; }\r\n\r\n\t\tif (options.animate && options.pan) {\r\n\t\t\tthis.panBy(offset);\r\n\r\n\t\t} else {\r\n\t\t\tif (options.pan) {\r\n\t\t\t\tthis._rawPanBy(offset);\r\n\t\t\t}\r\n\r\n\t\t\tthis.fire('move');\r\n\r\n\t\t\tif (options.debounceMoveend) {\r\n\t\t\t\tclearTimeout(this._sizeTimer);\r\n\t\t\t\tthis._sizeTimer = setTimeout(Util.bind(this.fire, this, 'moveend'), 200);\r\n\t\t\t} else {\r\n\t\t\t\tthis.fire('moveend');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// @section Map state change events\r\n\t\t// @event resize: ResizeEvent\r\n\t\t// Fired when the map is resized.\r\n\t\treturn this.fire('resize', {\r\n\t\t\toldSize: oldSize,\r\n\t\t\tnewSize: newSize\r\n\t\t});\r\n\t},\r\n\r\n\t// @section Methods for modifying map state\r\n\t// @method stop(): this\r\n\t// Stops the currently running `panTo` or `flyTo` animation, if any.\r\n\tstop: function () {\r\n\t\tthis.setZoom(this._limitZoom(this._zoom));\r\n\t\tif (!this.options.zoomSnap) {\r\n\t\t\tthis.fire('viewreset');\r\n\t\t}\r\n\t\treturn this._stop();\r\n\t},\r\n\r\n\t// @section Geolocation methods\r\n\t// @method locate(options?: Locate options): this\r\n\t// Tries to locate the user using the Geolocation API, firing a [`locationfound`](#map-locationfound)\r\n\t// event with location data on success or a [`locationerror`](#map-locationerror) event on failure,\r\n\t// and optionally sets the map view to the user's location with respect to\r\n\t// detection accuracy (or to the world view if geolocation failed).\r\n\t// Note that, if your page doesn't use HTTPS, this method will fail in\r\n\t// modern browsers ([Chrome 50 and newer](https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins))\r\n\t// See `Locate options` for more details.\r\n\tlocate: function (options) {\r\n\r\n\t\toptions = this._locateOptions = Util.extend({\r\n\t\t\ttimeout: 10000,\r\n\t\t\twatch: false\r\n\t\t\t// setView: false\r\n\t\t\t// maxZoom: \r\n\t\t\t// maximumAge: 0\r\n\t\t\t// enableHighAccuracy: false\r\n\t\t}, options);\r\n\r\n\t\tif (!('geolocation' in navigator)) {\r\n\t\t\tthis._handleGeolocationError({\r\n\t\t\t\tcode: 0,\r\n\t\t\t\tmessage: 'Geolocation not supported.'\r\n\t\t\t});\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tvar onResponse = Util.bind(this._handleGeolocationResponse, this),\r\n\t\t onError = Util.bind(this._handleGeolocationError, this);\r\n\r\n\t\tif (options.watch) {\r\n\t\t\tthis._locationWatchId =\r\n\t\t\t navigator.geolocation.watchPosition(onResponse, onError, options);\r\n\t\t} else {\r\n\t\t\tnavigator.geolocation.getCurrentPosition(onResponse, onError, options);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method stopLocate(): this\r\n\t// Stops watching location previously initiated by `map.locate({watch: true})`\r\n\t// and aborts resetting the map view if map.locate was called with\r\n\t// `{setView: true}`.\r\n\tstopLocate: function () {\r\n\t\tif (navigator.geolocation && navigator.geolocation.clearWatch) {\r\n\t\t\tnavigator.geolocation.clearWatch(this._locationWatchId);\r\n\t\t}\r\n\t\tif (this._locateOptions) {\r\n\t\t\tthis._locateOptions.setView = false;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_handleGeolocationError: function (error) {\r\n\t\tvar c = error.code,\r\n\t\t message = error.message ||\r\n\t\t (c === 1 ? 'permission denied' :\r\n\t\t (c === 2 ? 'position unavailable' : 'timeout'));\r\n\r\n\t\tif (this._locateOptions.setView && !this._loaded) {\r\n\t\t\tthis.fitWorld();\r\n\t\t}\r\n\r\n\t\t// @section Location events\r\n\t\t// @event locationerror: ErrorEvent\r\n\t\t// Fired when geolocation (using the [`locate`](#map-locate) method) failed.\r\n\t\tthis.fire('locationerror', {\r\n\t\t\tcode: c,\r\n\t\t\tmessage: 'Geolocation error: ' + message + '.'\r\n\t\t});\r\n\t},\r\n\r\n\t_handleGeolocationResponse: function (pos) {\r\n\t\tvar lat = pos.coords.latitude,\r\n\t\t lng = pos.coords.longitude,\r\n\t\t latlng = new LatLng(lat, lng),\r\n\t\t bounds = latlng.toBounds(pos.coords.accuracy * 2),\r\n\t\t options = this._locateOptions;\r\n\r\n\t\tif (options.setView) {\r\n\t\t\tvar zoom = this.getBoundsZoom(bounds);\r\n\t\t\tthis.setView(latlng, options.maxZoom ? Math.min(zoom, options.maxZoom) : zoom);\r\n\t\t}\r\n\r\n\t\tvar data = {\r\n\t\t\tlatlng: latlng,\r\n\t\t\tbounds: bounds,\r\n\t\t\ttimestamp: pos.timestamp\r\n\t\t};\r\n\r\n\t\tfor (var i in pos.coords) {\r\n\t\t\tif (typeof pos.coords[i] === 'number') {\r\n\t\t\t\tdata[i] = pos.coords[i];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// @event locationfound: LocationEvent\r\n\t\t// Fired when geolocation (using the [`locate`](#map-locate) method)\r\n\t\t// went successfully.\r\n\t\tthis.fire('locationfound', data);\r\n\t},\r\n\r\n\t// TODO Appropriate docs section?\r\n\t// @section Other Methods\r\n\t// @method addHandler(name: String, HandlerClass: Function): this\r\n\t// Adds a new `Handler` to the map, given its name and constructor function.\r\n\taddHandler: function (name, HandlerClass) {\r\n\t\tif (!HandlerClass) { return this; }\r\n\r\n\t\tvar handler = this[name] = new HandlerClass(this);\r\n\r\n\t\tthis._handlers.push(handler);\r\n\r\n\t\tif (this.options[name]) {\r\n\t\t\thandler.enable();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method remove(): this\r\n\t// Destroys the map and clears all related event listeners.\r\n\tremove: function () {\r\n\r\n\t\tthis._initEvents(true);\r\n\r\n\t\tif (this._containerId !== this._container._leaflet_id) {\r\n\t\t\tthrow new Error('Map container is being reused by another instance');\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\t// throws error in IE6-8\r\n\t\t\tdelete this._container._leaflet_id;\r\n\t\t\tdelete this._containerId;\r\n\t\t} catch (e) {\r\n\t\t\t/*eslint-disable */\r\n\t\t\tthis._container._leaflet_id = undefined;\r\n\t\t\t/* eslint-enable */\r\n\t\t\tthis._containerId = undefined;\r\n\t\t}\r\n\r\n\t\tif (this._locationWatchId !== undefined) {\r\n\t\t\tthis.stopLocate();\r\n\t\t}\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tDomUtil.remove(this._mapPane);\r\n\r\n\t\tif (this._clearControlPos) {\r\n\t\t\tthis._clearControlPos();\r\n\t\t}\r\n\t\tif (this._resizeRequest) {\r\n\t\t\tUtil.cancelAnimFrame(this._resizeRequest);\r\n\t\t\tthis._resizeRequest = null;\r\n\t\t}\r\n\r\n\t\tthis._clearHandlers();\r\n\r\n\t\tif (this._loaded) {\r\n\t\t\t// @section Map state change events\r\n\t\t\t// @event unload: Event\r\n\t\t\t// Fired when the map is destroyed with [remove](#map-remove) method.\r\n\t\t\tthis.fire('unload');\r\n\t\t}\r\n\r\n\t\tvar i;\r\n\t\tfor (i in this._layers) {\r\n\t\t\tthis._layers[i].remove();\r\n\t\t}\r\n\t\tfor (i in this._panes) {\r\n\t\t\tDomUtil.remove(this._panes[i]);\r\n\t\t}\r\n\r\n\t\tthis._layers = [];\r\n\t\tthis._panes = [];\r\n\t\tdelete this._mapPane;\r\n\t\tdelete this._renderer;\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\t// @method createPane(name: String, container?: HTMLElement): HTMLElement\r\n\t// Creates a new [map pane](#map-pane) with the given name if it doesn't exist already,\r\n\t// then returns it. The pane is created as a child of `container`, or\r\n\t// as a child of the main map pane if not set.\r\n\tcreatePane: function (name, container) {\r\n\t\tvar className = 'leaflet-pane' + (name ? ' leaflet-' + name.replace('Pane', '') + '-pane' : ''),\r\n\t\t pane = DomUtil.create('div', className, container || this._mapPane);\r\n\r\n\t\tif (name) {\r\n\t\t\tthis._panes[name] = pane;\r\n\t\t}\r\n\t\treturn pane;\r\n\t},\r\n\r\n\t// @section Methods for Getting Map State\r\n\r\n\t// @method getCenter(): LatLng\r\n\t// Returns the geographical center of the map view\r\n\tgetCenter: function () {\r\n\t\tthis._checkIfLoaded();\r\n\r\n\t\tif (this._lastCenter && !this._moved()) {\r\n\t\t\treturn this._lastCenter;\r\n\t\t}\r\n\t\treturn this.layerPointToLatLng(this._getCenterLayerPoint());\r\n\t},\r\n\r\n\t// @method getZoom(): Number\r\n\t// Returns the current zoom level of the map view\r\n\tgetZoom: function () {\r\n\t\treturn this._zoom;\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Returns the geographical bounds visible in the current map view\r\n\tgetBounds: function () {\r\n\t\tvar bounds = this.getPixelBounds(),\r\n\t\t sw = this.unproject(bounds.getBottomLeft()),\r\n\t\t ne = this.unproject(bounds.getTopRight());\r\n\r\n\t\treturn new LatLngBounds(sw, ne);\r\n\t},\r\n\r\n\t// @method getMinZoom(): Number\r\n\t// Returns the minimum zoom level of the map (if set in the `minZoom` option of the map or of any layers), or `0` by default.\r\n\tgetMinZoom: function () {\r\n\t\treturn this.options.minZoom === undefined ? this._layersMinZoom || 0 : this.options.minZoom;\r\n\t},\r\n\r\n\t// @method getMaxZoom(): Number\r\n\t// Returns the maximum zoom level of the map (if set in the `maxZoom` option of the map or of any layers).\r\n\tgetMaxZoom: function () {\r\n\t\treturn this.options.maxZoom === undefined ?\r\n\t\t\t(this._layersMaxZoom === undefined ? Infinity : this._layersMaxZoom) :\r\n\t\t\tthis.options.maxZoom;\r\n\t},\r\n\r\n\t// @method getBoundsZoom(bounds: LatLngBounds, inside?: Boolean, padding?: Point): Number\r\n\t// Returns the maximum zoom level on which the given bounds fit to the map\r\n\t// view in its entirety. If `inside` (optional) is set to `true`, the method\r\n\t// instead returns the minimum zoom level on which the map view fits into\r\n\t// the given bounds in its entirety.\r\n\tgetBoundsZoom: function (bounds, inside, padding) { // (LatLngBounds[, Boolean, Point]) -> Number\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\t\tpadding = toPoint(padding || [0, 0]);\r\n\r\n\t\tvar zoom = this.getZoom() || 0,\r\n\t\t min = this.getMinZoom(),\r\n\t\t max = this.getMaxZoom(),\r\n\t\t nw = bounds.getNorthWest(),\r\n\t\t se = bounds.getSouthEast(),\r\n\t\t size = this.getSize().subtract(padding),\r\n\t\t boundsSize = toBounds(this.project(se, zoom), this.project(nw, zoom)).getSize(),\r\n\t\t snap = Browser.any3d ? this.options.zoomSnap : 1,\r\n\t\t scalex = size.x / boundsSize.x,\r\n\t\t scaley = size.y / boundsSize.y,\r\n\t\t scale = inside ? Math.max(scalex, scaley) : Math.min(scalex, scaley);\r\n\r\n\t\tzoom = this.getScaleZoom(scale, zoom);\r\n\r\n\t\tif (snap) {\r\n\t\t\tzoom = Math.round(zoom / (snap / 100)) * (snap / 100); // don't jump if within 1% of a snap level\r\n\t\t\tzoom = inside ? Math.ceil(zoom / snap) * snap : Math.floor(zoom / snap) * snap;\r\n\t\t}\r\n\r\n\t\treturn Math.max(min, Math.min(max, zoom));\r\n\t},\r\n\r\n\t// @method getSize(): Point\r\n\t// Returns the current size of the map container (in pixels).\r\n\tgetSize: function () {\r\n\t\tif (!this._size || this._sizeChanged) {\r\n\t\t\tthis._size = new Point(\r\n\t\t\t\tthis._container.clientWidth || 0,\r\n\t\t\t\tthis._container.clientHeight || 0);\r\n\r\n\t\t\tthis._sizeChanged = false;\r\n\t\t}\r\n\t\treturn this._size.clone();\r\n\t},\r\n\r\n\t// @method getPixelBounds(): Bounds\r\n\t// Returns the bounds of the current map view in projected pixel\r\n\t// coordinates (sometimes useful in layer and overlay implementations).\r\n\tgetPixelBounds: function (center, zoom) {\r\n\t\tvar topLeftPoint = this._getTopLeftPoint(center, zoom);\r\n\t\treturn new Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));\r\n\t},\r\n\r\n\t// TODO: Check semantics - isn't the pixel origin the 0,0 coord relative to\r\n\t// the map pane? \"left point of the map layer\" can be confusing, specially\r\n\t// since there can be negative offsets.\r\n\t// @method getPixelOrigin(): Point\r\n\t// Returns the projected pixel coordinates of the top left point of\r\n\t// the map layer (useful in custom layer and overlay implementations).\r\n\tgetPixelOrigin: function () {\r\n\t\tthis._checkIfLoaded();\r\n\t\treturn this._pixelOrigin;\r\n\t},\r\n\r\n\t// @method getPixelWorldBounds(zoom?: Number): Bounds\r\n\t// Returns the world's bounds in pixel coordinates for zoom level `zoom`.\r\n\t// If `zoom` is omitted, the map's current zoom level is used.\r\n\tgetPixelWorldBounds: function (zoom) {\r\n\t\treturn this.options.crs.getProjectedBounds(zoom === undefined ? this.getZoom() : zoom);\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\r\n\t// @method getPane(pane: String|HTMLElement): HTMLElement\r\n\t// Returns a [map pane](#map-pane), given its name or its HTML element (its identity).\r\n\tgetPane: function (pane) {\r\n\t\treturn typeof pane === 'string' ? this._panes[pane] : pane;\r\n\t},\r\n\r\n\t// @method getPanes(): Object\r\n\t// Returns a plain object containing the names of all [panes](#map-pane) as keys and\r\n\t// the panes as values.\r\n\tgetPanes: function () {\r\n\t\treturn this._panes;\r\n\t},\r\n\r\n\t// @method getContainer: HTMLElement\r\n\t// Returns the HTML element that contains the map.\r\n\tgetContainer: function () {\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\r\n\t// @section Conversion Methods\r\n\r\n\t// @method getZoomScale(toZoom: Number, fromZoom: Number): Number\r\n\t// Returns the scale factor to be applied to a map transition from zoom level\r\n\t// `fromZoom` to `toZoom`. Used internally to help with zoom animations.\r\n\tgetZoomScale: function (toZoom, fromZoom) {\r\n\t\t// TODO replace with universal implementation after refactoring projections\r\n\t\tvar crs = this.options.crs;\r\n\t\tfromZoom = fromZoom === undefined ? this._zoom : fromZoom;\r\n\t\treturn crs.scale(toZoom) / crs.scale(fromZoom);\r\n\t},\r\n\r\n\t// @method getScaleZoom(scale: Number, fromZoom: Number): Number\r\n\t// Returns the zoom level that the map would end up at, if it is at `fromZoom`\r\n\t// level and everything is scaled by a factor of `scale`. Inverse of\r\n\t// [`getZoomScale`](#map-getZoomScale).\r\n\tgetScaleZoom: function (scale, fromZoom) {\r\n\t\tvar crs = this.options.crs;\r\n\t\tfromZoom = fromZoom === undefined ? this._zoom : fromZoom;\r\n\t\tvar zoom = crs.zoom(scale * crs.scale(fromZoom));\r\n\t\treturn isNaN(zoom) ? Infinity : zoom;\r\n\t},\r\n\r\n\t// @method project(latlng: LatLng, zoom: Number): Point\r\n\t// Projects a geographical coordinate `LatLng` according to the projection\r\n\t// of the map's CRS, then scales it according to `zoom` and the CRS's\r\n\t// `Transformation`. The result is pixel coordinate relative to\r\n\t// the CRS origin.\r\n\tproject: function (latlng, zoom) {\r\n\t\tzoom = zoom === undefined ? this._zoom : zoom;\r\n\t\treturn this.options.crs.latLngToPoint(toLatLng(latlng), zoom);\r\n\t},\r\n\r\n\t// @method unproject(point: Point, zoom: Number): LatLng\r\n\t// Inverse of [`project`](#map-project).\r\n\tunproject: function (point, zoom) {\r\n\t\tzoom = zoom === undefined ? this._zoom : zoom;\r\n\t\treturn this.options.crs.pointToLatLng(toPoint(point), zoom);\r\n\t},\r\n\r\n\t// @method layerPointToLatLng(point: Point): LatLng\r\n\t// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\r\n\t// returns the corresponding geographical coordinate (for the current zoom level).\r\n\tlayerPointToLatLng: function (point) {\r\n\t\tvar projectedPoint = toPoint(point).add(this.getPixelOrigin());\r\n\t\treturn this.unproject(projectedPoint);\r\n\t},\r\n\r\n\t// @method latLngToLayerPoint(latlng: LatLng): Point\r\n\t// Given a geographical coordinate, returns the corresponding pixel coordinate\r\n\t// relative to the [origin pixel](#map-getpixelorigin).\r\n\tlatLngToLayerPoint: function (latlng) {\r\n\t\tvar projectedPoint = this.project(toLatLng(latlng))._round();\r\n\t\treturn projectedPoint._subtract(this.getPixelOrigin());\r\n\t},\r\n\r\n\t// @method wrapLatLng(latlng: LatLng): LatLng\r\n\t// Returns a `LatLng` where `lat` and `lng` has been wrapped according to the\r\n\t// map's CRS's `wrapLat` and `wrapLng` properties, if they are outside the\r\n\t// CRS's bounds.\r\n\t// By default this means longitude is wrapped around the dateline so its\r\n\t// value is between -180 and +180 degrees.\r\n\twrapLatLng: function (latlng) {\r\n\t\treturn this.options.crs.wrapLatLng(toLatLng(latlng));\r\n\t},\r\n\r\n\t// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\r\n\t// Returns a `LatLngBounds` with the same size as the given one, ensuring that\r\n\t// its center is within the CRS's bounds.\r\n\t// By default this means the center longitude is wrapped around the dateline so its\r\n\t// value is between -180 and +180 degrees, and the majority of the bounds\r\n\t// overlaps the CRS's bounds.\r\n\twrapLatLngBounds: function (latlng) {\r\n\t\treturn this.options.crs.wrapLatLngBounds(toLatLngBounds(latlng));\r\n\t},\r\n\r\n\t// @method distance(latlng1: LatLng, latlng2: LatLng): Number\r\n\t// Returns the distance between two geographical coordinates according to\r\n\t// the map's CRS. By default this measures distance in meters.\r\n\tdistance: function (latlng1, latlng2) {\r\n\t\treturn this.options.crs.distance(toLatLng(latlng1), toLatLng(latlng2));\r\n\t},\r\n\r\n\t// @method containerPointToLayerPoint(point: Point): Point\r\n\t// Given a pixel coordinate relative to the map container, returns the corresponding\r\n\t// pixel coordinate relative to the [origin pixel](#map-getpixelorigin).\r\n\tcontainerPointToLayerPoint: function (point) { // (Point)\r\n\t\treturn toPoint(point).subtract(this._getMapPanePos());\r\n\t},\r\n\r\n\t// @method layerPointToContainerPoint(point: Point): Point\r\n\t// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\r\n\t// returns the corresponding pixel coordinate relative to the map container.\r\n\tlayerPointToContainerPoint: function (point) { // (Point)\r\n\t\treturn toPoint(point).add(this._getMapPanePos());\r\n\t},\r\n\r\n\t// @method containerPointToLatLng(point: Point): LatLng\r\n\t// Given a pixel coordinate relative to the map container, returns\r\n\t// the corresponding geographical coordinate (for the current zoom level).\r\n\tcontainerPointToLatLng: function (point) {\r\n\t\tvar layerPoint = this.containerPointToLayerPoint(toPoint(point));\r\n\t\treturn this.layerPointToLatLng(layerPoint);\r\n\t},\r\n\r\n\t// @method latLngToContainerPoint(latlng: LatLng): Point\r\n\t// Given a geographical coordinate, returns the corresponding pixel coordinate\r\n\t// relative to the map container.\r\n\tlatLngToContainerPoint: function (latlng) {\r\n\t\treturn this.layerPointToContainerPoint(this.latLngToLayerPoint(toLatLng(latlng)));\r\n\t},\r\n\r\n\t// @method mouseEventToContainerPoint(ev: MouseEvent): Point\r\n\t// Given a MouseEvent object, returns the pixel coordinate relative to the\r\n\t// map container where the event took place.\r\n\tmouseEventToContainerPoint: function (e) {\r\n\t\treturn DomEvent.getMousePosition(e, this._container);\r\n\t},\r\n\r\n\t// @method mouseEventToLayerPoint(ev: MouseEvent): Point\r\n\t// Given a MouseEvent object, returns the pixel coordinate relative to\r\n\t// the [origin pixel](#map-getpixelorigin) where the event took place.\r\n\tmouseEventToLayerPoint: function (e) {\r\n\t\treturn this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e));\r\n\t},\r\n\r\n\t// @method mouseEventToLatLng(ev: MouseEvent): LatLng\r\n\t// Given a MouseEvent object, returns geographical coordinate where the\r\n\t// event took place.\r\n\tmouseEventToLatLng: function (e) { // (MouseEvent)\r\n\t\treturn this.layerPointToLatLng(this.mouseEventToLayerPoint(e));\r\n\t},\r\n\r\n\r\n\t// map initialization methods\r\n\r\n\t_initContainer: function (id) {\r\n\t\tvar container = this._container = DomUtil.get(id);\r\n\r\n\t\tif (!container) {\r\n\t\t\tthrow new Error('Map container not found.');\r\n\t\t} else if (container._leaflet_id) {\r\n\t\t\tthrow new Error('Map container is already initialized.');\r\n\t\t}\r\n\r\n\t\tDomEvent.on(container, 'scroll', this._onScroll, this);\r\n\t\tthis._containerId = Util.stamp(container);\r\n\t},\r\n\r\n\t_initLayout: function () {\r\n\t\tvar container = this._container;\r\n\r\n\t\tthis._fadeAnimated = this.options.fadeAnimation && Browser.any3d;\r\n\r\n\t\tDomUtil.addClass(container, 'leaflet-container' +\r\n\t\t\t(Browser.touch ? ' leaflet-touch' : '') +\r\n\t\t\t(Browser.retina ? ' leaflet-retina' : '') +\r\n\t\t\t(Browser.ielt9 ? ' leaflet-oldie' : '') +\r\n\t\t\t(Browser.safari ? ' leaflet-safari' : '') +\r\n\t\t\t(this._fadeAnimated ? ' leaflet-fade-anim' : ''));\r\n\r\n\t\tvar position = DomUtil.getStyle(container, 'position');\r\n\r\n\t\tif (position !== 'absolute' && position !== 'relative' && position !== 'fixed') {\r\n\t\t\tcontainer.style.position = 'relative';\r\n\t\t}\r\n\r\n\t\tthis._initPanes();\r\n\r\n\t\tif (this._initControlPos) {\r\n\t\t\tthis._initControlPos();\r\n\t\t}\r\n\t},\r\n\r\n\t_initPanes: function () {\r\n\t\tvar panes = this._panes = {};\r\n\t\tthis._paneRenderers = {};\r\n\r\n\t\t// @section\r\n\t\t//\r\n\t\t// Panes are DOM elements used to control the ordering of layers on the map. You\r\n\t\t// can access panes with [`map.getPane`](#map-getpane) or\r\n\t\t// [`map.getPanes`](#map-getpanes) methods. New panes can be created with the\r\n\t\t// [`map.createPane`](#map-createpane) method.\r\n\t\t//\r\n\t\t// Every map has the following default panes that differ only in zIndex.\r\n\t\t//\r\n\t\t// @pane mapPane: HTMLElement = 'auto'\r\n\t\t// Pane that contains all other map panes\r\n\r\n\t\tthis._mapPane = this.createPane('mapPane', this._container);\r\n\t\tDomUtil.setPosition(this._mapPane, new Point(0, 0));\r\n\r\n\t\t// @pane tilePane: HTMLElement = 200\r\n\t\t// Pane for `GridLayer`s and `TileLayer`s\r\n\t\tthis.createPane('tilePane');\r\n\t\t// @pane overlayPane: HTMLElement = 400\r\n\t\t// Pane for vectors (`Path`s, like `Polyline`s and `Polygon`s), `ImageOverlay`s and `VideoOverlay`s\r\n\t\tthis.createPane('shadowPane');\r\n\t\t// @pane shadowPane: HTMLElement = 500\r\n\t\t// Pane for overlay shadows (e.g. `Marker` shadows)\r\n\t\tthis.createPane('overlayPane');\r\n\t\t// @pane markerPane: HTMLElement = 600\r\n\t\t// Pane for `Icon`s of `Marker`s\r\n\t\tthis.createPane('markerPane');\r\n\t\t// @pane tooltipPane: HTMLElement = 650\r\n\t\t// Pane for `Tooltip`s.\r\n\t\tthis.createPane('tooltipPane');\r\n\t\t// @pane popupPane: HTMLElement = 700\r\n\t\t// Pane for `Popup`s.\r\n\t\tthis.createPane('popupPane');\r\n\r\n\t\tif (!this.options.markerZoomAnimation) {\r\n\t\t\tDomUtil.addClass(panes.markerPane, 'leaflet-zoom-hide');\r\n\t\t\tDomUtil.addClass(panes.shadowPane, 'leaflet-zoom-hide');\r\n\t\t}\r\n\t},\r\n\r\n\r\n\t// private methods that modify map state\r\n\r\n\t// @section Map state change events\r\n\t_resetView: function (center, zoom) {\r\n\t\tDomUtil.setPosition(this._mapPane, new Point(0, 0));\r\n\r\n\t\tvar loading = !this._loaded;\r\n\t\tthis._loaded = true;\r\n\t\tzoom = this._limitZoom(zoom);\r\n\r\n\t\tthis.fire('viewprereset');\r\n\r\n\t\tvar zoomChanged = this._zoom !== zoom;\r\n\t\tthis\r\n\t\t\t._moveStart(zoomChanged, false)\r\n\t\t\t._move(center, zoom)\r\n\t\t\t._moveEnd(zoomChanged);\r\n\r\n\t\t// @event viewreset: Event\r\n\t\t// Fired when the map needs to redraw its content (this usually happens\r\n\t\t// on map zoom or load). Very useful for creating custom overlays.\r\n\t\tthis.fire('viewreset');\r\n\r\n\t\t// @event load: Event\r\n\t\t// Fired when the map is initialized (when its center and zoom are set\r\n\t\t// for the first time).\r\n\t\tif (loading) {\r\n\t\t\tthis.fire('load');\r\n\t\t}\r\n\t},\r\n\r\n\t_moveStart: function (zoomChanged, noMoveStart) {\r\n\t\t// @event zoomstart: Event\r\n\t\t// Fired when the map zoom is about to change (e.g. before zoom animation).\r\n\t\t// @event movestart: Event\r\n\t\t// Fired when the view of the map starts changing (e.g. user starts dragging the map).\r\n\t\tif (zoomChanged) {\r\n\t\t\tthis.fire('zoomstart');\r\n\t\t}\r\n\t\tif (!noMoveStart) {\r\n\t\t\tthis.fire('movestart');\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_move: function (center, zoom, data) {\r\n\t\tif (zoom === undefined) {\r\n\t\t\tzoom = this._zoom;\r\n\t\t}\r\n\t\tvar zoomChanged = this._zoom !== zoom;\r\n\r\n\t\tthis._zoom = zoom;\r\n\t\tthis._lastCenter = center;\r\n\t\tthis._pixelOrigin = this._getNewPixelOrigin(center);\r\n\r\n\t\t// @event zoom: Event\r\n\t\t// Fired repeatedly during any change in zoom level, including zoom\r\n\t\t// and fly animations.\r\n\t\tif (zoomChanged || (data && data.pinch)) {\t// Always fire 'zoom' if pinching because #3530\r\n\t\t\tthis.fire('zoom', data);\r\n\t\t}\r\n\r\n\t\t// @event move: Event\r\n\t\t// Fired repeatedly during any movement of the map, including pan and\r\n\t\t// fly animations.\r\n\t\treturn this.fire('move', data);\r\n\t},\r\n\r\n\t_moveEnd: function (zoomChanged) {\r\n\t\t// @event zoomend: Event\r\n\t\t// Fired when the map has changed, after any animations.\r\n\t\tif (zoomChanged) {\r\n\t\t\tthis.fire('zoomend');\r\n\t\t}\r\n\r\n\t\t// @event moveend: Event\r\n\t\t// Fired when the center of the map stops changing (e.g. user stopped\r\n\t\t// dragging the map).\r\n\t\treturn this.fire('moveend');\r\n\t},\r\n\r\n\t_stop: function () {\r\n\t\tUtil.cancelAnimFrame(this._flyToFrame);\r\n\t\tif (this._panAnim) {\r\n\t\t\tthis._panAnim.stop();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_rawPanBy: function (offset) {\r\n\t\tDomUtil.setPosition(this._mapPane, this._getMapPanePos().subtract(offset));\r\n\t},\r\n\r\n\t_getZoomSpan: function () {\r\n\t\treturn this.getMaxZoom() - this.getMinZoom();\r\n\t},\r\n\r\n\t_panInsideMaxBounds: function () {\r\n\t\tif (!this._enforcingBounds) {\r\n\t\t\tthis.panInsideBounds(this.options.maxBounds);\r\n\t\t}\r\n\t},\r\n\r\n\t_checkIfLoaded: function () {\r\n\t\tif (!this._loaded) {\r\n\t\t\tthrow new Error('Set map center and zoom first.');\r\n\t\t}\r\n\t},\r\n\r\n\t// DOM event handling\r\n\r\n\t// @section Interaction events\r\n\t_initEvents: function (remove) {\r\n\t\tthis._targets = {};\r\n\t\tthis._targets[Util.stamp(this._container)] = this;\r\n\r\n\t\tvar onOff = remove ? DomEvent.off : DomEvent.on;\r\n\r\n\t\t// @event click: MouseEvent\r\n\t\t// Fired when the user clicks (or taps) the map.\r\n\t\t// @event dblclick: MouseEvent\r\n\t\t// Fired when the user double-clicks (or double-taps) the map.\r\n\t\t// @event mousedown: MouseEvent\r\n\t\t// Fired when the user pushes the mouse button on the map.\r\n\t\t// @event mouseup: MouseEvent\r\n\t\t// Fired when the user releases the mouse button on the map.\r\n\t\t// @event mouseover: MouseEvent\r\n\t\t// Fired when the mouse enters the map.\r\n\t\t// @event mouseout: MouseEvent\r\n\t\t// Fired when the mouse leaves the map.\r\n\t\t// @event mousemove: MouseEvent\r\n\t\t// Fired while the mouse moves over the map.\r\n\t\t// @event contextmenu: MouseEvent\r\n\t\t// Fired when the user pushes the right mouse button on the map, prevents\r\n\t\t// default browser context menu from showing if there are listeners on\r\n\t\t// this event. Also fired on mobile when the user holds a single touch\r\n\t\t// for a second (also called long press).\r\n\t\t// @event keypress: KeyboardEvent\r\n\t\t// Fired when the user presses a key from the keyboard that produces a character value while the map is focused.\r\n\t\t// @event keydown: KeyboardEvent\r\n\t\t// Fired when the user presses a key from the keyboard while the map is focused. Unlike the `keypress` event,\r\n\t\t// the `keydown` event is fired for keys that produce a character value and for keys\r\n\t\t// that do not produce a character value.\r\n\t\t// @event keyup: KeyboardEvent\r\n\t\t// Fired when the user releases a key from the keyboard while the map is focused.\r\n\t\tonOff(this._container, 'click dblclick mousedown mouseup ' +\r\n\t\t\t'mouseover mouseout mousemove contextmenu keypress keydown keyup', this._handleDOMEvent, this);\r\n\r\n\t\tif (this.options.trackResize) {\r\n\t\t\tonOff(window, 'resize', this._onResize, this);\r\n\t\t}\r\n\r\n\t\tif (Browser.any3d && this.options.transform3DLimit) {\r\n\t\t\t(remove ? this.off : this.on).call(this, 'moveend', this._onMoveEnd);\r\n\t\t}\r\n\t},\r\n\r\n\t_onResize: function () {\r\n\t\tUtil.cancelAnimFrame(this._resizeRequest);\r\n\t\tthis._resizeRequest = Util.requestAnimFrame(\r\n\t\t function () { this.invalidateSize({debounceMoveend: true}); }, this);\r\n\t},\r\n\r\n\t_onScroll: function () {\r\n\t\tthis._container.scrollTop = 0;\r\n\t\tthis._container.scrollLeft = 0;\r\n\t},\r\n\r\n\t_onMoveEnd: function () {\r\n\t\tvar pos = this._getMapPanePos();\r\n\t\tif (Math.max(Math.abs(pos.x), Math.abs(pos.y)) >= this.options.transform3DLimit) {\r\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=1203873 but Webkit also have\r\n\t\t\t// a pixel offset on very high values, see: http://jsfiddle.net/dg6r5hhb/\r\n\t\t\tthis._resetView(this.getCenter(), this.getZoom());\r\n\t\t}\r\n\t},\r\n\r\n\t_findEventTargets: function (e, type) {\r\n\t\tvar targets = [],\r\n\t\t target,\r\n\t\t isHover = type === 'mouseout' || type === 'mouseover',\r\n\t\t src = e.target || e.srcElement,\r\n\t\t dragging = false;\r\n\r\n\t\twhile (src) {\r\n\t\t\ttarget = this._targets[Util.stamp(src)];\r\n\t\t\tif (target && (type === 'click' || type === 'preclick') && !e._simulated && this._draggableMoved(target)) {\r\n\t\t\t\t// Prevent firing click after you just dragged an object.\r\n\t\t\t\tdragging = true;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif (target && target.listens(type, true)) {\r\n\t\t\t\tif (isHover && !DomEvent.isExternalTarget(src, e)) { break; }\r\n\t\t\t\ttargets.push(target);\r\n\t\t\t\tif (isHover) { break; }\r\n\t\t\t}\r\n\t\t\tif (src === this._container) { break; }\r\n\t\t\tsrc = src.parentNode;\r\n\t\t}\r\n\t\tif (!targets.length && !dragging && !isHover && DomEvent.isExternalTarget(src, e)) {\r\n\t\t\ttargets = [this];\r\n\t\t}\r\n\t\treturn targets;\r\n\t},\r\n\r\n\t_handleDOMEvent: function (e) {\r\n\t\tif (!this._loaded || DomEvent.skipped(e)) { return; }\r\n\r\n\t\tvar type = e.type;\r\n\r\n\t\tif (type === 'mousedown' || type === 'keypress' || type === 'keyup' || type === 'keydown') {\r\n\t\t\t// prevents outline when clicking on keyboard-focusable element\r\n\t\t\tDomUtil.preventOutline(e.target || e.srcElement);\r\n\t\t}\r\n\r\n\t\tthis._fireDOMEvent(e, type);\r\n\t},\r\n\r\n\t_mouseEvents: ['click', 'dblclick', 'mouseover', 'mouseout', 'contextmenu'],\r\n\r\n\t_fireDOMEvent: function (e, type, targets) {\r\n\r\n\t\tif (e.type === 'click') {\r\n\t\t\t// Fire a synthetic 'preclick' event which propagates up (mainly for closing popups).\r\n\t\t\t// @event preclick: MouseEvent\r\n\t\t\t// Fired before mouse click on the map (sometimes useful when you\r\n\t\t\t// want something to happen on click before any existing click\r\n\t\t\t// handlers start running).\r\n\t\t\tvar synth = Util.extend({}, e);\r\n\t\t\tsynth.type = 'preclick';\r\n\t\t\tthis._fireDOMEvent(synth, synth.type, targets);\r\n\t\t}\r\n\r\n\t\tif (e._stopped) { return; }\r\n\r\n\t\t// Find the layer the event is propagating from and its parents.\r\n\t\ttargets = (targets || []).concat(this._findEventTargets(e, type));\r\n\r\n\t\tif (!targets.length) { return; }\r\n\r\n\t\tvar target = targets[0];\r\n\t\tif (type === 'contextmenu' && target.listens(type, true)) {\r\n\t\t\tDomEvent.preventDefault(e);\r\n\t\t}\r\n\r\n\t\tvar data = {\r\n\t\t\toriginalEvent: e\r\n\t\t};\r\n\r\n\t\tif (e.type !== 'keypress' && e.type !== 'keydown' && e.type !== 'keyup') {\r\n\t\t\tvar isMarker = target.getLatLng && (!target._radius || target._radius <= 10);\r\n\t\t\tdata.containerPoint = isMarker ?\r\n\t\t\t\tthis.latLngToContainerPoint(target.getLatLng()) : this.mouseEventToContainerPoint(e);\r\n\t\t\tdata.layerPoint = this.containerPointToLayerPoint(data.containerPoint);\r\n\t\t\tdata.latlng = isMarker ? target.getLatLng() : this.layerPointToLatLng(data.layerPoint);\r\n\t\t}\r\n\r\n\t\tfor (var i = 0; i < targets.length; i++) {\r\n\t\t\ttargets[i].fire(type, data, true);\r\n\t\t\tif (data.originalEvent._stopped ||\r\n\t\t\t\t(targets[i].options.bubblingMouseEvents === false && Util.indexOf(this._mouseEvents, type) !== -1)) { return; }\r\n\t\t}\r\n\t},\r\n\r\n\t_draggableMoved: function (obj) {\r\n\t\tobj = obj.dragging && obj.dragging.enabled() ? obj : this;\r\n\t\treturn (obj.dragging && obj.dragging.moved()) || (this.boxZoom && this.boxZoom.moved());\r\n\t},\r\n\r\n\t_clearHandlers: function () {\r\n\t\tfor (var i = 0, len = this._handlers.length; i < len; i++) {\r\n\t\t\tthis._handlers[i].disable();\r\n\t\t}\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\r\n\t// @method whenReady(fn: Function, context?: Object): this\r\n\t// Runs the given function `fn` when the map gets initialized with\r\n\t// a view (center and zoom) and at least one layer, or immediately\r\n\t// if it's already initialized, optionally passing a function context.\r\n\twhenReady: function (callback, context) {\r\n\t\tif (this._loaded) {\r\n\t\t\tcallback.call(context || this, {target: this});\r\n\t\t} else {\r\n\t\t\tthis.on('load', callback, context);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\r\n\t// private methods for getting map state\r\n\r\n\t_getMapPanePos: function () {\r\n\t\treturn DomUtil.getPosition(this._mapPane) || new Point(0, 0);\r\n\t},\r\n\r\n\t_moved: function () {\r\n\t\tvar pos = this._getMapPanePos();\r\n\t\treturn pos && !pos.equals([0, 0]);\r\n\t},\r\n\r\n\t_getTopLeftPoint: function (center, zoom) {\r\n\t\tvar pixelOrigin = center && zoom !== undefined ?\r\n\t\t\tthis._getNewPixelOrigin(center, zoom) :\r\n\t\t\tthis.getPixelOrigin();\r\n\t\treturn pixelOrigin.subtract(this._getMapPanePos());\r\n\t},\r\n\r\n\t_getNewPixelOrigin: function (center, zoom) {\r\n\t\tvar viewHalf = this.getSize()._divideBy(2);\r\n\t\treturn this.project(center, zoom)._subtract(viewHalf)._add(this._getMapPanePos())._round();\r\n\t},\r\n\r\n\t_latLngToNewLayerPoint: function (latlng, zoom, center) {\r\n\t\tvar topLeft = this._getNewPixelOrigin(center, zoom);\r\n\t\treturn this.project(latlng, zoom)._subtract(topLeft);\r\n\t},\r\n\r\n\t_latLngBoundsToNewLayerBounds: function (latLngBounds, zoom, center) {\r\n\t\tvar topLeft = this._getNewPixelOrigin(center, zoom);\r\n\t\treturn toBounds([\r\n\t\t\tthis.project(latLngBounds.getSouthWest(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getNorthWest(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getSouthEast(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getNorthEast(), zoom)._subtract(topLeft)\r\n\t\t]);\r\n\t},\r\n\r\n\t// layer point of the current center\r\n\t_getCenterLayerPoint: function () {\r\n\t\treturn this.containerPointToLayerPoint(this.getSize()._divideBy(2));\r\n\t},\r\n\r\n\t// offset of the specified place to the current center in pixels\r\n\t_getCenterOffset: function (latlng) {\r\n\t\treturn this.latLngToLayerPoint(latlng).subtract(this._getCenterLayerPoint());\r\n\t},\r\n\r\n\t// adjust center for view to get inside bounds\r\n\t_limitCenter: function (center, zoom, bounds) {\r\n\r\n\t\tif (!bounds) { return center; }\r\n\r\n\t\tvar centerPoint = this.project(center, zoom),\r\n\t\t viewHalf = this.getSize().divideBy(2),\r\n\t\t viewBounds = new Bounds(centerPoint.subtract(viewHalf), centerPoint.add(viewHalf)),\r\n\t\t offset = this._getBoundsOffset(viewBounds, bounds, zoom);\r\n\r\n\t\t// If offset is less than a pixel, ignore.\r\n\t\t// This prevents unstable projections from getting into\r\n\t\t// an infinite loop of tiny offsets.\r\n\t\tif (offset.round().equals([0, 0])) {\r\n\t\t\treturn center;\r\n\t\t}\r\n\r\n\t\treturn this.unproject(centerPoint.add(offset), zoom);\r\n\t},\r\n\r\n\t// adjust offset for view to get inside bounds\r\n\t_limitOffset: function (offset, bounds) {\r\n\t\tif (!bounds) { return offset; }\r\n\r\n\t\tvar viewBounds = this.getPixelBounds(),\r\n\t\t newBounds = new Bounds(viewBounds.min.add(offset), viewBounds.max.add(offset));\r\n\r\n\t\treturn offset.add(this._getBoundsOffset(newBounds, bounds));\r\n\t},\r\n\r\n\t// returns offset needed for pxBounds to get inside maxBounds at a specified zoom\r\n\t_getBoundsOffset: function (pxBounds, maxBounds, zoom) {\r\n\t\tvar projectedMaxBounds = toBounds(\r\n\t\t this.project(maxBounds.getNorthEast(), zoom),\r\n\t\t this.project(maxBounds.getSouthWest(), zoom)\r\n\t\t ),\r\n\t\t minOffset = projectedMaxBounds.min.subtract(pxBounds.min),\r\n\t\t maxOffset = projectedMaxBounds.max.subtract(pxBounds.max),\r\n\r\n\t\t dx = this._rebound(minOffset.x, -maxOffset.x),\r\n\t\t dy = this._rebound(minOffset.y, -maxOffset.y);\r\n\r\n\t\treturn new Point(dx, dy);\r\n\t},\r\n\r\n\t_rebound: function (left, right) {\r\n\t\treturn left + right > 0 ?\r\n\t\t\tMath.round(left - right) / 2 :\r\n\t\t\tMath.max(0, Math.ceil(left)) - Math.max(0, Math.floor(right));\r\n\t},\r\n\r\n\t_limitZoom: function (zoom) {\r\n\t\tvar min = this.getMinZoom(),\r\n\t\t max = this.getMaxZoom(),\r\n\t\t snap = Browser.any3d ? this.options.zoomSnap : 1;\r\n\t\tif (snap) {\r\n\t\t\tzoom = Math.round(zoom / snap) * snap;\r\n\t\t}\r\n\t\treturn Math.max(min, Math.min(max, zoom));\r\n\t},\r\n\r\n\t_onPanTransitionStep: function () {\r\n\t\tthis.fire('move');\r\n\t},\r\n\r\n\t_onPanTransitionEnd: function () {\r\n\t\tDomUtil.removeClass(this._mapPane, 'leaflet-pan-anim');\r\n\t\tthis.fire('moveend');\r\n\t},\r\n\r\n\t_tryAnimatedPan: function (center, options) {\r\n\t\t// difference between the new and current centers in pixels\r\n\t\tvar offset = this._getCenterOffset(center)._trunc();\r\n\r\n\t\t// don't animate too far unless animate: true specified in options\r\n\t\tif ((options && options.animate) !== true && !this.getSize().contains(offset)) { return false; }\r\n\r\n\t\tthis.panBy(offset, options);\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_createAnimProxy: function () {\r\n\r\n\t\tvar proxy = this._proxy = DomUtil.create('div', 'leaflet-proxy leaflet-zoom-animated');\r\n\t\tthis._panes.mapPane.appendChild(proxy);\r\n\r\n\t\tthis.on('zoomanim', function (e) {\r\n\t\t\tvar prop = DomUtil.TRANSFORM,\r\n\t\t\t transform = this._proxy.style[prop];\r\n\r\n\t\t\tDomUtil.setTransform(this._proxy, this.project(e.center, e.zoom), this.getZoomScale(e.zoom, 1));\r\n\r\n\t\t\t// workaround for case when transform is the same and so transitionend event is not fired\r\n\t\t\tif (transform === this._proxy.style[prop] && this._animatingZoom) {\r\n\t\t\t\tthis._onZoomTransitionEnd();\r\n\t\t\t}\r\n\t\t}, this);\r\n\r\n\t\tthis.on('load moveend', this._animMoveEnd, this);\r\n\r\n\t\tthis._on('unload', this._destroyAnimProxy, this);\r\n\t},\r\n\r\n\t_destroyAnimProxy: function () {\r\n\t\tDomUtil.remove(this._proxy);\r\n\t\tthis.off('load moveend', this._animMoveEnd, this);\r\n\t\tdelete this._proxy;\r\n\t},\r\n\r\n\t_animMoveEnd: function () {\r\n\t\tvar c = this.getCenter(),\r\n\t\t z = this.getZoom();\r\n\t\tDomUtil.setTransform(this._proxy, this.project(c, z), this.getZoomScale(z, 1));\r\n\t},\r\n\r\n\t_catchTransitionEnd: function (e) {\r\n\t\tif (this._animatingZoom && e.propertyName.indexOf('transform') >= 0) {\r\n\t\t\tthis._onZoomTransitionEnd();\r\n\t\t}\r\n\t},\r\n\r\n\t_nothingToAnimate: function () {\r\n\t\treturn !this._container.getElementsByClassName('leaflet-zoom-animated').length;\r\n\t},\r\n\r\n\t_tryAnimatedZoom: function (center, zoom, options) {\r\n\r\n\t\tif (this._animatingZoom) { return true; }\r\n\r\n\t\toptions = options || {};\r\n\r\n\t\t// don't animate if disabled, not supported or zoom difference is too large\r\n\t\tif (!this._zoomAnimated || options.animate === false || this._nothingToAnimate() ||\r\n\t\t Math.abs(zoom - this._zoom) > this.options.zoomAnimationThreshold) { return false; }\r\n\r\n\t\t// offset is the pixel coords of the zoom origin relative to the current center\r\n\t\tvar scale = this.getZoomScale(zoom),\r\n\t\t offset = this._getCenterOffset(center)._divideBy(1 - 1 / scale);\r\n\r\n\t\t// don't animate if the zoom origin isn't within one screen from the current center, unless forced\r\n\t\tif (options.animate !== true && !this.getSize().contains(offset)) { return false; }\r\n\r\n\t\tUtil.requestAnimFrame(function () {\r\n\t\t\tthis\r\n\t\t\t ._moveStart(true, false)\r\n\t\t\t ._animateZoom(center, zoom, true);\r\n\t\t}, this);\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_animateZoom: function (center, zoom, startAnim, noUpdate) {\r\n\t\tif (!this._mapPane) { return; }\r\n\r\n\t\tif (startAnim) {\r\n\t\t\tthis._animatingZoom = true;\r\n\r\n\t\t\t// remember what center/zoom to set after animation\r\n\t\t\tthis._animateToCenter = center;\r\n\t\t\tthis._animateToZoom = zoom;\r\n\r\n\t\t\tDomUtil.addClass(this._mapPane, 'leaflet-zoom-anim');\r\n\t\t}\r\n\r\n\t\t// @section Other Events\r\n\t\t// @event zoomanim: ZoomAnimEvent\r\n\t\t// Fired at least once per zoom animation. For continuous zoom, like pinch zooming, fired once per frame during zoom.\r\n\t\tthis.fire('zoomanim', {\r\n\t\t\tcenter: center,\r\n\t\t\tzoom: zoom,\r\n\t\t\tnoUpdate: noUpdate\r\n\t\t});\r\n\r\n\t\t// Work around webkit not firing 'transitionend', see https://github.com/Leaflet/Leaflet/issues/3689, 2693\r\n\t\tsetTimeout(Util.bind(this._onZoomTransitionEnd, this), 250);\r\n\t},\r\n\r\n\t_onZoomTransitionEnd: function () {\r\n\t\tif (!this._animatingZoom) { return; }\r\n\r\n\t\tif (this._mapPane) {\r\n\t\t\tDomUtil.removeClass(this._mapPane, 'leaflet-zoom-anim');\r\n\t\t}\r\n\r\n\t\tthis._animatingZoom = false;\r\n\r\n\t\tthis._move(this._animateToCenter, this._animateToZoom);\r\n\r\n\t\t// This anim frame should prevent an obscure iOS webkit tile loading race condition.\r\n\t\tUtil.requestAnimFrame(function () {\r\n\t\t\tthis._moveEnd(true);\r\n\t\t}, this);\r\n\t}\r\n});\r\n\r\n// @section\r\n\r\n// @factory L.map(id: String, options?: Map options)\r\n// Instantiates a map object given the DOM ID of a `
` element\r\n// and optionally an object literal with `Map options`.\r\n//\r\n// @alternative\r\n// @factory L.map(el: HTMLElement, options?: Map options)\r\n// Instantiates a map object given an instance of a `
` HTML element\r\n// and optionally an object literal with `Map options`.\r\nexport function createMap(id, options) {\r\n\treturn new Map(id, options);\r\n}\r\n","\r\nimport {Class} from '../core/Class';\r\nimport {Map} from '../map/Map';\r\nimport * as Util from '../core/Util';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class Control\r\n * @aka L.Control\r\n * @inherits Class\r\n *\r\n * L.Control is a base class for implementing map controls. Handles positioning.\r\n * All other controls extend from this class.\r\n */\r\n\r\nexport var Control = Class.extend({\r\n\t// @section\r\n\t// @aka Control options\r\n\toptions: {\r\n\t\t// @option position: String = 'topright'\r\n\t\t// The position of the control (one of the map corners). Possible values are `'topleft'`,\r\n\t\t// `'topright'`, `'bottomleft'` or `'bottomright'`\r\n\t\tposition: 'topright'\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tUtil.setOptions(this, options);\r\n\t},\r\n\r\n\t/* @section\r\n\t * Classes extending L.Control will inherit the following methods:\r\n\t *\r\n\t * @method getPosition: string\r\n\t * Returns the position of the control.\r\n\t */\r\n\tgetPosition: function () {\r\n\t\treturn this.options.position;\r\n\t},\r\n\r\n\t// @method setPosition(position: string): this\r\n\t// Sets the position of the control.\r\n\tsetPosition: function (position) {\r\n\t\tvar map = this._map;\r\n\r\n\t\tif (map) {\r\n\t\t\tmap.removeControl(this);\r\n\t\t}\r\n\r\n\t\tthis.options.position = position;\r\n\r\n\t\tif (map) {\r\n\t\t\tmap.addControl(this);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getContainer: HTMLElement\r\n\t// Returns the HTMLElement that contains the control.\r\n\tgetContainer: function () {\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\t// @method addTo(map: Map): this\r\n\t// Adds the control to the given map.\r\n\taddTo: function (map) {\r\n\t\tthis.remove();\r\n\t\tthis._map = map;\r\n\r\n\t\tvar container = this._container = this.onAdd(map),\r\n\t\t pos = this.getPosition(),\r\n\t\t corner = map._controlCorners[pos];\r\n\r\n\t\tDomUtil.addClass(container, 'leaflet-control');\r\n\r\n\t\tif (pos.indexOf('bottom') !== -1) {\r\n\t\t\tcorner.insertBefore(container, corner.firstChild);\r\n\t\t} else {\r\n\t\t\tcorner.appendChild(container);\r\n\t\t}\r\n\r\n\t\tthis._map.on('unload', this.remove, this);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method remove: this\r\n\t// Removes the control from the map it is currently active on.\r\n\tremove: function () {\r\n\t\tif (!this._map) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tDomUtil.remove(this._container);\r\n\r\n\t\tif (this.onRemove) {\r\n\t\t\tthis.onRemove(this._map);\r\n\t\t}\r\n\r\n\t\tthis._map.off('unload', this.remove, this);\r\n\t\tthis._map = null;\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_refocusOnMap: function (e) {\r\n\t\t// if map exists and event is not a keyboard event\r\n\t\tif (this._map && e && e.screenX > 0 && e.screenY > 0) {\r\n\t\t\tthis._map.getContainer().focus();\r\n\t\t}\r\n\t}\r\n});\r\n\r\nexport var control = function (options) {\r\n\treturn new Control(options);\r\n};\r\n\r\n/* @section Extension methods\r\n * @uninheritable\r\n *\r\n * Every control should extend from `L.Control` and (re-)implement the following methods.\r\n *\r\n * @method onAdd(map: Map): HTMLElement\r\n * Should return the container DOM element for the control and add listeners on relevant map events. Called on [`control.addTo(map)`](#control-addTo).\r\n *\r\n * @method onRemove(map: Map)\r\n * Optional method. Should contain all clean up code that removes the listeners previously added in [`onAdd`](#control-onadd). Called on [`control.remove()`](#control-remove).\r\n */\r\n\r\n/* @namespace Map\r\n * @section Methods for Layers and Controls\r\n */\r\nMap.include({\r\n\t// @method addControl(control: Control): this\r\n\t// Adds the given control to the map\r\n\taddControl: function (control) {\r\n\t\tcontrol.addTo(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeControl(control: Control): this\r\n\t// Removes the given control from the map\r\n\tremoveControl: function (control) {\r\n\t\tcontrol.remove();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initControlPos: function () {\r\n\t\tvar corners = this._controlCorners = {},\r\n\t\t l = 'leaflet-',\r\n\t\t container = this._controlContainer =\r\n\t\t DomUtil.create('div', l + 'control-container', this._container);\r\n\r\n\t\tfunction createCorner(vSide, hSide) {\r\n\t\t\tvar className = l + vSide + ' ' + l + hSide;\r\n\r\n\t\t\tcorners[vSide + hSide] = DomUtil.create('div', className, container);\r\n\t\t}\r\n\r\n\t\tcreateCorner('top', 'left');\r\n\t\tcreateCorner('top', 'right');\r\n\t\tcreateCorner('bottom', 'left');\r\n\t\tcreateCorner('bottom', 'right');\r\n\t},\r\n\r\n\t_clearControlPos: function () {\r\n\t\tfor (var i in this._controlCorners) {\r\n\t\t\tDomUtil.remove(this._controlCorners[i]);\r\n\t\t}\r\n\t\tDomUtil.remove(this._controlContainer);\r\n\t\tdelete this._controlCorners;\r\n\t\tdelete this._controlContainer;\r\n\t}\r\n});\r\n","\r\nimport {Control} from './Control';\r\nimport * as Util from '../core/Util';\r\nimport * as Browser from '../core/Browser';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class Control.Layers\r\n * @aka L.Control.Layers\r\n * @inherits Control\r\n *\r\n * The layers control gives users the ability to switch between different base layers and switch overlays on/off (check out the [detailed example](http://leafletjs.com/examples/layers-control/)). Extends `Control`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var baseLayers = {\r\n * \t\"Mapbox\": mapbox,\r\n * \t\"OpenStreetMap\": osm\r\n * };\r\n *\r\n * var overlays = {\r\n * \t\"Marker\": marker,\r\n * \t\"Roads\": roadsLayer\r\n * };\r\n *\r\n * L.control.layers(baseLayers, overlays).addTo(map);\r\n * ```\r\n *\r\n * The `baseLayers` and `overlays` parameters are object literals with layer names as keys and `Layer` objects as values:\r\n *\r\n * ```js\r\n * {\r\n * \"\": layer1,\r\n * \"\": layer2\r\n * }\r\n * ```\r\n *\r\n * The layer names can contain HTML, which allows you to add additional styling to the items:\r\n *\r\n * ```js\r\n * {\" My Layer\": myLayer}\r\n * ```\r\n */\r\n\r\nexport var Layers = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Layers options\r\n\toptions: {\r\n\t\t// @option collapsed: Boolean = true\r\n\t\t// If `true`, the control will be collapsed into an icon and expanded on mouse hover or touch.\r\n\t\tcollapsed: true,\r\n\t\tposition: 'topright',\r\n\r\n\t\t// @option autoZIndex: Boolean = true\r\n\t\t// If `true`, the control will assign zIndexes in increasing order to all of its layers so that the order is preserved when switching them on/off.\r\n\t\tautoZIndex: true,\r\n\r\n\t\t// @option hideSingleBase: Boolean = false\r\n\t\t// If `true`, the base layers in the control will be hidden when there is only one.\r\n\t\thideSingleBase: false,\r\n\r\n\t\t// @option sortLayers: Boolean = false\r\n\t\t// Whether to sort the layers. When `false`, layers will keep the order\r\n\t\t// in which they were added to the control.\r\n\t\tsortLayers: false,\r\n\r\n\t\t// @option sortFunction: Function = *\r\n\t\t// A [compare function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)\r\n\t\t// that will be used for sorting the layers, when `sortLayers` is `true`.\r\n\t\t// The function receives both the `L.Layer` instances and their names, as in\r\n\t\t// `sortFunction(layerA, layerB, nameA, nameB)`.\r\n\t\t// By default, it sorts layers alphabetically by their name.\r\n\t\tsortFunction: function (layerA, layerB, nameA, nameB) {\r\n\t\t\treturn nameA < nameB ? -1 : (nameB < nameA ? 1 : 0);\r\n\t\t}\r\n\t},\r\n\r\n\tinitialize: function (baseLayers, overlays, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layerControlInputs = [];\r\n\t\tthis._layers = [];\r\n\t\tthis._lastZIndex = 0;\r\n\t\tthis._handlingClick = false;\r\n\r\n\t\tfor (var i in baseLayers) {\r\n\t\t\tthis._addLayer(baseLayers[i], i);\r\n\t\t}\r\n\r\n\t\tfor (i in overlays) {\r\n\t\t\tthis._addLayer(overlays[i], i, true);\r\n\t\t}\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis._initLayout();\r\n\t\tthis._update();\r\n\r\n\t\tthis._map = map;\r\n\t\tmap.on('zoomend', this._checkDisabledLayers, this);\r\n\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\t\t\tthis._layers[i].layer.on('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\taddTo: function (map) {\r\n\t\tControl.prototype.addTo.call(this, map);\r\n\t\t// Trigger expand after Layers Control has been inserted into DOM so that is now has an actual height.\r\n\t\treturn this._expandIfNotCollapsed();\r\n\t},\r\n\r\n\tonRemove: function () {\r\n\t\tthis._map.off('zoomend', this._checkDisabledLayers, this);\r\n\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\t\t\tthis._layers[i].layer.off('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addBaseLayer(layer: Layer, name: String): this\r\n\t// Adds a base layer (radio button entry) with the given name to the control.\r\n\taddBaseLayer: function (layer, name) {\r\n\t\tthis._addLayer(layer, name);\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method addOverlay(layer: Layer, name: String): this\r\n\t// Adds an overlay (checkbox entry) with the given name to the control.\r\n\taddOverlay: function (layer, name) {\r\n\t\tthis._addLayer(layer, name, true);\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method removeLayer(layer: Layer): this\r\n\t// Remove the given layer from the control.\r\n\tremoveLayer: function (layer) {\r\n\t\tlayer.off('add remove', this._onLayerChange, this);\r\n\r\n\t\tvar obj = this._getLayer(Util.stamp(layer));\r\n\t\tif (obj) {\r\n\t\t\tthis._layers.splice(this._layers.indexOf(obj), 1);\r\n\t\t}\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method expand(): this\r\n\t// Expand the control container if collapsed.\r\n\texpand: function () {\r\n\t\tDomUtil.addClass(this._container, 'leaflet-control-layers-expanded');\r\n\t\tthis._section.style.height = null;\r\n\t\tvar acceptableHeight = this._map.getSize().y - (this._container.offsetTop + 50);\r\n\t\tif (acceptableHeight < this._section.clientHeight) {\r\n\t\t\tDomUtil.addClass(this._section, 'leaflet-control-layers-scrollbar');\r\n\t\t\tthis._section.style.height = acceptableHeight + 'px';\r\n\t\t} else {\r\n\t\t\tDomUtil.removeClass(this._section, 'leaflet-control-layers-scrollbar');\r\n\t\t}\r\n\t\tthis._checkDisabledLayers();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method collapse(): this\r\n\t// Collapse the control container if expanded.\r\n\tcollapse: function () {\r\n\t\tDomUtil.removeClass(this._container, 'leaflet-control-layers-expanded');\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initLayout: function () {\r\n\t\tvar className = 'leaflet-control-layers',\r\n\t\t container = this._container = DomUtil.create('div', className),\r\n\t\t collapsed = this.options.collapsed;\r\n\r\n\t\t// makes this work on IE touch devices by stopping it from firing a mouseout event when the touch is released\r\n\t\tcontainer.setAttribute('aria-haspopup', true);\r\n\r\n\t\tDomEvent.disableClickPropagation(container);\r\n\t\tDomEvent.disableScrollPropagation(container);\r\n\r\n\t\tvar section = this._section = DomUtil.create('section', className + '-list');\r\n\r\n\t\tif (collapsed) {\r\n\t\t\tthis._map.on('click', this.collapse, this);\r\n\r\n\t\t\tif (!Browser.android) {\r\n\t\t\t\tDomEvent.on(container, {\r\n\t\t\t\t\tmouseenter: this.expand,\r\n\t\t\t\t\tmouseleave: this.collapse\r\n\t\t\t\t}, this);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar link = this._layersLink = DomUtil.create('a', className + '-toggle', container);\r\n\t\tlink.href = '#';\r\n\t\tlink.title = 'Layers';\r\n\r\n\t\tif (Browser.touch) {\r\n\t\t\tDomEvent.on(link, 'click', DomEvent.stop);\r\n\t\t\tDomEvent.on(link, 'click', this.expand, this);\r\n\t\t} else {\r\n\t\t\tDomEvent.on(link, 'focus', this.expand, this);\r\n\t\t}\r\n\r\n\t\tif (!collapsed) {\r\n\t\t\tthis.expand();\r\n\t\t}\r\n\r\n\t\tthis._baseLayersList = DomUtil.create('div', className + '-base', section);\r\n\t\tthis._separator = DomUtil.create('div', className + '-separator', section);\r\n\t\tthis._overlaysList = DomUtil.create('div', className + '-overlays', section);\r\n\r\n\t\tcontainer.appendChild(section);\r\n\t},\r\n\r\n\t_getLayer: function (id) {\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\r\n\t\t\tif (this._layers[i] && Util.stamp(this._layers[i].layer) === id) {\r\n\t\t\t\treturn this._layers[i];\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_addLayer: function (layer, name, overlay) {\r\n\t\tif (this._map) {\r\n\t\t\tlayer.on('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\r\n\t\tthis._layers.push({\r\n\t\t\tlayer: layer,\r\n\t\t\tname: name,\r\n\t\t\toverlay: overlay\r\n\t\t});\r\n\r\n\t\tif (this.options.sortLayers) {\r\n\t\t\tthis._layers.sort(Util.bind(function (a, b) {\r\n\t\t\t\treturn this.options.sortFunction(a.layer, b.layer, a.name, b.name);\r\n\t\t\t}, this));\r\n\t\t}\r\n\r\n\t\tif (this.options.autoZIndex && layer.setZIndex) {\r\n\t\t\tthis._lastZIndex++;\r\n\t\t\tlayer.setZIndex(this._lastZIndex);\r\n\t\t}\r\n\r\n\t\tthis._expandIfNotCollapsed();\r\n\t},\r\n\r\n\t_update: function () {\r\n\t\tif (!this._container) { return this; }\r\n\r\n\t\tDomUtil.empty(this._baseLayersList);\r\n\t\tDomUtil.empty(this._overlaysList);\r\n\r\n\t\tthis._layerControlInputs = [];\r\n\t\tvar baseLayersPresent, overlaysPresent, i, obj, baseLayersCount = 0;\r\n\r\n\t\tfor (i = 0; i < this._layers.length; i++) {\r\n\t\t\tobj = this._layers[i];\r\n\t\t\tthis._addItem(obj);\r\n\t\t\toverlaysPresent = overlaysPresent || obj.overlay;\r\n\t\t\tbaseLayersPresent = baseLayersPresent || !obj.overlay;\r\n\t\t\tbaseLayersCount += !obj.overlay ? 1 : 0;\r\n\t\t}\r\n\r\n\t\t// Hide base layers section if there's only one layer.\r\n\t\tif (this.options.hideSingleBase) {\r\n\t\t\tbaseLayersPresent = baseLayersPresent && baseLayersCount > 1;\r\n\t\t\tthis._baseLayersList.style.display = baseLayersPresent ? '' : 'none';\r\n\t\t}\r\n\r\n\t\tthis._separator.style.display = overlaysPresent && baseLayersPresent ? '' : 'none';\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_onLayerChange: function (e) {\r\n\t\tif (!this._handlingClick) {\r\n\t\t\tthis._update();\r\n\t\t}\r\n\r\n\t\tvar obj = this._getLayer(Util.stamp(e.target));\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Layer events\r\n\t\t// @event baselayerchange: LayersControlEvent\r\n\t\t// Fired when the base layer is changed through the [layer control](#control-layers).\r\n\t\t// @event overlayadd: LayersControlEvent\r\n\t\t// Fired when an overlay is selected through the [layer control](#control-layers).\r\n\t\t// @event overlayremove: LayersControlEvent\r\n\t\t// Fired when an overlay is deselected through the [layer control](#control-layers).\r\n\t\t// @namespace Control.Layers\r\n\t\tvar type = obj.overlay ?\r\n\t\t\t(e.type === 'add' ? 'overlayadd' : 'overlayremove') :\r\n\t\t\t(e.type === 'add' ? 'baselayerchange' : null);\r\n\r\n\t\tif (type) {\r\n\t\t\tthis._map.fire(type, obj);\r\n\t\t}\r\n\t},\r\n\r\n\t// IE7 bugs out if you create a radio dynamically, so you have to do it this hacky way (see http://bit.ly/PqYLBe)\r\n\t_createRadioElement: function (name, checked) {\r\n\r\n\t\tvar radioHtml = '';\r\n\r\n\t\tvar radioFragment = document.createElement('div');\r\n\t\tradioFragment.innerHTML = radioHtml;\r\n\r\n\t\treturn radioFragment.firstChild;\r\n\t},\r\n\r\n\t_addItem: function (obj) {\r\n\t\tvar label = document.createElement('label'),\r\n\t\t checked = this._map.hasLayer(obj.layer),\r\n\t\t input;\r\n\r\n\t\tif (obj.overlay) {\r\n\t\t\tinput = document.createElement('input');\r\n\t\t\tinput.type = 'checkbox';\r\n\t\t\tinput.className = 'leaflet-control-layers-selector';\r\n\t\t\tinput.defaultChecked = checked;\r\n\t\t} else {\r\n\t\t\tinput = this._createRadioElement('leaflet-base-layers_' + Util.stamp(this), checked);\r\n\t\t}\r\n\r\n\t\tthis._layerControlInputs.push(input);\r\n\t\tinput.layerId = Util.stamp(obj.layer);\r\n\r\n\t\tDomEvent.on(input, 'click', this._onInputClick, this);\r\n\r\n\t\tvar name = document.createElement('span');\r\n\t\tname.innerHTML = ' ' + obj.name;\r\n\r\n\t\t// Helps from preventing layer control flicker when checkboxes are disabled\r\n\t\t// https://github.com/Leaflet/Leaflet/issues/2771\r\n\t\tvar holder = document.createElement('div');\r\n\r\n\t\tlabel.appendChild(holder);\r\n\t\tholder.appendChild(input);\r\n\t\tholder.appendChild(name);\r\n\r\n\t\tvar container = obj.overlay ? this._overlaysList : this._baseLayersList;\r\n\t\tcontainer.appendChild(label);\r\n\r\n\t\tthis._checkDisabledLayers();\r\n\t\treturn label;\r\n\t},\r\n\r\n\t_onInputClick: function () {\r\n\t\tvar inputs = this._layerControlInputs,\r\n\t\t input, layer;\r\n\t\tvar addedLayers = [],\r\n\t\t removedLayers = [];\r\n\r\n\t\tthis._handlingClick = true;\r\n\r\n\t\tfor (var i = inputs.length - 1; i >= 0; i--) {\r\n\t\t\tinput = inputs[i];\r\n\t\t\tlayer = this._getLayer(input.layerId).layer;\r\n\r\n\t\t\tif (input.checked) {\r\n\t\t\t\taddedLayers.push(layer);\r\n\t\t\t} else if (!input.checked) {\r\n\t\t\t\tremovedLayers.push(layer);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Bugfix issue 2318: Should remove all old layers before readding new ones\r\n\t\tfor (i = 0; i < removedLayers.length; i++) {\r\n\t\t\tif (this._map.hasLayer(removedLayers[i])) {\r\n\t\t\t\tthis._map.removeLayer(removedLayers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (i = 0; i < addedLayers.length; i++) {\r\n\t\t\tif (!this._map.hasLayer(addedLayers[i])) {\r\n\t\t\t\tthis._map.addLayer(addedLayers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._handlingClick = false;\r\n\r\n\t\tthis._refocusOnMap();\r\n\t},\r\n\r\n\t_checkDisabledLayers: function () {\r\n\t\tvar inputs = this._layerControlInputs,\r\n\t\t input,\r\n\t\t layer,\r\n\t\t zoom = this._map.getZoom();\r\n\r\n\t\tfor (var i = inputs.length - 1; i >= 0; i--) {\r\n\t\t\tinput = inputs[i];\r\n\t\t\tlayer = this._getLayer(input.layerId).layer;\r\n\t\t\tinput.disabled = (layer.options.minZoom !== undefined && zoom < layer.options.minZoom) ||\r\n\t\t\t (layer.options.maxZoom !== undefined && zoom > layer.options.maxZoom);\r\n\r\n\t\t}\r\n\t},\r\n\r\n\t_expandIfNotCollapsed: function () {\r\n\t\tif (this._map && !this.options.collapsed) {\r\n\t\t\tthis.expand();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_expand: function () {\r\n\t\t// Backward compatibility, remove me in 1.1.\r\n\t\treturn this.expand();\r\n\t},\r\n\r\n\t_collapse: function () {\r\n\t\t// Backward compatibility, remove me in 1.1.\r\n\t\treturn this.collapse();\r\n\t}\r\n\r\n});\r\n\r\n\r\n// @factory L.control.layers(baselayers?: Object, overlays?: Object, options?: Control.Layers options)\r\n// Creates a layers control with the given layers. Base layers will be switched with radio buttons, while overlays will be switched with checkboxes. Note that all base layers should be passed in the base layers object, but only one should be added to the map during map instantiation.\r\nexport var layers = function (baseLayers, overlays, options) {\r\n\treturn new Layers(baseLayers, overlays, options);\r\n};\r\n","\r\nimport {Control} from './Control';\r\nimport {Map} from '../map/Map';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport * as DomEvent from '../dom/DomEvent';\r\n\r\n/*\r\n * @class Control.Zoom\r\n * @aka L.Control.Zoom\r\n * @inherits Control\r\n *\r\n * A basic zoom control with two buttons (zoom in and zoom out). It is put on the map by default unless you set its [`zoomControl` option](#map-zoomcontrol) to `false`. Extends `Control`.\r\n */\r\n\r\nexport var Zoom = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Zoom options\r\n\toptions: {\r\n\t\tposition: 'topleft',\r\n\r\n\t\t// @option zoomInText: String = '+'\r\n\t\t// The text set on the 'zoom in' button.\r\n\t\tzoomInText: '+',\r\n\r\n\t\t// @option zoomInTitle: String = 'Zoom in'\r\n\t\t// The title set on the 'zoom in' button.\r\n\t\tzoomInTitle: 'Zoom in',\r\n\r\n\t\t// @option zoomOutText: String = '−'\r\n\t\t// The text set on the 'zoom out' button.\r\n\t\tzoomOutText: '−',\r\n\r\n\t\t// @option zoomOutTitle: String = 'Zoom out'\r\n\t\t// The title set on the 'zoom out' button.\r\n\t\tzoomOutTitle: 'Zoom out'\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tvar zoomName = 'leaflet-control-zoom',\r\n\t\t container = DomUtil.create('div', zoomName + ' leaflet-bar'),\r\n\t\t options = this.options;\r\n\r\n\t\tthis._zoomInButton = this._createButton(options.zoomInText, options.zoomInTitle,\r\n\t\t zoomName + '-in', container, this._zoomIn);\r\n\t\tthis._zoomOutButton = this._createButton(options.zoomOutText, options.zoomOutTitle,\r\n\t\t zoomName + '-out', container, this._zoomOut);\r\n\r\n\t\tthis._updateDisabled();\r\n\t\tmap.on('zoomend zoomlevelschange', this._updateDisabled, this);\r\n\r\n\t\treturn container;\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tmap.off('zoomend zoomlevelschange', this._updateDisabled, this);\r\n\t},\r\n\r\n\tdisable: function () {\r\n\t\tthis._disabled = true;\r\n\t\tthis._updateDisabled();\r\n\t\treturn this;\r\n\t},\r\n\r\n\tenable: function () {\r\n\t\tthis._disabled = false;\r\n\t\tthis._updateDisabled();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_zoomIn: function (e) {\r\n\t\tif (!this._disabled && this._map._zoom < this._map.getMaxZoom()) {\r\n\t\t\tthis._map.zoomIn(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));\r\n\t\t}\r\n\t},\r\n\r\n\t_zoomOut: function (e) {\r\n\t\tif (!this._disabled && this._map._zoom > this._map.getMinZoom()) {\r\n\t\t\tthis._map.zoomOut(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));\r\n\t\t}\r\n\t},\r\n\r\n\t_createButton: function (html, title, className, container, fn) {\r\n\t\tvar link = DomUtil.create('a', className, container);\r\n\t\tlink.innerHTML = html;\r\n\t\tlink.href = '#';\r\n\t\tlink.title = title;\r\n\r\n\t\t/*\r\n\t\t * Will force screen readers like VoiceOver to read this as \"Zoom in - button\"\r\n\t\t */\r\n\t\tlink.setAttribute('role', 'button');\r\n\t\tlink.setAttribute('aria-label', title);\r\n\r\n\t\tDomEvent.disableClickPropagation(link);\r\n\t\tDomEvent.on(link, 'click', DomEvent.stop);\r\n\t\tDomEvent.on(link, 'click', fn, this);\r\n\t\tDomEvent.on(link, 'click', this._refocusOnMap, this);\r\n\r\n\t\treturn link;\r\n\t},\r\n\r\n\t_updateDisabled: function () {\r\n\t\tvar map = this._map,\r\n\t\t className = 'leaflet-disabled';\r\n\r\n\t\tDomUtil.removeClass(this._zoomInButton, className);\r\n\t\tDomUtil.removeClass(this._zoomOutButton, className);\r\n\r\n\t\tif (this._disabled || map._zoom === map.getMinZoom()) {\r\n\t\t\tDomUtil.addClass(this._zoomOutButton, className);\r\n\t\t}\r\n\t\tif (this._disabled || map._zoom === map.getMaxZoom()) {\r\n\t\t\tDomUtil.addClass(this._zoomInButton, className);\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// @namespace Map\r\n// @section Control options\r\n// @option zoomControl: Boolean = true\r\n// Whether a [zoom control](#control-zoom) is added to the map by default.\r\nMap.mergeOptions({\r\n\tzoomControl: true\r\n});\r\n\r\nMap.addInitHook(function () {\r\n\tif (this.options.zoomControl) {\r\n\t\t// @section Controls\r\n\t\t// @property zoomControl: Control.Zoom\r\n\t\t// The default zoom control (only available if the\r\n\t\t// [`zoomControl` option](#map-zoomcontrol) was `true` when creating the map).\r\n\t\tthis.zoomControl = new Zoom();\r\n\t\tthis.addControl(this.zoomControl);\r\n\t}\r\n});\r\n\r\n// @namespace Control.Zoom\r\n// @factory L.control.zoom(options: Control.Zoom options)\r\n// Creates a zoom control\r\nexport var zoom = function (options) {\r\n\treturn new Zoom(options);\r\n};\r\n","\nimport {Control} from './Control';\nimport * as DomUtil from '../dom/DomUtil';\n\n/*\n * @class Control.Scale\n * @aka L.Control.Scale\n * @inherits Control\n *\n * A simple scale control that shows the scale of the current center of screen in metric (m/km) and imperial (mi/ft) systems. Extends `Control`.\n *\n * @example\n *\n * ```js\n * L.control.scale().addTo(map);\n * ```\n */\n\nexport var Scale = Control.extend({\n\t// @section\n\t// @aka Control.Scale options\n\toptions: {\n\t\tposition: 'bottomleft',\n\n\t\t// @option maxWidth: Number = 100\n\t\t// Maximum width of the control in pixels. The width is set dynamically to show round values (e.g. 100, 200, 500).\n\t\tmaxWidth: 100,\n\n\t\t// @option metric: Boolean = True\n\t\t// Whether to show the metric scale line (m/km).\n\t\tmetric: true,\n\n\t\t// @option imperial: Boolean = True\n\t\t// Whether to show the imperial scale line (mi/ft).\n\t\timperial: true\n\n\t\t// @option updateWhenIdle: Boolean = false\n\t\t// If `true`, the control is updated on [`moveend`](#map-moveend), otherwise it's always up-to-date (updated on [`move`](#map-move)).\n\t},\n\n\tonAdd: function (map) {\n\t\tvar className = 'leaflet-control-scale',\n\t\t container = DomUtil.create('div', className),\n\t\t options = this.options;\n\n\t\tthis._addScales(options, className + '-line', container);\n\n\t\tmap.on(options.updateWhenIdle ? 'moveend' : 'move', this._update, this);\n\t\tmap.whenReady(this._update, this);\n\n\t\treturn container;\n\t},\n\n\tonRemove: function (map) {\n\t\tmap.off(this.options.updateWhenIdle ? 'moveend' : 'move', this._update, this);\n\t},\n\n\t_addScales: function (options, className, container) {\n\t\tif (options.metric) {\n\t\t\tthis._mScale = DomUtil.create('div', className, container);\n\t\t}\n\t\tif (options.imperial) {\n\t\t\tthis._iScale = DomUtil.create('div', className, container);\n\t\t}\n\t},\n\n\t_update: function () {\n\t\tvar map = this._map,\n\t\t y = map.getSize().y / 2;\n\n\t\tvar maxMeters = map.distance(\n\t\t\tmap.containerPointToLatLng([0, y]),\n\t\t\tmap.containerPointToLatLng([this.options.maxWidth, y]));\n\n\t\tthis._updateScales(maxMeters);\n\t},\n\n\t_updateScales: function (maxMeters) {\n\t\tif (this.options.metric && maxMeters) {\n\t\t\tthis._updateMetric(maxMeters);\n\t\t}\n\t\tif (this.options.imperial && maxMeters) {\n\t\t\tthis._updateImperial(maxMeters);\n\t\t}\n\t},\n\n\t_updateMetric: function (maxMeters) {\n\t\tvar meters = this._getRoundNum(maxMeters),\n\t\t label = meters < 1000 ? meters + ' m' : (meters / 1000) + ' km';\n\n\t\tthis._updateScale(this._mScale, label, meters / maxMeters);\n\t},\n\n\t_updateImperial: function (maxMeters) {\n\t\tvar maxFeet = maxMeters * 3.2808399,\n\t\t maxMiles, miles, feet;\n\n\t\tif (maxFeet > 5280) {\n\t\t\tmaxMiles = maxFeet / 5280;\n\t\t\tmiles = this._getRoundNum(maxMiles);\n\t\t\tthis._updateScale(this._iScale, miles + ' mi', miles / maxMiles);\n\n\t\t} else {\n\t\t\tfeet = this._getRoundNum(maxFeet);\n\t\t\tthis._updateScale(this._iScale, feet + ' ft', feet / maxFeet);\n\t\t}\n\t},\n\n\t_updateScale: function (scale, text, ratio) {\n\t\tscale.style.width = Math.round(this.options.maxWidth * ratio) + 'px';\n\t\tscale.innerHTML = text;\n\t},\n\n\t_getRoundNum: function (num) {\n\t\tvar pow10 = Math.pow(10, (Math.floor(num) + '').length - 1),\n\t\t d = num / pow10;\n\n\t\td = d >= 10 ? 10 :\n\t\t d >= 5 ? 5 :\n\t\t d >= 3 ? 3 :\n\t\t d >= 2 ? 2 : 1;\n\n\t\treturn pow10 * d;\n\t}\n});\n\n\n// @factory L.control.scale(options?: Control.Scale options)\n// Creates an scale control with the given options.\nexport var scale = function (options) {\n\treturn new Scale(options);\n};\n","\r\nimport {Control} from './Control';\r\nimport {Map} from '../map/Map';\r\nimport * as Util from '../core/Util';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class Control.Attribution\r\n * @aka L.Control.Attribution\r\n * @inherits Control\r\n *\r\n * The attribution control allows you to display attribution data in a small text box on a map. It is put on the map by default unless you set its [`attributionControl` option](#map-attributioncontrol) to `false`, and it fetches attribution texts from layers with the [`getAttribution` method](#layer-getattribution) automatically. Extends Control.\r\n */\r\n\r\nexport var Attribution = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Attribution options\r\n\toptions: {\r\n\t\tposition: 'bottomright',\r\n\r\n\t\t// @option prefix: String = 'Leaflet'\r\n\t\t// The HTML text shown before the attributions. Pass `false` to disable.\r\n\t\tprefix: 'Leaflet'\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._attributions = {};\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tmap.attributionControl = this;\r\n\t\tthis._container = DomUtil.create('div', 'leaflet-control-attribution');\r\n\t\tDomEvent.disableClickPropagation(this._container);\r\n\r\n\t\t// TODO ugly, refactor\r\n\t\tfor (var i in map._layers) {\r\n\t\t\tif (map._layers[i].getAttribution) {\r\n\t\t\t\tthis.addAttribution(map._layers[i].getAttribution());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._update();\r\n\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\t// @method setPrefix(prefix: String): this\r\n\t// Sets the text before the attributions.\r\n\tsetPrefix: function (prefix) {\r\n\t\tthis.options.prefix = prefix;\r\n\t\tthis._update();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method addAttribution(text: String): this\r\n\t// Adds an attribution text (e.g. `'Vector data © Mapbox'`).\r\n\taddAttribution: function (text) {\r\n\t\tif (!text) { return this; }\r\n\r\n\t\tif (!this._attributions[text]) {\r\n\t\t\tthis._attributions[text] = 0;\r\n\t\t}\r\n\t\tthis._attributions[text]++;\r\n\r\n\t\tthis._update();\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeAttribution(text: String): this\r\n\t// Removes an attribution text.\r\n\tremoveAttribution: function (text) {\r\n\t\tif (!text) { return this; }\r\n\r\n\t\tif (this._attributions[text]) {\r\n\t\t\tthis._attributions[text]--;\r\n\t\t\tthis._update();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_update: function () {\r\n\t\tif (!this._map) { return; }\r\n\r\n\t\tvar attribs = [];\r\n\r\n\t\tfor (var i in this._attributions) {\r\n\t\t\tif (this._attributions[i]) {\r\n\t\t\t\tattribs.push(i);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar prefixAndAttribs = [];\r\n\r\n\t\tif (this.options.prefix) {\r\n\t\t\tprefixAndAttribs.push(this.options.prefix);\r\n\t\t}\r\n\t\tif (attribs.length) {\r\n\t\t\tprefixAndAttribs.push(attribs.join(', '));\r\n\t\t}\r\n\r\n\t\tthis._container.innerHTML = prefixAndAttribs.join(' | ');\r\n\t}\r\n});\r\n\r\n// @namespace Map\r\n// @section Control options\r\n// @option attributionControl: Boolean = true\r\n// Whether a [attribution control](#control-attribution) is added to the map by default.\r\nMap.mergeOptions({\r\n\tattributionControl: true\r\n});\r\n\r\nMap.addInitHook(function () {\r\n\tif (this.options.attributionControl) {\r\n\t\tnew Attribution().addTo(this);\r\n\t}\r\n});\r\n\r\n// @namespace Control.Attribution\r\n// @factory L.control.attribution(options: Control.Attribution options)\r\n// Creates an attribution control.\r\nexport var attribution = function (options) {\r\n\treturn new Attribution(options);\r\n};\r\n","import {Control, control} from './Control';\nimport {Layers, layers} from './Control.Layers';\nimport {Zoom, zoom} from './Control.Zoom';\nimport {Scale, scale} from './Control.Scale';\nimport {Attribution, attribution} from './Control.Attribution';\n\nControl.Layers = Layers;\nControl.Zoom = Zoom;\nControl.Scale = Scale;\nControl.Attribution = Attribution;\n\ncontrol.layers = layers;\ncontrol.zoom = zoom;\ncontrol.scale = scale;\ncontrol.attribution = attribution;\n\nexport {Control, control};\n","import {Class} from './Class';\n\n/*\n\tL.Handler is a base class for handler classes that are used internally to inject\n\tinteraction features like dragging to classes like Map and Marker.\n*/\n\n// @class Handler\n// @aka L.Handler\n// Abstract class for map interaction handlers\n\nexport var Handler = Class.extend({\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\t},\n\n\t// @method enable(): this\n\t// Enables the handler\n\tenable: function () {\n\t\tif (this._enabled) { return this; }\n\n\t\tthis._enabled = true;\n\t\tthis.addHooks();\n\t\treturn this;\n\t},\n\n\t// @method disable(): this\n\t// Disables the handler\n\tdisable: function () {\n\t\tif (!this._enabled) { return this; }\n\n\t\tthis._enabled = false;\n\t\tthis.removeHooks();\n\t\treturn this;\n\t},\n\n\t// @method enabled(): Boolean\n\t// Returns `true` if the handler is enabled\n\tenabled: function () {\n\t\treturn !!this._enabled;\n\t}\n\n\t// @section Extension methods\n\t// Classes inheriting from `Handler` must implement the two following methods:\n\t// @method addHooks()\n\t// Called when the handler is enabled, should add event hooks.\n\t// @method removeHooks()\n\t// Called when the handler is disabled, should remove the event hooks added previously.\n});\n\n// @section There is static function which can be called without instantiating L.Handler:\n// @function addTo(map: Map, name: String): this\n// Adds a new Handler to the given map with the given name.\nHandler.addTo = function (map, name) {\n\tmap.addHandler(name, this);\n\treturn this;\n};\n","import * as Browser from './Browser';\nexport {Browser};\n\nexport {Class} from './Class';\n\nimport {Evented} from './Events';\nimport {Events} from './Events';\nexport {Evented};\nexport var Mixin = {Events: Events};\n\nexport {Handler} from './Handler';\n\nimport * as Util from './Util';\nexport {Util};\nexport {extend, bind, stamp, setOptions} from './Util';\n","import {Evented} from '../core/Events';\r\nimport * as Browser from '../core/Browser';\r\nimport * as DomEvent from './DomEvent';\r\nimport * as DomUtil from './DomUtil';\r\nimport * as Util from '../core/Util';\r\nimport {Point} from '../geometry/Point';\r\n\r\n/*\r\n * @class Draggable\r\n * @aka L.Draggable\r\n * @inherits Evented\r\n *\r\n * A class for making DOM elements draggable (including touch support).\r\n * Used internally for map and marker dragging. Only works for elements\r\n * that were positioned with [`L.DomUtil.setPosition`](#domutil-setposition).\r\n *\r\n * @example\r\n * ```js\r\n * var draggable = new L.Draggable(elementToDrag);\r\n * draggable.enable();\r\n * ```\r\n */\r\n\r\nvar START = Browser.touch ? 'touchstart mousedown' : 'mousedown';\r\nvar END = {\r\n\tmousedown: 'mouseup',\r\n\ttouchstart: 'touchend',\r\n\tpointerdown: 'touchend',\r\n\tMSPointerDown: 'touchend'\r\n};\r\nvar MOVE = {\r\n\tmousedown: 'mousemove',\r\n\ttouchstart: 'touchmove',\r\n\tpointerdown: 'touchmove',\r\n\tMSPointerDown: 'touchmove'\r\n};\r\n\r\n\r\nexport var Draggable = Evented.extend({\r\n\r\n\toptions: {\r\n\t\t// @section\r\n\t\t// @aka Draggable options\r\n\t\t// @option clickTolerance: Number = 3\r\n\t\t// The max number of pixels a user can shift the mouse pointer during a click\r\n\t\t// for it to be considered a valid click (as opposed to a mouse drag).\r\n\t\tclickTolerance: 3\r\n\t},\r\n\r\n\t// @constructor L.Draggable(el: HTMLElement, dragHandle?: HTMLElement, preventOutline?: Boolean, options?: Draggable options)\r\n\t// Creates a `Draggable` object for moving `el` when you start dragging the `dragHandle` element (equals `el` itself by default).\r\n\tinitialize: function (element, dragStartTarget, preventOutline, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._element = element;\r\n\t\tthis._dragStartTarget = dragStartTarget || element;\r\n\t\tthis._preventOutline = preventOutline;\r\n\t},\r\n\r\n\t// @method enable()\r\n\t// Enables the dragging ability\r\n\tenable: function () {\r\n\t\tif (this._enabled) { return; }\r\n\r\n\t\tDomEvent.on(this._dragStartTarget, START, this._onDown, this);\r\n\r\n\t\tthis._enabled = true;\r\n\t},\r\n\r\n\t// @method disable()\r\n\t// Disables the dragging ability\r\n\tdisable: function () {\r\n\t\tif (!this._enabled) { return; }\r\n\r\n\t\t// If we're currently dragging this draggable,\r\n\t\t// disabling it counts as first ending the drag.\r\n\t\tif (Draggable._dragging === this) {\r\n\t\t\tthis.finishDrag();\r\n\t\t}\r\n\r\n\t\tDomEvent.off(this._dragStartTarget, START, this._onDown, this);\r\n\r\n\t\tthis._enabled = false;\r\n\t\tthis._moved = false;\r\n\t},\r\n\r\n\t_onDown: function (e) {\r\n\t\t// Ignore simulated events, since we handle both touch and\r\n\t\t// mouse explicitly; otherwise we risk getting duplicates of\r\n\t\t// touch events, see #4315.\r\n\t\t// Also ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (e._simulated || !this._enabled) { return; }\r\n\r\n\t\tthis._moved = false;\r\n\r\n\t\tif (DomUtil.hasClass(this._element, 'leaflet-zoom-anim')) { return; }\r\n\r\n\t\tif (Draggable._dragging || e.shiftKey || ((e.which !== 1) && (e.button !== 1) && !e.touches)) { return; }\r\n\t\tDraggable._dragging = this; // Prevent dragging multiple objects at once.\r\n\r\n\t\tif (this._preventOutline) {\r\n\t\t\tDomUtil.preventOutline(this._element);\r\n\t\t}\r\n\r\n\t\tDomUtil.disableImageDrag();\r\n\t\tDomUtil.disableTextSelection();\r\n\r\n\t\tif (this._moving) { return; }\r\n\r\n\t\t// @event down: Event\r\n\t\t// Fired when a drag is about to start.\r\n\t\tthis.fire('down');\r\n\r\n\t\tvar first = e.touches ? e.touches[0] : e,\r\n\t\t sizedParent = DomUtil.getSizedParentNode(this._element);\r\n\r\n\t\tthis._startPoint = new Point(first.clientX, first.clientY);\r\n\r\n\t\t// Cache the scale, so that we can continuously compensate for it during drag (_onMove).\r\n\t\tthis._parentScale = DomUtil.getScale(sizedParent);\r\n\r\n\t\tDomEvent.on(document, MOVE[e.type], this._onMove, this);\r\n\t\tDomEvent.on(document, END[e.type], this._onUp, this);\r\n\t},\r\n\r\n\t_onMove: function (e) {\r\n\t\t// Ignore simulated events, since we handle both touch and\r\n\t\t// mouse explicitly; otherwise we risk getting duplicates of\r\n\t\t// touch events, see #4315.\r\n\t\t// Also ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (e._simulated || !this._enabled) { return; }\r\n\r\n\t\tif (e.touches && e.touches.length > 1) {\r\n\t\t\tthis._moved = true;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),\r\n\t\t offset = new Point(first.clientX, first.clientY)._subtract(this._startPoint);\r\n\r\n\t\tif (!offset.x && !offset.y) { return; }\r\n\t\tif (Math.abs(offset.x) + Math.abs(offset.y) < this.options.clickTolerance) { return; }\r\n\r\n\t\t// We assume that the parent container's position, border and scale do not change for the duration of the drag.\r\n\t\t// Therefore there is no need to account for the position and border (they are eliminated by the subtraction)\r\n\t\t// and we can use the cached value for the scale.\r\n\t\toffset.x /= this._parentScale.x;\r\n\t\toffset.y /= this._parentScale.y;\r\n\r\n\t\tDomEvent.preventDefault(e);\r\n\r\n\t\tif (!this._moved) {\r\n\t\t\t// @event dragstart: Event\r\n\t\t\t// Fired when a drag starts\r\n\t\t\tthis.fire('dragstart');\r\n\r\n\t\t\tthis._moved = true;\r\n\t\t\tthis._startPos = DomUtil.getPosition(this._element).subtract(offset);\r\n\r\n\t\t\tDomUtil.addClass(document.body, 'leaflet-dragging');\r\n\r\n\t\t\tthis._lastTarget = e.target || e.srcElement;\r\n\t\t\t// IE and Edge do not give the element, so fetch it\r\n\t\t\t// if necessary\r\n\t\t\tif ((window.SVGElementInstance) && (this._lastTarget instanceof SVGElementInstance)) {\r\n\t\t\t\tthis._lastTarget = this._lastTarget.correspondingUseElement;\r\n\t\t\t}\r\n\t\t\tDomUtil.addClass(this._lastTarget, 'leaflet-drag-target');\r\n\t\t}\r\n\r\n\t\tthis._newPos = this._startPos.add(offset);\r\n\t\tthis._moving = true;\r\n\r\n\t\tUtil.cancelAnimFrame(this._animRequest);\r\n\t\tthis._lastEvent = e;\r\n\t\tthis._animRequest = Util.requestAnimFrame(this._updatePosition, this, true);\r\n\t},\r\n\r\n\t_updatePosition: function () {\r\n\t\tvar e = {originalEvent: this._lastEvent};\r\n\r\n\t\t// @event predrag: Event\r\n\t\t// Fired continuously during dragging *before* each corresponding\r\n\t\t// update of the element's position.\r\n\t\tthis.fire('predrag', e);\r\n\t\tDomUtil.setPosition(this._element, this._newPos);\r\n\r\n\t\t// @event drag: Event\r\n\t\t// Fired continuously during dragging.\r\n\t\tthis.fire('drag', e);\r\n\t},\r\n\r\n\t_onUp: function (e) {\r\n\t\t// Ignore simulated events, since we handle both touch and\r\n\t\t// mouse explicitly; otherwise we risk getting duplicates of\r\n\t\t// touch events, see #4315.\r\n\t\t// Also ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (e._simulated || !this._enabled) { return; }\r\n\t\tthis.finishDrag();\r\n\t},\r\n\r\n\tfinishDrag: function () {\r\n\t\tDomUtil.removeClass(document.body, 'leaflet-dragging');\r\n\r\n\t\tif (this._lastTarget) {\r\n\t\t\tDomUtil.removeClass(this._lastTarget, 'leaflet-drag-target');\r\n\t\t\tthis._lastTarget = null;\r\n\t\t}\r\n\r\n\t\tfor (var i in MOVE) {\r\n\t\t\tDomEvent.off(document, MOVE[i], this._onMove, this);\r\n\t\t\tDomEvent.off(document, END[i], this._onUp, this);\r\n\t\t}\r\n\r\n\t\tDomUtil.enableImageDrag();\r\n\t\tDomUtil.enableTextSelection();\r\n\r\n\t\tif (this._moved && this._moving) {\r\n\t\t\t// ensure drag is not fired after dragend\r\n\t\t\tUtil.cancelAnimFrame(this._animRequest);\r\n\r\n\t\t\t// @event dragend: DragEndEvent\r\n\t\t\t// Fired when the drag ends.\r\n\t\t\tthis.fire('dragend', {\r\n\t\t\t\tdistance: this._newPos.distanceTo(this._startPos)\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis._moving = false;\r\n\t\tDraggable._dragging = false;\r\n\t}\r\n\r\n});\r\n","import {Point} from './Point';\r\nimport * as Util from '../core/Util';\r\n\r\n\r\n/*\r\n * @namespace LineUtil\r\n *\r\n * Various utility functions for polyline points processing, used by Leaflet internally to make polylines lightning-fast.\r\n */\r\n\r\n// Simplify polyline with vertex reduction and Douglas-Peucker simplification.\r\n// Improves rendering performance dramatically by lessening the number of points to draw.\r\n\r\n// @function simplify(points: Point[], tolerance: Number): Point[]\r\n// Dramatically reduces the number of points in a polyline while retaining\r\n// its shape and returns a new array of simplified points, using the\r\n// [Douglas-Peucker algorithm](http://en.wikipedia.org/wiki/Douglas-Peucker_algorithm).\r\n// Used for a huge performance boost when processing/displaying Leaflet polylines for\r\n// each zoom level and also reducing visual noise. tolerance affects the amount of\r\n// simplification (lesser value means higher quality but slower and with more points).\r\n// Also released as a separated micro-library [Simplify.js](http://mourner.github.com/simplify-js/).\r\nexport function simplify(points, tolerance) {\r\n\tif (!tolerance || !points.length) {\r\n\t\treturn points.slice();\r\n\t}\r\n\r\n\tvar sqTolerance = tolerance * tolerance;\r\n\r\n\t // stage 1: vertex reduction\r\n\t points = _reducePoints(points, sqTolerance);\r\n\r\n\t // stage 2: Douglas-Peucker simplification\r\n\t points = _simplifyDP(points, sqTolerance);\r\n\r\n\treturn points;\r\n}\r\n\r\n// @function pointToSegmentDistance(p: Point, p1: Point, p2: Point): Number\r\n// Returns the distance between point `p` and segment `p1` to `p2`.\r\nexport function pointToSegmentDistance(p, p1, p2) {\r\n\treturn Math.sqrt(_sqClosestPointOnSegment(p, p1, p2, true));\r\n}\r\n\r\n// @function closestPointOnSegment(p: Point, p1: Point, p2: Point): Number\r\n// Returns the closest point from a point `p` on a segment `p1` to `p2`.\r\nexport function closestPointOnSegment(p, p1, p2) {\r\n\treturn _sqClosestPointOnSegment(p, p1, p2);\r\n}\r\n\r\n// Douglas-Peucker simplification, see http://en.wikipedia.org/wiki/Douglas-Peucker_algorithm\r\nfunction _simplifyDP(points, sqTolerance) {\r\n\r\n\tvar len = points.length,\r\n\t ArrayConstructor = typeof Uint8Array !== undefined + '' ? Uint8Array : Array,\r\n\t markers = new ArrayConstructor(len);\r\n\r\n\t markers[0] = markers[len - 1] = 1;\r\n\r\n\t_simplifyDPStep(points, markers, sqTolerance, 0, len - 1);\r\n\r\n\tvar i,\r\n\t newPoints = [];\r\n\r\n\tfor (i = 0; i < len; i++) {\r\n\t\tif (markers[i]) {\r\n\t\t\tnewPoints.push(points[i]);\r\n\t\t}\r\n\t}\r\n\r\n\treturn newPoints;\r\n}\r\n\r\nfunction _simplifyDPStep(points, markers, sqTolerance, first, last) {\r\n\r\n\tvar maxSqDist = 0,\r\n\tindex, i, sqDist;\r\n\r\n\tfor (i = first + 1; i <= last - 1; i++) {\r\n\t\tsqDist = _sqClosestPointOnSegment(points[i], points[first], points[last], true);\r\n\r\n\t\tif (sqDist > maxSqDist) {\r\n\t\t\tindex = i;\r\n\t\t\tmaxSqDist = sqDist;\r\n\t\t}\r\n\t}\r\n\r\n\tif (maxSqDist > sqTolerance) {\r\n\t\tmarkers[index] = 1;\r\n\r\n\t\t_simplifyDPStep(points, markers, sqTolerance, first, index);\r\n\t\t_simplifyDPStep(points, markers, sqTolerance, index, last);\r\n\t}\r\n}\r\n\r\n// reduce points that are too close to each other to a single point\r\nfunction _reducePoints(points, sqTolerance) {\r\n\tvar reducedPoints = [points[0]];\r\n\r\n\tfor (var i = 1, prev = 0, len = points.length; i < len; i++) {\r\n\t\tif (_sqDist(points[i], points[prev]) > sqTolerance) {\r\n\t\t\treducedPoints.push(points[i]);\r\n\t\t\tprev = i;\r\n\t\t}\r\n\t}\r\n\tif (prev < len - 1) {\r\n\t\treducedPoints.push(points[len - 1]);\r\n\t}\r\n\treturn reducedPoints;\r\n}\r\n\r\nvar _lastCode;\r\n\r\n// @function clipSegment(a: Point, b: Point, bounds: Bounds, useLastCode?: Boolean, round?: Boolean): Point[]|Boolean\r\n// Clips the segment a to b by rectangular bounds with the\r\n// [Cohen-Sutherland algorithm](https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm)\r\n// (modifying the segment points directly!). Used by Leaflet to only show polyline\r\n// points that are on the screen or near, increasing performance.\r\nexport function clipSegment(a, b, bounds, useLastCode, round) {\r\n\tvar codeA = useLastCode ? _lastCode : _getBitCode(a, bounds),\r\n\t codeB = _getBitCode(b, bounds),\r\n\r\n\t codeOut, p, newCode;\r\n\r\n\t // save 2nd code to avoid calculating it on the next segment\r\n\t _lastCode = codeB;\r\n\r\n\twhile (true) {\r\n\t\t// if a,b is inside the clip window (trivial accept)\r\n\t\tif (!(codeA | codeB)) {\r\n\t\t\treturn [a, b];\r\n\t\t}\r\n\r\n\t\t// if a,b is outside the clip window (trivial reject)\r\n\t\tif (codeA & codeB) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// other cases\r\n\t\tcodeOut = codeA || codeB;\r\n\t\tp = _getEdgeIntersection(a, b, codeOut, bounds, round);\r\n\t\tnewCode = _getBitCode(p, bounds);\r\n\r\n\t\tif (codeOut === codeA) {\r\n\t\t\ta = p;\r\n\t\t\tcodeA = newCode;\r\n\t\t} else {\r\n\t\t\tb = p;\r\n\t\t\tcodeB = newCode;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport function _getEdgeIntersection(a, b, code, bounds, round) {\r\n\tvar dx = b.x - a.x,\r\n\t dy = b.y - a.y,\r\n\t min = bounds.min,\r\n\t max = bounds.max,\r\n\t x, y;\r\n\r\n\tif (code & 8) { // top\r\n\t\tx = a.x + dx * (max.y - a.y) / dy;\r\n\t\ty = max.y;\r\n\r\n\t} else if (code & 4) { // bottom\r\n\t\tx = a.x + dx * (min.y - a.y) / dy;\r\n\t\ty = min.y;\r\n\r\n\t} else if (code & 2) { // right\r\n\t\tx = max.x;\r\n\t\ty = a.y + dy * (max.x - a.x) / dx;\r\n\r\n\t} else if (code & 1) { // left\r\n\t\tx = min.x;\r\n\t\ty = a.y + dy * (min.x - a.x) / dx;\r\n\t}\r\n\r\n\treturn new Point(x, y, round);\r\n}\r\n\r\nexport function _getBitCode(p, bounds) {\r\n\tvar code = 0;\r\n\r\n\tif (p.x < bounds.min.x) { // left\r\n\t\tcode |= 1;\r\n\t} else if (p.x > bounds.max.x) { // right\r\n\t\tcode |= 2;\r\n\t}\r\n\r\n\tif (p.y < bounds.min.y) { // bottom\r\n\t\tcode |= 4;\r\n\t} else if (p.y > bounds.max.y) { // top\r\n\t\tcode |= 8;\r\n\t}\r\n\r\n\treturn code;\r\n}\r\n\r\n// square distance (to avoid unnecessary Math.sqrt calls)\r\nfunction _sqDist(p1, p2) {\r\n\tvar dx = p2.x - p1.x,\r\n\t dy = p2.y - p1.y;\r\n\treturn dx * dx + dy * dy;\r\n}\r\n\r\n// return closest point on segment or distance to that point\r\nexport function _sqClosestPointOnSegment(p, p1, p2, sqDist) {\r\n\tvar x = p1.x,\r\n\t y = p1.y,\r\n\t dx = p2.x - x,\r\n\t dy = p2.y - y,\r\n\t dot = dx * dx + dy * dy,\r\n\t t;\r\n\r\n\tif (dot > 0) {\r\n\t\tt = ((p.x - x) * dx + (p.y - y) * dy) / dot;\r\n\r\n\t\tif (t > 1) {\r\n\t\t\tx = p2.x;\r\n\t\t\ty = p2.y;\r\n\t\t} else if (t > 0) {\r\n\t\t\tx += dx * t;\r\n\t\t\ty += dy * t;\r\n\t\t}\r\n\t}\r\n\r\n\tdx = p.x - x;\r\n\tdy = p.y - y;\r\n\r\n\treturn sqDist ? dx * dx + dy * dy : new Point(x, y);\r\n}\r\n\r\n\r\n// @function isFlat(latlngs: LatLng[]): Boolean\r\n// Returns true if `latlngs` is a flat array, false is nested.\r\nexport function isFlat(latlngs) {\r\n\treturn !Util.isArray(latlngs[0]) || (typeof latlngs[0][0] !== 'object' && typeof latlngs[0][0] !== 'undefined');\r\n}\r\n\r\nexport function _flat(latlngs) {\r\n\tconsole.warn('Deprecated use of _flat, please use L.LineUtil.isFlat instead.');\r\n\treturn isFlat(latlngs);\r\n}\r\n","import * as LineUtil from './LineUtil';\r\n\r\n/*\r\n * @namespace PolyUtil\r\n * Various utility functions for polygon geometries.\r\n */\r\n\r\n/* @function clipPolygon(points: Point[], bounds: Bounds, round?: Boolean): Point[]\r\n * Clips the polygon geometry defined by the given `points` by the given bounds (using the [Sutherland-Hodgman algorithm](https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm)).\r\n * Used by Leaflet to only show polygon points that are on the screen or near, increasing\r\n * performance. Note that polygon points needs different algorithm for clipping\r\n * than polyline, so there's a separate method for it.\r\n */\r\nexport function clipPolygon(points, bounds, round) {\r\n\tvar clippedPoints,\r\n\t edges = [1, 4, 2, 8],\r\n\t i, j, k,\r\n\t a, b,\r\n\t len, edge, p;\r\n\r\n\tfor (i = 0, len = points.length; i < len; i++) {\r\n\t\tpoints[i]._code = LineUtil._getBitCode(points[i], bounds);\r\n\t}\r\n\r\n\t// for each edge (left, bottom, right, top)\r\n\tfor (k = 0; k < 4; k++) {\r\n\t\tedge = edges[k];\r\n\t\tclippedPoints = [];\r\n\r\n\t\tfor (i = 0, len = points.length, j = len - 1; i < len; j = i++) {\r\n\t\t\ta = points[i];\r\n\t\t\tb = points[j];\r\n\r\n\t\t\t// if a is inside the clip window\r\n\t\t\tif (!(a._code & edge)) {\r\n\t\t\t\t// if b is outside the clip window (a->b goes out of screen)\r\n\t\t\t\tif (b._code & edge) {\r\n\t\t\t\t\tp = LineUtil._getEdgeIntersection(b, a, edge, bounds, round);\r\n\t\t\t\t\tp._code = LineUtil._getBitCode(p, bounds);\r\n\t\t\t\t\tclippedPoints.push(p);\r\n\t\t\t\t}\r\n\t\t\t\tclippedPoints.push(a);\r\n\r\n\t\t\t// else if b is inside the clip window (a->b enters the screen)\r\n\t\t\t} else if (!(b._code & edge)) {\r\n\t\t\t\tp = LineUtil._getEdgeIntersection(b, a, edge, bounds, round);\r\n\t\t\t\tp._code = LineUtil._getBitCode(p, bounds);\r\n\t\t\t\tclippedPoints.push(p);\r\n\t\t\t}\r\n\t\t}\r\n\t\tpoints = clippedPoints;\r\n\t}\r\n\r\n\treturn points;\r\n}\r\n","import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @section\r\n * Leaflet comes with a set of already defined Projections out of the box:\r\n *\r\n * @projection L.Projection.LonLat\r\n *\r\n * Equirectangular, or Plate Carree projection — the most simple projection,\r\n * mostly used by GIS enthusiasts. Directly maps `x` as longitude, and `y` as\r\n * latitude. Also suitable for flat worlds, e.g. game maps. Used by the\r\n * `EPSG:4326` and `Simple` CRS.\r\n */\r\n\r\nexport var LonLat = {\r\n\tproject: function (latlng) {\r\n\t\treturn new Point(latlng.lng, latlng.lat);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\treturn new LatLng(point.y, point.x);\r\n\t},\r\n\r\n\tbounds: new Bounds([-180, -90], [180, 90])\r\n};\r\n","import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @projection L.Projection.Mercator\r\n *\r\n * Elliptical Mercator projection — more complex than Spherical Mercator. Assumes that Earth is an ellipsoid. Used by the EPSG:3395 CRS.\r\n */\r\n\r\nexport var Mercator = {\r\n\tR: 6378137,\r\n\tR_MINOR: 6356752.314245179,\r\n\r\n\tbounds: new Bounds([-20037508.34279, -15496570.73972], [20037508.34279, 18764656.23138]),\r\n\r\n\tproject: function (latlng) {\r\n\t\tvar d = Math.PI / 180,\r\n\t\t r = this.R,\r\n\t\t y = latlng.lat * d,\r\n\t\t tmp = this.R_MINOR / r,\r\n\t\t e = Math.sqrt(1 - tmp * tmp),\r\n\t\t con = e * Math.sin(y);\r\n\r\n\t\tvar ts = Math.tan(Math.PI / 4 - y / 2) / Math.pow((1 - con) / (1 + con), e / 2);\r\n\t\ty = -r * Math.log(Math.max(ts, 1E-10));\r\n\r\n\t\treturn new Point(latlng.lng * d * r, y);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\tvar d = 180 / Math.PI,\r\n\t\t r = this.R,\r\n\t\t tmp = this.R_MINOR / r,\r\n\t\t e = Math.sqrt(1 - tmp * tmp),\r\n\t\t ts = Math.exp(-point.y / r),\r\n\t\t phi = Math.PI / 2 - 2 * Math.atan(ts);\r\n\r\n\t\tfor (var i = 0, dphi = 0.1, con; i < 15 && Math.abs(dphi) > 1e-7; i++) {\r\n\t\t\tcon = e * Math.sin(phi);\r\n\t\t\tcon = Math.pow((1 - con) / (1 + con), e / 2);\r\n\t\t\tdphi = Math.PI / 2 - 2 * Math.atan(ts * con) - phi;\r\n\t\t\tphi += dphi;\r\n\t\t}\r\n\r\n\t\treturn new LatLng(phi * d, point.x * d / r);\r\n\t}\r\n};\r\n","/*\n * @class Projection\n\n * An object with methods for projecting geographical coordinates of the world onto\n * a flat surface (and back). See [Map projection](http://en.wikipedia.org/wiki/Map_projection).\n\n * @property bounds: Bounds\n * The bounds (specified in CRS units) where the projection is valid\n\n * @method project(latlng: LatLng): Point\n * Projects geographical coordinates into a 2D point.\n * Only accepts actual `L.LatLng` instances, not arrays.\n\n * @method unproject(point: Point): LatLng\n * The inverse of `project`. Projects a 2D point into a geographical location.\n * Only accepts actual `L.Point` instances, not arrays.\n\n * Note that the projection instances do not inherit from Leafet's `Class` object,\n * and can't be instantiated. Also, new classes can't inherit from them,\n * and methods can't be added to them with the `include` function.\n\n */\n\nexport {LonLat} from './Projection.LonLat';\nexport {Mercator} from './Projection.Mercator';\nexport {SphericalMercator} from './Projection.SphericalMercator';\n","import {Earth} from './CRS.Earth';\r\nimport {Mercator} from '../projection/Projection.Mercator';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG3395\r\n *\r\n * Rarely used by some commercial tile providers. Uses Elliptical Mercator projection.\r\n */\r\nexport var EPSG3395 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:3395',\r\n\tprojection: Mercator,\r\n\r\n\ttransformation: (function () {\r\n\t\tvar scale = 0.5 / (Math.PI * Mercator.R);\r\n\t\treturn toTransformation(scale, 0.5, -scale, 0.5);\r\n\t}())\r\n});\r\n","import {Earth} from './CRS.Earth';\r\nimport {LonLat} from '../projection/Projection.LonLat';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG4326\r\n *\r\n * A common CRS among GIS enthusiasts. Uses simple Equirectangular projection.\r\n *\r\n * Leaflet 1.0.x complies with the [TMS coordinate scheme for EPSG:4326](https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification#global-geodetic),\r\n * which is a breaking change from 0.7.x behaviour. If you are using a `TileLayer`\r\n * with this CRS, ensure that there are two 256x256 pixel tiles covering the\r\n * whole earth at zoom level zero, and that the tile coordinate origin is (-180,+90),\r\n * or (-180,-90) for `TileLayer`s with [the `tms` option](#tilelayer-tms) set.\r\n */\r\n\r\nexport var EPSG4326 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:4326',\r\n\tprojection: LonLat,\r\n\ttransformation: toTransformation(1 / 180, 1, -1 / 180, 0.5)\r\n});\r\n","import {CRS} from './CRS';\nimport {LonLat} from '../projection/Projection.LonLat';\nimport {toTransformation} from '../../geometry/Transformation';\nimport * as Util from '../../core/Util';\n\n/*\n * @namespace CRS\n * @crs L.CRS.Simple\n *\n * A simple CRS that maps longitude and latitude into `x` and `y` directly.\n * May be used for maps of flat surfaces (e.g. game maps). Note that the `y`\n * axis should still be inverted (going from bottom to top). `distance()` returns\n * simple euclidean distance.\n */\n\nexport var Simple = Util.extend({}, CRS, {\n\tprojection: LonLat,\n\ttransformation: toTransformation(1, 0, -1, 0),\n\n\tscale: function (zoom) {\n\t\treturn Math.pow(2, zoom);\n\t},\n\n\tzoom: function (scale) {\n\t\treturn Math.log(scale) / Math.LN2;\n\t},\n\n\tdistance: function (latlng1, latlng2) {\n\t\tvar dx = latlng2.lng - latlng1.lng,\n\t\t dy = latlng2.lat - latlng1.lat;\n\n\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t},\n\n\tinfinite: true\n});\n","import {CRS} from './CRS';\nimport {Earth} from './CRS.Earth';\nimport {EPSG3395} from './CRS.EPSG3395';\nimport {EPSG3857, EPSG900913} from './CRS.EPSG3857';\nimport {EPSG4326} from './CRS.EPSG4326';\nimport {Simple} from './CRS.Simple';\n\nCRS.Earth = Earth;\nCRS.EPSG3395 = EPSG3395;\nCRS.EPSG3857 = EPSG3857;\nCRS.EPSG900913 = EPSG900913;\nCRS.EPSG4326 = EPSG4326;\nCRS.Simple = Simple;\n\nexport {CRS};\n","import {Evented} from '../core/Events';\nimport {Map} from '../map/Map';\nimport * as Util from '../core/Util';\n\n/*\n * @class Layer\n * @inherits Evented\n * @aka L.Layer\n * @aka ILayer\n *\n * A set of methods from the Layer base class that all Leaflet layers use.\n * Inherits all methods, options and events from `L.Evented`.\n *\n * @example\n *\n * ```js\n * var layer = L.marker(latlng).addTo(map);\n * layer.addTo(map);\n * layer.remove();\n * ```\n *\n * @event add: Event\n * Fired after the layer is added to a map\n *\n * @event remove: Event\n * Fired after the layer is removed from a map\n */\n\n\nexport var Layer = Evented.extend({\n\n\t// Classes extending `L.Layer` will inherit the following options:\n\toptions: {\n\t\t// @option pane: String = 'overlayPane'\n\t\t// By default the layer will be added to the map's [overlay pane](#map-overlaypane). Overriding this option will cause the layer to be placed on another pane by default.\n\t\tpane: 'overlayPane',\n\n\t\t// @option attribution: String = null\n\t\t// String to be shown in the attribution control, e.g. \"© OpenStreetMap contributors\". It describes the layer data and is often a legal obligation towards copyright holders and tile providers.\n\t\tattribution: null,\n\n\t\tbubblingMouseEvents: true\n\t},\n\n\t/* @section\n\t * Classes extending `L.Layer` will inherit the following methods:\n\t *\n\t * @method addTo(map: Map|LayerGroup): this\n\t * Adds the layer to the given map or layer group.\n\t */\n\taddTo: function (map) {\n\t\tmap.addLayer(this);\n\t\treturn this;\n\t},\n\n\t// @method remove: this\n\t// Removes the layer from the map it is currently active on.\n\tremove: function () {\n\t\treturn this.removeFrom(this._map || this._mapToAdd);\n\t},\n\n\t// @method removeFrom(map: Map): this\n\t// Removes the layer from the given map\n\tremoveFrom: function (obj) {\n\t\tif (obj) {\n\t\t\tobj.removeLayer(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method getPane(name? : String): HTMLElement\n\t// Returns the `HTMLElement` representing the named pane on the map. If `name` is omitted, returns the pane for this layer.\n\tgetPane: function (name) {\n\t\treturn this._map.getPane(name ? (this.options[name] || name) : this.options.pane);\n\t},\n\n\taddInteractiveTarget: function (targetEl) {\n\t\tthis._map._targets[Util.stamp(targetEl)] = this;\n\t\treturn this;\n\t},\n\n\tremoveInteractiveTarget: function (targetEl) {\n\t\tdelete this._map._targets[Util.stamp(targetEl)];\n\t\treturn this;\n\t},\n\n\t// @method getAttribution: String\n\t// Used by the `attribution control`, returns the [attribution option](#gridlayer-attribution).\n\tgetAttribution: function () {\n\t\treturn this.options.attribution;\n\t},\n\n\t_layerAdd: function (e) {\n\t\tvar map = e.target;\n\n\t\t// check in case layer gets added and then removed before the map is ready\n\t\tif (!map.hasLayer(this)) { return; }\n\n\t\tthis._map = map;\n\t\tthis._zoomAnimated = map._zoomAnimated;\n\n\t\tif (this.getEvents) {\n\t\t\tvar events = this.getEvents();\n\t\t\tmap.on(events, this);\n\t\t\tthis.once('remove', function () {\n\t\t\t\tmap.off(events, this);\n\t\t\t}, this);\n\t\t}\n\n\t\tthis.onAdd(map);\n\n\t\tif (this.getAttribution && map.attributionControl) {\n\t\t\tmap.attributionControl.addAttribution(this.getAttribution());\n\t\t}\n\n\t\tthis.fire('add');\n\t\tmap.fire('layeradd', {layer: this});\n\t}\n});\n\n/* @section Extension methods\n * @uninheritable\n *\n * Every layer should extend from `L.Layer` and (re-)implement the following methods.\n *\n * @method onAdd(map: Map): this\n * Should contain code that creates DOM elements for the layer, adds them to `map panes` where they should belong and puts listeners on relevant map events. Called on [`map.addLayer(layer)`](#map-addlayer).\n *\n * @method onRemove(map: Map): this\n * Should contain all clean up code that removes the layer's elements from the DOM and removes listeners previously added in [`onAdd`](#layer-onadd). Called on [`map.removeLayer(layer)`](#map-removelayer).\n *\n * @method getEvents(): Object\n * This optional method should return an object like `{ viewreset: this._reset }` for [`addEventListener`](#evented-addeventlistener). The event handlers in this object will be automatically added and removed from the map with your layer.\n *\n * @method getAttribution(): String\n * This optional method should return a string containing HTML to be shown on the `Attribution control` whenever the layer is visible.\n *\n * @method beforeAdd(map: Map): this\n * Optional method. Called on [`map.addLayer(layer)`](#map-addlayer), before the layer is added to the map, before events are initialized, without waiting until the map is in a usable state. Use for early initialization only.\n */\n\n\n/* @namespace Map\n * @section Layer events\n *\n * @event layeradd: LayerEvent\n * Fired when a new layer is added to the map.\n *\n * @event layerremove: LayerEvent\n * Fired when some layer is removed from the map\n *\n * @section Methods for Layers and Controls\n */\nMap.include({\n\t// @method addLayer(layer: Layer): this\n\t// Adds the given layer to the map\n\taddLayer: function (layer) {\n\t\tif (!layer._layerAdd) {\n\t\t\tthrow new Error('The provided object is not a Layer.');\n\t\t}\n\n\t\tvar id = Util.stamp(layer);\n\t\tif (this._layers[id]) { return this; }\n\t\tthis._layers[id] = layer;\n\n\t\tlayer._mapToAdd = this;\n\n\t\tif (layer.beforeAdd) {\n\t\t\tlayer.beforeAdd(this);\n\t\t}\n\n\t\tthis.whenReady(layer._layerAdd, layer);\n\n\t\treturn this;\n\t},\n\n\t// @method removeLayer(layer: Layer): this\n\t// Removes the given layer from the map.\n\tremoveLayer: function (layer) {\n\t\tvar id = Util.stamp(layer);\n\n\t\tif (!this._layers[id]) { return this; }\n\n\t\tif (this._loaded) {\n\t\t\tlayer.onRemove(this);\n\t\t}\n\n\t\tif (layer.getAttribution && this.attributionControl) {\n\t\t\tthis.attributionControl.removeAttribution(layer.getAttribution());\n\t\t}\n\n\t\tdelete this._layers[id];\n\n\t\tif (this._loaded) {\n\t\t\tthis.fire('layerremove', {layer: layer});\n\t\t\tlayer.fire('remove');\n\t\t}\n\n\t\tlayer._map = layer._mapToAdd = null;\n\n\t\treturn this;\n\t},\n\n\t// @method hasLayer(layer: Layer): Boolean\n\t// Returns `true` if the given layer is currently added to the map\n\thasLayer: function (layer) {\n\t\treturn !!layer && (Util.stamp(layer) in this._layers);\n\t},\n\n\t/* @method eachLayer(fn: Function, context?: Object): this\n\t * Iterates over the layers of the map, optionally specifying context of the iterator function.\n\t * ```\n\t * map.eachLayer(function(layer){\n\t * layer.bindPopup('Hello');\n\t * });\n\t * ```\n\t */\n\teachLayer: function (method, context) {\n\t\tfor (var i in this._layers) {\n\t\t\tmethod.call(context, this._layers[i]);\n\t\t}\n\t\treturn this;\n\t},\n\n\t_addLayers: function (layers) {\n\t\tlayers = layers ? (Util.isArray(layers) ? layers : [layers]) : [];\n\n\t\tfor (var i = 0, len = layers.length; i < len; i++) {\n\t\t\tthis.addLayer(layers[i]);\n\t\t}\n\t},\n\n\t_addZoomLimit: function (layer) {\n\t\tif (isNaN(layer.options.maxZoom) || !isNaN(layer.options.minZoom)) {\n\t\t\tthis._zoomBoundLayers[Util.stamp(layer)] = layer;\n\t\t\tthis._updateZoomLevels();\n\t\t}\n\t},\n\n\t_removeZoomLimit: function (layer) {\n\t\tvar id = Util.stamp(layer);\n\n\t\tif (this._zoomBoundLayers[id]) {\n\t\t\tdelete this._zoomBoundLayers[id];\n\t\t\tthis._updateZoomLevels();\n\t\t}\n\t},\n\n\t_updateZoomLevels: function () {\n\t\tvar minZoom = Infinity,\n\t\t maxZoom = -Infinity,\n\t\t oldZoomSpan = this._getZoomSpan();\n\n\t\tfor (var i in this._zoomBoundLayers) {\n\t\t\tvar options = this._zoomBoundLayers[i].options;\n\n\t\t\tminZoom = options.minZoom === undefined ? minZoom : Math.min(minZoom, options.minZoom);\n\t\t\tmaxZoom = options.maxZoom === undefined ? maxZoom : Math.max(maxZoom, options.maxZoom);\n\t\t}\n\n\t\tthis._layersMaxZoom = maxZoom === -Infinity ? undefined : maxZoom;\n\t\tthis._layersMinZoom = minZoom === Infinity ? undefined : minZoom;\n\n\t\t// @section Map state change events\n\t\t// @event zoomlevelschange: Event\n\t\t// Fired when the number of zoomlevels on the map is changed due\n\t\t// to adding or removing a layer.\n\t\tif (oldZoomSpan !== this._getZoomSpan()) {\n\t\t\tthis.fire('zoomlevelschange');\n\t\t}\n\n\t\tif (this.options.maxZoom === undefined && this._layersMaxZoom && this.getZoom() > this._layersMaxZoom) {\n\t\t\tthis.setZoom(this._layersMaxZoom);\n\t\t}\n\t\tif (this.options.minZoom === undefined && this._layersMinZoom && this.getZoom() < this._layersMinZoom) {\n\t\t\tthis.setZoom(this._layersMinZoom);\n\t\t}\n\t}\n});\n","\r\nimport {Layer} from './Layer';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class LayerGroup\r\n * @aka L.LayerGroup\r\n * @inherits Layer\r\n *\r\n * Used to group several layers and handle them as one. If you add it to the map,\r\n * any layers added or removed from the group will be added/removed on the map as\r\n * well. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.layerGroup([marker1, marker2])\r\n * \t.addLayer(polyline)\r\n * \t.addTo(map);\r\n * ```\r\n */\r\n\r\nexport var LayerGroup = Layer.extend({\r\n\r\n\tinitialize: function (layers, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layers = {};\r\n\r\n\t\tvar i, len;\r\n\r\n\t\tif (layers) {\r\n\t\t\tfor (i = 0, len = layers.length; i < len; i++) {\r\n\t\t\t\tthis.addLayer(layers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addLayer(layer: Layer): this\r\n\t// Adds the given layer to the group.\r\n\taddLayer: function (layer) {\r\n\t\tvar id = this.getLayerId(layer);\r\n\r\n\t\tthis._layers[id] = layer;\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._map.addLayer(layer);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeLayer(layer: Layer): this\r\n\t// Removes the given layer from the group.\r\n\t// @alternative\r\n\t// @method removeLayer(id: Number): this\r\n\t// Removes the layer with the given internal ID from the group.\r\n\tremoveLayer: function (layer) {\r\n\t\tvar id = layer in this._layers ? layer : this.getLayerId(layer);\r\n\r\n\t\tif (this._map && this._layers[id]) {\r\n\t\t\tthis._map.removeLayer(this._layers[id]);\r\n\t\t}\r\n\r\n\t\tdelete this._layers[id];\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method hasLayer(layer: Layer): Boolean\r\n\t// Returns `true` if the given layer is currently added to the group.\r\n\t// @alternative\r\n\t// @method hasLayer(id: Number): Boolean\r\n\t// Returns `true` if the given internal ID is currently added to the group.\r\n\thasLayer: function (layer) {\r\n\t\treturn !!layer && (layer in this._layers || this.getLayerId(layer) in this._layers);\r\n\t},\r\n\r\n\t// @method clearLayers(): this\r\n\t// Removes all the layers from the group.\r\n\tclearLayers: function () {\r\n\t\treturn this.eachLayer(this.removeLayer, this);\r\n\t},\r\n\r\n\t// @method invoke(methodName: String, …): this\r\n\t// Calls `methodName` on every layer contained in this group, passing any\r\n\t// additional parameters. Has no effect if the layers contained do not\r\n\t// implement `methodName`.\r\n\tinvoke: function (methodName) {\r\n\t\tvar args = Array.prototype.slice.call(arguments, 1),\r\n\t\t i, layer;\r\n\r\n\t\tfor (i in this._layers) {\r\n\t\t\tlayer = this._layers[i];\r\n\r\n\t\t\tif (layer[methodName]) {\r\n\t\t\t\tlayer[methodName].apply(layer, args);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis.eachLayer(map.addLayer, map);\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tthis.eachLayer(map.removeLayer, map);\r\n\t},\r\n\r\n\t// @method eachLayer(fn: Function, context?: Object): this\r\n\t// Iterates over the layers of the group, optionally specifying context of the iterator function.\r\n\t// ```js\r\n\t// group.eachLayer(function (layer) {\r\n\t// \tlayer.bindPopup('Hello');\r\n\t// });\r\n\t// ```\r\n\teachLayer: function (method, context) {\r\n\t\tfor (var i in this._layers) {\r\n\t\t\tmethod.call(context, this._layers[i]);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getLayer(id: Number): Layer\r\n\t// Returns the layer with the given internal ID.\r\n\tgetLayer: function (id) {\r\n\t\treturn this._layers[id];\r\n\t},\r\n\r\n\t// @method getLayers(): Layer[]\r\n\t// Returns an array of all the layers added to the group.\r\n\tgetLayers: function () {\r\n\t\tvar layers = [];\r\n\t\tthis.eachLayer(layers.push, layers);\r\n\t\treturn layers;\r\n\t},\r\n\r\n\t// @method setZIndex(zIndex: Number): this\r\n\t// Calls `setZIndex` on every layer contained in this group, passing the z-index.\r\n\tsetZIndex: function (zIndex) {\r\n\t\treturn this.invoke('setZIndex', zIndex);\r\n\t},\r\n\r\n\t// @method getLayerId(layer: Layer): Number\r\n\t// Returns the internal ID for a layer\r\n\tgetLayerId: function (layer) {\r\n\t\treturn Util.stamp(layer);\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.layerGroup(layers?: Layer[], options?: Object)\r\n// Create a layer group, optionally given an initial set of layers and an `options` object.\r\nexport var layerGroup = function (layers, options) {\r\n\treturn new LayerGroup(layers, options);\r\n};\r\n","import {LayerGroup} from './LayerGroup';\r\nimport {LatLngBounds} from '../geo/LatLngBounds';\r\n\r\n/*\r\n * @class FeatureGroup\r\n * @aka L.FeatureGroup\r\n * @inherits LayerGroup\r\n *\r\n * Extended `LayerGroup` that makes it easier to do the same thing to all its member layers:\r\n * * [`bindPopup`](#layer-bindpopup) binds a popup to all of the layers at once (likewise with [`bindTooltip`](#layer-bindtooltip))\r\n * * Events are propagated to the `FeatureGroup`, so if the group has an event\r\n * handler, it will handle events from any of the layers. This includes mouse events\r\n * and custom events.\r\n * * Has `layeradd` and `layerremove` events\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.featureGroup([marker1, marker2, polyline])\r\n * \t.bindPopup('Hello world!')\r\n * \t.on('click', function() { alert('Clicked on a member of the group!'); })\r\n * \t.addTo(map);\r\n * ```\r\n */\r\n\r\nexport var FeatureGroup = LayerGroup.extend({\r\n\r\n\taddLayer: function (layer) {\r\n\t\tif (this.hasLayer(layer)) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tlayer.addEventParent(this);\r\n\r\n\t\tLayerGroup.prototype.addLayer.call(this, layer);\r\n\r\n\t\t// @event layeradd: LayerEvent\r\n\t\t// Fired when a layer is added to this `FeatureGroup`\r\n\t\treturn this.fire('layeradd', {layer: layer});\r\n\t},\r\n\r\n\tremoveLayer: function (layer) {\r\n\t\tif (!this.hasLayer(layer)) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tif (layer in this._layers) {\r\n\t\t\tlayer = this._layers[layer];\r\n\t\t}\r\n\r\n\t\tlayer.removeEventParent(this);\r\n\r\n\t\tLayerGroup.prototype.removeLayer.call(this, layer);\r\n\r\n\t\t// @event layerremove: LayerEvent\r\n\t\t// Fired when a layer is removed from this `FeatureGroup`\r\n\t\treturn this.fire('layerremove', {layer: layer});\r\n\t},\r\n\r\n\t// @method setStyle(style: Path options): this\r\n\t// Sets the given path options to each layer of the group that has a `setStyle` method.\r\n\tsetStyle: function (style) {\r\n\t\treturn this.invoke('setStyle', style);\r\n\t},\r\n\r\n\t// @method bringToFront(): this\r\n\t// Brings the layer group to the top of all other layers\r\n\tbringToFront: function () {\r\n\t\treturn this.invoke('bringToFront');\r\n\t},\r\n\r\n\t// @method bringToBack(): this\r\n\t// Brings the layer group to the back of all other layers\r\n\tbringToBack: function () {\r\n\t\treturn this.invoke('bringToBack');\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Returns the LatLngBounds of the Feature Group (created from bounds and coordinates of its children).\r\n\tgetBounds: function () {\r\n\t\tvar bounds = new LatLngBounds();\r\n\r\n\t\tfor (var id in this._layers) {\r\n\t\t\tvar layer = this._layers[id];\r\n\t\t\tbounds.extend(layer.getBounds ? layer.getBounds() : layer.getLatLng());\r\n\t\t}\r\n\t\treturn bounds;\r\n\t}\r\n});\r\n\r\n// @factory L.featureGroup(layers: Layer[])\r\n// Create a feature group, optionally given an initial set of layers.\r\nexport var featureGroup = function (layers) {\r\n\treturn new FeatureGroup(layers);\r\n};\r\n","import {Class} from '../../core/Class';\r\nimport {setOptions} from '../../core/Util';\r\nimport {toPoint as point} from '../../geometry/Point';\r\nimport {retina} from '../../core/Browser';\r\n\r\n/*\r\n * @class Icon\r\n * @aka L.Icon\r\n *\r\n * Represents an icon to provide when creating a marker.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var myIcon = L.icon({\r\n * iconUrl: 'my-icon.png',\r\n * iconRetinaUrl: 'my-icon@2x.png',\r\n * iconSize: [38, 95],\r\n * iconAnchor: [22, 94],\r\n * popupAnchor: [-3, -76],\r\n * shadowUrl: 'my-icon-shadow.png',\r\n * shadowRetinaUrl: 'my-icon-shadow@2x.png',\r\n * shadowSize: [68, 95],\r\n * shadowAnchor: [22, 94]\r\n * });\r\n *\r\n * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);\r\n * ```\r\n *\r\n * `L.Icon.Default` extends `L.Icon` and is the blue icon Leaflet uses for markers by default.\r\n *\r\n */\r\n\r\nexport var Icon = Class.extend({\r\n\r\n\t/* @section\r\n\t * @aka Icon options\r\n\t *\r\n\t * @option iconUrl: String = null\r\n\t * **(required)** The URL to the icon image (absolute or relative to your script path).\r\n\t *\r\n\t * @option iconRetinaUrl: String = null\r\n\t * The URL to a retina sized version of the icon image (absolute or relative to your\r\n\t * script path). Used for Retina screen devices.\r\n\t *\r\n\t * @option iconSize: Point = null\r\n\t * Size of the icon image in pixels.\r\n\t *\r\n\t * @option iconAnchor: Point = null\r\n\t * The coordinates of the \"tip\" of the icon (relative to its top left corner). The icon\r\n\t * will be aligned so that this point is at the marker's geographical location. Centered\r\n\t * by default if size is specified, also can be set in CSS with negative margins.\r\n\t *\r\n\t * @option popupAnchor: Point = [0, 0]\r\n\t * The coordinates of the point from which popups will \"open\", relative to the icon anchor.\r\n\t *\r\n\t * @option tooltipAnchor: Point = [0, 0]\r\n\t * The coordinates of the point from which tooltips will \"open\", relative to the icon anchor.\r\n\t *\r\n\t * @option shadowUrl: String = null\r\n\t * The URL to the icon shadow image. If not specified, no shadow image will be created.\r\n\t *\r\n\t * @option shadowRetinaUrl: String = null\r\n\t *\r\n\t * @option shadowSize: Point = null\r\n\t * Size of the shadow image in pixels.\r\n\t *\r\n\t * @option shadowAnchor: Point = null\r\n\t * The coordinates of the \"tip\" of the shadow (relative to its top left corner) (the same\r\n\t * as iconAnchor if not specified).\r\n\t *\r\n\t * @option className: String = ''\r\n\t * A custom class name to assign to both icon and shadow images. Empty by default.\r\n\t */\r\n\r\n\toptions: {\r\n\t\tpopupAnchor: [0, 0],\r\n\t\ttooltipAnchor: [0, 0]\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tsetOptions(this, options);\r\n\t},\r\n\r\n\t// @method createIcon(oldIcon?: HTMLElement): HTMLElement\r\n\t// Called internally when the icon has to be shown, returns a `` HTML element\r\n\t// styled according to the options.\r\n\tcreateIcon: function (oldIcon) {\r\n\t\treturn this._createIcon('icon', oldIcon);\r\n\t},\r\n\r\n\t// @method createShadow(oldIcon?: HTMLElement): HTMLElement\r\n\t// As `createIcon`, but for the shadow beneath it.\r\n\tcreateShadow: function (oldIcon) {\r\n\t\treturn this._createIcon('shadow', oldIcon);\r\n\t},\r\n\r\n\t_createIcon: function (name, oldIcon) {\r\n\t\tvar src = this._getIconUrl(name);\r\n\r\n\t\tif (!src) {\r\n\t\t\tif (name === 'icon') {\r\n\t\t\t\tthrow new Error('iconUrl not set in Icon options (see the docs).');\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar img = this._createImg(src, oldIcon && oldIcon.tagName === 'IMG' ? oldIcon : null);\r\n\t\tthis._setIconStyles(img, name);\r\n\r\n\t\treturn img;\r\n\t},\r\n\r\n\t_setIconStyles: function (img, name) {\r\n\t\tvar options = this.options;\r\n\t\tvar sizeOption = options[name + 'Size'];\r\n\r\n\t\tif (typeof sizeOption === 'number') {\r\n\t\t\tsizeOption = [sizeOption, sizeOption];\r\n\t\t}\r\n\r\n\t\tvar size = point(sizeOption),\r\n\t\t anchor = point(name === 'shadow' && options.shadowAnchor || options.iconAnchor ||\r\n\t\t size && size.divideBy(2, true));\r\n\r\n\t\timg.className = 'leaflet-marker-' + name + ' ' + (options.className || '');\r\n\r\n\t\tif (anchor) {\r\n\t\t\timg.style.marginLeft = (-anchor.x) + 'px';\r\n\t\t\timg.style.marginTop = (-anchor.y) + 'px';\r\n\t\t}\r\n\r\n\t\tif (size) {\r\n\t\t\timg.style.width = size.x + 'px';\r\n\t\t\timg.style.height = size.y + 'px';\r\n\t\t}\r\n\t},\r\n\r\n\t_createImg: function (src, el) {\r\n\t\tel = el || document.createElement('img');\r\n\t\tel.src = src;\r\n\t\treturn el;\r\n\t},\r\n\r\n\t_getIconUrl: function (name) {\r\n\t\treturn retina && this.options[name + 'RetinaUrl'] || this.options[name + 'Url'];\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.icon(options: Icon options)\r\n// Creates an icon instance with the given options.\r\nexport function icon(options) {\r\n\treturn new Icon(options);\r\n}\r\n","import {Icon} from './Icon';\nimport * as DomUtil from '../../dom/DomUtil';\n\n/*\n * @miniclass Icon.Default (Icon)\n * @aka L.Icon.Default\n * @section\n *\n * A trivial subclass of `Icon`, represents the icon to use in `Marker`s when\n * no icon is specified. Points to the blue marker image distributed with Leaflet\n * releases.\n *\n * In order to customize the default icon, just change the properties of `L.Icon.Default.prototype.options`\n * (which is a set of `Icon options`).\n *\n * If you want to _completely_ replace the default icon, override the\n * `L.Marker.prototype.options.icon` with your own icon instead.\n */\n\nexport var IconDefault = Icon.extend({\n\n\toptions: {\n\t\ticonUrl: 'marker-icon.png',\n\t\ticonRetinaUrl: 'marker-icon-2x.png',\n\t\tshadowUrl: 'marker-shadow.png',\n\t\ticonSize: [25, 41],\n\t\ticonAnchor: [12, 41],\n\t\tpopupAnchor: [1, -34],\n\t\ttooltipAnchor: [16, -28],\n\t\tshadowSize: [41, 41]\n\t},\n\n\t_getIconUrl: function (name) {\n\t\tif (!IconDefault.imagePath) {\t// Deprecated, backwards-compatibility only\n\t\t\tIconDefault.imagePath = this._detectIconPath();\n\t\t}\n\n\t\t// @option imagePath: String\n\t\t// `Icon.Default` will try to auto-detect the location of the\n\t\t// blue icon images. If you are placing these images in a non-standard\n\t\t// way, set this option to point to the right path.\n\t\treturn (this.options.imagePath || IconDefault.imagePath) + Icon.prototype._getIconUrl.call(this, name);\n\t},\n\n\t_detectIconPath: function () {\n\t\tvar el = DomUtil.create('div', 'leaflet-default-icon-path', document.body);\n\t\tvar path = DomUtil.getStyle(el, 'background-image') ||\n\t\t DomUtil.getStyle(el, 'backgroundImage');\t// IE8\n\n\t\tdocument.body.removeChild(el);\n\n\t\tif (path === null || path.indexOf('url') !== 0) {\n\t\t\tpath = '';\n\t\t} else {\n\t\t\tpath = path.replace(/^url\\([\"']?/, '').replace(/marker-icon\\.png[\"']?\\)$/, '');\n\t\t}\n\n\t\treturn path;\n\t}\n});\n","import {Handler} from '../../core/Handler';\nimport * as DomUtil from '../../dom/DomUtil';\nimport {Draggable} from '../../dom/Draggable';\nimport {toBounds} from '../../geometry/Bounds';\nimport {toPoint} from '../../geometry/Point';\nimport {requestAnimFrame, cancelAnimFrame} from '../../core/Util';\n\n/*\n * L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable.\n */\n\n\n/* @namespace Marker\n * @section Interaction handlers\n *\n * Interaction handlers are properties of a marker instance that allow you to control interaction behavior in runtime, enabling or disabling certain features such as dragging (see `Handler` methods). Example:\n *\n * ```js\n * marker.dragging.disable();\n * ```\n *\n * @property dragging: Handler\n * Marker dragging handler (by both mouse and touch). Only valid when the marker is on the map (Otherwise set [`marker.options.draggable`](#marker-draggable)).\n */\n\nexport var MarkerDrag = Handler.extend({\n\tinitialize: function (marker) {\n\t\tthis._marker = marker;\n\t},\n\n\taddHooks: function () {\n\t\tvar icon = this._marker._icon;\n\n\t\tif (!this._draggable) {\n\t\t\tthis._draggable = new Draggable(icon, icon, true);\n\t\t}\n\n\t\tthis._draggable.on({\n\t\t\tdragstart: this._onDragStart,\n\t\t\tpredrag: this._onPreDrag,\n\t\t\tdrag: this._onDrag,\n\t\t\tdragend: this._onDragEnd\n\t\t}, this).enable();\n\n\t\tDomUtil.addClass(icon, 'leaflet-marker-draggable');\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._draggable.off({\n\t\t\tdragstart: this._onDragStart,\n\t\t\tpredrag: this._onPreDrag,\n\t\t\tdrag: this._onDrag,\n\t\t\tdragend: this._onDragEnd\n\t\t}, this).disable();\n\n\t\tif (this._marker._icon) {\n\t\t\tDomUtil.removeClass(this._marker._icon, 'leaflet-marker-draggable');\n\t\t}\n\t},\n\n\tmoved: function () {\n\t\treturn this._draggable && this._draggable._moved;\n\t},\n\n\t_adjustPan: function (e) {\n\t\tvar marker = this._marker,\n\t\t map = marker._map,\n\t\t speed = this._marker.options.autoPanSpeed,\n\t\t padding = this._marker.options.autoPanPadding,\n\t\t iconPos = DomUtil.getPosition(marker._icon),\n\t\t bounds = map.getPixelBounds(),\n\t\t origin = map.getPixelOrigin();\n\n\t\tvar panBounds = toBounds(\n\t\t\tbounds.min._subtract(origin).add(padding),\n\t\t\tbounds.max._subtract(origin).subtract(padding)\n\t\t);\n\n\t\tif (!panBounds.contains(iconPos)) {\n\t\t\t// Compute incremental movement\n\t\t\tvar movement = toPoint(\n\t\t\t\t(Math.max(panBounds.max.x, iconPos.x) - panBounds.max.x) / (bounds.max.x - panBounds.max.x) -\n\t\t\t\t(Math.min(panBounds.min.x, iconPos.x) - panBounds.min.x) / (bounds.min.x - panBounds.min.x),\n\n\t\t\t\t(Math.max(panBounds.max.y, iconPos.y) - panBounds.max.y) / (bounds.max.y - panBounds.max.y) -\n\t\t\t\t(Math.min(panBounds.min.y, iconPos.y) - panBounds.min.y) / (bounds.min.y - panBounds.min.y)\n\t\t\t).multiplyBy(speed);\n\n\t\t\tmap.panBy(movement, {animate: false});\n\n\t\t\tthis._draggable._newPos._add(movement);\n\t\t\tthis._draggable._startPos._add(movement);\n\n\t\t\tDomUtil.setPosition(marker._icon, this._draggable._newPos);\n\t\t\tthis._onDrag(e);\n\n\t\t\tthis._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));\n\t\t}\n\t},\n\n\t_onDragStart: function () {\n\t\t// @section Dragging events\n\t\t// @event dragstart: Event\n\t\t// Fired when the user starts dragging the marker.\n\n\t\t// @event movestart: Event\n\t\t// Fired when the marker starts moving (because of dragging).\n\n\t\tthis._oldLatLng = this._marker.getLatLng();\n\t\tthis._marker\n\t\t .closePopup()\n\t\t .fire('movestart')\n\t\t .fire('dragstart');\n\t},\n\n\t_onPreDrag: function (e) {\n\t\tif (this._marker.options.autoPan) {\n\t\t\tcancelAnimFrame(this._panRequest);\n\t\t\tthis._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));\n\t\t}\n\t},\n\n\t_onDrag: function (e) {\n\t\tvar marker = this._marker,\n\t\t shadow = marker._shadow,\n\t\t iconPos = DomUtil.getPosition(marker._icon),\n\t\t latlng = marker._map.layerPointToLatLng(iconPos);\n\n\t\t// update shadow position\n\t\tif (shadow) {\n\t\t\tDomUtil.setPosition(shadow, iconPos);\n\t\t}\n\n\t\tmarker._latlng = latlng;\n\t\te.latlng = latlng;\n\t\te.oldLatLng = this._oldLatLng;\n\n\t\t// @event drag: Event\n\t\t// Fired repeatedly while the user drags the marker.\n\t\tmarker\n\t\t .fire('move', e)\n\t\t .fire('drag', e);\n\t},\n\n\t_onDragEnd: function (e) {\n\t\t// @event dragend: DragEndEvent\n\t\t// Fired when the user stops dragging the marker.\n\n\t\t cancelAnimFrame(this._panRequest);\n\n\t\t// @event moveend: Event\n\t\t// Fired when the marker stops moving (because of dragging).\n\t\tdelete this._oldLatLng;\n\t\tthis._marker\n\t\t .fire('moveend')\n\t\t .fire('dragend', e);\n\t}\n});\n","import {Layer} from '../Layer';\r\nimport {IconDefault} from './Icon.Default';\r\nimport * as Util from '../../core/Util';\r\nimport {toLatLng as latLng} from '../../geo/LatLng';\r\nimport * as DomUtil from '../../dom/DomUtil';\r\nimport {MarkerDrag} from './Marker.Drag';\r\n\r\n/*\r\n * @class Marker\r\n * @inherits Interactive layer\r\n * @aka L.Marker\r\n * L.Marker is used to display clickable/draggable icons on the map. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.marker([50.5, 30.5]).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var Marker = Layer.extend({\r\n\r\n\t// @section\r\n\t// @aka Marker options\r\n\toptions: {\r\n\t\t// @option icon: Icon = *\r\n\t\t// Icon instance to use for rendering the marker.\r\n\t\t// See [Icon documentation](#L.Icon) for details on how to customize the marker icon.\r\n\t\t// If not specified, a common instance of `L.Icon.Default` is used.\r\n\t\ticon: new IconDefault(),\r\n\r\n\t\t// Option inherited from \"Interactive layer\" abstract class\r\n\t\tinteractive: true,\r\n\r\n\t\t// @option keyboard: Boolean = true\r\n\t\t// Whether the marker can be tabbed to with a keyboard and clicked by pressing enter.\r\n\t\tkeyboard: true,\r\n\r\n\t\t// @option title: String = ''\r\n\t\t// Text for the browser tooltip that appear on marker hover (no tooltip by default).\r\n\t\ttitle: '',\r\n\r\n\t\t// @option alt: String = ''\r\n\t\t// Text for the `alt` attribute of the icon image (useful for accessibility).\r\n\t\talt: '',\r\n\r\n\t\t// @option zIndexOffset: Number = 0\r\n\t\t// By default, marker images zIndex is set automatically based on its latitude. Use this option if you want to put the marker on top of all others (or below), specifying a high value like `1000` (or high negative value, respectively).\r\n\t\tzIndexOffset: 0,\r\n\r\n\t\t// @option opacity: Number = 1.0\r\n\t\t// The opacity of the marker.\r\n\t\topacity: 1,\r\n\r\n\t\t// @option riseOnHover: Boolean = false\r\n\t\t// If `true`, the marker will get on top of others when you hover the mouse over it.\r\n\t\triseOnHover: false,\r\n\r\n\t\t// @option riseOffset: Number = 250\r\n\t\t// The z-index offset used for the `riseOnHover` feature.\r\n\t\triseOffset: 250,\r\n\r\n\t\t// @option pane: String = 'markerPane'\r\n\t\t// `Map pane` where the markers icon will be added.\r\n\t\tpane: 'markerPane',\r\n\r\n\t\t// @option pane: String = 'shadowPane'\r\n\t\t// `Map pane` where the markers shadow will be added.\r\n\t\tshadowPane: 'shadowPane',\r\n\r\n\t\t// @option bubblingMouseEvents: Boolean = false\r\n\t\t// When `true`, a mouse event on this marker will trigger the same event on the map\r\n\t\t// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).\r\n\t\tbubblingMouseEvents: false,\r\n\r\n\t\t// @section Draggable marker options\r\n\t\t// @option draggable: Boolean = false\r\n\t\t// Whether the marker is draggable with mouse/touch or not.\r\n\t\tdraggable: false,\r\n\r\n\t\t// @option autoPan: Boolean = false\r\n\t\t// Whether to pan the map when dragging this marker near its edge or not.\r\n\t\tautoPan: false,\r\n\r\n\t\t// @option autoPanPadding: Point = Point(50, 50)\r\n\t\t// Distance (in pixels to the left/right and to the top/bottom) of the\r\n\t\t// map edge to start panning the map.\r\n\t\tautoPanPadding: [50, 50],\r\n\r\n\t\t// @option autoPanSpeed: Number = 10\r\n\t\t// Number of pixels the map should pan by.\r\n\t\tautoPanSpeed: 10\r\n\t},\r\n\r\n\t/* @section\r\n\t *\r\n\t * In addition to [shared layer methods](#Layer) like `addTo()` and `remove()` and [popup methods](#Popup) like bindPopup() you can also use the following methods:\r\n\t */\r\n\r\n\tinitialize: function (latlng, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\t\tthis._latlng = latLng(latlng);\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis._zoomAnimated = this._zoomAnimated && map.options.markerZoomAnimation;\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tmap.on('zoomanim', this._animateZoom, this);\r\n\t\t}\r\n\r\n\t\tthis._initIcon();\r\n\t\tthis.update();\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tif (this.dragging && this.dragging.enabled()) {\r\n\t\t\tthis.options.draggable = true;\r\n\t\t\tthis.dragging.removeHooks();\r\n\t\t}\r\n\t\tdelete this.dragging;\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tmap.off('zoomanim', this._animateZoom, this);\r\n\t\t}\r\n\r\n\t\tthis._removeIcon();\r\n\t\tthis._removeShadow();\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\treturn {\r\n\t\t\tzoom: this.update,\r\n\t\t\tviewreset: this.update\r\n\t\t};\r\n\t},\r\n\r\n\t// @method getLatLng: LatLng\r\n\t// Returns the current geographical position of the marker.\r\n\tgetLatLng: function () {\r\n\t\treturn this._latlng;\r\n\t},\r\n\r\n\t// @method setLatLng(latlng: LatLng): this\r\n\t// Changes the marker position to the given point.\r\n\tsetLatLng: function (latlng) {\r\n\t\tvar oldLatLng = this._latlng;\r\n\t\tthis._latlng = latLng(latlng);\r\n\t\tthis.update();\r\n\r\n\t\t// @event move: Event\r\n\t\t// Fired when the marker is moved via [`setLatLng`](#marker-setlatlng) or by [dragging](#marker-dragging). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.\r\n\t\treturn this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng});\r\n\t},\r\n\r\n\t// @method setZIndexOffset(offset: Number): this\r\n\t// Changes the [zIndex offset](#marker-zindexoffset) of the marker.\r\n\tsetZIndexOffset: function (offset) {\r\n\t\tthis.options.zIndexOffset = offset;\r\n\t\treturn this.update();\r\n\t},\r\n\r\n\t// @method getIcon: Icon\r\n\t// Returns the current icon used by the marker\r\n\tgetIcon: function () {\r\n\t\treturn this.options.icon;\r\n\t},\r\n\r\n\t// @method setIcon(icon: Icon): this\r\n\t// Changes the marker icon.\r\n\tsetIcon: function (icon) {\r\n\r\n\t\tthis.options.icon = icon;\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._initIcon();\r\n\t\t\tthis.update();\r\n\t\t}\r\n\r\n\t\tif (this._popup) {\r\n\t\t\tthis.bindPopup(this._popup, this._popup.options);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tgetElement: function () {\r\n\t\treturn this._icon;\r\n\t},\r\n\r\n\tupdate: function () {\r\n\r\n\t\tif (this._icon && this._map) {\r\n\t\t\tvar pos = this._map.latLngToLayerPoint(this._latlng).round();\r\n\t\t\tthis._setPos(pos);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initIcon: function () {\r\n\t\tvar options = this.options,\r\n\t\t classToAdd = 'leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');\r\n\r\n\t\tvar icon = options.icon.createIcon(this._icon),\r\n\t\t addIcon = false;\r\n\r\n\t\t// if we're not reusing the icon, remove the old one and init new one\r\n\t\tif (icon !== this._icon) {\r\n\t\t\tif (this._icon) {\r\n\t\t\t\tthis._removeIcon();\r\n\t\t\t}\r\n\t\t\taddIcon = true;\r\n\r\n\t\t\tif (options.title) {\r\n\t\t\t\ticon.title = options.title;\r\n\t\t\t}\r\n\r\n\t\t\tif (icon.tagName === 'IMG') {\r\n\t\t\t\ticon.alt = options.alt || '';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tDomUtil.addClass(icon, classToAdd);\r\n\r\n\t\tif (options.keyboard) {\r\n\t\t\ticon.tabIndex = '0';\r\n\t\t}\r\n\r\n\t\tthis._icon = icon;\r\n\r\n\t\tif (options.riseOnHover) {\r\n\t\t\tthis.on({\r\n\t\t\t\tmouseover: this._bringToFront,\r\n\t\t\t\tmouseout: this._resetZIndex\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvar newShadow = options.icon.createShadow(this._shadow),\r\n\t\t addShadow = false;\r\n\r\n\t\tif (newShadow !== this._shadow) {\r\n\t\t\tthis._removeShadow();\r\n\t\t\taddShadow = true;\r\n\t\t}\r\n\r\n\t\tif (newShadow) {\r\n\t\t\tDomUtil.addClass(newShadow, classToAdd);\r\n\t\t\tnewShadow.alt = '';\r\n\t\t}\r\n\t\tthis._shadow = newShadow;\r\n\r\n\r\n\t\tif (options.opacity < 1) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\r\n\r\n\t\tif (addIcon) {\r\n\t\t\tthis.getPane().appendChild(this._icon);\r\n\t\t}\r\n\t\tthis._initInteraction();\r\n\t\tif (newShadow && addShadow) {\r\n\t\t\tthis.getPane(options.shadowPane).appendChild(this._shadow);\r\n\t\t}\r\n\t},\r\n\r\n\t_removeIcon: function () {\r\n\t\tif (this.options.riseOnHover) {\r\n\t\t\tthis.off({\r\n\t\t\t\tmouseover: this._bringToFront,\r\n\t\t\t\tmouseout: this._resetZIndex\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tDomUtil.remove(this._icon);\r\n\t\tthis.removeInteractiveTarget(this._icon);\r\n\r\n\t\tthis._icon = null;\r\n\t},\r\n\r\n\t_removeShadow: function () {\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.remove(this._shadow);\r\n\t\t}\r\n\t\tthis._shadow = null;\r\n\t},\r\n\r\n\t_setPos: function (pos) {\r\n\r\n\t\tif (this._icon) {\r\n\t\t\tDomUtil.setPosition(this._icon, pos);\r\n\t\t}\r\n\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.setPosition(this._shadow, pos);\r\n\t\t}\r\n\r\n\t\tthis._zIndex = pos.y + this.options.zIndexOffset;\r\n\r\n\t\tthis._resetZIndex();\r\n\t},\r\n\r\n\t_updateZIndex: function (offset) {\r\n\t\tif (this._icon) {\r\n\t\t\tthis._icon.style.zIndex = this._zIndex + offset;\r\n\t\t}\r\n\t},\r\n\r\n\t_animateZoom: function (opt) {\r\n\t\tvar pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center).round();\r\n\r\n\t\tthis._setPos(pos);\r\n\t},\r\n\r\n\t_initInteraction: function () {\r\n\r\n\t\tif (!this.options.interactive) { return; }\r\n\r\n\t\tDomUtil.addClass(this._icon, 'leaflet-interactive');\r\n\r\n\t\tthis.addInteractiveTarget(this._icon);\r\n\r\n\t\tif (MarkerDrag) {\r\n\t\t\tvar draggable = this.options.draggable;\r\n\t\t\tif (this.dragging) {\r\n\t\t\t\tdraggable = this.dragging.enabled();\r\n\t\t\t\tthis.dragging.disable();\r\n\t\t\t}\r\n\r\n\t\t\tthis.dragging = new MarkerDrag(this);\r\n\r\n\t\t\tif (draggable) {\r\n\t\t\t\tthis.dragging.enable();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// @method setOpacity(opacity: Number): this\r\n\t// Changes the opacity of the marker.\r\n\tsetOpacity: function (opacity) {\r\n\t\tthis.options.opacity = opacity;\r\n\t\tif (this._map) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_updateOpacity: function () {\r\n\t\tvar opacity = this.options.opacity;\r\n\r\n\t\tif (this._icon) {\r\n\t\t\tDomUtil.setOpacity(this._icon, opacity);\r\n\t\t}\r\n\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.setOpacity(this._shadow, opacity);\r\n\t\t}\r\n\t},\r\n\r\n\t_bringToFront: function () {\r\n\t\tthis._updateZIndex(this.options.riseOffset);\r\n\t},\r\n\r\n\t_resetZIndex: function () {\r\n\t\tthis._updateZIndex(0);\r\n\t},\r\n\r\n\t_getPopupAnchor: function () {\r\n\t\treturn this.options.icon.options.popupAnchor;\r\n\t},\r\n\r\n\t_getTooltipAnchor: function () {\r\n\t\treturn this.options.icon.options.tooltipAnchor;\r\n\t}\r\n});\r\n\r\n\r\n// factory L.marker(latlng: LatLng, options? : Marker options)\r\n\r\n// @factory L.marker(latlng: LatLng, options? : Marker options)\r\n// Instantiates a Marker object given a geographical point and optionally an options object.\r\nexport function marker(latlng, options) {\r\n\treturn new Marker(latlng, options);\r\n}\r\n","import {Layer} from '../Layer';\nimport * as Util from '../../core/Util';\n\n/*\n * @class Path\n * @aka L.Path\n * @inherits Interactive layer\n *\n * An abstract class that contains options and constants shared between vector\n * overlays (Polygon, Polyline, Circle). Do not use it directly. Extends `Layer`.\n */\n\nexport var Path = Layer.extend({\n\n\t// @section\n\t// @aka Path options\n\toptions: {\n\t\t// @option stroke: Boolean = true\n\t\t// Whether to draw stroke along the path. Set it to `false` to disable borders on polygons or circles.\n\t\tstroke: true,\n\n\t\t// @option color: String = '#3388ff'\n\t\t// Stroke color\n\t\tcolor: '#3388ff',\n\n\t\t// @option weight: Number = 3\n\t\t// Stroke width in pixels\n\t\tweight: 3,\n\n\t\t// @option opacity: Number = 1.0\n\t\t// Stroke opacity\n\t\topacity: 1,\n\n\t\t// @option lineCap: String= 'round'\n\t\t// A string that defines [shape to be used at the end](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linecap) of the stroke.\n\t\tlineCap: 'round',\n\n\t\t// @option lineJoin: String = 'round'\n\t\t// A string that defines [shape to be used at the corners](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linejoin) of the stroke.\n\t\tlineJoin: 'round',\n\n\t\t// @option dashArray: String = null\n\t\t// A string that defines the stroke [dash pattern](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dasharray). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).\n\t\tdashArray: null,\n\n\t\t// @option dashOffset: String = null\n\t\t// A string that defines the [distance into the dash pattern to start the dash](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dashoffset). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).\n\t\tdashOffset: null,\n\n\t\t// @option fill: Boolean = depends\n\t\t// Whether to fill the path with color. Set it to `false` to disable filling on polygons or circles.\n\t\tfill: false,\n\n\t\t// @option fillColor: String = *\n\t\t// Fill color. Defaults to the value of the [`color`](#path-color) option\n\t\tfillColor: null,\n\n\t\t// @option fillOpacity: Number = 0.2\n\t\t// Fill opacity.\n\t\tfillOpacity: 0.2,\n\n\t\t// @option fillRule: String = 'evenodd'\n\t\t// A string that defines [how the inside of a shape](https://developer.mozilla.org/docs/Web/SVG/Attribute/fill-rule) is determined.\n\t\tfillRule: 'evenodd',\n\n\t\t// className: '',\n\n\t\t// Option inherited from \"Interactive layer\" abstract class\n\t\tinteractive: true,\n\n\t\t// @option bubblingMouseEvents: Boolean = true\n\t\t// When `true`, a mouse event on this path will trigger the same event on the map\n\t\t// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).\n\t\tbubblingMouseEvents: true\n\t},\n\n\tbeforeAdd: function (map) {\n\t\t// Renderer is set here because we need to call renderer.getEvents\n\t\t// before this.getEvents.\n\t\tthis._renderer = map.getRenderer(this);\n\t},\n\n\tonAdd: function () {\n\t\tthis._renderer._initPath(this);\n\t\tthis._reset();\n\t\tthis._renderer._addPath(this);\n\t},\n\n\tonRemove: function () {\n\t\tthis._renderer._removePath(this);\n\t},\n\n\t// @method redraw(): this\n\t// Redraws the layer. Sometimes useful after you changed the coordinates that the path uses.\n\tredraw: function () {\n\t\tif (this._map) {\n\t\t\tthis._renderer._updatePath(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method setStyle(style: Path options): this\n\t// Changes the appearance of a Path based on the options in the `Path options` object.\n\tsetStyle: function (style) {\n\t\tUtil.setOptions(this, style);\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._updateStyle(this);\n\t\t\tif (this.options.stroke && style && style.hasOwnProperty('weight')) {\n\t\t\t\tthis._updateBounds();\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method bringToFront(): this\n\t// Brings the layer to the top of all path layers.\n\tbringToFront: function () {\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._bringToFront(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method bringToBack(): this\n\t// Brings the layer to the bottom of all path layers.\n\tbringToBack: function () {\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._bringToBack(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\tgetElement: function () {\n\t\treturn this._path;\n\t},\n\n\t_reset: function () {\n\t\t// defined in child classes\n\t\tthis._project();\n\t\tthis._update();\n\t},\n\n\t_clickTolerance: function () {\n\t\t// used when doing hit detection for Canvas layers\n\t\treturn (this.options.stroke ? this.options.weight / 2 : 0) + this._renderer.options.tolerance;\n\t}\n});\n","import {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport {toLatLng} from '../../geo/LatLng';\nimport {Bounds} from '../../geometry/Bounds';\n\n\n/*\n * @class CircleMarker\n * @aka L.CircleMarker\n * @inherits Path\n *\n * A circle of a fixed size with radius specified in pixels. Extends `Path`.\n */\n\nexport var CircleMarker = Path.extend({\n\n\t// @section\n\t// @aka CircleMarker options\n\toptions: {\n\t\tfill: true,\n\n\t\t// @option radius: Number = 10\n\t\t// Radius of the circle marker, in pixels\n\t\tradius: 10\n\t},\n\n\tinitialize: function (latlng, options) {\n\t\tUtil.setOptions(this, options);\n\t\tthis._latlng = toLatLng(latlng);\n\t\tthis._radius = this.options.radius;\n\t},\n\n\t// @method setLatLng(latLng: LatLng): this\n\t// Sets the position of a circle marker to a new location.\n\tsetLatLng: function (latlng) {\n\t\tvar oldLatLng = this._latlng;\n\t\tthis._latlng = toLatLng(latlng);\n\t\tthis.redraw();\n\n\t\t// @event move: Event\n\t\t// Fired when the marker is moved via [`setLatLng`](#circlemarker-setlatlng). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.\n\t\treturn this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng});\n\t},\n\n\t// @method getLatLng(): LatLng\n\t// Returns the current geographical position of the circle marker\n\tgetLatLng: function () {\n\t\treturn this._latlng;\n\t},\n\n\t// @method setRadius(radius: Number): this\n\t// Sets the radius of a circle marker. Units are in pixels.\n\tsetRadius: function (radius) {\n\t\tthis.options.radius = this._radius = radius;\n\t\treturn this.redraw();\n\t},\n\n\t// @method getRadius(): Number\n\t// Returns the current radius of the circle\n\tgetRadius: function () {\n\t\treturn this._radius;\n\t},\n\n\tsetStyle : function (options) {\n\t\tvar radius = options && options.radius || this._radius;\n\t\tPath.prototype.setStyle.call(this, options);\n\t\tthis.setRadius(radius);\n\t\treturn this;\n\t},\n\n\t_project: function () {\n\t\tthis._point = this._map.latLngToLayerPoint(this._latlng);\n\t\tthis._updateBounds();\n\t},\n\n\t_updateBounds: function () {\n\t\tvar r = this._radius,\n\t\t r2 = this._radiusY || r,\n\t\t w = this._clickTolerance(),\n\t\t p = [r + w, r2 + w];\n\t\tthis._pxBounds = new Bounds(this._point.subtract(p), this._point.add(p));\n\t},\n\n\t_update: function () {\n\t\tif (this._map) {\n\t\t\tthis._updatePath();\n\t\t}\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updateCircle(this);\n\t},\n\n\t_empty: function () {\n\t\treturn this._radius && !this._renderer._bounds.intersects(this._pxBounds);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p) {\n\t\treturn p.distanceTo(this._point) <= this._radius + this._clickTolerance();\n\t}\n});\n\n\n// @factory L.circleMarker(latlng: LatLng, options?: CircleMarker options)\n// Instantiates a circle marker object given a geographical point, and an optional options object.\nexport function circleMarker(latlng, options) {\n\treturn new CircleMarker(latlng, options);\n}\n","import {CircleMarker} from './CircleMarker';\nimport {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport {toLatLng} from '../../geo/LatLng';\nimport {LatLngBounds} from '../../geo/LatLngBounds';\nimport {Earth} from '../../geo/crs/CRS.Earth';\n\n\n/*\n * @class Circle\n * @aka L.Circle\n * @inherits CircleMarker\n *\n * A class for drawing circle overlays on a map. Extends `CircleMarker`.\n *\n * It's an approximation and starts to diverge from a real circle closer to poles (due to projection distortion).\n *\n * @example\n *\n * ```js\n * L.circle([50.5, 30.5], {radius: 200}).addTo(map);\n * ```\n */\n\nexport var Circle = CircleMarker.extend({\n\n\tinitialize: function (latlng, options, legacyOptions) {\n\t\tif (typeof options === 'number') {\n\t\t\t// Backwards compatibility with 0.7.x factory (latlng, radius, options?)\n\t\t\toptions = Util.extend({}, legacyOptions, {radius: options});\n\t\t}\n\t\tUtil.setOptions(this, options);\n\t\tthis._latlng = toLatLng(latlng);\n\n\t\tif (isNaN(this.options.radius)) { throw new Error('Circle radius cannot be NaN'); }\n\n\t\t// @section\n\t\t// @aka Circle options\n\t\t// @option radius: Number; Radius of the circle, in meters.\n\t\tthis._mRadius = this.options.radius;\n\t},\n\n\t// @method setRadius(radius: Number): this\n\t// Sets the radius of a circle. Units are in meters.\n\tsetRadius: function (radius) {\n\t\tthis._mRadius = radius;\n\t\treturn this.redraw();\n\t},\n\n\t// @method getRadius(): Number\n\t// Returns the current radius of a circle. Units are in meters.\n\tgetRadius: function () {\n\t\treturn this._mRadius;\n\t},\n\n\t// @method getBounds(): LatLngBounds\n\t// Returns the `LatLngBounds` of the path.\n\tgetBounds: function () {\n\t\tvar half = [this._radius, this._radiusY || this._radius];\n\n\t\treturn new LatLngBounds(\n\t\t\tthis._map.layerPointToLatLng(this._point.subtract(half)),\n\t\t\tthis._map.layerPointToLatLng(this._point.add(half)));\n\t},\n\n\tsetStyle: Path.prototype.setStyle,\n\n\t_project: function () {\n\n\t\tvar lng = this._latlng.lng,\n\t\t lat = this._latlng.lat,\n\t\t map = this._map,\n\t\t crs = map.options.crs;\n\n\t\tif (crs.distance === Earth.distance) {\n\t\t\tvar d = Math.PI / 180,\n\t\t\t latR = (this._mRadius / Earth.R) / d,\n\t\t\t top = map.project([lat + latR, lng]),\n\t\t\t bottom = map.project([lat - latR, lng]),\n\t\t\t p = top.add(bottom).divideBy(2),\n\t\t\t lat2 = map.unproject(p).lat,\n\t\t\t lngR = Math.acos((Math.cos(latR * d) - Math.sin(lat * d) * Math.sin(lat2 * d)) /\n\t\t\t (Math.cos(lat * d) * Math.cos(lat2 * d))) / d;\n\n\t\t\tif (isNaN(lngR) || lngR === 0) {\n\t\t\t\tlngR = latR / Math.cos(Math.PI / 180 * lat); // Fallback for edge case, #2425\n\t\t\t}\n\n\t\t\tthis._point = p.subtract(map.getPixelOrigin());\n\t\t\tthis._radius = isNaN(lngR) ? 0 : p.x - map.project([lat2, lng - lngR]).x;\n\t\t\tthis._radiusY = p.y - top.y;\n\n\t\t} else {\n\t\t\tvar latlng2 = crs.unproject(crs.project(this._latlng).subtract([this._mRadius, 0]));\n\n\t\t\tthis._point = map.latLngToLayerPoint(this._latlng);\n\t\t\tthis._radius = this._point.x - map.latLngToLayerPoint(latlng2).x;\n\t\t}\n\n\t\tthis._updateBounds();\n\t}\n});\n\n// @factory L.circle(latlng: LatLng, options?: Circle options)\n// Instantiates a circle object given a geographical point, and an options object\n// which contains the circle radius.\n// @alternative\n// @factory L.circle(latlng: LatLng, radius: Number, options?: Circle options)\n// Obsolete way of instantiating a circle, for compatibility with 0.7.x code.\n// Do not use in new applications or plugins.\nexport function circle(latlng, options, legacyOptions) {\n\treturn new Circle(latlng, options, legacyOptions);\n}\n","import {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport * as LineUtil from '../../geometry/LineUtil';\nimport {LatLng, toLatLng} from '../../geo/LatLng';\nimport {LatLngBounds} from '../../geo/LatLngBounds';\nimport {Bounds} from '../../geometry/Bounds';\nimport {Point} from '../../geometry/Point';\n\n/*\n * @class Polyline\n * @aka L.Polyline\n * @inherits Path\n *\n * A class for drawing polyline overlays on a map. Extends `Path`.\n *\n * @example\n *\n * ```js\n * // create a red polyline from an array of LatLng points\n * var latlngs = [\n * \t[45.51, -122.68],\n * \t[37.77, -122.43],\n * \t[34.04, -118.2]\n * ];\n *\n * var polyline = L.polyline(latlngs, {color: 'red'}).addTo(map);\n *\n * // zoom the map to the polyline\n * map.fitBounds(polyline.getBounds());\n * ```\n *\n * You can also pass a multi-dimensional array to represent a `MultiPolyline` shape:\n *\n * ```js\n * // create a red polyline from an array of arrays of LatLng points\n * var latlngs = [\n * \t[[45.51, -122.68],\n * \t [37.77, -122.43],\n * \t [34.04, -118.2]],\n * \t[[40.78, -73.91],\n * \t [41.83, -87.62],\n * \t [32.76, -96.72]]\n * ];\n * ```\n */\n\n\nexport var Polyline = Path.extend({\n\n\t// @section\n\t// @aka Polyline options\n\toptions: {\n\t\t// @option smoothFactor: Number = 1.0\n\t\t// How much to simplify the polyline on each zoom level. More means\n\t\t// better performance and smoother look, and less means more accurate representation.\n\t\tsmoothFactor: 1.0,\n\n\t\t// @option noClip: Boolean = false\n\t\t// Disable polyline clipping.\n\t\tnoClip: false\n\t},\n\n\tinitialize: function (latlngs, options) {\n\t\tUtil.setOptions(this, options);\n\t\tthis._setLatLngs(latlngs);\n\t},\n\n\t// @method getLatLngs(): LatLng[]\n\t// Returns an array of the points in the path, or nested arrays of points in case of multi-polyline.\n\tgetLatLngs: function () {\n\t\treturn this._latlngs;\n\t},\n\n\t// @method setLatLngs(latlngs: LatLng[]): this\n\t// Replaces all the points in the polyline with the given array of geographical points.\n\tsetLatLngs: function (latlngs) {\n\t\tthis._setLatLngs(latlngs);\n\t\treturn this.redraw();\n\t},\n\n\t// @method isEmpty(): Boolean\n\t// Returns `true` if the Polyline has no LatLngs.\n\tisEmpty: function () {\n\t\treturn !this._latlngs.length;\n\t},\n\n\t// @method closestLayerPoint(p: Point): Point\n\t// Returns the point closest to `p` on the Polyline.\n\tclosestLayerPoint: function (p) {\n\t\tvar minDistance = Infinity,\n\t\t minPoint = null,\n\t\t closest = LineUtil._sqClosestPointOnSegment,\n\t\t p1, p2;\n\n\t\tfor (var j = 0, jLen = this._parts.length; j < jLen; j++) {\n\t\t\tvar points = this._parts[j];\n\n\t\t\tfor (var i = 1, len = points.length; i < len; i++) {\n\t\t\t\tp1 = points[i - 1];\n\t\t\t\tp2 = points[i];\n\n\t\t\t\tvar sqDist = closest(p, p1, p2, true);\n\n\t\t\t\tif (sqDist < minDistance) {\n\t\t\t\t\tminDistance = sqDist;\n\t\t\t\t\tminPoint = closest(p, p1, p2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (minPoint) {\n\t\t\tminPoint.distance = Math.sqrt(minDistance);\n\t\t}\n\t\treturn minPoint;\n\t},\n\n\t// @method getCenter(): LatLng\n\t// Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the polyline.\n\tgetCenter: function () {\n\t\t// throws error when not yet added to map as this center calculation requires projected coordinates\n\t\tif (!this._map) {\n\t\t\tthrow new Error('Must add layer to map before using getCenter()');\n\t\t}\n\n\t\tvar i, halfDist, segDist, dist, p1, p2, ratio,\n\t\t points = this._rings[0],\n\t\t len = points.length;\n\n\t\tif (!len) { return null; }\n\n\t\t// polyline centroid algorithm; only uses the first ring if there are multiple\n\n\t\tfor (i = 0, halfDist = 0; i < len - 1; i++) {\n\t\t\thalfDist += points[i].distanceTo(points[i + 1]) / 2;\n\t\t}\n\n\t\t// The line is so small in the current view that all points are on the same pixel.\n\t\tif (halfDist === 0) {\n\t\t\treturn this._map.layerPointToLatLng(points[0]);\n\t\t}\n\n\t\tfor (i = 0, dist = 0; i < len - 1; i++) {\n\t\t\tp1 = points[i];\n\t\t\tp2 = points[i + 1];\n\t\t\tsegDist = p1.distanceTo(p2);\n\t\t\tdist += segDist;\n\n\t\t\tif (dist > halfDist) {\n\t\t\t\tratio = (dist - halfDist) / segDist;\n\t\t\t\treturn this._map.layerPointToLatLng([\n\t\t\t\t\tp2.x - ratio * (p2.x - p1.x),\n\t\t\t\t\tp2.y - ratio * (p2.y - p1.y)\n\t\t\t\t]);\n\t\t\t}\n\t\t}\n\t},\n\n\t// @method getBounds(): LatLngBounds\n\t// Returns the `LatLngBounds` of the path.\n\tgetBounds: function () {\n\t\treturn this._bounds;\n\t},\n\n\t// @method addLatLng(latlng: LatLng, latlngs? LatLng[]): this\n\t// Adds a given point to the polyline. By default, adds to the first ring of\n\t// the polyline in case of a multi-polyline, but can be overridden by passing\n\t// a specific ring as a LatLng array (that you can earlier access with [`getLatLngs`](#polyline-getlatlngs)).\n\taddLatLng: function (latlng, latlngs) {\n\t\tlatlngs = latlngs || this._defaultShape();\n\t\tlatlng = toLatLng(latlng);\n\t\tlatlngs.push(latlng);\n\t\tthis._bounds.extend(latlng);\n\t\treturn this.redraw();\n\t},\n\n\t_setLatLngs: function (latlngs) {\n\t\tthis._bounds = new LatLngBounds();\n\t\tthis._latlngs = this._convertLatLngs(latlngs);\n\t},\n\n\t_defaultShape: function () {\n\t\treturn LineUtil.isFlat(this._latlngs) ? this._latlngs : this._latlngs[0];\n\t},\n\n\t// recursively convert latlngs input into actual LatLng instances; calculate bounds along the way\n\t_convertLatLngs: function (latlngs) {\n\t\tvar result = [],\n\t\t flat = LineUtil.isFlat(latlngs);\n\n\t\tfor (var i = 0, len = latlngs.length; i < len; i++) {\n\t\t\tif (flat) {\n\t\t\t\tresult[i] = toLatLng(latlngs[i]);\n\t\t\t\tthis._bounds.extend(result[i]);\n\t\t\t} else {\n\t\t\t\tresult[i] = this._convertLatLngs(latlngs[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t},\n\n\t_project: function () {\n\t\tvar pxBounds = new Bounds();\n\t\tthis._rings = [];\n\t\tthis._projectLatlngs(this._latlngs, this._rings, pxBounds);\n\n\t\tif (this._bounds.isValid() && pxBounds.isValid()) {\n\t\t\tthis._rawPxBounds = pxBounds;\n\t\t\tthis._updateBounds();\n\t\t}\n\t},\n\n\t_updateBounds: function () {\n\t\tvar w = this._clickTolerance(),\n\t\t p = new Point(w, w);\n\t\tthis._pxBounds = new Bounds([\n\t\t\tthis._rawPxBounds.min.subtract(p),\n\t\t\tthis._rawPxBounds.max.add(p)\n\t\t]);\n\t},\n\n\t// recursively turns latlngs into a set of rings with projected coordinates\n\t_projectLatlngs: function (latlngs, result, projectedBounds) {\n\t\tvar flat = latlngs[0] instanceof LatLng,\n\t\t len = latlngs.length,\n\t\t i, ring;\n\n\t\tif (flat) {\n\t\t\tring = [];\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tring[i] = this._map.latLngToLayerPoint(latlngs[i]);\n\t\t\t\tprojectedBounds.extend(ring[i]);\n\t\t\t}\n\t\t\tresult.push(ring);\n\t\t} else {\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tthis._projectLatlngs(latlngs[i], result, projectedBounds);\n\t\t\t}\n\t\t}\n\t},\n\n\t// clip polyline by renderer bounds so that we have less to render for performance\n\t_clipPoints: function () {\n\t\tvar bounds = this._renderer._bounds;\n\n\t\tthis._parts = [];\n\t\tif (!this._pxBounds || !this._pxBounds.intersects(bounds)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.noClip) {\n\t\t\tthis._parts = this._rings;\n\t\t\treturn;\n\t\t}\n\n\t\tvar parts = this._parts,\n\t\t i, j, k, len, len2, segment, points;\n\n\t\tfor (i = 0, k = 0, len = this._rings.length; i < len; i++) {\n\t\t\tpoints = this._rings[i];\n\n\t\t\tfor (j = 0, len2 = points.length; j < len2 - 1; j++) {\n\t\t\t\tsegment = LineUtil.clipSegment(points[j], points[j + 1], bounds, j, true);\n\n\t\t\t\tif (!segment) { continue; }\n\n\t\t\t\tparts[k] = parts[k] || [];\n\t\t\t\tparts[k].push(segment[0]);\n\n\t\t\t\t// if segment goes out of screen, or it's the last one, it's the end of the line part\n\t\t\t\tif ((segment[1] !== points[j + 1]) || (j === len2 - 2)) {\n\t\t\t\t\tparts[k].push(segment[1]);\n\t\t\t\t\tk++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// simplify each clipped part of the polyline for performance\n\t_simplifyPoints: function () {\n\t\tvar parts = this._parts,\n\t\t tolerance = this.options.smoothFactor;\n\n\t\tfor (var i = 0, len = parts.length; i < len; i++) {\n\t\t\tparts[i] = LineUtil.simplify(parts[i], tolerance);\n\t\t}\n\t},\n\n\t_update: function () {\n\t\tif (!this._map) { return; }\n\n\t\tthis._clipPoints();\n\t\tthis._simplifyPoints();\n\t\tthis._updatePath();\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updatePoly(this);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p, closed) {\n\t\tvar i, j, k, len, len2, part,\n\t\t w = this._clickTolerance();\n\n\t\tif (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }\n\n\t\t// hit detection for polylines\n\t\tfor (i = 0, len = this._parts.length; i < len; i++) {\n\t\t\tpart = this._parts[i];\n\n\t\t\tfor (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {\n\t\t\t\tif (!closed && (j === 0)) { continue; }\n\n\t\t\t\tif (LineUtil.pointToSegmentDistance(p, part[k], part[j]) <= w) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n});\n\n// @factory L.polyline(latlngs: LatLng[], options?: Polyline options)\n// Instantiates a polyline object given an array of geographical points and\n// optionally an options object. You can create a `Polyline` object with\n// multiple separate lines (`MultiPolyline`) by passing an array of arrays\n// of geographic points.\nexport function polyline(latlngs, options) {\n\treturn new Polyline(latlngs, options);\n}\n\n// Retrocompat. Allow plugins to support Leaflet versions before and after 1.1.\nPolyline._flat = LineUtil._flat;\n","import {Polyline} from './Polyline';\nimport {LatLng} from '../../geo/LatLng';\nimport * as LineUtil from '../../geometry/LineUtil';\nimport {Point} from '../../geometry/Point';\nimport {Bounds} from '../../geometry/Bounds';\nimport * as PolyUtil from '../../geometry/PolyUtil';\n\n/*\n * @class Polygon\n * @aka L.Polygon\n * @inherits Polyline\n *\n * A class for drawing polygon overlays on a map. Extends `Polyline`.\n *\n * Note that points you pass when creating a polygon shouldn't have an additional last point equal to the first one — it's better to filter out such points.\n *\n *\n * @example\n *\n * ```js\n * // create a red polygon from an array of LatLng points\n * var latlngs = [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]];\n *\n * var polygon = L.polygon(latlngs, {color: 'red'}).addTo(map);\n *\n * // zoom the map to the polygon\n * map.fitBounds(polygon.getBounds());\n * ```\n *\n * You can also pass an array of arrays of latlngs, with the first array representing the outer shape and the other arrays representing holes in the outer shape:\n *\n * ```js\n * var latlngs = [\n * [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring\n * [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole\n * ];\n * ```\n *\n * Additionally, you can pass a multi-dimensional array to represent a MultiPolygon shape.\n *\n * ```js\n * var latlngs = [\n * [ // first polygon\n * [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring\n * [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole\n * ],\n * [ // second polygon\n * [[41, -111.03],[45, -111.04],[45, -104.05],[41, -104.05]]\n * ]\n * ];\n * ```\n */\n\nexport var Polygon = Polyline.extend({\n\n\toptions: {\n\t\tfill: true\n\t},\n\n\tisEmpty: function () {\n\t\treturn !this._latlngs.length || !this._latlngs[0].length;\n\t},\n\n\tgetCenter: function () {\n\t\t// throws error when not yet added to map as this center calculation requires projected coordinates\n\t\tif (!this._map) {\n\t\t\tthrow new Error('Must add layer to map before using getCenter()');\n\t\t}\n\n\t\tvar i, j, p1, p2, f, area, x, y, center,\n\t\t points = this._rings[0],\n\t\t len = points.length;\n\n\t\tif (!len) { return null; }\n\n\t\t// polygon centroid algorithm; only uses the first ring if there are multiple\n\n\t\tarea = x = y = 0;\n\n\t\tfor (i = 0, j = len - 1; i < len; j = i++) {\n\t\t\tp1 = points[i];\n\t\t\tp2 = points[j];\n\n\t\t\tf = p1.y * p2.x - p2.y * p1.x;\n\t\t\tx += (p1.x + p2.x) * f;\n\t\t\ty += (p1.y + p2.y) * f;\n\t\t\tarea += f * 3;\n\t\t}\n\n\t\tif (area === 0) {\n\t\t\t// Polygon is so small that all points are on same pixel.\n\t\t\tcenter = points[0];\n\t\t} else {\n\t\t\tcenter = [x / area, y / area];\n\t\t}\n\t\treturn this._map.layerPointToLatLng(center);\n\t},\n\n\t_convertLatLngs: function (latlngs) {\n\t\tvar result = Polyline.prototype._convertLatLngs.call(this, latlngs),\n\t\t len = result.length;\n\n\t\t// remove last point if it equals first one\n\t\tif (len >= 2 && result[0] instanceof LatLng && result[0].equals(result[len - 1])) {\n\t\t\tresult.pop();\n\t\t}\n\t\treturn result;\n\t},\n\n\t_setLatLngs: function (latlngs) {\n\t\tPolyline.prototype._setLatLngs.call(this, latlngs);\n\t\tif (LineUtil.isFlat(this._latlngs)) {\n\t\t\tthis._latlngs = [this._latlngs];\n\t\t}\n\t},\n\n\t_defaultShape: function () {\n\t\treturn LineUtil.isFlat(this._latlngs[0]) ? this._latlngs[0] : this._latlngs[0][0];\n\t},\n\n\t_clipPoints: function () {\n\t\t// polygons need a different clipping algorithm so we redefine that\n\n\t\tvar bounds = this._renderer._bounds,\n\t\t w = this.options.weight,\n\t\t p = new Point(w, w);\n\n\t\t// increase clip padding by stroke width to avoid stroke on clip edges\n\t\tbounds = new Bounds(bounds.min.subtract(p), bounds.max.add(p));\n\n\t\tthis._parts = [];\n\t\tif (!this._pxBounds || !this._pxBounds.intersects(bounds)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.noClip) {\n\t\t\tthis._parts = this._rings;\n\t\t\treturn;\n\t\t}\n\n\t\tfor (var i = 0, len = this._rings.length, clipped; i < len; i++) {\n\t\t\tclipped = PolyUtil.clipPolygon(this._rings[i], bounds, true);\n\t\t\tif (clipped.length) {\n\t\t\t\tthis._parts.push(clipped);\n\t\t\t}\n\t\t}\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updatePoly(this, true);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p) {\n\t\tvar inside = false,\n\t\t part, p1, p2, i, j, k, len, len2;\n\n\t\tif (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }\n\n\t\t// ray casting algorithm for detecting if point is in polygon\n\t\tfor (i = 0, len = this._parts.length; i < len; i++) {\n\t\t\tpart = this._parts[i];\n\n\t\t\tfor (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {\n\t\t\t\tp1 = part[j];\n\t\t\t\tp2 = part[k];\n\n\t\t\t\tif (((p1.y > p.y) !== (p2.y > p.y)) && (p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) {\n\t\t\t\t\tinside = !inside;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// also check if it's on polygon stroke\n\t\treturn inside || Polyline.prototype._containsPoint.call(this, p, true);\n\t}\n\n});\n\n\n// @factory L.polygon(latlngs: LatLng[], options?: Polyline options)\nexport function polygon(latlngs, options) {\n\treturn new Polygon(latlngs, options);\n}\n","import {LayerGroup} from './LayerGroup';\r\nimport {FeatureGroup} from './FeatureGroup';\r\nimport * as Util from '../core/Util';\r\nimport {Marker} from './marker/Marker';\r\nimport {Circle} from './vector/Circle';\r\nimport {CircleMarker} from './vector/CircleMarker';\r\nimport {Polyline} from './vector/Polyline';\r\nimport {Polygon} from './vector/Polygon';\r\nimport {LatLng} from '../geo/LatLng';\r\nimport * as LineUtil from '../geometry/LineUtil';\r\n\r\n\r\n/*\r\n * @class GeoJSON\r\n * @aka L.GeoJSON\r\n * @inherits FeatureGroup\r\n *\r\n * Represents a GeoJSON object or an array of GeoJSON objects. Allows you to parse\r\n * GeoJSON data and display it on the map. Extends `FeatureGroup`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.geoJSON(data, {\r\n * \tstyle: function (feature) {\r\n * \t\treturn {color: feature.properties.color};\r\n * \t}\r\n * }).bindPopup(function (layer) {\r\n * \treturn layer.feature.properties.description;\r\n * }).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var GeoJSON = FeatureGroup.extend({\r\n\r\n\t/* @section\r\n\t * @aka GeoJSON options\r\n\t *\r\n\t * @option pointToLayer: Function = *\r\n\t * A `Function` defining how GeoJSON points spawn Leaflet layers. It is internally\r\n\t * called when data is added, passing the GeoJSON point feature and its `LatLng`.\r\n\t * The default is to spawn a default `Marker`:\r\n\t * ```js\r\n\t * function(geoJsonPoint, latlng) {\r\n\t * \treturn L.marker(latlng);\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @option style: Function = *\r\n\t * A `Function` defining the `Path options` for styling GeoJSON lines and polygons,\r\n\t * called internally when data is added.\r\n\t * The default value is to not override any defaults:\r\n\t * ```js\r\n\t * function (geoJsonFeature) {\r\n\t * \treturn {}\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @option onEachFeature: Function = *\r\n\t * A `Function` that will be called once for each created `Feature`, after it has\r\n\t * been created and styled. Useful for attaching events and popups to features.\r\n\t * The default is to do nothing with the newly created layers:\r\n\t * ```js\r\n\t * function (feature, layer) {}\r\n\t * ```\r\n\t *\r\n\t * @option filter: Function = *\r\n\t * A `Function` that will be used to decide whether to include a feature or not.\r\n\t * The default is to include all features:\r\n\t * ```js\r\n\t * function (geoJsonFeature) {\r\n\t * \treturn true;\r\n\t * }\r\n\t * ```\r\n\t * Note: dynamically changing the `filter` option will have effect only on newly\r\n\t * added data. It will _not_ re-evaluate already included features.\r\n\t *\r\n\t * @option coordsToLatLng: Function = *\r\n\t * A `Function` that will be used for converting GeoJSON coordinates to `LatLng`s.\r\n\t * The default is the `coordsToLatLng` static method.\r\n\t *\r\n\t * @option markersInheritOptions: Boolean = false\r\n\t * Whether default Markers for \"Point\" type Features inherit from group options.\r\n\t */\r\n\r\n\tinitialize: function (geojson, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layers = {};\r\n\r\n\t\tif (geojson) {\r\n\t\t\tthis.addData(geojson);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addData( data ): this\r\n\t// Adds a GeoJSON object to the layer.\r\n\taddData: function (geojson) {\r\n\t\tvar features = Util.isArray(geojson) ? geojson : geojson.features,\r\n\t\t i, len, feature;\r\n\r\n\t\tif (features) {\r\n\t\t\tfor (i = 0, len = features.length; i < len; i++) {\r\n\t\t\t\t// only add this if geometry or geometries are set and not null\r\n\t\t\t\tfeature = features[i];\r\n\t\t\t\tif (feature.geometries || feature.geometry || feature.features || feature.coordinates) {\r\n\t\t\t\t\tthis.addData(feature);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tvar options = this.options;\r\n\r\n\t\tif (options.filter && !options.filter(geojson)) { return this; }\r\n\r\n\t\tvar layer = geometryToLayer(geojson, options);\r\n\t\tif (!layer) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tlayer.feature = asFeature(geojson);\r\n\r\n\t\tlayer.defaultOptions = layer.options;\r\n\t\tthis.resetStyle(layer);\r\n\r\n\t\tif (options.onEachFeature) {\r\n\t\t\toptions.onEachFeature(geojson, layer);\r\n\t\t}\r\n\r\n\t\treturn this.addLayer(layer);\r\n\t},\r\n\r\n\t// @method resetStyle( layer? ): this\r\n\t// Resets the given vector layer's style to the original GeoJSON style, useful for resetting style after hover events.\r\n\t// If `layer` is omitted, the style of all features in the current layer is reset.\r\n\tresetStyle: function (layer) {\r\n\t\tif (layer === undefined) {\r\n\t\t\treturn this.eachLayer(this.resetStyle, this);\r\n\t\t}\r\n\t\t// reset any custom styles\r\n\t\tlayer.options = Util.extend({}, layer.defaultOptions);\r\n\t\tthis._setLayerStyle(layer, this.options.style);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setStyle( style ): this\r\n\t// Changes styles of GeoJSON vector layers with the given style function.\r\n\tsetStyle: function (style) {\r\n\t\treturn this.eachLayer(function (layer) {\r\n\t\t\tthis._setLayerStyle(layer, style);\r\n\t\t}, this);\r\n\t},\r\n\r\n\t_setLayerStyle: function (layer, style) {\r\n\t\tif (layer.setStyle) {\r\n\t\t\tif (typeof style === 'function') {\r\n\t\t\t\tstyle = style(layer.feature);\r\n\t\t\t}\r\n\t\t\tlayer.setStyle(style);\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// @section\r\n// There are several static functions which can be called without instantiating L.GeoJSON:\r\n\r\n// @function geometryToLayer(featureData: Object, options?: GeoJSON options): Layer\r\n// Creates a `Layer` from a given GeoJSON feature. Can use a custom\r\n// [`pointToLayer`](#geojson-pointtolayer) and/or [`coordsToLatLng`](#geojson-coordstolatlng)\r\n// functions if provided as options.\r\nexport function geometryToLayer(geojson, options) {\r\n\r\n\tvar geometry = geojson.type === 'Feature' ? geojson.geometry : geojson,\r\n\t coords = geometry ? geometry.coordinates : null,\r\n\t layers = [],\r\n\t pointToLayer = options && options.pointToLayer,\r\n\t _coordsToLatLng = options && options.coordsToLatLng || coordsToLatLng,\r\n\t latlng, latlngs, i, len;\r\n\r\n\tif (!coords && !geometry) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tswitch (geometry.type) {\r\n\tcase 'Point':\r\n\t\tlatlng = _coordsToLatLng(coords);\r\n\t\treturn _pointToLayer(pointToLayer, geojson, latlng, options);\r\n\r\n\tcase 'MultiPoint':\r\n\t\tfor (i = 0, len = coords.length; i < len; i++) {\r\n\t\t\tlatlng = _coordsToLatLng(coords[i]);\r\n\t\t\tlayers.push(_pointToLayer(pointToLayer, geojson, latlng, options));\r\n\t\t}\r\n\t\treturn new FeatureGroup(layers);\r\n\r\n\tcase 'LineString':\r\n\tcase 'MultiLineString':\r\n\t\tlatlngs = coordsToLatLngs(coords, geometry.type === 'LineString' ? 0 : 1, _coordsToLatLng);\r\n\t\treturn new Polyline(latlngs, options);\r\n\r\n\tcase 'Polygon':\r\n\tcase 'MultiPolygon':\r\n\t\tlatlngs = coordsToLatLngs(coords, geometry.type === 'Polygon' ? 1 : 2, _coordsToLatLng);\r\n\t\treturn new Polygon(latlngs, options);\r\n\r\n\tcase 'GeometryCollection':\r\n\t\tfor (i = 0, len = geometry.geometries.length; i < len; i++) {\r\n\t\t\tvar layer = geometryToLayer({\r\n\t\t\t\tgeometry: geometry.geometries[i],\r\n\t\t\t\ttype: 'Feature',\r\n\t\t\t\tproperties: geojson.properties\r\n\t\t\t}, options);\r\n\r\n\t\t\tif (layer) {\r\n\t\t\t\tlayers.push(layer);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new FeatureGroup(layers);\r\n\r\n\tdefault:\r\n\t\tthrow new Error('Invalid GeoJSON object.');\r\n\t}\r\n}\r\n\r\nfunction _pointToLayer(pointToLayerFn, geojson, latlng, options) {\r\n\treturn pointToLayerFn ?\r\n\t\tpointToLayerFn(geojson, latlng) :\r\n\t\tnew Marker(latlng, options && options.markersInheritOptions && options);\r\n}\r\n\r\n// @function coordsToLatLng(coords: Array): LatLng\r\n// Creates a `LatLng` object from an array of 2 numbers (longitude, latitude)\r\n// or 3 numbers (longitude, latitude, altitude) used in GeoJSON for points.\r\nexport function coordsToLatLng(coords) {\r\n\treturn new LatLng(coords[1], coords[0], coords[2]);\r\n}\r\n\r\n// @function coordsToLatLngs(coords: Array, levelsDeep?: Number, coordsToLatLng?: Function): Array\r\n// Creates a multidimensional array of `LatLng`s from a GeoJSON coordinates array.\r\n// `levelsDeep` specifies the nesting level (0 is for an array of points, 1 for an array of arrays of points, etc., 0 by default).\r\n// Can use a custom [`coordsToLatLng`](#geojson-coordstolatlng) function.\r\nexport function coordsToLatLngs(coords, levelsDeep, _coordsToLatLng) {\r\n\tvar latlngs = [];\r\n\r\n\tfor (var i = 0, len = coords.length, latlng; i < len; i++) {\r\n\t\tlatlng = levelsDeep ?\r\n\t\t\tcoordsToLatLngs(coords[i], levelsDeep - 1, _coordsToLatLng) :\r\n\t\t\t(_coordsToLatLng || coordsToLatLng)(coords[i]);\r\n\r\n\t\tlatlngs.push(latlng);\r\n\t}\r\n\r\n\treturn latlngs;\r\n}\r\n\r\n// @function latLngToCoords(latlng: LatLng, precision?: Number): Array\r\n// Reverse of [`coordsToLatLng`](#geojson-coordstolatlng)\r\nexport function latLngToCoords(latlng, precision) {\r\n\tprecision = typeof precision === 'number' ? precision : 6;\r\n\treturn latlng.alt !== undefined ?\r\n\t\t[Util.formatNum(latlng.lng, precision), Util.formatNum(latlng.lat, precision), Util.formatNum(latlng.alt, precision)] :\r\n\t\t[Util.formatNum(latlng.lng, precision), Util.formatNum(latlng.lat, precision)];\r\n}\r\n\r\n// @function latLngsToCoords(latlngs: Array, levelsDeep?: Number, closed?: Boolean): Array\r\n// Reverse of [`coordsToLatLngs`](#geojson-coordstolatlngs)\r\n// `closed` determines whether the first point should be appended to the end of the array to close the feature, only used when `levelsDeep` is 0. False by default.\r\nexport function latLngsToCoords(latlngs, levelsDeep, closed, precision) {\r\n\tvar coords = [];\r\n\r\n\tfor (var i = 0, len = latlngs.length; i < len; i++) {\r\n\t\tcoords.push(levelsDeep ?\r\n\t\t\tlatLngsToCoords(latlngs[i], levelsDeep - 1, closed, precision) :\r\n\t\t\tlatLngToCoords(latlngs[i], precision));\r\n\t}\r\n\r\n\tif (!levelsDeep && closed) {\r\n\t\tcoords.push(coords[0]);\r\n\t}\r\n\r\n\treturn coords;\r\n}\r\n\r\nexport function getFeature(layer, newGeometry) {\r\n\treturn layer.feature ?\r\n\t\tUtil.extend({}, layer.feature, {geometry: newGeometry}) :\r\n\t\tasFeature(newGeometry);\r\n}\r\n\r\n// @function asFeature(geojson: Object): Object\r\n// Normalize GeoJSON geometries/features into GeoJSON features.\r\nexport function asFeature(geojson) {\r\n\tif (geojson.type === 'Feature' || geojson.type === 'FeatureCollection') {\r\n\t\treturn geojson;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttype: 'Feature',\r\n\t\tproperties: {},\r\n\t\tgeometry: geojson\r\n\t};\r\n}\r\n\r\nvar PointToGeoJSON = {\r\n\ttoGeoJSON: function (precision) {\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: 'Point',\r\n\t\t\tcoordinates: latLngToCoords(this.getLatLng(), precision)\r\n\t\t});\r\n\t}\r\n};\r\n\r\n// @namespace Marker\r\n// @section Other methods\r\n// @method toGeoJSON(precision?: Number): Object\r\n// `precision` is the number of decimal places for coordinates.\r\n// The default value is 6 places.\r\n// Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the marker (as a GeoJSON `Point` Feature).\r\nMarker.include(PointToGeoJSON);\r\n\r\n// @namespace CircleMarker\r\n// @method toGeoJSON(precision?: Number): Object\r\n// `precision` is the number of decimal places for coordinates.\r\n// The default value is 6 places.\r\n// Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the circle marker (as a GeoJSON `Point` Feature).\r\nCircle.include(PointToGeoJSON);\r\nCircleMarker.include(PointToGeoJSON);\r\n\r\n\r\n// @namespace Polyline\r\n// @method toGeoJSON(precision?: Number): Object\r\n// `precision` is the number of decimal places for coordinates.\r\n// The default value is 6 places.\r\n// Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the polyline (as a GeoJSON `LineString` or `MultiLineString` Feature).\r\nPolyline.include({\r\n\ttoGeoJSON: function (precision) {\r\n\t\tvar multi = !LineUtil.isFlat(this._latlngs);\r\n\r\n\t\tvar coords = latLngsToCoords(this._latlngs, multi ? 1 : 0, false, precision);\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: (multi ? 'Multi' : '') + 'LineString',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t}\r\n});\r\n\r\n// @namespace Polygon\r\n// @method toGeoJSON(precision?: Number): Object\r\n// `precision` is the number of decimal places for coordinates.\r\n// The default value is 6 places.\r\n// Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the polygon (as a GeoJSON `Polygon` or `MultiPolygon` Feature).\r\nPolygon.include({\r\n\ttoGeoJSON: function (precision) {\r\n\t\tvar holes = !LineUtil.isFlat(this._latlngs),\r\n\t\t multi = holes && !LineUtil.isFlat(this._latlngs[0]);\r\n\r\n\t\tvar coords = latLngsToCoords(this._latlngs, multi ? 2 : holes ? 1 : 0, true, precision);\r\n\r\n\t\tif (!holes) {\r\n\t\t\tcoords = [coords];\r\n\t\t}\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: (multi ? 'Multi' : '') + 'Polygon',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t}\r\n});\r\n\r\n\r\n// @namespace LayerGroup\r\nLayerGroup.include({\r\n\ttoMultiPoint: function (precision) {\r\n\t\tvar coords = [];\r\n\r\n\t\tthis.eachLayer(function (layer) {\r\n\t\t\tcoords.push(layer.toGeoJSON(precision).geometry.coordinates);\r\n\t\t});\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: 'MultiPoint',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t},\r\n\r\n\t// @method toGeoJSON(precision?: Number): Object\r\n\t// `precision` is the number of decimal places for coordinates.\r\n\t// The default value is 6 places.\r\n\t// Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the layer group (as a GeoJSON `FeatureCollection`, `GeometryCollection`, or `MultiPoint`).\r\n\ttoGeoJSON: function (precision) {\r\n\r\n\t\tvar type = this.feature && this.feature.geometry && this.feature.geometry.type;\r\n\r\n\t\tif (type === 'MultiPoint') {\r\n\t\t\treturn this.toMultiPoint(precision);\r\n\t\t}\r\n\r\n\t\tvar isGeometryCollection = type === 'GeometryCollection',\r\n\t\t jsons = [];\r\n\r\n\t\tthis.eachLayer(function (layer) {\r\n\t\t\tif (layer.toGeoJSON) {\r\n\t\t\t\tvar json = layer.toGeoJSON(precision);\r\n\t\t\t\tif (isGeometryCollection) {\r\n\t\t\t\t\tjsons.push(json.geometry);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar feature = asFeature(json);\r\n\t\t\t\t\t// Squash nested feature collections\r\n\t\t\t\t\tif (feature.type === 'FeatureCollection') {\r\n\t\t\t\t\t\tjsons.push.apply(jsons, feature.features);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tjsons.push(feature);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (isGeometryCollection) {\r\n\t\t\treturn getFeature(this, {\r\n\t\t\t\tgeometries: jsons,\r\n\t\t\t\ttype: 'GeometryCollection'\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttype: 'FeatureCollection',\r\n\t\t\tfeatures: jsons\r\n\t\t};\r\n\t}\r\n});\r\n\r\n// @namespace GeoJSON\r\n// @factory L.geoJSON(geojson?: Object, options?: GeoJSON options)\r\n// Creates a GeoJSON layer. Optionally accepts an object in\r\n// [GeoJSON format](https://tools.ietf.org/html/rfc7946) to display on the map\r\n// (you can alternatively add it later with `addData` method) and an `options` object.\r\nexport function geoJSON(geojson, options) {\r\n\treturn new GeoJSON(geojson, options);\r\n}\r\n\r\n// Backward compatibility.\r\nexport var geoJson = geoJSON;\r\n","import {Layer} from './Layer';\r\nimport * as Util from '../core/Util';\r\nimport {toLatLngBounds} from '../geo/LatLngBounds';\r\nimport {Bounds} from '../geometry/Bounds';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class ImageOverlay\r\n * @aka L.ImageOverlay\r\n * @inherits Interactive layer\r\n *\r\n * Used to load and display a single image over specific bounds of the map. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var imageUrl = 'http://www.lib.utexas.edu/maps/historical/newark_nj_1922.jpg',\r\n * \timageBounds = [[40.712216, -74.22655], [40.773941, -74.12544]];\r\n * L.imageOverlay(imageUrl, imageBounds).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var ImageOverlay = Layer.extend({\r\n\r\n\t// @section\r\n\t// @aka ImageOverlay options\r\n\toptions: {\r\n\t\t// @option opacity: Number = 1.0\r\n\t\t// The opacity of the image overlay.\r\n\t\topacity: 1,\r\n\r\n\t\t// @option alt: String = ''\r\n\t\t// Text for the `alt` attribute of the image (useful for accessibility).\r\n\t\talt: '',\r\n\r\n\t\t// @option interactive: Boolean = false\r\n\t\t// If `true`, the image overlay will emit [mouse events](#interactive-layer) when clicked or hovered.\r\n\t\tinteractive: false,\r\n\r\n\t\t// @option crossOrigin: Boolean|String = false\r\n\t\t// Whether the crossOrigin attribute will be added to the image.\r\n\t\t// If a String is provided, the image will have its crossOrigin attribute set to the String provided. This is needed if you want to access image pixel data.\r\n\t\t// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n\t\tcrossOrigin: false,\r\n\r\n\t\t// @option errorOverlayUrl: String = ''\r\n\t\t// URL to the overlay image to show in place of the overlay that failed to load.\r\n\t\terrorOverlayUrl: '',\r\n\r\n\t\t// @option zIndex: Number = 1\r\n\t\t// The explicit [zIndex](https://developer.mozilla.org/docs/Web/CSS/CSS_Positioning/Understanding_z_index) of the overlay layer.\r\n\t\tzIndex: 1,\r\n\r\n\t\t// @option className: String = ''\r\n\t\t// A custom class name to assign to the image. Empty by default.\r\n\t\tclassName: ''\r\n\t},\r\n\r\n\tinitialize: function (url, bounds, options) { // (String, LatLngBounds, Object)\r\n\t\tthis._url = url;\r\n\t\tthis._bounds = toLatLngBounds(bounds);\r\n\r\n\t\tUtil.setOptions(this, options);\r\n\t},\r\n\r\n\tonAdd: function () {\r\n\t\tif (!this._image) {\r\n\t\t\tthis._initImage();\r\n\r\n\t\t\tif (this.options.opacity < 1) {\r\n\t\t\t\tthis._updateOpacity();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.options.interactive) {\r\n\t\t\tDomUtil.addClass(this._image, 'leaflet-interactive');\r\n\t\t\tthis.addInteractiveTarget(this._image);\r\n\t\t}\r\n\r\n\t\tthis.getPane().appendChild(this._image);\r\n\t\tthis._reset();\r\n\t},\r\n\r\n\tonRemove: function () {\r\n\t\tDomUtil.remove(this._image);\r\n\t\tif (this.options.interactive) {\r\n\t\t\tthis.removeInteractiveTarget(this._image);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method setOpacity(opacity: Number): this\r\n\t// Sets the opacity of the overlay.\r\n\tsetOpacity: function (opacity) {\r\n\t\tthis.options.opacity = opacity;\r\n\r\n\t\tif (this._image) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\tsetStyle: function (styleOpts) {\r\n\t\tif (styleOpts.opacity) {\r\n\t\t\tthis.setOpacity(styleOpts.opacity);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method bringToFront(): this\r\n\t// Brings the layer to the top of all overlays.\r\n\tbringToFront: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toFront(this._image);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method bringToBack(): this\r\n\t// Brings the layer to the bottom of all overlays.\r\n\tbringToBack: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toBack(this._image);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setUrl(url: String): this\r\n\t// Changes the URL of the image.\r\n\tsetUrl: function (url) {\r\n\t\tthis._url = url;\r\n\r\n\t\tif (this._image) {\r\n\t\t\tthis._image.src = url;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setBounds(bounds: LatLngBounds): this\r\n\t// Update the bounds that this ImageOverlay covers\r\n\tsetBounds: function (bounds) {\r\n\t\tthis._bounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._reset();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\tvar events = {\r\n\t\t\tzoom: this._reset,\r\n\t\t\tviewreset: this._reset\r\n\t\t};\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tevents.zoomanim = this._animateZoom;\r\n\t\t}\r\n\r\n\t\treturn events;\r\n\t},\r\n\r\n\t// @method setZIndex(value: Number): this\r\n\t// Changes the [zIndex](#imageoverlay-zindex) of the image overlay.\r\n\tsetZIndex: function (value) {\r\n\t\tthis.options.zIndex = value;\r\n\t\tthis._updateZIndex();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Get the bounds that this ImageOverlay covers\r\n\tgetBounds: function () {\r\n\t\treturn this._bounds;\r\n\t},\r\n\r\n\t// @method getElement(): HTMLElement\r\n\t// Returns the instance of [`HTMLImageElement`](https://developer.mozilla.org/docs/Web/API/HTMLImageElement)\r\n\t// used by this overlay.\r\n\tgetElement: function () {\r\n\t\treturn this._image;\r\n\t},\r\n\r\n\t_initImage: function () {\r\n\t\tvar wasElementSupplied = this._url.tagName === 'IMG';\r\n\t\tvar img = this._image = wasElementSupplied ? this._url : DomUtil.create('img');\r\n\r\n\t\tDomUtil.addClass(img, 'leaflet-image-layer');\r\n\t\tif (this._zoomAnimated) { DomUtil.addClass(img, 'leaflet-zoom-animated'); }\r\n\t\tif (this.options.className) { DomUtil.addClass(img, this.options.className); }\r\n\r\n\t\timg.onselectstart = Util.falseFn;\r\n\t\timg.onmousemove = Util.falseFn;\r\n\r\n\t\t// @event load: Event\r\n\t\t// Fired when the ImageOverlay layer has loaded its image\r\n\t\timg.onload = Util.bind(this.fire, this, 'load');\r\n\t\timg.onerror = Util.bind(this._overlayOnError, this, 'error');\r\n\r\n\t\tif (this.options.crossOrigin || this.options.crossOrigin === '') {\r\n\t\t\timg.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\r\n\t\t}\r\n\r\n\t\tif (this.options.zIndex) {\r\n\t\t\tthis._updateZIndex();\r\n\t\t}\r\n\r\n\t\tif (wasElementSupplied) {\r\n\t\t\tthis._url = img.src;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\timg.src = this._url;\r\n\t\timg.alt = this.options.alt;\r\n\t},\r\n\r\n\t_animateZoom: function (e) {\r\n\t\tvar scale = this._map.getZoomScale(e.zoom),\r\n\t\t offset = this._map._latLngBoundsToNewLayerBounds(this._bounds, e.zoom, e.center).min;\r\n\r\n\t\tDomUtil.setTransform(this._image, offset, scale);\r\n\t},\r\n\r\n\t_reset: function () {\r\n\t\tvar image = this._image,\r\n\t\t bounds = new Bounds(\r\n\t\t this._map.latLngToLayerPoint(this._bounds.getNorthWest()),\r\n\t\t this._map.latLngToLayerPoint(this._bounds.getSouthEast())),\r\n\t\t size = bounds.getSize();\r\n\r\n\t\tDomUtil.setPosition(image, bounds.min);\r\n\r\n\t\timage.style.width = size.x + 'px';\r\n\t\timage.style.height = size.y + 'px';\r\n\t},\r\n\r\n\t_updateOpacity: function () {\r\n\t\tDomUtil.setOpacity(this._image, this.options.opacity);\r\n\t},\r\n\r\n\t_updateZIndex: function () {\r\n\t\tif (this._image && this.options.zIndex !== undefined && this.options.zIndex !== null) {\r\n\t\t\tthis._image.style.zIndex = this.options.zIndex;\r\n\t\t}\r\n\t},\r\n\r\n\t_overlayOnError: function () {\r\n\t\t// @event error: Event\r\n\t\t// Fired when the ImageOverlay layer fails to load its image\r\n\t\tthis.fire('error');\r\n\r\n\t\tvar errorUrl = this.options.errorOverlayUrl;\r\n\t\tif (errorUrl && this._url !== errorUrl) {\r\n\t\t\tthis._url = errorUrl;\r\n\t\t\tthis._image.src = errorUrl;\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// @factory L.imageOverlay(imageUrl: String, bounds: LatLngBounds, options?: ImageOverlay options)\r\n// Instantiates an image overlay object given the URL of the image and the\r\n// geographical bounds it is tied to.\r\nexport var imageOverlay = function (url, bounds, options) {\r\n\treturn new ImageOverlay(url, bounds, options);\r\n};\r\n","import {ImageOverlay} from './ImageOverlay';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class VideoOverlay\r\n * @aka L.VideoOverlay\r\n * @inherits ImageOverlay\r\n *\r\n * Used to load and display a video player over specific bounds of the map. Extends `ImageOverlay`.\r\n *\r\n * A video overlay uses the [`

+ +
+
+ +
+
+ +
+ +
+ +
+
+ + +
+ +
+
+
+
+ +
+ + + +
+ + + + +
+ +
+ + + +
+ + + +
+ + +
+
+ +
+
+ +
+
+ + +
+
+ + + +
+
+
+
+
+ +
+
+ Group By time Interval + +
+
+ +
+ +
+
+
+
+
+
+

5kw8`;RCu!ChC7%j!TE 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ℜn&Cf^VTh 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

+ +
+
+ +
+
+ +
+ +
+ +
+
+ + +
+ +
+
+
+
+ +
+ + + +
+ + + + +
+ +
+ + + +
+ + + +
+ + +
+
+ +
+
+ +
+
+ + +
+
+ + + +
+
+
+
+
+ +
+
+ Group By time Interval + +
+
+ +
+ +
+
+
+
+
+
+

5kw8`;RCu!ChC7%j!TE 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ℜn&Cf^VTh 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