diff --git a/public/svgs/openreplay.svg b/public/svgs/openreplay.svg new file mode 100644 index 0000000000..5e4f8e7bbc --- /dev/null +++ b/public/svgs/openreplay.svg @@ -0,0 +1,4 @@ + + + + diff --git a/templates/compose/openreplay.yaml b/templates/compose/openreplay.yaml new file mode 100644 index 0000000000..1ad0de7114 --- /dev/null +++ b/templates/compose/openreplay.yaml @@ -0,0 +1,933 @@ +# documentation: https://openreplay.com/docs +# slogan: OpenReplay is a self-hosted, open-source session replay suite you can deploy on your own infrastructure to fully control your data. +# tags: openreplay, session-replay, analytics, monitoring, debugging, self-hosted, privacy +# logo: svgs/openreplay.svg +# port: 80 +# minversion: 0.0.0 +# category: analytics + +x-common-env: &common-env + COMMON_DOMAIN_NAME: ${SERVICE_FQDN_NGINXOPENREPLAY} + COMMON_PROTOCOL: "https" + COMMON_VERSION: ${OPENREPLAY_VERSION:-v1.25.0} + COMMON_PG_PASSWORD: ${SERVICE_PASSWORD_POSTGRES} + COMMON_S3_KEY: ${SERVICE_USER_MINIO} + COMMON_S3_SECRET: ${SERVICE_PASSWORD_MINIO} + COMMON_JWT_SECRET: ${SERVICE_PASSWORD_JWTSECRET} + COMMON_JWT_SPOT_SECRET: ${SERVICE_PASSWORD_JWTSECRET} + COMMON_JWT_REFRESH_SECRET: ${SERVICE_PASSWORD_JWTREFRESH} + COMMON_JWT_SPOT_REFRESH_SECRET: ${SERVICE_PASSWORD_JWTSPOTREFRESH} + COMMON_ASSIST_JWT_SECRET: ${SERVICE_PASSWORD_ASSISTJWT} + COMMON_ASSIST_KEY: ${SERVICE_PASSWORD_ASSISTKEY} + +x-app-common-env: &app-common-env + <<: *common-env + LICENSE_KEY: "" + KAFKA_SERVERS: "" + KAFKA_USE_SSL: "false" + +services: + postgresql: + image: ghcr.io/openreplay/postgres:17 + volumes: + - pgdata:/bitnami/postgresql + networks: + openreplay-net: + aliases: + - postgresql.db.svc.cluster.local + environment: + POSTGRES_PASSWORD: ${SERVICE_PASSWORD_POSTGRES} + healthcheck: + test: + - CMD-SHELL + - pg_isready -U postgres + interval: 5s + timeout: 10s + retries: 20 + restart: unless-stopped + + clickhouse: + image: clickhouse/clickhouse-server:25.11-alpine + volumes: + - clickhouse:/var/lib/clickhouse + networks: + openreplay-net: + aliases: + - clickhouse-openreplay-clickhouse.db.svc.cluster.local + environment: + CLICKHOUSE_USER: "default" + CLICKHOUSE_PASSWORD: "" + CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: "1" + healthcheck: + test: + - CMD-SHELL + - clickhouse-client --query "SELECT 1" || exit 1 + interval: 5s + timeout: 10s + retries: 20 + restart: unless-stopped + + redis: + image: ghcr.io/openreplay/valkey:8 + volumes: + - redisdata:/bitnami/redis/data + networks: + openreplay-net: + aliases: + - redis-master.db.svc.cluster.local + environment: + ALLOW_EMPTY_PASSWORD: "yes" + healthcheck: + test: + - CMD-SHELL + - redis-cli ping | grep PONG + interval: 5s + timeout: 10s + retries: 20 + restart: unless-stopped + + minio: + image: ghcr.io/openreplay/minio:2025 + volumes: + - miniodata:/bitnami/minio/data + networks: + openreplay-net: + aliases: + - minio.db.svc.cluster.local + environment: + MINIO_ROOT_USER: ${SERVICE_USER_MINIO} + MINIO_ROOT_PASSWORD: ${SERVICE_PASSWORD_MINIO} + healthcheck: + test: + - CMD-SHELL + - curl -f http://localhost:9000/minio/health/live || exit 1 + interval: 5s + timeout: 10s + retries: 20 + restart: unless-stopped + + fs-permission: + image: debian:stable-slim + volumes: + - shared-volume:/mnt/efs + - miniodata:/mnt/minio + - pgdata:/mnt/postgres + networks: + - openreplay-net + entrypoint: + - /bin/bash + - -c + - chown -R 1001:1001 /mnt/efs /mnt/minio /mnt/postgres + restart: "no" + + minio-migration: + image: minio/mc:latest + depends_on: + minio: + condition: service_healthy + fs-permission: + condition: service_completed_successfully + networks: + - openreplay-net + environment: + MINIO_HOST: http://minio.db.svc.cluster.local:9000 + MINIO_ACCESS_KEY: ${SERVICE_USER_MINIO} + MINIO_SECRET_KEY: ${SERVICE_PASSWORD_MINIO} + entrypoint: + - /bin/sh + - -c + - | + mc alias set minio $${MINIO_HOST} $${MINIO_ACCESS_KEY} $${MINIO_SECRET_KEY} + for bucket in mobs sessions-assets static sourcemaps sessions-mobile-assets quickwit vault-data records spots; do + mc mb --ignore-existing minio/$${bucket} || true + done + echo "MinIO buckets initialized." + restart: "no" + + db-migration: + image: postgres:17-alpine + depends_on: + postgresql: + condition: service_healthy + minio-migration: + condition: service_completed_successfully + networks: + - openreplay-net + environment: + PGHOST: postgresql.db.svc.cluster.local + PGPORT: "5432" + PGDATABASE: postgres + PGUSER: postgres + PGPASSWORD: ${SERVICE_PASSWORD_POSTGRES} + entrypoint: + - /bin/sh + - -c + - | + apk add --no-cache wget + until pg_isready -h postgresql.db.svc.cluster.local; do + echo "Waiting for PostgreSQL..." + sleep 2 + done + echo "Downloading PostgreSQL schema..." + wget -qO /tmp/init_schema.sql \ + "https://raw.githubusercontent.com/openreplay/openreplay/${OPENREPLAY_VERSION:-v1.25.0}/scripts/schema/db/init_dbs/postgresql/init_schema.sql" + echo "Running PostgreSQL schema..." + psql -v ON_ERROR_STOP=0 -f /tmp/init_schema.sql || true + echo "PostgreSQL migration complete." + restart: "no" + + clickhouse-migration: + image: clickhouse/clickhouse-server:25.11-alpine + depends_on: + clickhouse: + condition: service_healthy + minio-migration: + condition: service_completed_successfully + networks: + - openreplay-net + entrypoint: + - /bin/sh + - -c + - | + echo "Downloading ClickHouse schema..." + wget -qO /tmp/init_schema.sql \ + "https://raw.githubusercontent.com/openreplay/openreplay/${OPENREPLAY_VERSION:-v1.25.0}/scripts/schema/db/init_dbs/clickhouse/create/init_schema.sql" + echo "Running ClickHouse schema..." + clickhouse-client \ + -h clickhouse-openreplay-clickhouse.db.svc.cluster.local \ + --user default \ + --port 9000 \ + --multiquery < /tmp/init_schema.sql || true + echo "ClickHouse migration complete." + restart: "no" + + alerts-openreplay: + image: public.ecr.aws/p1t3u8a3/alerts:${OPENREPLAY_VERSION:-v1.25.0} + domainname: app.svc.cluster.local + depends_on: + db-migration: + condition: service_completed_successfully + clickhouse-migration: + condition: service_completed_successfully + volumes: + - shared-volume:/mnt/efs + networks: + openreplay-net: + aliases: + - alerts-openreplay + - alerts-openreplay.app.svc.cluster.local + environment: + <<: *app-common-env + version_number: ${OPENREPLAY_VERSION:-v1.25.0} + pg_host: postgresql.db.svc.cluster.local + pg_port: "5432" + pg_dbname: postgres + pg_user: postgres + pg_password: ${SERVICE_PASSWORD_POSTGRES} + ch_host: clickhouse-openreplay-clickhouse.db.svc.cluster.local + ch_port: "9000" + ch_port_http: "8123" + ch_username: default + ch_password: "" + SITE_URL: https://${SERVICE_FQDN_NGINXOPENREPLAY} + S3_HOST: https://${SERVICE_FQDN_NGINXOPENREPLAY} + S3_KEY: ${SERVICE_USER_MINIO} + S3_SECRET: ${SERVICE_PASSWORD_MINIO} + AWS_DEFAULT_REGION: us-east-1 + EMAIL_HOST: "" + EMAIL_PORT: "587" + EMAIL_USER: "" + EMAIL_PASSWORD: "" + EMAIL_USE_TLS: "true" + EMAIL_USE_SSL: "false" + EMAIL_SSL_KEY: "" + EMAIL_SSL_CERT: "" + EMAIL_FROM: "OpenReplay " + LOGLEVEL: INFO + PYTHONUNBUFFERED: "0" + restart: unless-stopped + + api-openreplay: + image: public.ecr.aws/p1t3u8a3/api:${OPENREPLAY_VERSION:-v1.25.0} + domainname: app.svc.cluster.local + depends_on: + db-migration: + condition: service_completed_successfully + clickhouse-migration: + condition: service_completed_successfully + volumes: + - shared-volume:/mnt/efs + networks: + openreplay-net: + aliases: + - api-openreplay + - api-openreplay.app.svc.cluster.local + environment: + <<: *app-common-env + TOKEN_SECRET: ${SERVICE_PASSWORD_TOKEN} + ch_db: default + JWT_SECRET: ${SERVICE_PASSWORD_JWTSECRET} + ASSIST_JWT_SECRET: ${SERVICE_PASSWORD_ASSISTJWT} + AWS_ACCESS_KEY_ID: ${SERVICE_USER_MINIO} + AWS_SECRET_ACCESS_KEY: ${SERVICE_PASSWORD_MINIO} + AWS_ENDPOINT: https://${SERVICE_FQDN_NGINXOPENREPLAY} + AWS_REGION: us-east-1 + BUCKET_NAME: mobs + CH_USERNAME: default + CH_PASSWORD: "" + CLICKHOUSE_STRING: clickhouse-openreplay-clickhouse.db.svc.cluster.local:9000/default + CLICKHOUSE_HTTP_STRING: clickhouse-openreplay-clickhouse.db.svc.cluster.local:8123/default + pg_password: ${SERVICE_PASSWORD_POSTGRES} + POSTGRES_STRING: postgres://postgres:${SERVICE_PASSWORD_POSTGRES}@postgresql.db.svc.cluster.local:5432/postgres?sslmode=disable + ASSIST_URL: http://assist-openreplay.app.svc.cluster.local:9001/assist/%s + ASSIST_KEY: ${SERVICE_PASSWORD_ASSISTKEY} + REDIS_STRING: redis://redis-master.db.svc.cluster.local:6379 + restart: unless-stopped + + http-openreplay: + image: public.ecr.aws/p1t3u8a3/http:${OPENREPLAY_VERSION:-v1.25.0} + domainname: app.svc.cluster.local + depends_on: + db-migration: + condition: service_completed_successfully + volumes: + - shared-volume:/mnt/efs + networks: + openreplay-net: + aliases: + - http-openreplay + - http-openreplay.app.svc.cluster.local + environment: + <<: *app-common-env + BUCKET_NAME: uxtesting-records + CACHE_ASSETS: "true" + AWS_ACCESS_KEY_ID: ${SERVICE_USER_MINIO} + AWS_SECRET_ACCESS_KEY: ${SERVICE_PASSWORD_MINIO} + AWS_REGION: us-east-1 + AWS_ENDPOINT: https://${SERVICE_FQDN_NGINXOPENREPLAY} + JWT_SECRET: ${SERVICE_PASSWORD_JWTSECRET} + JWT_SPOT_SECRET: ${SERVICE_PASSWORD_JWTSECRET} + TOKEN_SECRET: ${SERVICE_PASSWORD_TOKEN} + pg_password: ${SERVICE_PASSWORD_POSTGRES} + POSTGRES_STRING: postgres://postgres:${SERVICE_PASSWORD_POSTGRES}@postgresql.db.svc.cluster.local:5432/postgres?sslmode=disable + REDIS_STRING: redis://redis-master.db.svc.cluster.local:6379 + restart: unless-stopped + + images-openreplay: + image: public.ecr.aws/p1t3u8a3/images:${OPENREPLAY_VERSION:-v1.25.0} + domainname: app.svc.cluster.local + depends_on: + db-migration: + condition: service_completed_successfully + volumes: + - shared-volume:/mnt/efs + networks: + openreplay-net: + aliases: + - images-openreplay + - images-openreplay.app.svc.cluster.local + environment: + <<: *app-common-env + AWS_ACCESS_KEY_ID: ${SERVICE_USER_MINIO} + AWS_SECRET_ACCESS_KEY: ${SERVICE_PASSWORD_MINIO} + AWS_ENDPOINT: https://${SERVICE_FQDN_NGINXOPENREPLAY} + AWS_REGION: us-east-1 + BUCKET_NAME: mobs + FS_CLEAN_HRS: "24" + REDIS_STRING: redis://redis-master.db.svc.cluster.local:6379 + restart: unless-stopped + + integrations-openreplay: + image: public.ecr.aws/p1t3u8a3/integrations:${OPENREPLAY_VERSION:-v1.25.0} + domainname: app.svc.cluster.local + depends_on: + db-migration: + condition: service_completed_successfully + volumes: + - shared-volume:/mnt/efs + networks: + openreplay-net: + aliases: + - integrations-openreplay + - integrations-openreplay.app.svc.cluster.local + environment: + <<: *app-common-env + AWS_ACCESS_KEY_ID: ${SERVICE_USER_MINIO} + AWS_SECRET_ACCESS_KEY: ${SERVICE_PASSWORD_MINIO} + AWS_ENDPOINT: https://${SERVICE_FQDN_NGINXOPENREPLAY} + AWS_REGION: us-east-1 + BUCKET_NAME: mobs + JWT_SECRET: ${SERVICE_PASSWORD_JWTSECRET} + TOKEN_SECRET: ${SERVICE_PASSWORD_TOKEN} + pg_password: ${SERVICE_PASSWORD_POSTGRES} + POSTGRES_STRING: postgres://postgres:${SERVICE_PASSWORD_POSTGRES}@postgresql.db.svc.cluster.local:5432/postgres?sslmode=disable + REDIS_STRING: redis://redis-master.db.svc.cluster.local:6379 + restart: unless-stopped + + sink-openreplay: + image: public.ecr.aws/p1t3u8a3/sink:${OPENREPLAY_VERSION:-v1.25.0} + domainname: app.svc.cluster.local + depends_on: + db-migration: + condition: service_completed_successfully + volumes: + - shared-volume:/mnt/efs + networks: + openreplay-net: + aliases: + - sink-openreplay + - sink-openreplay.app.svc.cluster.local + environment: + <<: *app-common-env + ASSETS_ORIGIN: https://${SERVICE_FQDN_NGINXOPENREPLAY}/sessions-assets + REDIS_STRING: redis://redis-master.db.svc.cluster.local:6379 + restart: unless-stopped + + sourcemapreader-openreplay: + image: public.ecr.aws/p1t3u8a3/sourcemapreader:${OPENREPLAY_VERSION:-v1.25.0} + domainname: app.svc.cluster.local + depends_on: + db-migration: + condition: service_completed_successfully + volumes: + - shared-volume:/mnt/efs + networks: + openreplay-net: + aliases: + - sourcemapreader-openreplay + - sourcemapreader-openreplay.app.svc.cluster.local + environment: + <<: *app-common-env + SMR_HOST: "0.0.0.0" + S3_HOST: http://minio.db.svc.cluster.local:9000 + S3_KEY: ${SERVICE_USER_MINIO} + S3_SECRET: ${SERVICE_PASSWORD_MINIO} + AWS_REGION: us-east-1 + ASSETS_ORIGIN: https://${SERVICE_FQDN_NGINXOPENREPLAY}/sessions-assets + restart: unless-stopped + + spot-openreplay: + image: public.ecr.aws/p1t3u8a3/spot:${OPENREPLAY_VERSION:-v1.25.0} + domainname: app.svc.cluster.local + depends_on: + db-migration: + condition: service_completed_successfully + volumes: + - shared-volume:/mnt/efs + networks: + openreplay-net: + aliases: + - spot-openreplay + - spot-openreplay.app.svc.cluster.local + environment: + <<: *app-common-env + CACHE_ASSETS: "true" + FS_CLEAN_HRS: "24" + TOKEN_SECRET: ${SERVICE_PASSWORD_TOKEN} + AWS_ACCESS_KEY_ID: ${SERVICE_USER_MINIO} + AWS_SECRET_ACCESS_KEY: ${SERVICE_PASSWORD_MINIO} + BUCKET_NAME: spots + AWS_REGION: us-east-1 + AWS_ENDPOINT: https://${SERVICE_FQDN_NGINXOPENREPLAY} + JWT_SECRET: ${SERVICE_PASSWORD_JWTSECRET} + JWT_SPOT_SECRET: ${SERVICE_PASSWORD_JWTSECRET} + pg_password: ${SERVICE_PASSWORD_POSTGRES} + POSTGRES_STRING: postgres://postgres:${SERVICE_PASSWORD_POSTGRES}@postgresql.db.svc.cluster.local:5432/postgres?sslmode=disable + REDIS_STRING: redis://redis-master.db.svc.cluster.local:6379 + restart: unless-stopped + + storage-openreplay: + image: public.ecr.aws/p1t3u8a3/storage:${OPENREPLAY_VERSION:-v1.25.0} + domainname: app.svc.cluster.local + depends_on: + db-migration: + condition: service_completed_successfully + volumes: + - shared-volume:/mnt/efs + networks: + openreplay-net: + aliases: + - storage-openreplay + - storage-openreplay.app.svc.cluster.local + environment: + <<: *app-common-env + AWS_ACCESS_KEY_ID: ${SERVICE_USER_MINIO} + AWS_SECRET_ACCESS_KEY: ${SERVICE_PASSWORD_MINIO} + AWS_ENDPOINT: https://${SERVICE_FQDN_NGINXOPENREPLAY} + AWS_REGION: us-east-1 + BUCKET_NAME: mobs + FS_CLEAN_HRS: "24" + REDIS_STRING: redis://redis-master.db.svc.cluster.local:6379 + restart: unless-stopped + + assets-openreplay: + image: public.ecr.aws/p1t3u8a3/assets:${OPENREPLAY_VERSION:-v1.25.0} + domainname: app.svc.cluster.local + depends_on: + db-migration: + condition: service_completed_successfully + volumes: + - shared-volume:/mnt/efs + networks: + openreplay-net: + aliases: + - assets-openreplay + - assets-openreplay.app.svc.cluster.local + environment: + <<: *app-common-env + AWS_ACCESS_KEY_ID: ${SERVICE_USER_MINIO} + AWS_SECRET_ACCESS_KEY: ${SERVICE_PASSWORD_MINIO} + BUCKET_NAME: sessions-assets + AWS_ENDPOINT: https://${SERVICE_FQDN_NGINXOPENREPLAY} + AWS_REGION: us-east-1 + ASSETS_ORIGIN: https://${SERVICE_FQDN_NGINXOPENREPLAY}/sessions-assets + REDIS_STRING: redis://redis-master.db.svc.cluster.local:6379 + restart: unless-stopped + + assist-openreplay: + image: public.ecr.aws/p1t3u8a3/assist:${OPENREPLAY_VERSION:-v1.25.0} + domainname: app.svc.cluster.local + depends_on: + db-migration: + condition: service_completed_successfully + volumes: + - shared-volume:/mnt/efs + networks: + openreplay-net: + aliases: + - assist-openreplay + - assist-openreplay.app.svc.cluster.local + environment: + <<: *app-common-env + ASSIST_JWT_SECRET: ${SERVICE_PASSWORD_ASSISTJWT} + ASSIST_KEY: ${SERVICE_PASSWORD_ASSISTKEY} + AWS_DEFAULT_REGION: us-east-1 + REDIS_URL: redis://redis-master.db.svc.cluster.local:6379 + CLEAR_SOCKET_TIME: "720" + debug: "0" + redis: "false" + restart: unless-stopped + + canvases-openreplay: + image: public.ecr.aws/p1t3u8a3/canvases:${OPENREPLAY_VERSION:-v1.25.0} + domainname: app.svc.cluster.local + depends_on: + db-migration: + condition: service_completed_successfully + volumes: + - shared-volume:/mnt/efs + networks: + openreplay-net: + aliases: + - canvases-openreplay + - canvases-openreplay.app.svc.cluster.local + environment: + <<: *app-common-env + AWS_ACCESS_KEY_ID: ${SERVICE_USER_MINIO} + AWS_SECRET_ACCESS_KEY: ${SERVICE_PASSWORD_MINIO} + AWS_ENDPOINT: https://${SERVICE_FQDN_NGINXOPENREPLAY} + AWS_REGION: us-east-1 + BUCKET_NAME: mobs + FS_CLEAN_HRS: "24" + REDIS_STRING: redis://redis-master.db.svc.cluster.local:6379 + restart: unless-stopped + + chalice-openreplay: + image: public.ecr.aws/p1t3u8a3/chalice:${OPENREPLAY_VERSION:-v1.25.0} + domainname: app.svc.cluster.local + depends_on: + db-migration: + condition: service_completed_successfully + clickhouse-migration: + condition: service_completed_successfully + volumes: + - shared-volume:/mnt/efs + networks: + openreplay-net: + aliases: + - chalice-openreplay + - chalice-openreplay.app.svc.cluster.local + environment: + <<: *app-common-env + REDIS_STRING: redis://redis-master.db.svc.cluster.local:6379 + ch_username: default + ch_password: "" + ch_host: clickhouse-openreplay-clickhouse.db.svc.cluster.local + ch_port: "9000" + ch_port_http: "8123" + sourcemaps_reader: http://sourcemapreader-openreplay.app.svc.cluster.local:9000/{}/sourcemaps + ASSIST_URL: http://assist-openreplay.app.svc.cluster.local:9001/assist/%s + JWT_REFRESH_SECRET: ${SERVICE_PASSWORD_JWTREFRESH} + JWT_SPOT_REFRESH_SECRET: ${SERVICE_PASSWORD_JWTSPOTREFRESH} + ASSIST_JWT_SECRET: ${SERVICE_PASSWORD_ASSISTJWT} + JWT_SECRET: ${SERVICE_PASSWORD_JWTSECRET} + ASSIST_KEY: ${SERVICE_PASSWORD_ASSISTKEY} + JWT_SPOT_SECRET: ${SERVICE_PASSWORD_JWTSECRET} + version_number: ${OPENREPLAY_VERSION:-v1.25.0} + pg_host: postgresql.db.svc.cluster.local + pg_port: "5432" + pg_dbname: postgres + pg_user: postgres + pg_password: ${SERVICE_PASSWORD_POSTGRES} + SITE_URL: https://${SERVICE_FQDN_NGINXOPENREPLAY} + S3_HOST: https://${SERVICE_FQDN_NGINXOPENREPLAY} + S3_KEY: ${SERVICE_USER_MINIO} + S3_SECRET: ${SERVICE_PASSWORD_MINIO} + AWS_DEFAULT_REGION: us-east-1 + sessions_region: us-east-1 + ASSIST_RECORDS_BUCKET: records + sessions_bucket: mobs + IOS_VIDEO_BUCKET: mobs + sourcemaps_bucket: sourcemaps + js_cache_bucket: sessions-assets + EMAIL_HOST: "" + EMAIL_PORT: "587" + EMAIL_USER: "" + EMAIL_PASSWORD: "" + EMAIL_USE_TLS: "true" + EMAIL_USE_SSL: "false" + EMAIL_SSL_KEY: "" + EMAIL_SSL_CERT: "" + EMAIL_FROM: "OpenReplay " + CH_COMPRESSION: "false" + CLUSTER_URL: svc.cluster.local + JWT_EXPIRATION: "86400" + LOGLEVEL: INFO + PYTHONUNBUFFERED: "0" + SAML2_MD_URL: "" + root_path: /api + restart: unless-stopped + + db-openreplay: + image: public.ecr.aws/p1t3u8a3/db:${OPENREPLAY_VERSION:-v1.25.0} + domainname: app.svc.cluster.local + depends_on: + db-migration: + condition: service_completed_successfully + clickhouse-migration: + condition: service_completed_successfully + volumes: + - shared-volume:/mnt/efs + networks: + openreplay-net: + aliases: + - db-openreplay + - db-openreplay.app.svc.cluster.local + environment: + <<: *app-common-env + CH_USERNAME: default + CH_PASSWORD: "" + CLICKHOUSE_STRING: clickhouse-openreplay-clickhouse.db.svc.cluster.local:9000/default + ch_db: default + pg_password: ${SERVICE_PASSWORD_POSTGRES} + POSTGRES_STRING: postgres://postgres:${SERVICE_PASSWORD_POSTGRES}@postgresql.db.svc.cluster.local:5432/postgres?sslmode=disable + REDIS_STRING: redis://redis-master.db.svc.cluster.local:6379 + restart: unless-stopped + + ender-openreplay: + image: public.ecr.aws/p1t3u8a3/ender:${OPENREPLAY_VERSION:-v1.25.0} + domainname: app.svc.cluster.local + depends_on: + db-migration: + condition: service_completed_successfully + volumes: + - shared-volume:/mnt/efs + networks: + openreplay-net: + aliases: + - ender-openreplay + - ender-openreplay.app.svc.cluster.local + environment: + <<: *app-common-env + pg_password: ${SERVICE_PASSWORD_POSTGRES} + POSTGRES_STRING: postgres://postgres:${SERVICE_PASSWORD_POSTGRES}@postgresql.db.svc.cluster.local:5432/postgres?sslmode=disable + REDIS_STRING: redis://redis-master.db.svc.cluster.local:6379 + restart: unless-stopped + + frontend-openreplay: + image: public.ecr.aws/p1t3u8a3/frontend:${OPENREPLAY_VERSION:-v1.25.0} + domainname: app.svc.cluster.local + depends_on: + db-migration: + condition: service_completed_successfully + volumes: + - shared-volume:/mnt/efs + networks: + openreplay-net: + aliases: + - frontend-openreplay + - frontend-openreplay.app.svc.cluster.local + environment: + <<: *app-common-env + restart: unless-stopped + + heuristics-openreplay: + image: public.ecr.aws/p1t3u8a3/heuristics:${OPENREPLAY_VERSION:-v1.25.0} + domainname: app.svc.cluster.local + depends_on: + db-migration: + condition: service_completed_successfully + volumes: + - shared-volume:/mnt/efs + networks: + openreplay-net: + aliases: + - heuristics-openreplay + - heuristics-openreplay.app.svc.cluster.local + environment: + <<: *app-common-env + REDIS_STRING: redis://redis-master.db.svc.cluster.local:6379 + restart: unless-stopped + + nginx-openreplay: + image: nginx:latest + depends_on: + - frontend-openreplay + - chalice-openreplay + - api-openreplay + environment: + - SERVICE_URL_NGINXOPENREPLAY + volumes: + - type: bind + source: ./nginx/openreplay.conf + target: /etc/nginx/conf.d/default.conf + read_only: true + content: | + map $arg_peerId $sessionid { + default ""; + "~.*-(\d+)(?:-.*|$)" $1; + } + map $http_x_forwarded_for $real_ip { + ~^(\d+\.\d+\.\d+\.\d+) $1; + default $remote_addr; + } + map $http_upgrade $connection_upgrade { + default upgrade; + '' close; + } + map $http_x_forwarded_proto $origin_proto { + default $http_x_forwarded_proto; + '' $scheme; + } + server { + listen 80; + client_body_buffer_size 512k; + client_max_body_size 10m; + proxy_buffer_size 64k; + proxy_buffers 32 64k; + proxy_busy_buffers_size 128k; + proxy_max_temp_file_size 2048m; + proxy_buffering on; + proxy_connect_timeout 120s; + proxy_read_timeout 300s; + proxy_send_timeout 300s; + real_ip_header X-Forwarded-For; + set_real_ip_from 0.0.0.0/0; + real_ip_recursive on; + add_header X-XSS-Protection "1; mode=block" always; + add_header X-Content-Type-Options "nosniff" always; + add_header Referrer-Policy "same-origin" always; + server_tokens off; + location ~ ^/(mobs|sessions-assets|frontend|static|sourcemaps|ios-images|uxtesting-records|records|spots)/ { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Host $http_host; + proxy_connect_timeout 300; + proxy_http_version 1.1; + proxy_set_header Connection ""; + chunked_transfer_encoding off; + proxy_pass http://minio.db.svc.cluster.local:9000; + } + location /minio/ { + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host $host; + proxy_pass http://minio.db.svc.cluster.local:9000; + } + location /ingest/ { + rewrite ^/ingest/(.*) /$1 break; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header X-Forwarded-For $real_ip; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Real-IP $real_ip; + proxy_set_header Host $host; + proxy_pass http://http-openreplay.app.svc.cluster.local:8080; + proxy_read_timeout 300s; + proxy_connect_timeout 120s; + proxy_send_timeout 300s; + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Allow-Methods' 'POST' always; + add_header 'Access-Control-Allow-Headers' 'Content-Type,Authorization,Content-Encoding' always; + add_header 'Access-Control-Expose-Headers' 'Content-Length' always; + } + location /integrations/ { + rewrite ^/integrations/(.*) /$1 break; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header X-Forwarded-For $real_ip; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Real-IP $real_ip; + proxy_set_header Host $host; + proxy_pass http://integrations-openreplay.app.svc.cluster.local:8080; + proxy_read_timeout 300s; + proxy_connect_timeout 120s; + proxy_send_timeout 300s; + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Allow-Methods' 'POST,PATCH,OPTIONS,DELETE' always; + add_header 'Access-Control-Allow-Headers' 'Content-Type,Authorization,Content-Encoding,X-Openreplay-Batch' always; + add_header 'Access-Control-Expose-Headers' 'Content-Length' always; + } + location /v2/api/ { + rewrite ^/v2/api/(.*) /$1 break; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Proto $origin_proto; + proxy_set_header X-Forwarded-For $real_ip; + proxy_set_header X-Real-IP $real_ip; + proxy_pass http://api-openreplay.app.svc.cluster.local:8080; + proxy_read_timeout 300s; + proxy_connect_timeout 120s; + proxy_send_timeout 300s; + add_header 'Access-Control-Allow-Origin' '$http_origin' always; + add_header 'Access-Control-Allow-Methods' 'POST, GET, PATCH, DELETE, OPTIONS, PUT' always; + add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, Content-Encoding, X-Openreplay-Batch' always; + add_header 'Access-Control-Expose-Headers' 'Content-Length' always; + add_header 'Access-Control-Max-Age' '3600' always; + add_header 'Access-Control-Allow-Credentials' 'true' always; + if ($request_method = 'OPTIONS') { + add_header 'Access-Control-Allow-Origin' '$http_origin' always; + add_header 'Access-Control-Allow-Methods' 'POST, GET, PATCH, DELETE, OPTIONS, PUT' always; + add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, Content-Encoding, X-Openreplay-Batch' always; + add_header 'Access-Control-Max-Age' '3600' always; + add_header 'Content-Length' '0'; + add_header 'Content-Type' 'text/plain'; + return 204; + } + } + location /api/ { + rewrite ^/api/(.*) /$1 break; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Proto $origin_proto; + proxy_set_header X-Forwarded-For $real_ip; + proxy_pass http://chalice-openreplay.app.svc.cluster.local:8000; + add_header Cache-Control "no-store,no-cache" always; + add_header Pragma "no-cache" always; + } + location /spot/ { + rewrite ^/spot/(.*) /$1 break; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Proto $origin_proto; + proxy_set_header X-Forwarded-For $real_ip; + proxy_set_header X-Real-IP $real_ip; + proxy_pass http://spot-openreplay.app.svc.cluster.local:8080; + proxy_read_timeout 300s; + proxy_connect_timeout 120s; + proxy_send_timeout 300s; + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Allow-Methods' 'POST, PATCH, DELETE, OPTIONS' always; + add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, Content-Encoding, X-Openreplay-Batch' always; + add_header 'Access-Control-Expose-Headers' 'Content-Length' always; + if ($request_method = 'OPTIONS') { + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Allow-Methods' 'POST, PATCH, DELETE, OPTIONS' always; + add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, Content-Encoding, X-Openreplay-Batch' always; + add_header 'Access-Control-Max-Age' '3600'; + add_header 'Content-Type' 'text/plain charset=UTF-8'; + add_header 'Content-Length' 0; + return 204; + } + } + location /assist/ { + rewrite ^/assist/(.*) /$1 break; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $real_ip; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $origin_proto; + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; + proxy_connect_timeout 75s; + proxy_buffering off; + proxy_pass http://assist-openreplay.app.svc.cluster.local:9001; + } + location /ws-assist/ { + rewrite ^/ws-assist/(.*) /$1 break; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $real_ip; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $origin_proto; + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; + proxy_connect_timeout 120s; + proxy_buffering off; + add_header 'Access-Control-Allow-Origin' '$http_origin' always; + add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS' always; + add_header 'Access-Control-Allow-Headers' 'sessionid, Content-Type, Authorization' always; + add_header 'Access-Control-Max-Age' '1728000' always; + add_header 'X-Debug-Session-ID' $sessionid always; + proxy_pass http://assist-openreplay.app.svc.cluster.local:9001; + } + location /script/ { + rewrite ^/script/(.*)/openreplay(.*).js$ /$1/openreplay$2.js break; + proxy_http_version 1.1; + proxy_ssl_protocols TLSv1.2 TLSv1.3; + proxy_ssl_server_name on; + proxy_set_header Host static.openreplay.com; + proxy_pass https://static.openreplay.com; + proxy_read_timeout 300s; + proxy_connect_timeout 120s; + proxy_send_timeout 300s; + proxy_buffering on; + client_max_body_size 8m; + } + location / { + index /index.html; + rewrite ^((?!.(js|css|png|svg|jpg|woff|woff2)).)*$ /index.html break; + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-For $real_ip; + proxy_set_header X-Forwarded-Proto $origin_proto; + proxy_pass http://frontend-openreplay.app.svc.cluster.local:8080; + proxy_intercept_errors on; + error_page 404 =200 /index.html; + } + } + networks: + - openreplay-net + healthcheck: + test: + - CMD + - nginx + - -t + interval: 30s + timeout: 10s + retries: 3 + start_period: 30s + restart: unless-stopped + +volumes: + pgdata: + clickhouse: + redisdata: + miniodata: + shared-volume: + +networks: + openreplay-net: diff --git a/templates/service-templates-latest.json b/templates/service-templates-latest.json index 3c5773d0ea..2daaf4727c 100644 --- a/templates/service-templates-latest.json +++ b/templates/service-templates-latest.json @@ -5284,5 +5284,23 @@ "logo": "svgs/marimo.svg", "minversion": "0.0.0", "port": "8080" + }, + "openreplay": { + "documentation": "https://openreplay.com/docs?utm_source=coolify.io", + "slogan": "OpenReplay is a self-hosted, open-source session replay suite you can deploy on your own infrastructure to fully control your data.", + "compose": "eC1jb21tb24tZW52OgogIENPTU1PTl9ET01BSU5fTkFNRTogJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogIENPTU1PTl9QUk9UT0NPTDogaHR0cHMKICBDT01NT05fVkVSU0lPTjogJHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgQ09NTU9OX1BHX1BBU1NXT1JEOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgQ09NTU9OX1MzX0tFWTogJHtTRVJWSUNFX1VTRVJfTUlOSU99CiAgQ09NTU9OX1MzX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogIENPTU1PTl9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogIENPTU1PTl9KV1RfU1BPVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgQ09NTU9OX0pXVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFJFRlJFU0h9CiAgQ09NTU9OX0pXVF9TUE9UX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU1BPVFJFRlJFU0h9CiAgQ09NTU9OX0FTU0lTVF9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUSldUfQogIENPTU1PTl9BU1NJU1RfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUS0VZfQp4LWFwcC1jb21tb24tZW52OgogIENPTU1PTl9ET01BSU5fTkFNRTogJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogIENPTU1PTl9QUk9UT0NPTDogaHR0cHMKICBDT01NT05fVkVSU0lPTjogJHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgQ09NTU9OX1BHX1BBU1NXT1JEOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgQ09NTU9OX1MzX0tFWTogJHtTRVJWSUNFX1VTRVJfTUlOSU99CiAgQ09NTU9OX1MzX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogIENPTU1PTl9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogIENPTU1PTl9KV1RfU1BPVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgQ09NTU9OX0pXVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFJFRlJFU0h9CiAgQ09NTU9OX0pXVF9TUE9UX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU1BPVFJFRlJFU0h9CiAgQ09NTU9OX0FTU0lTVF9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUSldUfQogIENPTU1PTl9BU1NJU1RfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUS0VZfQogIExJQ0VOU0VfS0VZOiAnJwogIEtBRktBX1NFUlZFUlM6ICcnCiAgS0FGS0FfVVNFX1NTTDogJ2ZhbHNlJwpzZXJ2aWNlczoKICBwb3N0Z3Jlc3FsOgogICAgaW1hZ2U6IGdoY3IuaW8vb3BlbnJlcGxheS9wb3N0Z3JlczoxNwogICAgdm9sdW1lczoKICAgIC0gcGdkYXRhOi9iaXRuYW1pL3Bvc3RncmVzcWwKICAgIG5ldHdvcmtzOgogICAgICBvcGVucmVwbGF5LW5ldDoKICAgICAgICBhbGlhc2VzOgogICAgICAgIC0gcG9zdGdyZXNxbC5kYi5zdmMuY2x1c3Rlci5sb2NhbAogICAgZW52aXJvbm1lbnQ6CiAgICAgIFBPU1RHUkVTX1BBU1NXT1JEOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgLSBDTUQtU0hFTEwKICAgICAgLSBwZ19pc3JlYWR5IC1VIHBvc3RncmVzCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMjAKICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkCiAgY2xpY2tob3VzZToKICAgIGltYWdlOiBjbGlja2hvdXNlL2NsaWNraG91c2Utc2VydmVyOjI1LjExLWFscGluZQogICAgdm9sdW1lczoKICAgIC0gY2xpY2tob3VzZTovdmFyL2xpYi9jbGlja2hvdXNlCiAgICBuZXR3b3JrczoKICAgICAgb3BlbnJlcGxheS1uZXQ6CiAgICAgICAgYWxpYXNlczoKICAgICAgICAtIGNsaWNraG91c2Utb3BlbnJlcGxheS1jbGlja2hvdXNlLmRiLnN2Yy5jbHVzdGVyLmxvY2FsCiAgICBlbnZpcm9ubWVudDoKICAgICAgQ0xJQ0tIT1VTRV9VU0VSOiBkZWZhdWx0CiAgICAgIENMSUNLSE9VU0VfUEFTU1dPUkQ6ICcnCiAgICAgIENMSUNLSE9VU0VfREVGQVVMVF9BQ0NFU1NfTUFOQUdFTUVOVDogJzEnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgLSBDTUQtU0hFTEwKICAgICAgLSBjbGlja2hvdXNlLWNsaWVudCAtLXF1ZXJ5ICJTRUxFQ1QgMSIgfHwgZXhpdCAxCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMjAKICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkCiAgcmVkaXM6CiAgICBpbWFnZTogZ2hjci5pby9vcGVucmVwbGF5L3ZhbGtleTo4CiAgICB2b2x1bWVzOgogICAgLSByZWRpc2RhdGE6L2JpdG5hbWkvcmVkaXMvZGF0YQogICAgbmV0d29ya3M6CiAgICAgIG9wZW5yZXBsYXktbmV0OgogICAgICAgIGFsaWFzZXM6CiAgICAgICAgLSByZWRpcy1tYXN0ZXIuZGIuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGVudmlyb25tZW50OgogICAgICBBTExPV19FTVBUWV9QQVNTV09SRDogJ3llcycKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAtIENNRC1TSEVMTAogICAgICAtIHJlZGlzLWNsaSBwaW5nIHwgZ3JlcCBQT05HCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMjAKICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkCiAgbWluaW86CiAgICBpbWFnZTogZ2hjci5pby9vcGVucmVwbGF5L21pbmlvOjIwMjUKICAgIHZvbHVtZXM6CiAgICAtIG1pbmlvZGF0YTovYml0bmFtaS9taW5pby9kYXRhCiAgICBuZXR3b3JrczoKICAgICAgb3BlbnJlcGxheS1uZXQ6CiAgICAgICAgYWxpYXNlczoKICAgICAgICAtIG1pbmlvLmRiLnN2Yy5jbHVzdGVyLmxvY2FsCiAgICBlbnZpcm9ubWVudDoKICAgICAgTUlOSU9fUk9PVF9VU0VSOiAke1NFUlZJQ0VfVVNFUl9NSU5JT30KICAgICAgTUlOSU9fUk9PVF9QQVNTV09SRDogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgIC0gQ01ELVNIRUxMCiAgICAgIC0gY3VybCAtZiBodHRwOi8vbG9jYWxob3N0OjkwMDAvbWluaW8vaGVhbHRoL2xpdmUgfHwgZXhpdCAxCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMjAKICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkCiAgZnMtcGVybWlzc2lvbjoKICAgIGltYWdlOiBkZWJpYW46c3RhYmxlLXNsaW0KICAgIHZvbHVtZXM6CiAgICAtIHNoYXJlZC12b2x1bWU6L21udC9lZnMKICAgIC0gbWluaW9kYXRhOi9tbnQvbWluaW8KICAgIC0gcGdkYXRhOi9tbnQvcG9zdGdyZXMKICAgIG5ldHdvcmtzOgogICAgLSBvcGVucmVwbGF5LW5ldAogICAgZW50cnlwb2ludDoKICAgIC0gL2Jpbi9iYXNoCiAgICAtIC1jCiAgICAtIGNob3duIC1SIDEwMDE6MTAwMSAvbW50L2VmcyAvbW50L21pbmlvIC9tbnQvcG9zdGdyZXMKICAgIHJlc3RhcnQ6ICdubycKICBtaW5pby1taWdyYXRpb246CiAgICBpbWFnZTogbWluaW8vbWM6bGF0ZXN0CiAgICBkZXBlbmRzX29uOgogICAgICBtaW5pbzoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgICBmcy1wZXJtaXNzaW9uOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICBuZXR3b3JrczoKICAgIC0gb3BlbnJlcGxheS1uZXQKICAgIGVudmlyb25tZW50OgogICAgICBNSU5JT19IT1NUOiBodHRwOi8vbWluaW8uZGIuc3ZjLmNsdXN0ZXIubG9jYWw6OTAwMAogICAgICBNSU5JT19BQ0NFU1NfS0VZOiAke1NFUlZJQ0VfVVNFUl9NSU5JT30KICAgICAgTUlOSU9fU0VDUkVUX0tFWTogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgZW50cnlwb2ludDoKICAgIC0gL2Jpbi9zaAogICAgLSAtYwogICAgLSAibWMgYWxpYXMgc2V0IG1pbmlvICQke01JTklPX0hPU1R9ICQke01JTklPX0FDQ0VTU19LRVl9ICQke01JTklPX1NFQ1JFVF9LRVl9XG5cCiAgICAgIGZvciBidWNrZXQgaW4gbW9icyBzZXNzaW9ucy1hc3NldHMgc3RhdGljIHNvdXJjZW1hcHMgc2Vzc2lvbnMtbW9iaWxlLWFzc2V0c1wKICAgICAgXCBxdWlja3dpdCB2YXVsdC1kYXRhIHJlY29yZHMgc3BvdHM7IGRvXG4gIG1jIG1iIC0taWdub3JlLWV4aXN0aW5nIG1pbmlvLyQke2J1Y2tldH1cCiAgICAgIFwgfHwgdHJ1ZVxuZG9uZVxuZWNobyBcIk1pbklPIGJ1Y2tldHMgaW5pdGlhbGl6ZWQuXCJcbiIKICAgIHJlc3RhcnQ6ICdubycKICBkYi1taWdyYXRpb246CiAgICBpbWFnZTogcG9zdGdyZXM6MTctYWxwaW5lCiAgICBkZXBlbmRzX29uOgogICAgICBwb3N0Z3Jlc3FsOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICAgIG1pbmlvLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgbmV0d29ya3M6CiAgICAtIG9wZW5yZXBsYXktbmV0CiAgICBlbnZpcm9ubWVudDoKICAgICAgUEdIT1NUOiBwb3N0Z3Jlc3FsLmRiLnN2Yy5jbHVzdGVyLmxvY2FsCiAgICAgIFBHUE9SVDogJzU0MzInCiAgICAgIFBHREFUQUJBU0U6IHBvc3RncmVzCiAgICAgIFBHVVNFUjogcG9zdGdyZXMKICAgICAgUEdQQVNTV09SRDogJHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfQogICAgZW50cnlwb2ludDoKICAgIC0gL2Jpbi9zaAogICAgLSAtYwogICAgLSAiYXBrIGFkZCAtLW5vLWNhY2hlIHdnZXRcbnVudGlsIHBnX2lzcmVhZHkgLWggcG9zdGdyZXNxbC5kYi5zdmMuY2x1c3Rlci5sb2NhbDtcCiAgICAgIFwgZG9cbiAgZWNobyBcIldhaXRpbmcgZm9yIFBvc3RncmVTUUwuLi5cIlxuICBzbGVlcCAyXG5kb25lXG5lY2hvIFwiRG93bmxvYWRpbmdcCiAgICAgIFwgUG9zdGdyZVNRTCBzY2hlbWEuLi5cIlxud2dldCAtcU8gL3RtcC9pbml0X3NjaGVtYS5zcWwgXFxcbiAgXCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vb3BlbnJlcGxheS9vcGVucmVwbGF5LyR7T1BFTlJFUExBWV9WRVJTSU9OOi12MS4yNS4wfS9zY3JpcHRzL3NjaGVtYS9kYi9pbml0X2Ricy9wb3N0Z3Jlc3FsL2luaXRfc2NoZW1hLnNxbFwiXAogICAgICBcbmVjaG8gXCJSdW5uaW5nIFBvc3RncmVTUUwgc2NoZW1hLi4uXCJcbnBzcWwgLXYgT05fRVJST1JfU1RPUD0wIC1mIC90bXAvaW5pdF9zY2hlbWEuc3FsXAogICAgICBcIHx8IHRydWVcbmVjaG8gXCJQb3N0Z3JlU1FMIG1pZ3JhdGlvbiBjb21wbGV0ZS5cIlxuIgogICAgcmVzdGFydDogJ25vJwogIGNsaWNraG91c2UtbWlncmF0aW9uOgogICAgaW1hZ2U6IGNsaWNraG91c2UvY2xpY2tob3VzZS1zZXJ2ZXI6MjUuMTEtYWxwaW5lCiAgICBkZXBlbmRzX29uOgogICAgICBjbGlja2hvdXNlOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICAgIG1pbmlvLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgbmV0d29ya3M6CiAgICAtIG9wZW5yZXBsYXktbmV0CiAgICBlbnRyeXBvaW50OgogICAgLSAvYmluL3NoCiAgICAtIC1jCiAgICAtICJlY2hvIFwiRG93bmxvYWRpbmcgQ2xpY2tIb3VzZSBzY2hlbWEuLi5cIlxud2dldCAtcU8gL3RtcC9pbml0X3NjaGVtYS5zcWwgXFxcCiAgICAgIFxuICBcImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9vcGVucmVwbGF5L29wZW5yZXBsYXkvJHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9L3NjcmlwdHMvc2NoZW1hL2RiL2luaXRfZGJzL2NsaWNraG91c2UvY3JlYXRlL2luaXRfc2NoZW1hLnNxbFwiXAogICAgICBcbmVjaG8gXCJSdW5uaW5nIENsaWNrSG91c2Ugc2NoZW1hLi4uXCJcbmNsaWNraG91c2UtY2xpZW50IFxcXG4gIC1oIGNsaWNraG91c2Utb3BlbnJlcGxheS1jbGlja2hvdXNlLmRiLnN2Yy5jbHVzdGVyLmxvY2FsXAogICAgICBcIFxcXG4gIC0tdXNlciBkZWZhdWx0IFxcXG4gIC0tcG9ydCA5MDAwIFxcXG4gIC0tbXVsdGlxdWVyeSA8IC90bXAvaW5pdF9zY2hlbWEuc3FsXAogICAgICBcIHx8IHRydWVcbmVjaG8gXCJDbGlja0hvdXNlIG1pZ3JhdGlvbiBjb21wbGV0ZS5cIlxuIgogICAgcmVzdGFydDogJ25vJwogIGFsZXJ0cy1vcGVucmVwbGF5OgogICAgaW1hZ2U6IHB1YmxpYy5lY3IuYXdzL3AxdDN1OGEzL2FsZXJ0czoke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgIGRvbWFpbm5hbWU6IGFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZGVwZW5kc19vbjoKICAgICAgZGItbWlncmF0aW9uOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICAgIGNsaWNraG91c2UtbWlncmF0aW9uOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICB2b2x1bWVzOgogICAgLSBzaGFyZWQtdm9sdW1lOi9tbnQvZWZzCiAgICBuZXR3b3JrczoKICAgICAgb3BlbnJlcGxheS1uZXQ6CiAgICAgICAgYWxpYXNlczoKICAgICAgICAtIGFsZXJ0cy1vcGVucmVwbGF5CiAgICAgICAgLSBhbGVydHMtb3BlbnJlcGxheS5hcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGVudmlyb25tZW50OgogICAgICBDT01NT05fRE9NQUlOX05BTUU6ICR7U0VSVklDRV9GUUROX05HSU5YT1BFTlJFUExBWX0KICAgICAgQ09NTU9OX1BST1RPQ09MOiBodHRwcwogICAgICBDT01NT05fVkVSU0lPTjogJHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICAgIENPTU1PTl9QR19QQVNTV09SRDogJHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfQogICAgICBDT01NT05fUzNfS0VZOiAke1NFUlZJQ0VfVVNFUl9NSU5JT30KICAgICAgQ09NTU9OX1MzX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgICBDT01NT05fSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFJFRlJFU0h9CiAgICAgIENPTU1PTl9KV1RfU1BPVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNQT1RSRUZSRVNIfQogICAgICBDT01NT05fQVNTSVNUX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RKV1R9CiAgICAgIENPTU1PTl9BU1NJU1RfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUS0VZfQogICAgICBMSUNFTlNFX0tFWTogJycKICAgICAgS0FGS0FfU0VSVkVSUzogJycKICAgICAgS0FGS0FfVVNFX1NTTDogJ2ZhbHNlJwogICAgICB2ZXJzaW9uX251bWJlcjogJHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICAgIHBnX2hvc3Q6IHBvc3RncmVzcWwuZGIuc3ZjLmNsdXN0ZXIubG9jYWwKICAgICAgcGdfcG9ydDogJzU0MzInCiAgICAgIHBnX2RibmFtZTogcG9zdGdyZXMKICAgICAgcGdfdXNlcjogcG9zdGdyZXMKICAgICAgcGdfcGFzc3dvcmQ6ICR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU30KICAgICAgY2hfaG9zdDogY2xpY2tob3VzZS1vcGVucmVwbGF5LWNsaWNraG91c2UuZGIuc3ZjLmNsdXN0ZXIubG9jYWwKICAgICAgY2hfcG9ydDogJzkwMDAnCiAgICAgIGNoX3BvcnRfaHR0cDogJzgxMjMnCiAgICAgIGNoX3VzZXJuYW1lOiBkZWZhdWx0CiAgICAgIGNoX3Bhc3N3b3JkOiAnJwogICAgICBTSVRFX1VSTDogaHR0cHM6Ly8ke1NFUlZJQ0VfRlFETl9OR0lOWE9QRU5SRVBMQVl9CiAgICAgIFMzX0hPU1Q6IGh0dHBzOi8vJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogICAgICBTM19LRVk6ICR7U0VSVklDRV9VU0VSX01JTklPfQogICAgICBTM19TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9NSU5JT30KICAgICAgQVdTX0RFRkFVTFRfUkVHSU9OOiB1cy1lYXN0LTEKICAgICAgRU1BSUxfSE9TVDogJycKICAgICAgRU1BSUxfUE9SVDogJzU4NycKICAgICAgRU1BSUxfVVNFUjogJycKICAgICAgRU1BSUxfUEFTU1dPUkQ6ICcnCiAgICAgIEVNQUlMX1VTRV9UTFM6ICd0cnVlJwogICAgICBFTUFJTF9VU0VfU1NMOiAnZmFsc2UnCiAgICAgIEVNQUlMX1NTTF9LRVk6ICcnCiAgICAgIEVNQUlMX1NTTF9DRVJUOiAnJwogICAgICBFTUFJTF9GUk9NOiAnT3BlblJlcGxheSAnCiAgICAgIExPR0xFVkVMOiBJTkZPCiAgICAgIFBZVEhPTlVOQlVGRkVSRUQ6ICcwJwogICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWQKICBhcGktb3BlbnJlcGxheToKICAgIGltYWdlOiBwdWJsaWMuZWNyLmF3cy9wMXQzdThhMy9hcGk6JHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICBkb21haW5uYW1lOiBhcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGRlcGVuZHNfb246CiAgICAgIGRiLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgICBjbGlja2hvdXNlLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgdm9sdW1lczoKICAgIC0gc2hhcmVkLXZvbHVtZTovbW50L2VmcwogICAgbmV0d29ya3M6CiAgICAgIG9wZW5yZXBsYXktbmV0OgogICAgICAgIGFsaWFzZXM6CiAgICAgICAgLSBhcGktb3BlbnJlcGxheQogICAgICAgIC0gYXBpLW9wZW5yZXBsYXkuYXBwLnN2Yy5jbHVzdGVyLmxvY2FsCiAgICBlbnZpcm9ubWVudDoKICAgICAgQ09NTU9OX0RPTUFJTl9OQU1FOiAke1NFUlZJQ0VfRlFETl9OR0lOWE9QRU5SRVBMQVl9CiAgICAgIENPTU1PTl9QUk9UT0NPTDogaHR0cHMKICAgICAgQ09NTU9OX1ZFUlNJT046ICR7T1BFTlJFUExBWV9WRVJTSU9OOi12MS4yNS4wfQogICAgICBDT01NT05fUEdfUEFTU1dPUkQ6ICR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU30KICAgICAgQ09NTU9OX1MzX0tFWTogJHtTRVJWSUNFX1VTRVJfTUlOSU99CiAgICAgIENPTU1PTl9TM19TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9NSU5JT30KICAgICAgQ09NTU9OX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIENPTU1PTl9KV1RfU1BPVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIENPTU1PTl9KV1RfUkVGUkVTSF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RSRUZSRVNIfQogICAgICBDT01NT05fSldUX1NQT1RfUkVGUkVTSF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTUE9UUkVGUkVTSH0KICAgICAgQ09NTU9OX0FTU0lTVF9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUSldUfQogICAgICBDT01NT05fQVNTSVNUX0tFWTogJHtTRVJWSUNFX1BBU1NXT1JEX0FTU0lTVEtFWX0KICAgICAgTElDRU5TRV9LRVk6ICcnCiAgICAgIEtBRktBX1NFUlZFUlM6ICcnCiAgICAgIEtBRktBX1VTRV9TU0w6ICdmYWxzZScKICAgICAgVE9LRU5fU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfVE9LRU59CiAgICAgIGNoX2RiOiBkZWZhdWx0CiAgICAgIEpXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIEFTU0lTVF9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUSldUfQogICAgICBBV1NfQUNDRVNTX0tFWV9JRDogJHtTRVJWSUNFX1VTRVJfTUlOSU99CiAgICAgIEFXU19TRUNSRVRfQUNDRVNTX0tFWTogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgICBBV1NfRU5EUE9JTlQ6IGh0dHBzOi8vJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogICAgICBBV1NfUkVHSU9OOiB1cy1lYXN0LTEKICAgICAgQlVDS0VUX05BTUU6IG1vYnMKICAgICAgQ0hfVVNFUk5BTUU6IGRlZmF1bHQKICAgICAgQ0hfUEFTU1dPUkQ6ICcnCiAgICAgIENMSUNLSE9VU0VfU1RSSU5HOiBjbGlja2hvdXNlLW9wZW5yZXBsYXktY2xpY2tob3VzZS5kYi5zdmMuY2x1c3Rlci5sb2NhbDo5MDAwL2RlZmF1bHQKICAgICAgQ0xJQ0tIT1VTRV9IVFRQX1NUUklORzogY2xpY2tob3VzZS1vcGVucmVwbGF5LWNsaWNraG91c2UuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6ODEyMy9kZWZhdWx0CiAgICAgIHBnX3Bhc3N3b3JkOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgICAgIFBPU1RHUkVTX1NUUklORzogcG9zdGdyZXM6Ly9wb3N0Z3Jlczoke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9QHBvc3RncmVzcWwuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6NTQzMi9wb3N0Z3Jlcz9zc2xtb2RlPWRpc2FibGUKICAgICAgQVNTSVNUX1VSTDogaHR0cDovL2Fzc2lzdC1vcGVucmVwbGF5LmFwcC5zdmMuY2x1c3Rlci5sb2NhbDo5MDAxL2Fzc2lzdC8lcwogICAgICBBU1NJU1RfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUS0VZfQogICAgICBSRURJU19TVFJJTkc6IHJlZGlzOi8vcmVkaXMtbWFzdGVyLmRiLnN2Yy5jbHVzdGVyLmxvY2FsOjYzNzkKICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkCiAgaHR0cC1vcGVucmVwbGF5OgogICAgaW1hZ2U6IHB1YmxpYy5lY3IuYXdzL3AxdDN1OGEzL2h0dHA6JHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICBkb21haW5uYW1lOiBhcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGRlcGVuZHNfb246CiAgICAgIGRiLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgdm9sdW1lczoKICAgIC0gc2hhcmVkLXZvbHVtZTovbW50L2VmcwogICAgbmV0d29ya3M6CiAgICAgIG9wZW5yZXBsYXktbmV0OgogICAgICAgIGFsaWFzZXM6CiAgICAgICAgLSBodHRwLW9wZW5yZXBsYXkKICAgICAgICAtIGh0dHAtb3BlbnJlcGxheS5hcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGVudmlyb25tZW50OgogICAgICBDT01NT05fRE9NQUlOX05BTUU6ICR7U0VSVklDRV9GUUROX05HSU5YT1BFTlJFUExBWX0KICAgICAgQ09NTU9OX1BST1RPQ09MOiBodHRwcwogICAgICBDT01NT05fVkVSU0lPTjogJHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICAgIENPTU1PTl9QR19QQVNTV09SRDogJHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfQogICAgICBDT01NT05fUzNfS0VZOiAke1NFUlZJQ0VfVVNFUl9NSU5JT30KICAgICAgQ09NTU9OX1MzX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgICBDT01NT05fSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFJFRlJFU0h9CiAgICAgIENPTU1PTl9KV1RfU1BPVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNQT1RSRUZSRVNIfQogICAgICBDT01NT05fQVNTSVNUX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RKV1R9CiAgICAgIENPTU1PTl9BU1NJU1RfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUS0VZfQogICAgICBMSUNFTlNFX0tFWTogJycKICAgICAgS0FGS0FfU0VSVkVSUzogJycKICAgICAgS0FGS0FfVVNFX1NTTDogJ2ZhbHNlJwogICAgICBCVUNLRVRfTkFNRTogdXh0ZXN0aW5nLXJlY29yZHMKICAgICAgQ0FDSEVfQVNTRVRTOiAndHJ1ZScKICAgICAgQVdTX0FDQ0VTU19LRVlfSUQ6ICR7U0VSVklDRV9VU0VSX01JTklPfQogICAgICBBV1NfU0VDUkVUX0FDQ0VTU19LRVk6ICR7U0VSVklDRV9QQVNTV09SRF9NSU5JT30KICAgICAgQVdTX1JFR0lPTjogdXMtZWFzdC0xCiAgICAgIEFXU19FTkRQT0lOVDogaHR0cHM6Ly8ke1NFUlZJQ0VfRlFETl9OR0lOWE9QRU5SRVBMQVl9CiAgICAgIEpXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIEpXVF9TUE9UX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgVE9LRU5fU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfVE9LRU59CiAgICAgIHBnX3Bhc3N3b3JkOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgICAgIFBPU1RHUkVTX1NUUklORzogcG9zdGdyZXM6Ly9wb3N0Z3Jlczoke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9QHBvc3RncmVzcWwuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6NTQzMi9wb3N0Z3Jlcz9zc2xtb2RlPWRpc2FibGUKICAgICAgUkVESVNfU1RSSU5HOiByZWRpczovL3JlZGlzLW1hc3Rlci5kYi5zdmMuY2x1c3Rlci5sb2NhbDo2Mzc5CiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogIGltYWdlcy1vcGVucmVwbGF5OgogICAgaW1hZ2U6IHB1YmxpYy5lY3IuYXdzL3AxdDN1OGEzL2ltYWdlczoke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgIGRvbWFpbm5hbWU6IGFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZGVwZW5kc19vbjoKICAgICAgZGItbWlncmF0aW9uOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICB2b2x1bWVzOgogICAgLSBzaGFyZWQtdm9sdW1lOi9tbnQvZWZzCiAgICBuZXR3b3JrczoKICAgICAgb3BlbnJlcGxheS1uZXQ6CiAgICAgICAgYWxpYXNlczoKICAgICAgICAtIGltYWdlcy1vcGVucmVwbGF5CiAgICAgICAgLSBpbWFnZXMtb3BlbnJlcGxheS5hcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGVudmlyb25tZW50OgogICAgICBDT01NT05fRE9NQUlOX05BTUU6ICR7U0VSVklDRV9GUUROX05HSU5YT1BFTlJFUExBWX0KICAgICAgQ09NTU9OX1BST1RPQ09MOiBodHRwcwogICAgICBDT01NT05fVkVSU0lPTjogJHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICAgIENPTU1PTl9QR19QQVNTV09SRDogJHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfQogICAgICBDT01NT05fUzNfS0VZOiAke1NFUlZJQ0VfVVNFUl9NSU5JT30KICAgICAgQ09NTU9OX1MzX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgICBDT01NT05fSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFJFRlJFU0h9CiAgICAgIENPTU1PTl9KV1RfU1BPVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNQT1RSRUZSRVNIfQogICAgICBDT01NT05fQVNTSVNUX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RKV1R9CiAgICAgIENPTU1PTl9BU1NJU1RfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUS0VZfQogICAgICBMSUNFTlNFX0tFWTogJycKICAgICAgS0FGS0FfU0VSVkVSUzogJycKICAgICAgS0FGS0FfVVNFX1NTTDogJ2ZhbHNlJwogICAgICBBV1NfQUNDRVNTX0tFWV9JRDogJHtTRVJWSUNFX1VTRVJfTUlOSU99CiAgICAgIEFXU19TRUNSRVRfQUNDRVNTX0tFWTogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgICBBV1NfRU5EUE9JTlQ6IGh0dHBzOi8vJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogICAgICBBV1NfUkVHSU9OOiB1cy1lYXN0LTEKICAgICAgQlVDS0VUX05BTUU6IG1vYnMKICAgICAgRlNfQ0xFQU5fSFJTOiAnMjQnCiAgICAgIFJFRElTX1NUUklORzogcmVkaXM6Ly9yZWRpcy1tYXN0ZXIuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6NjM3OQogICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWQKICBpbnRlZ3JhdGlvbnMtb3BlbnJlcGxheToKICAgIGltYWdlOiBwdWJsaWMuZWNyLmF3cy9wMXQzdThhMy9pbnRlZ3JhdGlvbnM6JHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICBkb21haW5uYW1lOiBhcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGRlcGVuZHNfb246CiAgICAgIGRiLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgdm9sdW1lczoKICAgIC0gc2hhcmVkLXZvbHVtZTovbW50L2VmcwogICAgbmV0d29ya3M6CiAgICAgIG9wZW5yZXBsYXktbmV0OgogICAgICAgIGFsaWFzZXM6CiAgICAgICAgLSBpbnRlZ3JhdGlvbnMtb3BlbnJlcGxheQogICAgICAgIC0gaW50ZWdyYXRpb25zLW9wZW5yZXBsYXkuYXBwLnN2Yy5jbHVzdGVyLmxvY2FsCiAgICBlbnZpcm9ubWVudDoKICAgICAgQ09NTU9OX0RPTUFJTl9OQU1FOiAke1NFUlZJQ0VfRlFETl9OR0lOWE9QRU5SRVBMQVl9CiAgICAgIENPTU1PTl9QUk9UT0NPTDogaHR0cHMKICAgICAgQ09NTU9OX1ZFUlNJT046ICR7T1BFTlJFUExBWV9WRVJTSU9OOi12MS4yNS4wfQogICAgICBDT01NT05fUEdfUEFTU1dPUkQ6ICR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU30KICAgICAgQ09NTU9OX1MzX0tFWTogJHtTRVJWSUNFX1VTRVJfTUlOSU99CiAgICAgIENPTU1PTl9TM19TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9NSU5JT30KICAgICAgQ09NTU9OX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIENPTU1PTl9KV1RfU1BPVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIENPTU1PTl9KV1RfUkVGUkVTSF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RSRUZSRVNIfQogICAgICBDT01NT05fSldUX1NQT1RfUkVGUkVTSF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTUE9UUkVGUkVTSH0KICAgICAgQ09NTU9OX0FTU0lTVF9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUSldUfQogICAgICBDT01NT05fQVNTSVNUX0tFWTogJHtTRVJWSUNFX1BBU1NXT1JEX0FTU0lTVEtFWX0KICAgICAgTElDRU5TRV9LRVk6ICcnCiAgICAgIEtBRktBX1NFUlZFUlM6ICcnCiAgICAgIEtBRktBX1VTRV9TU0w6ICdmYWxzZScKICAgICAgQVdTX0FDQ0VTU19LRVlfSUQ6ICR7U0VSVklDRV9VU0VSX01JTklPfQogICAgICBBV1NfU0VDUkVUX0FDQ0VTU19LRVk6ICR7U0VSVklDRV9QQVNTV09SRF9NSU5JT30KICAgICAgQVdTX0VORFBPSU5UOiBodHRwczovLyR7U0VSVklDRV9GUUROX05HSU5YT1BFTlJFUExBWX0KICAgICAgQVdTX1JFR0lPTjogdXMtZWFzdC0xCiAgICAgIEJVQ0tFVF9OQU1FOiBtb2JzCiAgICAgIEpXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIFRPS0VOX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX1RPS0VOfQogICAgICBwZ19wYXNzd29yZDogJHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfQogICAgICBQT1NUR1JFU19TVFJJTkc6IHBvc3RncmVzOi8vcG9zdGdyZXM6JHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfUBwb3N0Z3Jlc3FsLmRiLnN2Yy5jbHVzdGVyLmxvY2FsOjU0MzIvcG9zdGdyZXM/c3NsbW9kZT1kaXNhYmxlCiAgICAgIFJFRElTX1NUUklORzogcmVkaXM6Ly9yZWRpcy1tYXN0ZXIuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6NjM3OQogICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWQKICBzaW5rLW9wZW5yZXBsYXk6CiAgICBpbWFnZTogcHVibGljLmVjci5hd3MvcDF0M3U4YTMvc2luazoke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgIGRvbWFpbm5hbWU6IGFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZGVwZW5kc19vbjoKICAgICAgZGItbWlncmF0aW9uOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICB2b2x1bWVzOgogICAgLSBzaGFyZWQtdm9sdW1lOi9tbnQvZWZzCiAgICBuZXR3b3JrczoKICAgICAgb3BlbnJlcGxheS1uZXQ6CiAgICAgICAgYWxpYXNlczoKICAgICAgICAtIHNpbmstb3BlbnJlcGxheQogICAgICAgIC0gc2luay1vcGVucmVwbGF5LmFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZW52aXJvbm1lbnQ6CiAgICAgIENPTU1PTl9ET01BSU5fTkFNRTogJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogICAgICBDT01NT05fUFJPVE9DT0w6IGh0dHBzCiAgICAgIENPTU1PTl9WRVJTSU9OOiAke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgICAgQ09NTU9OX1BHX1BBU1NXT1JEOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgICAgIENPTU1PTl9TM19LRVk6ICR7U0VSVklDRV9VU0VSX01JTklPfQogICAgICBDT01NT05fUzNfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfTUlOSU99CiAgICAgIENPTU1PTl9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1NQT1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUUkVGUkVTSH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU1BPVFJFRlJFU0h9CiAgICAgIENPTU1PTl9BU1NJU1RfSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0FTU0lTVEpXVH0KICAgICAgQ09NTU9OX0FTU0lTVF9LRVk6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RLRVl9CiAgICAgIExJQ0VOU0VfS0VZOiAnJwogICAgICBLQUZLQV9TRVJWRVJTOiAnJwogICAgICBLQUZLQV9VU0VfU1NMOiAnZmFsc2UnCiAgICAgIEFTU0VUU19PUklHSU46IGh0dHBzOi8vJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfS9zZXNzaW9ucy1hc3NldHMKICAgICAgUkVESVNfU1RSSU5HOiByZWRpczovL3JlZGlzLW1hc3Rlci5kYi5zdmMuY2x1c3Rlci5sb2NhbDo2Mzc5CiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogIHNvdXJjZW1hcHJlYWRlci1vcGVucmVwbGF5OgogICAgaW1hZ2U6IHB1YmxpYy5lY3IuYXdzL3AxdDN1OGEzL3NvdXJjZW1hcHJlYWRlcjoke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgIGRvbWFpbm5hbWU6IGFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZGVwZW5kc19vbjoKICAgICAgZGItbWlncmF0aW9uOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICB2b2x1bWVzOgogICAgLSBzaGFyZWQtdm9sdW1lOi9tbnQvZWZzCiAgICBuZXR3b3JrczoKICAgICAgb3BlbnJlcGxheS1uZXQ6CiAgICAgICAgYWxpYXNlczoKICAgICAgICAtIHNvdXJjZW1hcHJlYWRlci1vcGVucmVwbGF5CiAgICAgICAgLSBzb3VyY2VtYXByZWFkZXItb3BlbnJlcGxheS5hcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGVudmlyb25tZW50OgogICAgICBDT01NT05fRE9NQUlOX05BTUU6ICR7U0VSVklDRV9GUUROX05HSU5YT1BFTlJFUExBWX0KICAgICAgQ09NTU9OX1BST1RPQ09MOiBodHRwcwogICAgICBDT01NT05fVkVSU0lPTjogJHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICAgIENPTU1PTl9QR19QQVNTV09SRDogJHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfQogICAgICBDT01NT05fUzNfS0VZOiAke1NFUlZJQ0VfVVNFUl9NSU5JT30KICAgICAgQ09NTU9OX1MzX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgICBDT01NT05fSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFJFRlJFU0h9CiAgICAgIENPTU1PTl9KV1RfU1BPVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNQT1RSRUZSRVNIfQogICAgICBDT01NT05fQVNTSVNUX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RKV1R9CiAgICAgIENPTU1PTl9BU1NJU1RfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUS0VZfQogICAgICBMSUNFTlNFX0tFWTogJycKICAgICAgS0FGS0FfU0VSVkVSUzogJycKICAgICAgS0FGS0FfVVNFX1NTTDogJ2ZhbHNlJwogICAgICBTTVJfSE9TVDogMC4wLjAuMAogICAgICBTM19IT1NUOiBodHRwOi8vbWluaW8uZGIuc3ZjLmNsdXN0ZXIubG9jYWw6OTAwMAogICAgICBTM19LRVk6ICR7U0VSVklDRV9VU0VSX01JTklPfQogICAgICBTM19TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9NSU5JT30KICAgICAgQVdTX1JFR0lPTjogdXMtZWFzdC0xCiAgICAgIEFTU0VUU19PUklHSU46IGh0dHBzOi8vJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfS9zZXNzaW9ucy1hc3NldHMKICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkCiAgc3BvdC1vcGVucmVwbGF5OgogICAgaW1hZ2U6IHB1YmxpYy5lY3IuYXdzL3AxdDN1OGEzL3Nwb3Q6JHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICBkb21haW5uYW1lOiBhcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGRlcGVuZHNfb246CiAgICAgIGRiLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgdm9sdW1lczoKICAgIC0gc2hhcmVkLXZvbHVtZTovbW50L2VmcwogICAgbmV0d29ya3M6CiAgICAgIG9wZW5yZXBsYXktbmV0OgogICAgICAgIGFsaWFzZXM6CiAgICAgICAgLSBzcG90LW9wZW5yZXBsYXkKICAgICAgICAtIHNwb3Qtb3BlbnJlcGxheS5hcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGVudmlyb25tZW50OgogICAgICBDT01NT05fRE9NQUlOX05BTUU6ICR7U0VSVklDRV9GUUROX05HSU5YT1BFTlJFUExBWX0KICAgICAgQ09NTU9OX1BST1RPQ09MOiBodHRwcwogICAgICBDT01NT05fVkVSU0lPTjogJHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICAgIENPTU1PTl9QR19QQVNTV09SRDogJHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfQogICAgICBDT01NT05fUzNfS0VZOiAke1NFUlZJQ0VfVVNFUl9NSU5JT30KICAgICAgQ09NTU9OX1MzX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgICBDT01NT05fSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFJFRlJFU0h9CiAgICAgIENPTU1PTl9KV1RfU1BPVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNQT1RSRUZSRVNIfQogICAgICBDT01NT05fQVNTSVNUX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RKV1R9CiAgICAgIENPTU1PTl9BU1NJU1RfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUS0VZfQogICAgICBMSUNFTlNFX0tFWTogJycKICAgICAgS0FGS0FfU0VSVkVSUzogJycKICAgICAgS0FGS0FfVVNFX1NTTDogJ2ZhbHNlJwogICAgICBDQUNIRV9BU1NFVFM6ICd0cnVlJwogICAgICBGU19DTEVBTl9IUlM6ICcyNCcKICAgICAgVE9LRU5fU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfVE9LRU59CiAgICAgIEFXU19BQ0NFU1NfS0VZX0lEOiAke1NFUlZJQ0VfVVNFUl9NSU5JT30KICAgICAgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfTUlOSU99CiAgICAgIEJVQ0tFVF9OQU1FOiBzcG90cwogICAgICBBV1NfUkVHSU9OOiB1cy1lYXN0LTEKICAgICAgQVdTX0VORFBPSU5UOiBodHRwczovLyR7U0VSVklDRV9GUUROX05HSU5YT1BFTlJFUExBWX0KICAgICAgSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgSldUX1NQT1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBwZ19wYXNzd29yZDogJHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfQogICAgICBQT1NUR1JFU19TVFJJTkc6IHBvc3RncmVzOi8vcG9zdGdyZXM6JHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfUBwb3N0Z3Jlc3FsLmRiLnN2Yy5jbHVzdGVyLmxvY2FsOjU0MzIvcG9zdGdyZXM/c3NsbW9kZT1kaXNhYmxlCiAgICAgIFJFRElTX1NUUklORzogcmVkaXM6Ly9yZWRpcy1tYXN0ZXIuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6NjM3OQogICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWQKICBzdG9yYWdlLW9wZW5yZXBsYXk6CiAgICBpbWFnZTogcHVibGljLmVjci5hd3MvcDF0M3U4YTMvc3RvcmFnZToke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgIGRvbWFpbm5hbWU6IGFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZGVwZW5kc19vbjoKICAgICAgZGItbWlncmF0aW9uOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICB2b2x1bWVzOgogICAgLSBzaGFyZWQtdm9sdW1lOi9tbnQvZWZzCiAgICBuZXR3b3JrczoKICAgICAgb3BlbnJlcGxheS1uZXQ6CiAgICAgICAgYWxpYXNlczoKICAgICAgICAtIHN0b3JhZ2Utb3BlbnJlcGxheQogICAgICAgIC0gc3RvcmFnZS1vcGVucmVwbGF5LmFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZW52aXJvbm1lbnQ6CiAgICAgIENPTU1PTl9ET01BSU5fTkFNRTogJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogICAgICBDT01NT05fUFJPVE9DT0w6IGh0dHBzCiAgICAgIENPTU1PTl9WRVJTSU9OOiAke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgICAgQ09NTU9OX1BHX1BBU1NXT1JEOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgICAgIENPTU1PTl9TM19LRVk6ICR7U0VSVklDRV9VU0VSX01JTklPfQogICAgICBDT01NT05fUzNfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfTUlOSU99CiAgICAgIENPTU1PTl9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1NQT1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUUkVGUkVTSH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU1BPVFJFRlJFU0h9CiAgICAgIENPTU1PTl9BU1NJU1RfSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0FTU0lTVEpXVH0KICAgICAgQ09NTU9OX0FTU0lTVF9LRVk6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RLRVl9CiAgICAgIExJQ0VOU0VfS0VZOiAnJwogICAgICBLQUZLQV9TRVJWRVJTOiAnJwogICAgICBLQUZLQV9VU0VfU1NMOiAnZmFsc2UnCiAgICAgIEFXU19BQ0NFU1NfS0VZX0lEOiAke1NFUlZJQ0VfVVNFUl9NSU5JT30KICAgICAgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfTUlOSU99CiAgICAgIEFXU19FTkRQT0lOVDogaHR0cHM6Ly8ke1NFUlZJQ0VfRlFETl9OR0lOWE9QRU5SRVBMQVl9CiAgICAgIEFXU19SRUdJT046IHVzLWVhc3QtMQogICAgICBCVUNLRVRfTkFNRTogbW9icwogICAgICBGU19DTEVBTl9IUlM6ICcyNCcKICAgICAgUkVESVNfU1RSSU5HOiByZWRpczovL3JlZGlzLW1hc3Rlci5kYi5zdmMuY2x1c3Rlci5sb2NhbDo2Mzc5CiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogIGFzc2V0cy1vcGVucmVwbGF5OgogICAgaW1hZ2U6IHB1YmxpYy5lY3IuYXdzL3AxdDN1OGEzL2Fzc2V0czoke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgIGRvbWFpbm5hbWU6IGFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZGVwZW5kc19vbjoKICAgICAgZGItbWlncmF0aW9uOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICB2b2x1bWVzOgogICAgLSBzaGFyZWQtdm9sdW1lOi9tbnQvZWZzCiAgICBuZXR3b3JrczoKICAgICAgb3BlbnJlcGxheS1uZXQ6CiAgICAgICAgYWxpYXNlczoKICAgICAgICAtIGFzc2V0cy1vcGVucmVwbGF5CiAgICAgICAgLSBhc3NldHMtb3BlbnJlcGxheS5hcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGVudmlyb25tZW50OgogICAgICBDT01NT05fRE9NQUlOX05BTUU6ICR7U0VSVklDRV9GUUROX05HSU5YT1BFTlJFUExBWX0KICAgICAgQ09NTU9OX1BST1RPQ09MOiBodHRwcwogICAgICBDT01NT05fVkVSU0lPTjogJHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICAgIENPTU1PTl9QR19QQVNTV09SRDogJHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfQogICAgICBDT01NT05fUzNfS0VZOiAke1NFUlZJQ0VfVVNFUl9NSU5JT30KICAgICAgQ09NTU9OX1MzX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgICBDT01NT05fSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFJFRlJFU0h9CiAgICAgIENPTU1PTl9KV1RfU1BPVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNQT1RSRUZSRVNIfQogICAgICBDT01NT05fQVNTSVNUX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RKV1R9CiAgICAgIENPTU1PTl9BU1NJU1RfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUS0VZfQogICAgICBMSUNFTlNFX0tFWTogJycKICAgICAgS0FGS0FfU0VSVkVSUzogJycKICAgICAgS0FGS0FfVVNFX1NTTDogJ2ZhbHNlJwogICAgICBBV1NfQUNDRVNTX0tFWV9JRDogJHtTRVJWSUNFX1VTRVJfTUlOSU99CiAgICAgIEFXU19TRUNSRVRfQUNDRVNTX0tFWTogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgICBCVUNLRVRfTkFNRTogc2Vzc2lvbnMtYXNzZXRzCiAgICAgIEFXU19FTkRQT0lOVDogaHR0cHM6Ly8ke1NFUlZJQ0VfRlFETl9OR0lOWE9QRU5SRVBMQVl9CiAgICAgIEFXU19SRUdJT046IHVzLWVhc3QtMQogICAgICBBU1NFVFNfT1JJR0lOOiBodHRwczovLyR7U0VSVklDRV9GUUROX05HSU5YT1BFTlJFUExBWX0vc2Vzc2lvbnMtYXNzZXRzCiAgICAgIFJFRElTX1NUUklORzogcmVkaXM6Ly9yZWRpcy1tYXN0ZXIuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6NjM3OQogICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWQKICBhc3Npc3Qtb3BlbnJlcGxheToKICAgIGltYWdlOiBwdWJsaWMuZWNyLmF3cy9wMXQzdThhMy9hc3Npc3Q6JHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICBkb21haW5uYW1lOiBhcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGRlcGVuZHNfb246CiAgICAgIGRiLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgdm9sdW1lczoKICAgIC0gc2hhcmVkLXZvbHVtZTovbW50L2VmcwogICAgbmV0d29ya3M6CiAgICAgIG9wZW5yZXBsYXktbmV0OgogICAgICAgIGFsaWFzZXM6CiAgICAgICAgLSBhc3Npc3Qtb3BlbnJlcGxheQogICAgICAgIC0gYXNzaXN0LW9wZW5yZXBsYXkuYXBwLnN2Yy5jbHVzdGVyLmxvY2FsCiAgICBlbnZpcm9ubWVudDoKICAgICAgQ09NTU9OX0RPTUFJTl9OQU1FOiAke1NFUlZJQ0VfRlFETl9OR0lOWE9QRU5SRVBMQVl9CiAgICAgIENPTU1PTl9QUk9UT0NPTDogaHR0cHMKICAgICAgQ09NTU9OX1ZFUlNJT046ICR7T1BFTlJFUExBWV9WRVJTSU9OOi12MS4yNS4wfQogICAgICBDT01NT05fUEdfUEFTU1dPUkQ6ICR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU30KICAgICAgQ09NTU9OX1MzX0tFWTogJHtTRVJWSUNFX1VTRVJfTUlOSU99CiAgICAgIENPTU1PTl9TM19TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9NSU5JT30KICAgICAgQ09NTU9OX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIENPTU1PTl9KV1RfU1BPVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIENPTU1PTl9KV1RfUkVGUkVTSF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RSRUZSRVNIfQogICAgICBDT01NT05fSldUX1NQT1RfUkVGUkVTSF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTUE9UUkVGUkVTSH0KICAgICAgQ09NTU9OX0FTU0lTVF9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUSldUfQogICAgICBDT01NT05fQVNTSVNUX0tFWTogJHtTRVJWSUNFX1BBU1NXT1JEX0FTU0lTVEtFWX0KICAgICAgTElDRU5TRV9LRVk6ICcnCiAgICAgIEtBRktBX1NFUlZFUlM6ICcnCiAgICAgIEtBRktBX1VTRV9TU0w6ICdmYWxzZScKICAgICAgQVNTSVNUX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RKV1R9CiAgICAgIEFTU0lTVF9LRVk6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RLRVl9CiAgICAgIEFXU19ERUZBVUxUX1JFR0lPTjogdXMtZWFzdC0xCiAgICAgIFJFRElTX1VSTDogcmVkaXM6Ly9yZWRpcy1tYXN0ZXIuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6NjM3OQogICAgICBDTEVBUl9TT0NLRVRfVElNRTogJzcyMCcKICAgICAgZGVidWc6ICcwJwogICAgICByZWRpczogJ2ZhbHNlJwogICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWQKICBjYW52YXNlcy1vcGVucmVwbGF5OgogICAgaW1hZ2U6IHB1YmxpYy5lY3IuYXdzL3AxdDN1OGEzL2NhbnZhc2VzOiR7T1BFTlJFUExBWV9WRVJTSU9OOi12MS4yNS4wfQogICAgZG9tYWlubmFtZTogYXBwLnN2Yy5jbHVzdGVyLmxvY2FsCiAgICBkZXBlbmRzX29uOgogICAgICBkYi1taWdyYXRpb246CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2NvbXBsZXRlZF9zdWNjZXNzZnVsbHkKICAgIHZvbHVtZXM6CiAgICAtIHNoYXJlZC12b2x1bWU6L21udC9lZnMKICAgIG5ldHdvcmtzOgogICAgICBvcGVucmVwbGF5LW5ldDoKICAgICAgICBhbGlhc2VzOgogICAgICAgIC0gY2FudmFzZXMtb3BlbnJlcGxheQogICAgICAgIC0gY2FudmFzZXMtb3BlbnJlcGxheS5hcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGVudmlyb25tZW50OgogICAgICBDT01NT05fRE9NQUlOX05BTUU6ICR7U0VSVklDRV9GUUROX05HSU5YT1BFTlJFUExBWX0KICAgICAgQ09NTU9OX1BST1RPQ09MOiBodHRwcwogICAgICBDT01NT05fVkVSU0lPTjogJHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICAgIENPTU1PTl9QR19QQVNTV09SRDogJHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfQogICAgICBDT01NT05fUzNfS0VZOiAke1NFUlZJQ0VfVVNFUl9NSU5JT30KICAgICAgQ09NTU9OX1MzX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgICBDT01NT05fSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFJFRlJFU0h9CiAgICAgIENPTU1PTl9KV1RfU1BPVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNQT1RSRUZSRVNIfQogICAgICBDT01NT05fQVNTSVNUX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RKV1R9CiAgICAgIENPTU1PTl9BU1NJU1RfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUS0VZfQogICAgICBMSUNFTlNFX0tFWTogJycKICAgICAgS0FGS0FfU0VSVkVSUzogJycKICAgICAgS0FGS0FfVVNFX1NTTDogJ2ZhbHNlJwogICAgICBBV1NfQUNDRVNTX0tFWV9JRDogJHtTRVJWSUNFX1VTRVJfTUlOSU99CiAgICAgIEFXU19TRUNSRVRfQUNDRVNTX0tFWTogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgICBBV1NfRU5EUE9JTlQ6IGh0dHBzOi8vJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogICAgICBBV1NfUkVHSU9OOiB1cy1lYXN0LTEKICAgICAgQlVDS0VUX05BTUU6IG1vYnMKICAgICAgRlNfQ0xFQU5fSFJTOiAnMjQnCiAgICAgIFJFRElTX1NUUklORzogcmVkaXM6Ly9yZWRpcy1tYXN0ZXIuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6NjM3OQogICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWQKICBjaGFsaWNlLW9wZW5yZXBsYXk6CiAgICBpbWFnZTogcHVibGljLmVjci5hd3MvcDF0M3U4YTMvY2hhbGljZToke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgIGRvbWFpbm5hbWU6IGFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZGVwZW5kc19vbjoKICAgICAgZGItbWlncmF0aW9uOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICAgIGNsaWNraG91c2UtbWlncmF0aW9uOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICB2b2x1bWVzOgogICAgLSBzaGFyZWQtdm9sdW1lOi9tbnQvZWZzCiAgICBuZXR3b3JrczoKICAgICAgb3BlbnJlcGxheS1uZXQ6CiAgICAgICAgYWxpYXNlczoKICAgICAgICAtIGNoYWxpY2Utb3BlbnJlcGxheQogICAgICAgIC0gY2hhbGljZS1vcGVucmVwbGF5LmFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZW52aXJvbm1lbnQ6CiAgICAgIENPTU1PTl9ET01BSU5fTkFNRTogJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogICAgICBDT01NT05fUFJPVE9DT0w6IGh0dHBzCiAgICAgIENPTU1PTl9WRVJTSU9OOiAke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgICAgQ09NTU9OX1BHX1BBU1NXT1JEOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgICAgIENPTU1PTl9TM19LRVk6ICR7U0VSVklDRV9VU0VSX01JTklPfQogICAgICBDT01NT05fUzNfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfTUlOSU99CiAgICAgIENPTU1PTl9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1NQT1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUUkVGUkVTSH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU1BPVFJFRlJFU0h9CiAgICAgIENPTU1PTl9BU1NJU1RfSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0FTU0lTVEpXVH0KICAgICAgQ09NTU9OX0FTU0lTVF9LRVk6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RLRVl9CiAgICAgIExJQ0VOU0VfS0VZOiAnJwogICAgICBLQUZLQV9TRVJWRVJTOiAnJwogICAgICBLQUZLQV9VU0VfU1NMOiAnZmFsc2UnCiAgICAgIFJFRElTX1NUUklORzogcmVkaXM6Ly9yZWRpcy1tYXN0ZXIuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6NjM3OQogICAgICBjaF91c2VybmFtZTogZGVmYXVsdAogICAgICBjaF9wYXNzd29yZDogJycKICAgICAgY2hfaG9zdDogY2xpY2tob3VzZS1vcGVucmVwbGF5LWNsaWNraG91c2UuZGIuc3ZjLmNsdXN0ZXIubG9jYWwKICAgICAgY2hfcG9ydDogJzkwMDAnCiAgICAgIGNoX3BvcnRfaHR0cDogJzgxMjMnCiAgICAgIHNvdXJjZW1hcHNfcmVhZGVyOiBodHRwOi8vc291cmNlbWFwcmVhZGVyLW9wZW5yZXBsYXkuYXBwLnN2Yy5jbHVzdGVyLmxvY2FsOjkwMDAve30vc291cmNlbWFwcwogICAgICBBU1NJU1RfVVJMOiBodHRwOi8vYXNzaXN0LW9wZW5yZXBsYXkuYXBwLnN2Yy5jbHVzdGVyLmxvY2FsOjkwMDEvYXNzaXN0LyVzCiAgICAgIEpXVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFJFRlJFU0h9CiAgICAgIEpXVF9TUE9UX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU1BPVFJFRlJFU0h9CiAgICAgIEFTU0lTVF9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUSldUfQogICAgICBKV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBBU1NJU1RfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUS0VZfQogICAgICBKV1RfU1BPVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIHZlcnNpb25fbnVtYmVyOiAke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgICAgcGdfaG9zdDogcG9zdGdyZXNxbC5kYi5zdmMuY2x1c3Rlci5sb2NhbAogICAgICBwZ19wb3J0OiAnNTQzMicKICAgICAgcGdfZGJuYW1lOiBwb3N0Z3JlcwogICAgICBwZ191c2VyOiBwb3N0Z3JlcwogICAgICBwZ19wYXNzd29yZDogJHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfQogICAgICBTSVRFX1VSTDogaHR0cHM6Ly8ke1NFUlZJQ0VfRlFETl9OR0lOWE9QRU5SRVBMQVl9CiAgICAgIFMzX0hPU1Q6IGh0dHBzOi8vJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogICAgICBTM19LRVk6ICR7U0VSVklDRV9VU0VSX01JTklPfQogICAgICBTM19TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9NSU5JT30KICAgICAgQVdTX0RFRkFVTFRfUkVHSU9OOiB1cy1lYXN0LTEKICAgICAgc2Vzc2lvbnNfcmVnaW9uOiB1cy1lYXN0LTEKICAgICAgQVNTSVNUX1JFQ09SRFNfQlVDS0VUOiByZWNvcmRzCiAgICAgIHNlc3Npb25zX2J1Y2tldDogbW9icwogICAgICBJT1NfVklERU9fQlVDS0VUOiBtb2JzCiAgICAgIHNvdXJjZW1hcHNfYnVja2V0OiBzb3VyY2VtYXBzCiAgICAgIGpzX2NhY2hlX2J1Y2tldDogc2Vzc2lvbnMtYXNzZXRzCiAgICAgIEVNQUlMX0hPU1Q6ICcnCiAgICAgIEVNQUlMX1BPUlQ6ICc1ODcnCiAgICAgIEVNQUlMX1VTRVI6ICcnCiAgICAgIEVNQUlMX1BBU1NXT1JEOiAnJwogICAgICBFTUFJTF9VU0VfVExTOiAndHJ1ZScKICAgICAgRU1BSUxfVVNFX1NTTDogJ2ZhbHNlJwogICAgICBFTUFJTF9TU0xfS0VZOiAnJwogICAgICBFTUFJTF9TU0xfQ0VSVDogJycKICAgICAgRU1BSUxfRlJPTTogJ09wZW5SZXBsYXkgJwogICAgICBDSF9DT01QUkVTU0lPTjogJ2ZhbHNlJwogICAgICBDTFVTVEVSX1VSTDogc3ZjLmNsdXN0ZXIubG9jYWwKICAgICAgSldUX0VYUElSQVRJT046ICc4NjQwMCcKICAgICAgTE9HTEVWRUw6IElORk8KICAgICAgUFlUSE9OVU5CVUZGRVJFRDogJzAnCiAgICAgIFNBTUwyX01EX1VSTDogJycKICAgICAgcm9vdF9wYXRoOiAvYXBpCiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogIGRiLW9wZW5yZXBsYXk6CiAgICBpbWFnZTogcHVibGljLmVjci5hd3MvcDF0M3U4YTMvZGI6JHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICBkb21haW5uYW1lOiBhcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGRlcGVuZHNfb246CiAgICAgIGRiLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgICBjbGlja2hvdXNlLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgdm9sdW1lczoKICAgIC0gc2hhcmVkLXZvbHVtZTovbW50L2VmcwogICAgbmV0d29ya3M6CiAgICAgIG9wZW5yZXBsYXktbmV0OgogICAgICAgIGFsaWFzZXM6CiAgICAgICAgLSBkYi1vcGVucmVwbGF5CiAgICAgICAgLSBkYi1vcGVucmVwbGF5LmFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZW52aXJvbm1lbnQ6CiAgICAgIENPTU1PTl9ET01BSU5fTkFNRTogJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogICAgICBDT01NT05fUFJPVE9DT0w6IGh0dHBzCiAgICAgIENPTU1PTl9WRVJTSU9OOiAke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgICAgQ09NTU9OX1BHX1BBU1NXT1JEOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgICAgIENPTU1PTl9TM19LRVk6ICR7U0VSVklDRV9VU0VSX01JTklPfQogICAgICBDT01NT05fUzNfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfTUlOSU99CiAgICAgIENPTU1PTl9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1NQT1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUUkVGUkVTSH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU1BPVFJFRlJFU0h9CiAgICAgIENPTU1PTl9BU1NJU1RfSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0FTU0lTVEpXVH0KICAgICAgQ09NTU9OX0FTU0lTVF9LRVk6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RLRVl9CiAgICAgIExJQ0VOU0VfS0VZOiAnJwogICAgICBLQUZLQV9TRVJWRVJTOiAnJwogICAgICBLQUZLQV9VU0VfU1NMOiAnZmFsc2UnCiAgICAgIENIX1VTRVJOQU1FOiBkZWZhdWx0CiAgICAgIENIX1BBU1NXT1JEOiAnJwogICAgICBDTElDS0hPVVNFX1NUUklORzogY2xpY2tob3VzZS1vcGVucmVwbGF5LWNsaWNraG91c2UuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6OTAwMC9kZWZhdWx0CiAgICAgIGNoX2RiOiBkZWZhdWx0CiAgICAgIHBnX3Bhc3N3b3JkOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgICAgIFBPU1RHUkVTX1NUUklORzogcG9zdGdyZXM6Ly9wb3N0Z3Jlczoke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9QHBvc3RncmVzcWwuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6NTQzMi9wb3N0Z3Jlcz9zc2xtb2RlPWRpc2FibGUKICAgICAgUkVESVNfU1RSSU5HOiByZWRpczovL3JlZGlzLW1hc3Rlci5kYi5zdmMuY2x1c3Rlci5sb2NhbDo2Mzc5CiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogIGVuZGVyLW9wZW5yZXBsYXk6CiAgICBpbWFnZTogcHVibGljLmVjci5hd3MvcDF0M3U4YTMvZW5kZXI6JHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICBkb21haW5uYW1lOiBhcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGRlcGVuZHNfb246CiAgICAgIGRiLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgdm9sdW1lczoKICAgIC0gc2hhcmVkLXZvbHVtZTovbW50L2VmcwogICAgbmV0d29ya3M6CiAgICAgIG9wZW5yZXBsYXktbmV0OgogICAgICAgIGFsaWFzZXM6CiAgICAgICAgLSBlbmRlci1vcGVucmVwbGF5CiAgICAgICAgLSBlbmRlci1vcGVucmVwbGF5LmFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZW52aXJvbm1lbnQ6CiAgICAgIENPTU1PTl9ET01BSU5fTkFNRTogJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogICAgICBDT01NT05fUFJPVE9DT0w6IGh0dHBzCiAgICAgIENPTU1PTl9WRVJTSU9OOiAke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgICAgQ09NTU9OX1BHX1BBU1NXT1JEOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgICAgIENPTU1PTl9TM19LRVk6ICR7U0VSVklDRV9VU0VSX01JTklPfQogICAgICBDT01NT05fUzNfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfTUlOSU99CiAgICAgIENPTU1PTl9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1NQT1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUUkVGUkVTSH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU1BPVFJFRlJFU0h9CiAgICAgIENPTU1PTl9BU1NJU1RfSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0FTU0lTVEpXVH0KICAgICAgQ09NTU9OX0FTU0lTVF9LRVk6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RLRVl9CiAgICAgIExJQ0VOU0VfS0VZOiAnJwogICAgICBLQUZLQV9TRVJWRVJTOiAnJwogICAgICBLQUZLQV9VU0VfU1NMOiAnZmFsc2UnCiAgICAgIHBnX3Bhc3N3b3JkOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgICAgIFBPU1RHUkVTX1NUUklORzogcG9zdGdyZXM6Ly9wb3N0Z3Jlczoke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9QHBvc3RncmVzcWwuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6NTQzMi9wb3N0Z3Jlcz9zc2xtb2RlPWRpc2FibGUKICAgICAgUkVESVNfU1RSSU5HOiByZWRpczovL3JlZGlzLW1hc3Rlci5kYi5zdmMuY2x1c3Rlci5sb2NhbDo2Mzc5CiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogIGZyb250ZW5kLW9wZW5yZXBsYXk6CiAgICBpbWFnZTogcHVibGljLmVjci5hd3MvcDF0M3U4YTMvZnJvbnRlbmQ6JHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICBkb21haW5uYW1lOiBhcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGRlcGVuZHNfb246CiAgICAgIGRiLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgdm9sdW1lczoKICAgIC0gc2hhcmVkLXZvbHVtZTovbW50L2VmcwogICAgbmV0d29ya3M6CiAgICAgIG9wZW5yZXBsYXktbmV0OgogICAgICAgIGFsaWFzZXM6CiAgICAgICAgLSBmcm9udGVuZC1vcGVucmVwbGF5CiAgICAgICAgLSBmcm9udGVuZC1vcGVucmVwbGF5LmFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZW52aXJvbm1lbnQ6CiAgICAgIENPTU1PTl9ET01BSU5fTkFNRTogJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogICAgICBDT01NT05fUFJPVE9DT0w6IGh0dHBzCiAgICAgIENPTU1PTl9WRVJTSU9OOiAke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgICAgQ09NTU9OX1BHX1BBU1NXT1JEOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgICAgIENPTU1PTl9TM19LRVk6ICR7U0VSVklDRV9VU0VSX01JTklPfQogICAgICBDT01NT05fUzNfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfTUlOSU99CiAgICAgIENPTU1PTl9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1NQT1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUUkVGUkVTSH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU1BPVFJFRlJFU0h9CiAgICAgIENPTU1PTl9BU1NJU1RfSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0FTU0lTVEpXVH0KICAgICAgQ09NTU9OX0FTU0lTVF9LRVk6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RLRVl9CiAgICAgIExJQ0VOU0VfS0VZOiAnJwogICAgICBLQUZLQV9TRVJWRVJTOiAnJwogICAgICBLQUZLQV9VU0VfU1NMOiAnZmFsc2UnCiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogIGhldXJpc3RpY3Mtb3BlbnJlcGxheToKICAgIGltYWdlOiBwdWJsaWMuZWNyLmF3cy9wMXQzdThhMy9oZXVyaXN0aWNzOiR7T1BFTlJFUExBWV9WRVJTSU9OOi12MS4yNS4wfQogICAgZG9tYWlubmFtZTogYXBwLnN2Yy5jbHVzdGVyLmxvY2FsCiAgICBkZXBlbmRzX29uOgogICAgICBkYi1taWdyYXRpb246CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2NvbXBsZXRlZF9zdWNjZXNzZnVsbHkKICAgIHZvbHVtZXM6CiAgICAtIHNoYXJlZC12b2x1bWU6L21udC9lZnMKICAgIG5ldHdvcmtzOgogICAgICBvcGVucmVwbGF5LW5ldDoKICAgICAgICBhbGlhc2VzOgogICAgICAgIC0gaGV1cmlzdGljcy1vcGVucmVwbGF5CiAgICAgICAgLSBoZXVyaXN0aWNzLW9wZW5yZXBsYXkuYXBwLnN2Yy5jbHVzdGVyLmxvY2FsCiAgICBlbnZpcm9ubWVudDoKICAgICAgQ09NTU9OX0RPTUFJTl9OQU1FOiAke1NFUlZJQ0VfRlFETl9OR0lOWE9QRU5SRVBMQVl9CiAgICAgIENPTU1PTl9QUk9UT0NPTDogaHR0cHMKICAgICAgQ09NTU9OX1ZFUlNJT046ICR7T1BFTlJFUExBWV9WRVJTSU9OOi12MS4yNS4wfQogICAgICBDT01NT05fUEdfUEFTU1dPUkQ6ICR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU30KICAgICAgQ09NTU9OX1MzX0tFWTogJHtTRVJWSUNFX1VTRVJfTUlOSU99CiAgICAgIENPTU1PTl9TM19TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9NSU5JT30KICAgICAgQ09NTU9OX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIENPTU1PTl9KV1RfU1BPVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIENPTU1PTl9KV1RfUkVGUkVTSF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RSRUZSRVNIfQogICAgICBDT01NT05fSldUX1NQT1RfUkVGUkVTSF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTUE9UUkVGUkVTSH0KICAgICAgQ09NTU9OX0FTU0lTVF9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUSldUfQogICAgICBDT01NT05fQVNTSVNUX0tFWTogJHtTRVJWSUNFX1BBU1NXT1JEX0FTU0lTVEtFWX0KICAgICAgTElDRU5TRV9LRVk6ICcnCiAgICAgIEtBRktBX1NFUlZFUlM6ICcnCiAgICAgIEtBRktBX1VTRV9TU0w6ICdmYWxzZScKICAgICAgUkVESVNfU1RSSU5HOiByZWRpczovL3JlZGlzLW1hc3Rlci5kYi5zdmMuY2x1c3Rlci5sb2NhbDo2Mzc5CiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogIG5naW54LW9wZW5yZXBsYXk6CiAgICBpbWFnZTogbmdpbng6bGF0ZXN0CiAgICBkZXBlbmRzX29uOgogICAgLSBmcm9udGVuZC1vcGVucmVwbGF5CiAgICAtIGNoYWxpY2Utb3BlbnJlcGxheQogICAgLSBhcGktb3BlbnJlcGxheQogICAgZW52aXJvbm1lbnQ6CiAgICAtIFNFUlZJQ0VfVVJMX05HSU5YT1BFTlJFUExBWQogICAgdm9sdW1lczoKICAgIC0gdHlwZTogYmluZAogICAgICBzb3VyY2U6IC4vbmdpbngvb3BlbnJlcGxheS5jb25mCiAgICAgIHRhcmdldDogL2V0Yy9uZ2lueC9jb25mLmQvZGVmYXVsdC5jb25mCiAgICAgIHJlYWRfb25seTogdHJ1ZQogICAgICBjb250ZW50OiAibWFwICRhcmdfcGVlcklkICRzZXNzaW9uaWQge1xuICBkZWZhdWx0IFwiXCI7XG4gIFwifi4qLShcXGQrKSg/Oi0uKnwkKVwiXAogICAgICAgIFwgJDE7XG59XG5tYXAgJGh0dHBfeF9mb3J3YXJkZWRfZm9yICRyZWFsX2lwIHtcbiAgfl4oXFxkK1xcLlxcZCtcXC5cXGQrXFxcCiAgICAgICAgLlxcZCspICQxO1xuICBkZWZhdWx0ICRyZW1vdGVfYWRkcjtcbn1cbm1hcCAkaHR0cF91cGdyYWRlICRjb25uZWN0aW9uX3VwZ3JhZGVcCiAgICAgICAgXCB7XG4gIGRlZmF1bHQgdXBncmFkZTtcbiAgJycgY2xvc2U7XG59XG5tYXAgJGh0dHBfeF9mb3J3YXJkZWRfcHJvdG8gJG9yaWdpbl9wcm90b1wKICAgICAgICBcIHtcbiAgZGVmYXVsdCAkaHR0cF94X2ZvcndhcmRlZF9wcm90bztcbiAgJycgJHNjaGVtZTtcbn1cbnNlcnZlciB7XG4gIGxpc3RlblwKICAgICAgICBcIDgwO1xuICBjbGllbnRfYm9keV9idWZmZXJfc2l6ZSA1MTJrO1xuICBjbGllbnRfbWF4X2JvZHlfc2l6ZSAxMG07XG4gIHByb3h5X2J1ZmZlcl9zaXplXAogICAgICAgIFwgNjRrO1xuICBwcm94eV9idWZmZXJzIDMyIDY0aztcbiAgcHJveHlfYnVzeV9idWZmZXJzX3NpemUgMTI4aztcbiAgcHJveHlfbWF4X3RlbXBfZmlsZV9zaXplXAogICAgICAgIFwgMjA0OG07XG4gIHByb3h5X2J1ZmZlcmluZyBvbjtcbiAgcHJveHlfY29ubmVjdF90aW1lb3V0IDEyMHM7XG4gIHByb3h5X3JlYWRfdGltZW91dFwKICAgICAgICBcIDMwMHM7XG4gIHByb3h5X3NlbmRfdGltZW91dCAzMDBzO1xuICByZWFsX2lwX2hlYWRlciBYLUZvcndhcmRlZC1Gb3I7XG4gXAogICAgICAgIFwgc2V0X3JlYWxfaXBfZnJvbSAwLjAuMC4wLzA7XG4gIHJlYWxfaXBfcmVjdXJzaXZlIG9uO1xuICBhZGRfaGVhZGVyIFgtWFNTLVByb3RlY3Rpb25cCiAgICAgICAgXCBcIjE7IG1vZGU9YmxvY2tcIiBhbHdheXM7XG4gIGFkZF9oZWFkZXIgWC1Db250ZW50LVR5cGUtT3B0aW9ucyBcIm5vc25pZmZcIlwKICAgICAgICBcIGFsd2F5cztcbiAgYWRkX2hlYWRlciBSZWZlcnJlci1Qb2xpY3kgXCJzYW1lLW9yaWdpblwiIGFsd2F5cztcbiAgc2VydmVyX3Rva2Vuc1wKICAgICAgICBcIG9mZjtcbiAgbG9jYXRpb24gfiBeLyhtb2JzfHNlc3Npb25zLWFzc2V0c3xmcm9udGVuZHxzdGF0aWN8c291cmNlbWFwc3xpb3MtaW1hZ2VzfHV4dGVzdGluZy1yZWNvcmRzfHJlY29yZHN8c3BvdHMpL1wKICAgICAgICBcIHtcbiAgICBwcm94eV9zZXRfaGVhZGVyIFgtUmVhbC1JUCAkcmVtb3RlX2FkZHI7XG4gICAgcHJveHlfc2V0X2hlYWRlciBYLUZvcndhcmRlZC1Gb3JcCiAgICAgICAgXCAkcHJveHlfYWRkX3hfZm9yd2FyZGVkX2ZvcjtcbiAgICBwcm94eV9zZXRfaGVhZGVyIFgtRm9yd2FyZGVkLVByb3RvICRzY2hlbWU7XG5cCiAgICAgICAgXCAgICBwcm94eV9zZXRfaGVhZGVyIEhvc3QgJGh0dHBfaG9zdDtcbiAgICBwcm94eV9jb25uZWN0X3RpbWVvdXQgMzAwO1xuIFwKICAgICAgICBcICAgcHJveHlfaHR0cF92ZXJzaW9uIDEuMTtcbiAgICBwcm94eV9zZXRfaGVhZGVyIENvbm5lY3Rpb24gXCJcIjtcbiAgICBjaHVua2VkX3RyYW5zZmVyX2VuY29kaW5nXAogICAgICAgIFwgb2ZmO1xuICAgIHByb3h5X3Bhc3MgaHR0cDovL21pbmlvLmRiLnN2Yy5jbHVzdGVyLmxvY2FsOjkwMDA7XG4gIH1cbiAgbG9jYXRpb25cCiAgICAgICAgXCAvbWluaW8vIHtcbiAgICBwcm94eV9odHRwX3ZlcnNpb24gMS4xO1xuICAgIHByb3h5X3NldF9oZWFkZXIgVXBncmFkZSAkaHR0cF91cGdyYWRlO1xuXAogICAgICAgIFwgICAgcHJveHlfc2V0X2hlYWRlciBDb25uZWN0aW9uIFwiVXBncmFkZVwiO1xuICAgIHByb3h5X3NldF9oZWFkZXIgSG9zdCAkaG9zdDtcblwKICAgICAgICBcICAgIHByb3h5X3Bhc3MgaHR0cDovL21pbmlvLmRiLnN2Yy5jbHVzdGVyLmxvY2FsOjkwMDA7XG4gIH1cbiAgbG9jYXRpb24gL2luZ2VzdC9cCiAgICAgICAgXCB7XG4gICAgcmV3cml0ZSBeL2luZ2VzdC8oLiopIC8kMSBicmVhaztcbiAgICBwcm94eV9odHRwX3ZlcnNpb24gMS4xO1xuIFwKICAgICAgICBcICAgcHJveHlfc2V0X2hlYWRlciBVcGdyYWRlICRodHRwX3VwZ3JhZGU7XG4gICAgcHJveHlfc2V0X2hlYWRlciBDb25uZWN0aW9uXAogICAgICAgIFwgXCJVcGdyYWRlXCI7XG4gICAgcHJveHlfc2V0X2hlYWRlciBYLUZvcndhcmRlZC1Gb3IgJHJlYWxfaXA7XG4gICAgcHJveHlfc2V0X2hlYWRlclwKICAgICAgICBcIFgtRm9yd2FyZGVkLUhvc3QgJGhvc3Q7XG4gICAgcHJveHlfc2V0X2hlYWRlciBYLVJlYWwtSVAgJHJlYWxfaXA7XG4gICAgcHJveHlfc2V0X2hlYWRlclwKICAgICAgICBcIEhvc3QgJGhvc3Q7XG4gICAgcHJveHlfcGFzcyBodHRwOi8vaHR0cC1vcGVucmVwbGF5LmFwcC5zdmMuY2x1c3Rlci5sb2NhbDo4MDgwO1xuXAogICAgICAgIFwgICAgcHJveHlfcmVhZF90aW1lb3V0IDMwMHM7XG4gICAgcHJveHlfY29ubmVjdF90aW1lb3V0IDEyMHM7XG4gICAgcHJveHlfc2VuZF90aW1lb3V0XAogICAgICAgIFwgMzAwcztcbiAgICBhZGRfaGVhZGVyICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nICcqJyBhbHdheXM7XG4gICAgYWRkX2hlYWRlclwKICAgICAgICBcICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJyAnUE9TVCcgYWx3YXlzO1xuICAgIGFkZF9oZWFkZXIgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnXAogICAgICAgIFwgJ0NvbnRlbnQtVHlwZSxBdXRob3JpemF0aW9uLENvbnRlbnQtRW5jb2RpbmcnIGFsd2F5cztcbiAgICBhZGRfaGVhZGVyICdBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycydcCiAgICAgICAgXCAnQ29udGVudC1MZW5ndGgnIGFsd2F5cztcbiAgfVxuICBsb2NhdGlvbiAvaW50ZWdyYXRpb25zLyB7XG4gICAgcmV3cml0ZVwKICAgICAgICBcIF4vaW50ZWdyYXRpb25zLyguKikgLyQxIGJyZWFrO1xuICAgIHByb3h5X2h0dHBfdmVyc2lvbiAxLjE7XG4gICAgcHJveHlfc2V0X2hlYWRlclwKICAgICAgICBcIFVwZ3JhZGUgJGh0dHBfdXBncmFkZTtcbiAgICBwcm94eV9zZXRfaGVhZGVyIENvbm5lY3Rpb24gXCJVcGdyYWRlXCI7XG4gXAogICAgICAgIFwgICBwcm94eV9zZXRfaGVhZGVyIFgtRm9yd2FyZGVkLUZvciAkcmVhbF9pcDtcbiAgICBwcm94eV9zZXRfaGVhZGVyIFgtRm9yd2FyZGVkLUhvc3RcCiAgICAgICAgXCAkaG9zdDtcbiAgICBwcm94eV9zZXRfaGVhZGVyIFgtUmVhbC1JUCAkcmVhbF9pcDtcbiAgICBwcm94eV9zZXRfaGVhZGVyIEhvc3RcCiAgICAgICAgXCAkaG9zdDtcbiAgICBwcm94eV9wYXNzIGh0dHA6Ly9pbnRlZ3JhdGlvbnMtb3BlbnJlcGxheS5hcHAuc3ZjLmNsdXN0ZXIubG9jYWw6ODA4MDtcblwKICAgICAgICBcICAgIHByb3h5X3JlYWRfdGltZW91dCAzMDBzO1xuICAgIHByb3h5X2Nvbm5lY3RfdGltZW91dCAxMjBzO1xuICAgIHByb3h5X3NlbmRfdGltZW91dFwKICAgICAgICBcIDMwMHM7XG4gICAgYWRkX2hlYWRlciAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJyAnKicgYWx3YXlzO1xuICAgIGFkZF9oZWFkZXJcCiAgICAgICAgXCAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcycgJ1BPU1QsUEFUQ0gsT1BUSU9OUyxERUxFVEUnIGFsd2F5cztcbiAgIFwKICAgICAgICBcIGFkZF9oZWFkZXIgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnICdDb250ZW50LVR5cGUsQXV0aG9yaXphdGlvbixDb250ZW50LUVuY29kaW5nLFgtT3BlbnJlcGxheS1CYXRjaCdcCiAgICAgICAgXCBhbHdheXM7XG4gICAgYWRkX2hlYWRlciAnQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMnICdDb250ZW50LUxlbmd0aCdcCiAgICAgICAgXCBhbHdheXM7XG4gIH1cbiAgbG9jYXRpb24gL3YyL2FwaS8ge1xuICAgIHJld3JpdGUgXi92Mi9hcGkvKC4qKSAvJDEgYnJlYWs7XG5cCiAgICAgICAgXCAgICBwcm94eV9odHRwX3ZlcnNpb24gMS4xO1xuICAgIHByb3h5X3NldF9oZWFkZXIgVXBncmFkZSAkaHR0cF91cGdyYWRlO1xuXAogICAgICAgIFwgICAgcHJveHlfc2V0X2hlYWRlciBDb25uZWN0aW9uIFwiVXBncmFkZVwiO1xuICAgIHByb3h5X3NldF9oZWFkZXIgSG9zdCAkaG9zdDtcblwKICAgICAgICBcICAgIHByb3h5X3NldF9oZWFkZXIgWC1Gb3J3YXJkZWQtUHJvdG8gJG9yaWdpbl9wcm90bztcbiAgICBwcm94eV9zZXRfaGVhZGVyXAogICAgICAgIFwgWC1Gb3J3YXJkZWQtRm9yICRyZWFsX2lwO1xuICAgIHByb3h5X3NldF9oZWFkZXIgWC1SZWFsLUlQICRyZWFsX2lwO1xuICBcCiAgICAgICAgXCAgcHJveHlfcGFzcyBodHRwOi8vYXBpLW9wZW5yZXBsYXkuYXBwLnN2Yy5jbHVzdGVyLmxvY2FsOjgwODA7XG4gICAgcHJveHlfcmVhZF90aW1lb3V0XAogICAgICAgIFwgMzAwcztcbiAgICBwcm94eV9jb25uZWN0X3RpbWVvdXQgMTIwcztcbiAgICBwcm94eV9zZW5kX3RpbWVvdXQgMzAwcztcbiBcCiAgICAgICAgXCAgIGFkZF9oZWFkZXIgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicgJyRodHRwX29yaWdpbicgYWx3YXlzO1xuICAgIGFkZF9oZWFkZXJcCiAgICAgICAgXCAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcycgJ1BPU1QsIEdFVCwgUEFUQ0gsIERFTEVURSwgT1BUSU9OUywgUFVUJ1wKICAgICAgICBcIGFsd2F5cztcbiAgICBhZGRfaGVhZGVyICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJyAnQ29udGVudC1UeXBlLCBBdXRob3JpemF0aW9uLFwKICAgICAgICBcIENvbnRlbnQtRW5jb2RpbmcsIFgtT3BlbnJlcGxheS1CYXRjaCcgYWx3YXlzO1xuICAgIGFkZF9oZWFkZXIgJ0FjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzJ1wKICAgICAgICBcICdDb250ZW50LUxlbmd0aCcgYWx3YXlzO1xuICAgIGFkZF9oZWFkZXIgJ0FjY2Vzcy1Db250cm9sLU1heC1BZ2UnICczNjAwJ1wKICAgICAgICBcIGFsd2F5cztcbiAgICBhZGRfaGVhZGVyICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFscycgJ3RydWUnIGFsd2F5cztcblwKICAgICAgICBcICAgIGlmICgkcmVxdWVzdF9tZXRob2QgPSAnT1BUSU9OUycpIHtcbiAgICAgIGFkZF9oZWFkZXIgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbidcCiAgICAgICAgXCAnJGh0dHBfb3JpZ2luJyBhbHdheXM7XG4gICAgICBhZGRfaGVhZGVyICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJ1wKICAgICAgICBcICdQT1NULCBHRVQsIFBBVENILCBERUxFVEUsIE9QVElPTlMsIFBVVCcgYWx3YXlzO1xuICAgICAgYWRkX2hlYWRlciAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycydcCiAgICAgICAgXCAnQ29udGVudC1UeXBlLCBBdXRob3JpemF0aW9uLCBDb250ZW50LUVuY29kaW5nLCBYLU9wZW5yZXBsYXktQmF0Y2gnIGFsd2F5cztcblwKICAgICAgICBcICAgICAgYWRkX2hlYWRlciAnQWNjZXNzLUNvbnRyb2wtTWF4LUFnZScgJzM2MDAnIGFsd2F5cztcbiAgICAgIGFkZF9oZWFkZXJcCiAgICAgICAgXCAnQ29udGVudC1MZW5ndGgnICcwJztcbiAgICAgIGFkZF9oZWFkZXIgJ0NvbnRlbnQtVHlwZScgJ3RleHQvcGxhaW4nO1xuIFwKICAgICAgICBcICAgICByZXR1cm4gMjA0O1xuICAgIH1cbiAgfVxuICBsb2NhdGlvbiAvYXBpLyB7XG4gICAgcmV3cml0ZSBeL2FwaS8oLiopXAogICAgICAgIFwgLyQxIGJyZWFrO1xuICAgIHByb3h5X2h0dHBfdmVyc2lvbiAxLjE7XG4gICAgcHJveHlfc2V0X2hlYWRlciBVcGdyYWRlICRodHRwX3VwZ3JhZGU7XG5cCiAgICAgICAgXCAgICBwcm94eV9zZXRfaGVhZGVyIENvbm5lY3Rpb24gXCJVcGdyYWRlXCI7XG4gICAgcHJveHlfc2V0X2hlYWRlciBIb3N0ICRob3N0O1xuXAogICAgICAgIFwgICAgcHJveHlfc2V0X2hlYWRlciBYLUZvcndhcmRlZC1Qcm90byAkb3JpZ2luX3Byb3RvO1xuICAgIHByb3h5X3NldF9oZWFkZXJcCiAgICAgICAgXCBYLUZvcndhcmRlZC1Gb3IgJHJlYWxfaXA7XG4gICAgcHJveHlfcGFzcyBodHRwOi8vY2hhbGljZS1vcGVucmVwbGF5LmFwcC5zdmMuY2x1c3Rlci5sb2NhbDo4MDAwO1xuXAogICAgICAgIFwgICAgYWRkX2hlYWRlciBDYWNoZS1Db250cm9sIFwibm8tc3RvcmUsbm8tY2FjaGVcIiBhbHdheXM7XG4gICAgYWRkX2hlYWRlclwKICAgICAgICBcIFByYWdtYSBcIm5vLWNhY2hlXCIgYWx3YXlzO1xuICB9XG4gIGxvY2F0aW9uIC9zcG90LyB7XG4gICAgcmV3cml0ZSBeL3Nwb3QvKC4qKVwKICAgICAgICBcIC8kMSBicmVhaztcbiAgICBwcm94eV9odHRwX3ZlcnNpb24gMS4xO1xuICAgIHByb3h5X3NldF9oZWFkZXIgVXBncmFkZSAkaHR0cF91cGdyYWRlO1xuXAogICAgICAgIFwgICAgcHJveHlfc2V0X2hlYWRlciBDb25uZWN0aW9uIFwiVXBncmFkZVwiO1xuICAgIHByb3h5X3NldF9oZWFkZXIgSG9zdCAkaG9zdDtcblwKICAgICAgICBcICAgIHByb3h5X3NldF9oZWFkZXIgWC1Gb3J3YXJkZWQtUHJvdG8gJG9yaWdpbl9wcm90bztcbiAgICBwcm94eV9zZXRfaGVhZGVyXAogICAgICAgIFwgWC1Gb3J3YXJkZWQtRm9yICRyZWFsX2lwO1xuICAgIHByb3h5X3NldF9oZWFkZXIgWC1SZWFsLUlQICRyZWFsX2lwO1xuICBcCiAgICAgICAgXCAgcHJveHlfcGFzcyBodHRwOi8vc3BvdC1vcGVucmVwbGF5LmFwcC5zdmMuY2x1c3Rlci5sb2NhbDo4MDgwO1xuICAgIHByb3h5X3JlYWRfdGltZW91dFwKICAgICAgICBcIDMwMHM7XG4gICAgcHJveHlfY29ubmVjdF90aW1lb3V0IDEyMHM7XG4gICAgcHJveHlfc2VuZF90aW1lb3V0IDMwMHM7XG4gXAogICAgICAgIFwgICBhZGRfaGVhZGVyICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nICcqJyBhbHdheXM7XG4gICAgYWRkX2hlYWRlciAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcydcCiAgICAgICAgXCAnUE9TVCwgUEFUQ0gsIERFTEVURSwgT1BUSU9OUycgYWx3YXlzO1xuICAgIGFkZF9oZWFkZXIgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnXAogICAgICAgIFwgJ0NvbnRlbnQtVHlwZSwgQXV0aG9yaXphdGlvbiwgQ29udGVudC1FbmNvZGluZywgWC1PcGVucmVwbGF5LUJhdGNoJyBhbHdheXM7XG5cCiAgICAgICAgXCAgICBhZGRfaGVhZGVyICdBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycycgJ0NvbnRlbnQtTGVuZ3RoJyBhbHdheXM7XG5cCiAgICAgICAgXCAgICBpZiAoJHJlcXVlc3RfbWV0aG9kID0gJ09QVElPTlMnKSB7XG4gICAgICBhZGRfaGVhZGVyICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nXAogICAgICAgIFwgJyonIGFsd2F5cztcbiAgICAgIGFkZF9oZWFkZXIgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnICdQT1NULCBQQVRDSCxcCiAgICAgICAgXCBERUxFVEUsIE9QVElPTlMnIGFsd2F5cztcbiAgICAgIGFkZF9oZWFkZXIgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnXAogICAgICAgIFwgJ0NvbnRlbnQtVHlwZSwgQXV0aG9yaXphdGlvbiwgQ29udGVudC1FbmNvZGluZywgWC1PcGVucmVwbGF5LUJhdGNoJyBhbHdheXM7XG5cCiAgICAgICAgXCAgICAgIGFkZF9oZWFkZXIgJ0FjY2Vzcy1Db250cm9sLU1heC1BZ2UnICczNjAwJztcbiAgICAgIGFkZF9oZWFkZXIgJ0NvbnRlbnQtVHlwZSdcCiAgICAgICAgXCAndGV4dC9wbGFpbiBjaGFyc2V0PVVURi04JztcbiAgICAgIGFkZF9oZWFkZXIgJ0NvbnRlbnQtTGVuZ3RoJyAwO1xuICAgIFwKICAgICAgICBcICByZXR1cm4gMjA0O1xuICAgIH1cbiAgfVxuICBsb2NhdGlvbiAvYXNzaXN0LyB7XG4gICAgcmV3cml0ZSBeL2Fzc2lzdC8oLiopXAogICAgICAgIFwgLyQxIGJyZWFrO1xuICAgIHByb3h5X2h0dHBfdmVyc2lvbiAxLjE7XG4gICAgcHJveHlfc2V0X2hlYWRlciBVcGdyYWRlICRodHRwX3VwZ3JhZGU7XG5cCiAgICAgICAgXCAgICBwcm94eV9zZXRfaGVhZGVyIENvbm5lY3Rpb24gJGNvbm5lY3Rpb25fdXBncmFkZTtcbiAgICBwcm94eV9zZXRfaGVhZGVyXAogICAgICAgIFwgSG9zdCAkaG9zdDtcbiAgICBwcm94eV9zZXRfaGVhZGVyIFgtUmVhbC1JUCAkcmVhbF9pcDtcbiAgICBwcm94eV9zZXRfaGVhZGVyXAogICAgICAgIFwgWC1Gb3J3YXJkZWQtRm9yICRwcm94eV9hZGRfeF9mb3J3YXJkZWRfZm9yO1xuICAgIHByb3h5X3NldF9oZWFkZXIgWC1Gb3J3YXJkZWQtUHJvdG9cCiAgICAgICAgXCAkb3JpZ2luX3Byb3RvO1xuICAgIHByb3h5X3JlYWRfdGltZW91dCAzNjAwcztcbiAgICBwcm94eV9zZW5kX3RpbWVvdXQgMzYwMHM7XG5cCiAgICAgICAgXCAgICBwcm94eV9jb25uZWN0X3RpbWVvdXQgNzVzO1xuICAgIHByb3h5X2J1ZmZlcmluZyBvZmY7XG4gICAgcHJveHlfcGFzc1wKICAgICAgICBcIGh0dHA6Ly9hc3Npc3Qtb3BlbnJlcGxheS5hcHAuc3ZjLmNsdXN0ZXIubG9jYWw6OTAwMTtcbiAgfVxuICBsb2NhdGlvbiAvd3MtYXNzaXN0L1wKICAgICAgICBcIHtcbiAgICByZXdyaXRlIF4vd3MtYXNzaXN0LyguKikgLyQxIGJyZWFrO1xuICAgIHByb3h5X2h0dHBfdmVyc2lvbiAxLjE7XG5cCiAgICAgICAgXCAgICBwcm94eV9zZXRfaGVhZGVyIFVwZ3JhZGUgJGh0dHBfdXBncmFkZTtcbiAgICBwcm94eV9zZXRfaGVhZGVyIENvbm5lY3Rpb25cCiAgICAgICAgXCAkY29ubmVjdGlvbl91cGdyYWRlO1xuICAgIHByb3h5X3NldF9oZWFkZXIgSG9zdCAkaG9zdDtcbiAgICBwcm94eV9zZXRfaGVhZGVyXAogICAgICAgIFwgWC1SZWFsLUlQICRyZWFsX2lwO1xuICAgIHByb3h5X3NldF9oZWFkZXIgWC1Gb3J3YXJkZWQtRm9yICRwcm94eV9hZGRfeF9mb3J3YXJkZWRfZm9yO1xuXAogICAgICAgIFwgICAgcHJveHlfc2V0X2hlYWRlciBYLUZvcndhcmRlZC1Qcm90byAkb3JpZ2luX3Byb3RvO1xuICAgIHByb3h5X3JlYWRfdGltZW91dFwKICAgICAgICBcIDM2MDBzO1xuICAgIHByb3h5X3NlbmRfdGltZW91dCAzNjAwcztcbiAgICBwcm94eV9jb25uZWN0X3RpbWVvdXQgMTIwcztcblwKICAgICAgICBcICAgIHByb3h5X2J1ZmZlcmluZyBvZmY7XG4gICAgYWRkX2hlYWRlciAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJyAnJGh0dHBfb3JpZ2luJ1wKICAgICAgICBcIGFsd2F5cztcbiAgICBhZGRfaGVhZGVyICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJyAnR0VULCBPUFRJT05TJyBhbHdheXM7XG5cCiAgICAgICAgXCAgICBhZGRfaGVhZGVyICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJyAnc2Vzc2lvbmlkLCBDb250ZW50LVR5cGUsIEF1dGhvcml6YXRpb24nXAogICAgICAgIFwgYWx3YXlzO1xuICAgIGFkZF9oZWFkZXIgJ0FjY2Vzcy1Db250cm9sLU1heC1BZ2UnICcxNzI4MDAwJyBhbHdheXM7XG4gICBcCiAgICAgICAgXCBhZGRfaGVhZGVyICdYLURlYnVnLVNlc3Npb24tSUQnICRzZXNzaW9uaWQgYWx3YXlzO1xuICAgIHByb3h5X3Bhc3MgaHR0cDovL2Fzc2lzdC1vcGVucmVwbGF5LmFwcC5zdmMuY2x1c3Rlci5sb2NhbDo5MDAxO1xuXAogICAgICAgIFwgIH1cbiAgbG9jYXRpb24gL3NjcmlwdC8ge1xuICAgIHJld3JpdGUgXi9zY3JpcHQvKC4qKS9vcGVucmVwbGF5KC4qKS5qcyRcCiAgICAgICAgXCAvJDEvb3BlbnJlcGxheSQyLmpzIGJyZWFrO1xuICAgIHByb3h5X2h0dHBfdmVyc2lvbiAxLjE7XG4gICAgcHJveHlfc3NsX3Byb3RvY29sc1wKICAgICAgICBcIFRMU3YxLjIgVExTdjEuMztcbiAgICBwcm94eV9zc2xfc2VydmVyX25hbWUgb247XG4gICAgcHJveHlfc2V0X2hlYWRlciBIb3N0XAogICAgICAgIFwgc3RhdGljLm9wZW5yZXBsYXkuY29tO1xuICAgIHByb3h5X3Bhc3MgaHR0cHM6Ly9zdGF0aWMub3BlbnJlcGxheS5jb207XG5cCiAgICAgICAgXCAgICBwcm94eV9yZWFkX3RpbWVvdXQgMzAwcztcbiAgICBwcm94eV9jb25uZWN0X3RpbWVvdXQgMTIwcztcbiAgICBwcm94eV9zZW5kX3RpbWVvdXRcCiAgICAgICAgXCAzMDBzO1xuICAgIHByb3h5X2J1ZmZlcmluZyBvbjtcbiAgICBjbGllbnRfbWF4X2JvZHlfc2l6ZSA4bTtcbiAgfVxuICBsb2NhdGlvblwKICAgICAgICBcIC8ge1xuICAgIGluZGV4IC9pbmRleC5odG1sO1xuICAgIHJld3JpdGUgXigoPyEuKGpzfGNzc3xwbmd8c3ZnfGpwZ3x3b2ZmfHdvZmYyKSkuKSokXAogICAgICAgIFwgL2luZGV4Lmh0bWwgYnJlYWs7XG4gICAgcHJveHlfc2V0X2hlYWRlciBIb3N0ICRodHRwX2hvc3Q7XG4gICAgcHJveHlfc2V0X2hlYWRlclwKICAgICAgICBcIFgtRm9yd2FyZGVkLUZvciAkcmVhbF9pcDtcbiAgICBwcm94eV9zZXRfaGVhZGVyIFgtRm9yd2FyZGVkLVByb3RvICRvcmlnaW5fcHJvdG87XG5cCiAgICAgICAgXCAgICBwcm94eV9wYXNzIGh0dHA6Ly9mcm9udGVuZC1vcGVucmVwbGF5LmFwcC5zdmMuY2x1c3Rlci5sb2NhbDo4MDgwO1xuIFwKICAgICAgICBcICAgcHJveHlfaW50ZXJjZXB0X2Vycm9ycyBvbjtcbiAgICBlcnJvcl9wYWdlIDQwNCA9MjAwIC9pbmRleC5odG1sO1xuICB9XG5cCiAgICAgICAgfVxuIgogICAgbmV0d29ya3M6CiAgICAtIG9wZW5yZXBsYXktbmV0CiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgLSBDTUQKICAgICAgLSBuZ2lueAogICAgICAtIC10CiAgICAgIGludGVydmFsOiAzMHMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDMKICAgICAgc3RhcnRfcGVyaW9kOiAzMHMKICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkCnZvbHVtZXM6CiAgcGdkYXRhOiBudWxsCiAgY2xpY2tob3VzZTogbnVsbAogIHJlZGlzZGF0YTogbnVsbAogIG1pbmlvZGF0YTogbnVsbAogIHNoYXJlZC12b2x1bWU6IG51bGwKbmV0d29ya3M6CiAgb3BlbnJlcGxheS1uZXQ6IG51bGwK", + "tags": [ + "openreplay", + "session-replay", + "analytics", + "monitoring", + "debugging", + "self-hosted", + "privacy" + ], + "category": "analytics", + "logo": "svgs/openreplay.svg", + "minversion": "0.0.0", + "port": "80" } } diff --git a/templates/service-templates.json b/templates/service-templates.json index 545d9c62e4..241fb708aa 100644 --- a/templates/service-templates.json +++ b/templates/service-templates.json @@ -5284,5 +5284,23 @@ "logo": "svgs/marimo.svg", "minversion": "0.0.0", "port": "8080" + }, + "openreplay": { + "documentation": "https://openreplay.com/docs?utm_source=coolify.io", + "slogan": "OpenReplay is a self-hosted, open-source session replay suite you can deploy on your own infrastructure to fully control your data.", + "compose": "eC1jb21tb24tZW52OgogIENPTU1PTl9ET01BSU5fTkFNRTogJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogIENPTU1PTl9QUk9UT0NPTDogaHR0cHMKICBDT01NT05fVkVSU0lPTjogJHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgQ09NTU9OX1BHX1BBU1NXT1JEOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgQ09NTU9OX1MzX0tFWTogJHtTRVJWSUNFX1VTRVJfTUlOSU99CiAgQ09NTU9OX1MzX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogIENPTU1PTl9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogIENPTU1PTl9KV1RfU1BPVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgQ09NTU9OX0pXVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFJFRlJFU0h9CiAgQ09NTU9OX0pXVF9TUE9UX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU1BPVFJFRlJFU0h9CiAgQ09NTU9OX0FTU0lTVF9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUSldUfQogIENPTU1PTl9BU1NJU1RfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUS0VZfQp4LWFwcC1jb21tb24tZW52OgogIENPTU1PTl9ET01BSU5fTkFNRTogJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogIENPTU1PTl9QUk9UT0NPTDogaHR0cHMKICBDT01NT05fVkVSU0lPTjogJHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgQ09NTU9OX1BHX1BBU1NXT1JEOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgQ09NTU9OX1MzX0tFWTogJHtTRVJWSUNFX1VTRVJfTUlOSU99CiAgQ09NTU9OX1MzX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogIENPTU1PTl9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogIENPTU1PTl9KV1RfU1BPVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgQ09NTU9OX0pXVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFJFRlJFU0h9CiAgQ09NTU9OX0pXVF9TUE9UX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU1BPVFJFRlJFU0h9CiAgQ09NTU9OX0FTU0lTVF9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUSldUfQogIENPTU1PTl9BU1NJU1RfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUS0VZfQogIExJQ0VOU0VfS0VZOiAnJwogIEtBRktBX1NFUlZFUlM6ICcnCiAgS0FGS0FfVVNFX1NTTDogJ2ZhbHNlJwpzZXJ2aWNlczoKICBwb3N0Z3Jlc3FsOgogICAgaW1hZ2U6IGdoY3IuaW8vb3BlbnJlcGxheS9wb3N0Z3JlczoxNwogICAgdm9sdW1lczoKICAgIC0gcGdkYXRhOi9iaXRuYW1pL3Bvc3RncmVzcWwKICAgIG5ldHdvcmtzOgogICAgICBvcGVucmVwbGF5LW5ldDoKICAgICAgICBhbGlhc2VzOgogICAgICAgIC0gcG9zdGdyZXNxbC5kYi5zdmMuY2x1c3Rlci5sb2NhbAogICAgZW52aXJvbm1lbnQ6CiAgICAgIFBPU1RHUkVTX1BBU1NXT1JEOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgLSBDTUQtU0hFTEwKICAgICAgLSBwZ19pc3JlYWR5IC1VIHBvc3RncmVzCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMjAKICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkCiAgY2xpY2tob3VzZToKICAgIGltYWdlOiBjbGlja2hvdXNlL2NsaWNraG91c2Utc2VydmVyOjI1LjExLWFscGluZQogICAgdm9sdW1lczoKICAgIC0gY2xpY2tob3VzZTovdmFyL2xpYi9jbGlja2hvdXNlCiAgICBuZXR3b3JrczoKICAgICAgb3BlbnJlcGxheS1uZXQ6CiAgICAgICAgYWxpYXNlczoKICAgICAgICAtIGNsaWNraG91c2Utb3BlbnJlcGxheS1jbGlja2hvdXNlLmRiLnN2Yy5jbHVzdGVyLmxvY2FsCiAgICBlbnZpcm9ubWVudDoKICAgICAgQ0xJQ0tIT1VTRV9VU0VSOiBkZWZhdWx0CiAgICAgIENMSUNLSE9VU0VfUEFTU1dPUkQ6ICcnCiAgICAgIENMSUNLSE9VU0VfREVGQVVMVF9BQ0NFU1NfTUFOQUdFTUVOVDogJzEnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgLSBDTUQtU0hFTEwKICAgICAgLSBjbGlja2hvdXNlLWNsaWVudCAtLXF1ZXJ5ICJTRUxFQ1QgMSIgfHwgZXhpdCAxCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMjAKICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkCiAgcmVkaXM6CiAgICBpbWFnZTogZ2hjci5pby9vcGVucmVwbGF5L3ZhbGtleTo4CiAgICB2b2x1bWVzOgogICAgLSByZWRpc2RhdGE6L2JpdG5hbWkvcmVkaXMvZGF0YQogICAgbmV0d29ya3M6CiAgICAgIG9wZW5yZXBsYXktbmV0OgogICAgICAgIGFsaWFzZXM6CiAgICAgICAgLSByZWRpcy1tYXN0ZXIuZGIuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGVudmlyb25tZW50OgogICAgICBBTExPV19FTVBUWV9QQVNTV09SRDogJ3llcycKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAtIENNRC1TSEVMTAogICAgICAtIHJlZGlzLWNsaSBwaW5nIHwgZ3JlcCBQT05HCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMjAKICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkCiAgbWluaW86CiAgICBpbWFnZTogZ2hjci5pby9vcGVucmVwbGF5L21pbmlvOjIwMjUKICAgIHZvbHVtZXM6CiAgICAtIG1pbmlvZGF0YTovYml0bmFtaS9taW5pby9kYXRhCiAgICBuZXR3b3JrczoKICAgICAgb3BlbnJlcGxheS1uZXQ6CiAgICAgICAgYWxpYXNlczoKICAgICAgICAtIG1pbmlvLmRiLnN2Yy5jbHVzdGVyLmxvY2FsCiAgICBlbnZpcm9ubWVudDoKICAgICAgTUlOSU9fUk9PVF9VU0VSOiAke1NFUlZJQ0VfVVNFUl9NSU5JT30KICAgICAgTUlOSU9fUk9PVF9QQVNTV09SRDogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgIC0gQ01ELVNIRUxMCiAgICAgIC0gY3VybCAtZiBodHRwOi8vbG9jYWxob3N0OjkwMDAvbWluaW8vaGVhbHRoL2xpdmUgfHwgZXhpdCAxCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMjAKICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkCiAgZnMtcGVybWlzc2lvbjoKICAgIGltYWdlOiBkZWJpYW46c3RhYmxlLXNsaW0KICAgIHZvbHVtZXM6CiAgICAtIHNoYXJlZC12b2x1bWU6L21udC9lZnMKICAgIC0gbWluaW9kYXRhOi9tbnQvbWluaW8KICAgIC0gcGdkYXRhOi9tbnQvcG9zdGdyZXMKICAgIG5ldHdvcmtzOgogICAgLSBvcGVucmVwbGF5LW5ldAogICAgZW50cnlwb2ludDoKICAgIC0gL2Jpbi9iYXNoCiAgICAtIC1jCiAgICAtIGNob3duIC1SIDEwMDE6MTAwMSAvbW50L2VmcyAvbW50L21pbmlvIC9tbnQvcG9zdGdyZXMKICAgIHJlc3RhcnQ6ICdubycKICBtaW5pby1taWdyYXRpb246CiAgICBpbWFnZTogbWluaW8vbWM6bGF0ZXN0CiAgICBkZXBlbmRzX29uOgogICAgICBtaW5pbzoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgICBmcy1wZXJtaXNzaW9uOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICBuZXR3b3JrczoKICAgIC0gb3BlbnJlcGxheS1uZXQKICAgIGVudmlyb25tZW50OgogICAgICBNSU5JT19IT1NUOiBodHRwOi8vbWluaW8uZGIuc3ZjLmNsdXN0ZXIubG9jYWw6OTAwMAogICAgICBNSU5JT19BQ0NFU1NfS0VZOiAke1NFUlZJQ0VfVVNFUl9NSU5JT30KICAgICAgTUlOSU9fU0VDUkVUX0tFWTogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgZW50cnlwb2ludDoKICAgIC0gL2Jpbi9zaAogICAgLSAtYwogICAgLSAibWMgYWxpYXMgc2V0IG1pbmlvICQke01JTklPX0hPU1R9ICQke01JTklPX0FDQ0VTU19LRVl9ICQke01JTklPX1NFQ1JFVF9LRVl9XG5cCiAgICAgIGZvciBidWNrZXQgaW4gbW9icyBzZXNzaW9ucy1hc3NldHMgc3RhdGljIHNvdXJjZW1hcHMgc2Vzc2lvbnMtbW9iaWxlLWFzc2V0c1wKICAgICAgXCBxdWlja3dpdCB2YXVsdC1kYXRhIHJlY29yZHMgc3BvdHM7IGRvXG4gIG1jIG1iIC0taWdub3JlLWV4aXN0aW5nIG1pbmlvLyQke2J1Y2tldH1cCiAgICAgIFwgfHwgdHJ1ZVxuZG9uZVxuZWNobyBcIk1pbklPIGJ1Y2tldHMgaW5pdGlhbGl6ZWQuXCJcbiIKICAgIHJlc3RhcnQ6ICdubycKICBkYi1taWdyYXRpb246CiAgICBpbWFnZTogcG9zdGdyZXM6MTctYWxwaW5lCiAgICBkZXBlbmRzX29uOgogICAgICBwb3N0Z3Jlc3FsOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICAgIG1pbmlvLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgbmV0d29ya3M6CiAgICAtIG9wZW5yZXBsYXktbmV0CiAgICBlbnZpcm9ubWVudDoKICAgICAgUEdIT1NUOiBwb3N0Z3Jlc3FsLmRiLnN2Yy5jbHVzdGVyLmxvY2FsCiAgICAgIFBHUE9SVDogJzU0MzInCiAgICAgIFBHREFUQUJBU0U6IHBvc3RncmVzCiAgICAgIFBHVVNFUjogcG9zdGdyZXMKICAgICAgUEdQQVNTV09SRDogJHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfQogICAgZW50cnlwb2ludDoKICAgIC0gL2Jpbi9zaAogICAgLSAtYwogICAgLSAiYXBrIGFkZCAtLW5vLWNhY2hlIHdnZXRcbnVudGlsIHBnX2lzcmVhZHkgLWggcG9zdGdyZXNxbC5kYi5zdmMuY2x1c3Rlci5sb2NhbDtcCiAgICAgIFwgZG9cbiAgZWNobyBcIldhaXRpbmcgZm9yIFBvc3RncmVTUUwuLi5cIlxuICBzbGVlcCAyXG5kb25lXG5lY2hvIFwiRG93bmxvYWRpbmdcCiAgICAgIFwgUG9zdGdyZVNRTCBzY2hlbWEuLi5cIlxud2dldCAtcU8gL3RtcC9pbml0X3NjaGVtYS5zcWwgXFxcbiAgXCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vb3BlbnJlcGxheS9vcGVucmVwbGF5LyR7T1BFTlJFUExBWV9WRVJTSU9OOi12MS4yNS4wfS9zY3JpcHRzL3NjaGVtYS9kYi9pbml0X2Ricy9wb3N0Z3Jlc3FsL2luaXRfc2NoZW1hLnNxbFwiXAogICAgICBcbmVjaG8gXCJSdW5uaW5nIFBvc3RncmVTUUwgc2NoZW1hLi4uXCJcbnBzcWwgLXYgT05fRVJST1JfU1RPUD0wIC1mIC90bXAvaW5pdF9zY2hlbWEuc3FsXAogICAgICBcIHx8IHRydWVcbmVjaG8gXCJQb3N0Z3JlU1FMIG1pZ3JhdGlvbiBjb21wbGV0ZS5cIlxuIgogICAgcmVzdGFydDogJ25vJwogIGNsaWNraG91c2UtbWlncmF0aW9uOgogICAgaW1hZ2U6IGNsaWNraG91c2UvY2xpY2tob3VzZS1zZXJ2ZXI6MjUuMTEtYWxwaW5lCiAgICBkZXBlbmRzX29uOgogICAgICBjbGlja2hvdXNlOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICAgIG1pbmlvLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgbmV0d29ya3M6CiAgICAtIG9wZW5yZXBsYXktbmV0CiAgICBlbnRyeXBvaW50OgogICAgLSAvYmluL3NoCiAgICAtIC1jCiAgICAtICJlY2hvIFwiRG93bmxvYWRpbmcgQ2xpY2tIb3VzZSBzY2hlbWEuLi5cIlxud2dldCAtcU8gL3RtcC9pbml0X3NjaGVtYS5zcWwgXFxcCiAgICAgIFxuICBcImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9vcGVucmVwbGF5L29wZW5yZXBsYXkvJHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9L3NjcmlwdHMvc2NoZW1hL2RiL2luaXRfZGJzL2NsaWNraG91c2UvY3JlYXRlL2luaXRfc2NoZW1hLnNxbFwiXAogICAgICBcbmVjaG8gXCJSdW5uaW5nIENsaWNrSG91c2Ugc2NoZW1hLi4uXCJcbmNsaWNraG91c2UtY2xpZW50IFxcXG4gIC1oIGNsaWNraG91c2Utb3BlbnJlcGxheS1jbGlja2hvdXNlLmRiLnN2Yy5jbHVzdGVyLmxvY2FsXAogICAgICBcIFxcXG4gIC0tdXNlciBkZWZhdWx0IFxcXG4gIC0tcG9ydCA5MDAwIFxcXG4gIC0tbXVsdGlxdWVyeSA8IC90bXAvaW5pdF9zY2hlbWEuc3FsXAogICAgICBcIHx8IHRydWVcbmVjaG8gXCJDbGlja0hvdXNlIG1pZ3JhdGlvbiBjb21wbGV0ZS5cIlxuIgogICAgcmVzdGFydDogJ25vJwogIGFsZXJ0cy1vcGVucmVwbGF5OgogICAgaW1hZ2U6IHB1YmxpYy5lY3IuYXdzL3AxdDN1OGEzL2FsZXJ0czoke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgIGRvbWFpbm5hbWU6IGFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZGVwZW5kc19vbjoKICAgICAgZGItbWlncmF0aW9uOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICAgIGNsaWNraG91c2UtbWlncmF0aW9uOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICB2b2x1bWVzOgogICAgLSBzaGFyZWQtdm9sdW1lOi9tbnQvZWZzCiAgICBuZXR3b3JrczoKICAgICAgb3BlbnJlcGxheS1uZXQ6CiAgICAgICAgYWxpYXNlczoKICAgICAgICAtIGFsZXJ0cy1vcGVucmVwbGF5CiAgICAgICAgLSBhbGVydHMtb3BlbnJlcGxheS5hcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGVudmlyb25tZW50OgogICAgICBDT01NT05fRE9NQUlOX05BTUU6ICR7U0VSVklDRV9GUUROX05HSU5YT1BFTlJFUExBWX0KICAgICAgQ09NTU9OX1BST1RPQ09MOiBodHRwcwogICAgICBDT01NT05fVkVSU0lPTjogJHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICAgIENPTU1PTl9QR19QQVNTV09SRDogJHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfQogICAgICBDT01NT05fUzNfS0VZOiAke1NFUlZJQ0VfVVNFUl9NSU5JT30KICAgICAgQ09NTU9OX1MzX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgICBDT01NT05fSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFJFRlJFU0h9CiAgICAgIENPTU1PTl9KV1RfU1BPVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNQT1RSRUZSRVNIfQogICAgICBDT01NT05fQVNTSVNUX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RKV1R9CiAgICAgIENPTU1PTl9BU1NJU1RfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUS0VZfQogICAgICBMSUNFTlNFX0tFWTogJycKICAgICAgS0FGS0FfU0VSVkVSUzogJycKICAgICAgS0FGS0FfVVNFX1NTTDogJ2ZhbHNlJwogICAgICB2ZXJzaW9uX251bWJlcjogJHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICAgIHBnX2hvc3Q6IHBvc3RncmVzcWwuZGIuc3ZjLmNsdXN0ZXIubG9jYWwKICAgICAgcGdfcG9ydDogJzU0MzInCiAgICAgIHBnX2RibmFtZTogcG9zdGdyZXMKICAgICAgcGdfdXNlcjogcG9zdGdyZXMKICAgICAgcGdfcGFzc3dvcmQ6ICR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU30KICAgICAgY2hfaG9zdDogY2xpY2tob3VzZS1vcGVucmVwbGF5LWNsaWNraG91c2UuZGIuc3ZjLmNsdXN0ZXIubG9jYWwKICAgICAgY2hfcG9ydDogJzkwMDAnCiAgICAgIGNoX3BvcnRfaHR0cDogJzgxMjMnCiAgICAgIGNoX3VzZXJuYW1lOiBkZWZhdWx0CiAgICAgIGNoX3Bhc3N3b3JkOiAnJwogICAgICBTSVRFX1VSTDogaHR0cHM6Ly8ke1NFUlZJQ0VfRlFETl9OR0lOWE9QRU5SRVBMQVl9CiAgICAgIFMzX0hPU1Q6IGh0dHBzOi8vJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogICAgICBTM19LRVk6ICR7U0VSVklDRV9VU0VSX01JTklPfQogICAgICBTM19TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9NSU5JT30KICAgICAgQVdTX0RFRkFVTFRfUkVHSU9OOiB1cy1lYXN0LTEKICAgICAgRU1BSUxfSE9TVDogJycKICAgICAgRU1BSUxfUE9SVDogJzU4NycKICAgICAgRU1BSUxfVVNFUjogJycKICAgICAgRU1BSUxfUEFTU1dPUkQ6ICcnCiAgICAgIEVNQUlMX1VTRV9UTFM6ICd0cnVlJwogICAgICBFTUFJTF9VU0VfU1NMOiAnZmFsc2UnCiAgICAgIEVNQUlMX1NTTF9LRVk6ICcnCiAgICAgIEVNQUlMX1NTTF9DRVJUOiAnJwogICAgICBFTUFJTF9GUk9NOiAnT3BlblJlcGxheSAnCiAgICAgIExPR0xFVkVMOiBJTkZPCiAgICAgIFBZVEhPTlVOQlVGRkVSRUQ6ICcwJwogICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWQKICBhcGktb3BlbnJlcGxheToKICAgIGltYWdlOiBwdWJsaWMuZWNyLmF3cy9wMXQzdThhMy9hcGk6JHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICBkb21haW5uYW1lOiBhcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGRlcGVuZHNfb246CiAgICAgIGRiLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgICBjbGlja2hvdXNlLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgdm9sdW1lczoKICAgIC0gc2hhcmVkLXZvbHVtZTovbW50L2VmcwogICAgbmV0d29ya3M6CiAgICAgIG9wZW5yZXBsYXktbmV0OgogICAgICAgIGFsaWFzZXM6CiAgICAgICAgLSBhcGktb3BlbnJlcGxheQogICAgICAgIC0gYXBpLW9wZW5yZXBsYXkuYXBwLnN2Yy5jbHVzdGVyLmxvY2FsCiAgICBlbnZpcm9ubWVudDoKICAgICAgQ09NTU9OX0RPTUFJTl9OQU1FOiAke1NFUlZJQ0VfRlFETl9OR0lOWE9QRU5SRVBMQVl9CiAgICAgIENPTU1PTl9QUk9UT0NPTDogaHR0cHMKICAgICAgQ09NTU9OX1ZFUlNJT046ICR7T1BFTlJFUExBWV9WRVJTSU9OOi12MS4yNS4wfQogICAgICBDT01NT05fUEdfUEFTU1dPUkQ6ICR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU30KICAgICAgQ09NTU9OX1MzX0tFWTogJHtTRVJWSUNFX1VTRVJfTUlOSU99CiAgICAgIENPTU1PTl9TM19TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9NSU5JT30KICAgICAgQ09NTU9OX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIENPTU1PTl9KV1RfU1BPVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIENPTU1PTl9KV1RfUkVGUkVTSF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RSRUZSRVNIfQogICAgICBDT01NT05fSldUX1NQT1RfUkVGUkVTSF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTUE9UUkVGUkVTSH0KICAgICAgQ09NTU9OX0FTU0lTVF9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUSldUfQogICAgICBDT01NT05fQVNTSVNUX0tFWTogJHtTRVJWSUNFX1BBU1NXT1JEX0FTU0lTVEtFWX0KICAgICAgTElDRU5TRV9LRVk6ICcnCiAgICAgIEtBRktBX1NFUlZFUlM6ICcnCiAgICAgIEtBRktBX1VTRV9TU0w6ICdmYWxzZScKICAgICAgVE9LRU5fU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfVE9LRU59CiAgICAgIGNoX2RiOiBkZWZhdWx0CiAgICAgIEpXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIEFTU0lTVF9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUSldUfQogICAgICBBV1NfQUNDRVNTX0tFWV9JRDogJHtTRVJWSUNFX1VTRVJfTUlOSU99CiAgICAgIEFXU19TRUNSRVRfQUNDRVNTX0tFWTogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgICBBV1NfRU5EUE9JTlQ6IGh0dHBzOi8vJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogICAgICBBV1NfUkVHSU9OOiB1cy1lYXN0LTEKICAgICAgQlVDS0VUX05BTUU6IG1vYnMKICAgICAgQ0hfVVNFUk5BTUU6IGRlZmF1bHQKICAgICAgQ0hfUEFTU1dPUkQ6ICcnCiAgICAgIENMSUNLSE9VU0VfU1RSSU5HOiBjbGlja2hvdXNlLW9wZW5yZXBsYXktY2xpY2tob3VzZS5kYi5zdmMuY2x1c3Rlci5sb2NhbDo5MDAwL2RlZmF1bHQKICAgICAgQ0xJQ0tIT1VTRV9IVFRQX1NUUklORzogY2xpY2tob3VzZS1vcGVucmVwbGF5LWNsaWNraG91c2UuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6ODEyMy9kZWZhdWx0CiAgICAgIHBnX3Bhc3N3b3JkOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgICAgIFBPU1RHUkVTX1NUUklORzogcG9zdGdyZXM6Ly9wb3N0Z3Jlczoke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9QHBvc3RncmVzcWwuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6NTQzMi9wb3N0Z3Jlcz9zc2xtb2RlPWRpc2FibGUKICAgICAgQVNTSVNUX1VSTDogaHR0cDovL2Fzc2lzdC1vcGVucmVwbGF5LmFwcC5zdmMuY2x1c3Rlci5sb2NhbDo5MDAxL2Fzc2lzdC8lcwogICAgICBBU1NJU1RfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUS0VZfQogICAgICBSRURJU19TVFJJTkc6IHJlZGlzOi8vcmVkaXMtbWFzdGVyLmRiLnN2Yy5jbHVzdGVyLmxvY2FsOjYzNzkKICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkCiAgaHR0cC1vcGVucmVwbGF5OgogICAgaW1hZ2U6IHB1YmxpYy5lY3IuYXdzL3AxdDN1OGEzL2h0dHA6JHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICBkb21haW5uYW1lOiBhcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGRlcGVuZHNfb246CiAgICAgIGRiLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgdm9sdW1lczoKICAgIC0gc2hhcmVkLXZvbHVtZTovbW50L2VmcwogICAgbmV0d29ya3M6CiAgICAgIG9wZW5yZXBsYXktbmV0OgogICAgICAgIGFsaWFzZXM6CiAgICAgICAgLSBodHRwLW9wZW5yZXBsYXkKICAgICAgICAtIGh0dHAtb3BlbnJlcGxheS5hcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGVudmlyb25tZW50OgogICAgICBDT01NT05fRE9NQUlOX05BTUU6ICR7U0VSVklDRV9GUUROX05HSU5YT1BFTlJFUExBWX0KICAgICAgQ09NTU9OX1BST1RPQ09MOiBodHRwcwogICAgICBDT01NT05fVkVSU0lPTjogJHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICAgIENPTU1PTl9QR19QQVNTV09SRDogJHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfQogICAgICBDT01NT05fUzNfS0VZOiAke1NFUlZJQ0VfVVNFUl9NSU5JT30KICAgICAgQ09NTU9OX1MzX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgICBDT01NT05fSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFJFRlJFU0h9CiAgICAgIENPTU1PTl9KV1RfU1BPVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNQT1RSRUZSRVNIfQogICAgICBDT01NT05fQVNTSVNUX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RKV1R9CiAgICAgIENPTU1PTl9BU1NJU1RfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUS0VZfQogICAgICBMSUNFTlNFX0tFWTogJycKICAgICAgS0FGS0FfU0VSVkVSUzogJycKICAgICAgS0FGS0FfVVNFX1NTTDogJ2ZhbHNlJwogICAgICBCVUNLRVRfTkFNRTogdXh0ZXN0aW5nLXJlY29yZHMKICAgICAgQ0FDSEVfQVNTRVRTOiAndHJ1ZScKICAgICAgQVdTX0FDQ0VTU19LRVlfSUQ6ICR7U0VSVklDRV9VU0VSX01JTklPfQogICAgICBBV1NfU0VDUkVUX0FDQ0VTU19LRVk6ICR7U0VSVklDRV9QQVNTV09SRF9NSU5JT30KICAgICAgQVdTX1JFR0lPTjogdXMtZWFzdC0xCiAgICAgIEFXU19FTkRQT0lOVDogaHR0cHM6Ly8ke1NFUlZJQ0VfRlFETl9OR0lOWE9QRU5SRVBMQVl9CiAgICAgIEpXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIEpXVF9TUE9UX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgVE9LRU5fU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfVE9LRU59CiAgICAgIHBnX3Bhc3N3b3JkOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgICAgIFBPU1RHUkVTX1NUUklORzogcG9zdGdyZXM6Ly9wb3N0Z3Jlczoke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9QHBvc3RncmVzcWwuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6NTQzMi9wb3N0Z3Jlcz9zc2xtb2RlPWRpc2FibGUKICAgICAgUkVESVNfU1RSSU5HOiByZWRpczovL3JlZGlzLW1hc3Rlci5kYi5zdmMuY2x1c3Rlci5sb2NhbDo2Mzc5CiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogIGltYWdlcy1vcGVucmVwbGF5OgogICAgaW1hZ2U6IHB1YmxpYy5lY3IuYXdzL3AxdDN1OGEzL2ltYWdlczoke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgIGRvbWFpbm5hbWU6IGFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZGVwZW5kc19vbjoKICAgICAgZGItbWlncmF0aW9uOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICB2b2x1bWVzOgogICAgLSBzaGFyZWQtdm9sdW1lOi9tbnQvZWZzCiAgICBuZXR3b3JrczoKICAgICAgb3BlbnJlcGxheS1uZXQ6CiAgICAgICAgYWxpYXNlczoKICAgICAgICAtIGltYWdlcy1vcGVucmVwbGF5CiAgICAgICAgLSBpbWFnZXMtb3BlbnJlcGxheS5hcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGVudmlyb25tZW50OgogICAgICBDT01NT05fRE9NQUlOX05BTUU6ICR7U0VSVklDRV9GUUROX05HSU5YT1BFTlJFUExBWX0KICAgICAgQ09NTU9OX1BST1RPQ09MOiBodHRwcwogICAgICBDT01NT05fVkVSU0lPTjogJHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICAgIENPTU1PTl9QR19QQVNTV09SRDogJHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfQogICAgICBDT01NT05fUzNfS0VZOiAke1NFUlZJQ0VfVVNFUl9NSU5JT30KICAgICAgQ09NTU9OX1MzX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgICBDT01NT05fSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFJFRlJFU0h9CiAgICAgIENPTU1PTl9KV1RfU1BPVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNQT1RSRUZSRVNIfQogICAgICBDT01NT05fQVNTSVNUX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RKV1R9CiAgICAgIENPTU1PTl9BU1NJU1RfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUS0VZfQogICAgICBMSUNFTlNFX0tFWTogJycKICAgICAgS0FGS0FfU0VSVkVSUzogJycKICAgICAgS0FGS0FfVVNFX1NTTDogJ2ZhbHNlJwogICAgICBBV1NfQUNDRVNTX0tFWV9JRDogJHtTRVJWSUNFX1VTRVJfTUlOSU99CiAgICAgIEFXU19TRUNSRVRfQUNDRVNTX0tFWTogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgICBBV1NfRU5EUE9JTlQ6IGh0dHBzOi8vJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogICAgICBBV1NfUkVHSU9OOiB1cy1lYXN0LTEKICAgICAgQlVDS0VUX05BTUU6IG1vYnMKICAgICAgRlNfQ0xFQU5fSFJTOiAnMjQnCiAgICAgIFJFRElTX1NUUklORzogcmVkaXM6Ly9yZWRpcy1tYXN0ZXIuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6NjM3OQogICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWQKICBpbnRlZ3JhdGlvbnMtb3BlbnJlcGxheToKICAgIGltYWdlOiBwdWJsaWMuZWNyLmF3cy9wMXQzdThhMy9pbnRlZ3JhdGlvbnM6JHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICBkb21haW5uYW1lOiBhcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGRlcGVuZHNfb246CiAgICAgIGRiLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgdm9sdW1lczoKICAgIC0gc2hhcmVkLXZvbHVtZTovbW50L2VmcwogICAgbmV0d29ya3M6CiAgICAgIG9wZW5yZXBsYXktbmV0OgogICAgICAgIGFsaWFzZXM6CiAgICAgICAgLSBpbnRlZ3JhdGlvbnMtb3BlbnJlcGxheQogICAgICAgIC0gaW50ZWdyYXRpb25zLW9wZW5yZXBsYXkuYXBwLnN2Yy5jbHVzdGVyLmxvY2FsCiAgICBlbnZpcm9ubWVudDoKICAgICAgQ09NTU9OX0RPTUFJTl9OQU1FOiAke1NFUlZJQ0VfRlFETl9OR0lOWE9QRU5SRVBMQVl9CiAgICAgIENPTU1PTl9QUk9UT0NPTDogaHR0cHMKICAgICAgQ09NTU9OX1ZFUlNJT046ICR7T1BFTlJFUExBWV9WRVJTSU9OOi12MS4yNS4wfQogICAgICBDT01NT05fUEdfUEFTU1dPUkQ6ICR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU30KICAgICAgQ09NTU9OX1MzX0tFWTogJHtTRVJWSUNFX1VTRVJfTUlOSU99CiAgICAgIENPTU1PTl9TM19TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9NSU5JT30KICAgICAgQ09NTU9OX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIENPTU1PTl9KV1RfU1BPVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIENPTU1PTl9KV1RfUkVGUkVTSF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RSRUZSRVNIfQogICAgICBDT01NT05fSldUX1NQT1RfUkVGUkVTSF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTUE9UUkVGUkVTSH0KICAgICAgQ09NTU9OX0FTU0lTVF9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUSldUfQogICAgICBDT01NT05fQVNTSVNUX0tFWTogJHtTRVJWSUNFX1BBU1NXT1JEX0FTU0lTVEtFWX0KICAgICAgTElDRU5TRV9LRVk6ICcnCiAgICAgIEtBRktBX1NFUlZFUlM6ICcnCiAgICAgIEtBRktBX1VTRV9TU0w6ICdmYWxzZScKICAgICAgQVdTX0FDQ0VTU19LRVlfSUQ6ICR7U0VSVklDRV9VU0VSX01JTklPfQogICAgICBBV1NfU0VDUkVUX0FDQ0VTU19LRVk6ICR7U0VSVklDRV9QQVNTV09SRF9NSU5JT30KICAgICAgQVdTX0VORFBPSU5UOiBodHRwczovLyR7U0VSVklDRV9GUUROX05HSU5YT1BFTlJFUExBWX0KICAgICAgQVdTX1JFR0lPTjogdXMtZWFzdC0xCiAgICAgIEJVQ0tFVF9OQU1FOiBtb2JzCiAgICAgIEpXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIFRPS0VOX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX1RPS0VOfQogICAgICBwZ19wYXNzd29yZDogJHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfQogICAgICBQT1NUR1JFU19TVFJJTkc6IHBvc3RncmVzOi8vcG9zdGdyZXM6JHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfUBwb3N0Z3Jlc3FsLmRiLnN2Yy5jbHVzdGVyLmxvY2FsOjU0MzIvcG9zdGdyZXM/c3NsbW9kZT1kaXNhYmxlCiAgICAgIFJFRElTX1NUUklORzogcmVkaXM6Ly9yZWRpcy1tYXN0ZXIuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6NjM3OQogICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWQKICBzaW5rLW9wZW5yZXBsYXk6CiAgICBpbWFnZTogcHVibGljLmVjci5hd3MvcDF0M3U4YTMvc2luazoke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgIGRvbWFpbm5hbWU6IGFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZGVwZW5kc19vbjoKICAgICAgZGItbWlncmF0aW9uOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICB2b2x1bWVzOgogICAgLSBzaGFyZWQtdm9sdW1lOi9tbnQvZWZzCiAgICBuZXR3b3JrczoKICAgICAgb3BlbnJlcGxheS1uZXQ6CiAgICAgICAgYWxpYXNlczoKICAgICAgICAtIHNpbmstb3BlbnJlcGxheQogICAgICAgIC0gc2luay1vcGVucmVwbGF5LmFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZW52aXJvbm1lbnQ6CiAgICAgIENPTU1PTl9ET01BSU5fTkFNRTogJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogICAgICBDT01NT05fUFJPVE9DT0w6IGh0dHBzCiAgICAgIENPTU1PTl9WRVJTSU9OOiAke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgICAgQ09NTU9OX1BHX1BBU1NXT1JEOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgICAgIENPTU1PTl9TM19LRVk6ICR7U0VSVklDRV9VU0VSX01JTklPfQogICAgICBDT01NT05fUzNfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfTUlOSU99CiAgICAgIENPTU1PTl9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1NQT1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUUkVGUkVTSH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU1BPVFJFRlJFU0h9CiAgICAgIENPTU1PTl9BU1NJU1RfSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0FTU0lTVEpXVH0KICAgICAgQ09NTU9OX0FTU0lTVF9LRVk6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RLRVl9CiAgICAgIExJQ0VOU0VfS0VZOiAnJwogICAgICBLQUZLQV9TRVJWRVJTOiAnJwogICAgICBLQUZLQV9VU0VfU1NMOiAnZmFsc2UnCiAgICAgIEFTU0VUU19PUklHSU46IGh0dHBzOi8vJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfS9zZXNzaW9ucy1hc3NldHMKICAgICAgUkVESVNfU1RSSU5HOiByZWRpczovL3JlZGlzLW1hc3Rlci5kYi5zdmMuY2x1c3Rlci5sb2NhbDo2Mzc5CiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogIHNvdXJjZW1hcHJlYWRlci1vcGVucmVwbGF5OgogICAgaW1hZ2U6IHB1YmxpYy5lY3IuYXdzL3AxdDN1OGEzL3NvdXJjZW1hcHJlYWRlcjoke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgIGRvbWFpbm5hbWU6IGFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZGVwZW5kc19vbjoKICAgICAgZGItbWlncmF0aW9uOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICB2b2x1bWVzOgogICAgLSBzaGFyZWQtdm9sdW1lOi9tbnQvZWZzCiAgICBuZXR3b3JrczoKICAgICAgb3BlbnJlcGxheS1uZXQ6CiAgICAgICAgYWxpYXNlczoKICAgICAgICAtIHNvdXJjZW1hcHJlYWRlci1vcGVucmVwbGF5CiAgICAgICAgLSBzb3VyY2VtYXByZWFkZXItb3BlbnJlcGxheS5hcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGVudmlyb25tZW50OgogICAgICBDT01NT05fRE9NQUlOX05BTUU6ICR7U0VSVklDRV9GUUROX05HSU5YT1BFTlJFUExBWX0KICAgICAgQ09NTU9OX1BST1RPQ09MOiBodHRwcwogICAgICBDT01NT05fVkVSU0lPTjogJHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICAgIENPTU1PTl9QR19QQVNTV09SRDogJHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfQogICAgICBDT01NT05fUzNfS0VZOiAke1NFUlZJQ0VfVVNFUl9NSU5JT30KICAgICAgQ09NTU9OX1MzX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgICBDT01NT05fSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFJFRlJFU0h9CiAgICAgIENPTU1PTl9KV1RfU1BPVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNQT1RSRUZSRVNIfQogICAgICBDT01NT05fQVNTSVNUX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RKV1R9CiAgICAgIENPTU1PTl9BU1NJU1RfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUS0VZfQogICAgICBMSUNFTlNFX0tFWTogJycKICAgICAgS0FGS0FfU0VSVkVSUzogJycKICAgICAgS0FGS0FfVVNFX1NTTDogJ2ZhbHNlJwogICAgICBTTVJfSE9TVDogMC4wLjAuMAogICAgICBTM19IT1NUOiBodHRwOi8vbWluaW8uZGIuc3ZjLmNsdXN0ZXIubG9jYWw6OTAwMAogICAgICBTM19LRVk6ICR7U0VSVklDRV9VU0VSX01JTklPfQogICAgICBTM19TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9NSU5JT30KICAgICAgQVdTX1JFR0lPTjogdXMtZWFzdC0xCiAgICAgIEFTU0VUU19PUklHSU46IGh0dHBzOi8vJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfS9zZXNzaW9ucy1hc3NldHMKICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkCiAgc3BvdC1vcGVucmVwbGF5OgogICAgaW1hZ2U6IHB1YmxpYy5lY3IuYXdzL3AxdDN1OGEzL3Nwb3Q6JHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICBkb21haW5uYW1lOiBhcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGRlcGVuZHNfb246CiAgICAgIGRiLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgdm9sdW1lczoKICAgIC0gc2hhcmVkLXZvbHVtZTovbW50L2VmcwogICAgbmV0d29ya3M6CiAgICAgIG9wZW5yZXBsYXktbmV0OgogICAgICAgIGFsaWFzZXM6CiAgICAgICAgLSBzcG90LW9wZW5yZXBsYXkKICAgICAgICAtIHNwb3Qtb3BlbnJlcGxheS5hcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGVudmlyb25tZW50OgogICAgICBDT01NT05fRE9NQUlOX05BTUU6ICR7U0VSVklDRV9GUUROX05HSU5YT1BFTlJFUExBWX0KICAgICAgQ09NTU9OX1BST1RPQ09MOiBodHRwcwogICAgICBDT01NT05fVkVSU0lPTjogJHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICAgIENPTU1PTl9QR19QQVNTV09SRDogJHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfQogICAgICBDT01NT05fUzNfS0VZOiAke1NFUlZJQ0VfVVNFUl9NSU5JT30KICAgICAgQ09NTU9OX1MzX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgICBDT01NT05fSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFJFRlJFU0h9CiAgICAgIENPTU1PTl9KV1RfU1BPVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNQT1RSRUZSRVNIfQogICAgICBDT01NT05fQVNTSVNUX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RKV1R9CiAgICAgIENPTU1PTl9BU1NJU1RfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUS0VZfQogICAgICBMSUNFTlNFX0tFWTogJycKICAgICAgS0FGS0FfU0VSVkVSUzogJycKICAgICAgS0FGS0FfVVNFX1NTTDogJ2ZhbHNlJwogICAgICBDQUNIRV9BU1NFVFM6ICd0cnVlJwogICAgICBGU19DTEVBTl9IUlM6ICcyNCcKICAgICAgVE9LRU5fU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfVE9LRU59CiAgICAgIEFXU19BQ0NFU1NfS0VZX0lEOiAke1NFUlZJQ0VfVVNFUl9NSU5JT30KICAgICAgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfTUlOSU99CiAgICAgIEJVQ0tFVF9OQU1FOiBzcG90cwogICAgICBBV1NfUkVHSU9OOiB1cy1lYXN0LTEKICAgICAgQVdTX0VORFBPSU5UOiBodHRwczovLyR7U0VSVklDRV9GUUROX05HSU5YT1BFTlJFUExBWX0KICAgICAgSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgSldUX1NQT1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBwZ19wYXNzd29yZDogJHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfQogICAgICBQT1NUR1JFU19TVFJJTkc6IHBvc3RncmVzOi8vcG9zdGdyZXM6JHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfUBwb3N0Z3Jlc3FsLmRiLnN2Yy5jbHVzdGVyLmxvY2FsOjU0MzIvcG9zdGdyZXM/c3NsbW9kZT1kaXNhYmxlCiAgICAgIFJFRElTX1NUUklORzogcmVkaXM6Ly9yZWRpcy1tYXN0ZXIuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6NjM3OQogICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWQKICBzdG9yYWdlLW9wZW5yZXBsYXk6CiAgICBpbWFnZTogcHVibGljLmVjci5hd3MvcDF0M3U4YTMvc3RvcmFnZToke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgIGRvbWFpbm5hbWU6IGFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZGVwZW5kc19vbjoKICAgICAgZGItbWlncmF0aW9uOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICB2b2x1bWVzOgogICAgLSBzaGFyZWQtdm9sdW1lOi9tbnQvZWZzCiAgICBuZXR3b3JrczoKICAgICAgb3BlbnJlcGxheS1uZXQ6CiAgICAgICAgYWxpYXNlczoKICAgICAgICAtIHN0b3JhZ2Utb3BlbnJlcGxheQogICAgICAgIC0gc3RvcmFnZS1vcGVucmVwbGF5LmFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZW52aXJvbm1lbnQ6CiAgICAgIENPTU1PTl9ET01BSU5fTkFNRTogJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogICAgICBDT01NT05fUFJPVE9DT0w6IGh0dHBzCiAgICAgIENPTU1PTl9WRVJTSU9OOiAke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgICAgQ09NTU9OX1BHX1BBU1NXT1JEOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgICAgIENPTU1PTl9TM19LRVk6ICR7U0VSVklDRV9VU0VSX01JTklPfQogICAgICBDT01NT05fUzNfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfTUlOSU99CiAgICAgIENPTU1PTl9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1NQT1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUUkVGUkVTSH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU1BPVFJFRlJFU0h9CiAgICAgIENPTU1PTl9BU1NJU1RfSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0FTU0lTVEpXVH0KICAgICAgQ09NTU9OX0FTU0lTVF9LRVk6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RLRVl9CiAgICAgIExJQ0VOU0VfS0VZOiAnJwogICAgICBLQUZLQV9TRVJWRVJTOiAnJwogICAgICBLQUZLQV9VU0VfU1NMOiAnZmFsc2UnCiAgICAgIEFXU19BQ0NFU1NfS0VZX0lEOiAke1NFUlZJQ0VfVVNFUl9NSU5JT30KICAgICAgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfTUlOSU99CiAgICAgIEFXU19FTkRQT0lOVDogaHR0cHM6Ly8ke1NFUlZJQ0VfRlFETl9OR0lOWE9QRU5SRVBMQVl9CiAgICAgIEFXU19SRUdJT046IHVzLWVhc3QtMQogICAgICBCVUNLRVRfTkFNRTogbW9icwogICAgICBGU19DTEVBTl9IUlM6ICcyNCcKICAgICAgUkVESVNfU1RSSU5HOiByZWRpczovL3JlZGlzLW1hc3Rlci5kYi5zdmMuY2x1c3Rlci5sb2NhbDo2Mzc5CiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogIGFzc2V0cy1vcGVucmVwbGF5OgogICAgaW1hZ2U6IHB1YmxpYy5lY3IuYXdzL3AxdDN1OGEzL2Fzc2V0czoke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgIGRvbWFpbm5hbWU6IGFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZGVwZW5kc19vbjoKICAgICAgZGItbWlncmF0aW9uOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICB2b2x1bWVzOgogICAgLSBzaGFyZWQtdm9sdW1lOi9tbnQvZWZzCiAgICBuZXR3b3JrczoKICAgICAgb3BlbnJlcGxheS1uZXQ6CiAgICAgICAgYWxpYXNlczoKICAgICAgICAtIGFzc2V0cy1vcGVucmVwbGF5CiAgICAgICAgLSBhc3NldHMtb3BlbnJlcGxheS5hcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGVudmlyb25tZW50OgogICAgICBDT01NT05fRE9NQUlOX05BTUU6ICR7U0VSVklDRV9GUUROX05HSU5YT1BFTlJFUExBWX0KICAgICAgQ09NTU9OX1BST1RPQ09MOiBodHRwcwogICAgICBDT01NT05fVkVSU0lPTjogJHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICAgIENPTU1PTl9QR19QQVNTV09SRDogJHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfQogICAgICBDT01NT05fUzNfS0VZOiAke1NFUlZJQ0VfVVNFUl9NSU5JT30KICAgICAgQ09NTU9OX1MzX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgICBDT01NT05fSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFJFRlJFU0h9CiAgICAgIENPTU1PTl9KV1RfU1BPVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNQT1RSRUZSRVNIfQogICAgICBDT01NT05fQVNTSVNUX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RKV1R9CiAgICAgIENPTU1PTl9BU1NJU1RfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUS0VZfQogICAgICBMSUNFTlNFX0tFWTogJycKICAgICAgS0FGS0FfU0VSVkVSUzogJycKICAgICAgS0FGS0FfVVNFX1NTTDogJ2ZhbHNlJwogICAgICBBV1NfQUNDRVNTX0tFWV9JRDogJHtTRVJWSUNFX1VTRVJfTUlOSU99CiAgICAgIEFXU19TRUNSRVRfQUNDRVNTX0tFWTogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgICBCVUNLRVRfTkFNRTogc2Vzc2lvbnMtYXNzZXRzCiAgICAgIEFXU19FTkRQT0lOVDogaHR0cHM6Ly8ke1NFUlZJQ0VfRlFETl9OR0lOWE9QRU5SRVBMQVl9CiAgICAgIEFXU19SRUdJT046IHVzLWVhc3QtMQogICAgICBBU1NFVFNfT1JJR0lOOiBodHRwczovLyR7U0VSVklDRV9GUUROX05HSU5YT1BFTlJFUExBWX0vc2Vzc2lvbnMtYXNzZXRzCiAgICAgIFJFRElTX1NUUklORzogcmVkaXM6Ly9yZWRpcy1tYXN0ZXIuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6NjM3OQogICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWQKICBhc3Npc3Qtb3BlbnJlcGxheToKICAgIGltYWdlOiBwdWJsaWMuZWNyLmF3cy9wMXQzdThhMy9hc3Npc3Q6JHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICBkb21haW5uYW1lOiBhcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGRlcGVuZHNfb246CiAgICAgIGRiLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgdm9sdW1lczoKICAgIC0gc2hhcmVkLXZvbHVtZTovbW50L2VmcwogICAgbmV0d29ya3M6CiAgICAgIG9wZW5yZXBsYXktbmV0OgogICAgICAgIGFsaWFzZXM6CiAgICAgICAgLSBhc3Npc3Qtb3BlbnJlcGxheQogICAgICAgIC0gYXNzaXN0LW9wZW5yZXBsYXkuYXBwLnN2Yy5jbHVzdGVyLmxvY2FsCiAgICBlbnZpcm9ubWVudDoKICAgICAgQ09NTU9OX0RPTUFJTl9OQU1FOiAke1NFUlZJQ0VfRlFETl9OR0lOWE9QRU5SRVBMQVl9CiAgICAgIENPTU1PTl9QUk9UT0NPTDogaHR0cHMKICAgICAgQ09NTU9OX1ZFUlNJT046ICR7T1BFTlJFUExBWV9WRVJTSU9OOi12MS4yNS4wfQogICAgICBDT01NT05fUEdfUEFTU1dPUkQ6ICR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU30KICAgICAgQ09NTU9OX1MzX0tFWTogJHtTRVJWSUNFX1VTRVJfTUlOSU99CiAgICAgIENPTU1PTl9TM19TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9NSU5JT30KICAgICAgQ09NTU9OX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIENPTU1PTl9KV1RfU1BPVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIENPTU1PTl9KV1RfUkVGUkVTSF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RSRUZSRVNIfQogICAgICBDT01NT05fSldUX1NQT1RfUkVGUkVTSF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTUE9UUkVGUkVTSH0KICAgICAgQ09NTU9OX0FTU0lTVF9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUSldUfQogICAgICBDT01NT05fQVNTSVNUX0tFWTogJHtTRVJWSUNFX1BBU1NXT1JEX0FTU0lTVEtFWX0KICAgICAgTElDRU5TRV9LRVk6ICcnCiAgICAgIEtBRktBX1NFUlZFUlM6ICcnCiAgICAgIEtBRktBX1VTRV9TU0w6ICdmYWxzZScKICAgICAgQVNTSVNUX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RKV1R9CiAgICAgIEFTU0lTVF9LRVk6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RLRVl9CiAgICAgIEFXU19ERUZBVUxUX1JFR0lPTjogdXMtZWFzdC0xCiAgICAgIFJFRElTX1VSTDogcmVkaXM6Ly9yZWRpcy1tYXN0ZXIuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6NjM3OQogICAgICBDTEVBUl9TT0NLRVRfVElNRTogJzcyMCcKICAgICAgZGVidWc6ICcwJwogICAgICByZWRpczogJ2ZhbHNlJwogICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWQKICBjYW52YXNlcy1vcGVucmVwbGF5OgogICAgaW1hZ2U6IHB1YmxpYy5lY3IuYXdzL3AxdDN1OGEzL2NhbnZhc2VzOiR7T1BFTlJFUExBWV9WRVJTSU9OOi12MS4yNS4wfQogICAgZG9tYWlubmFtZTogYXBwLnN2Yy5jbHVzdGVyLmxvY2FsCiAgICBkZXBlbmRzX29uOgogICAgICBkYi1taWdyYXRpb246CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2NvbXBsZXRlZF9zdWNjZXNzZnVsbHkKICAgIHZvbHVtZXM6CiAgICAtIHNoYXJlZC12b2x1bWU6L21udC9lZnMKICAgIG5ldHdvcmtzOgogICAgICBvcGVucmVwbGF5LW5ldDoKICAgICAgICBhbGlhc2VzOgogICAgICAgIC0gY2FudmFzZXMtb3BlbnJlcGxheQogICAgICAgIC0gY2FudmFzZXMtb3BlbnJlcGxheS5hcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGVudmlyb25tZW50OgogICAgICBDT01NT05fRE9NQUlOX05BTUU6ICR7U0VSVklDRV9GUUROX05HSU5YT1BFTlJFUExBWX0KICAgICAgQ09NTU9OX1BST1RPQ09MOiBodHRwcwogICAgICBDT01NT05fVkVSU0lPTjogJHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICAgIENPTU1PTl9QR19QQVNTV09SRDogJHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfQogICAgICBDT01NT05fUzNfS0VZOiAke1NFUlZJQ0VfVVNFUl9NSU5JT30KICAgICAgQ09NTU9OX1MzX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgICBDT01NT05fSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNFQ1JFVH0KICAgICAgQ09NTU9OX0pXVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFJFRlJFU0h9CiAgICAgIENPTU1PTl9KV1RfU1BPVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFNQT1RSRUZSRVNIfQogICAgICBDT01NT05fQVNTSVNUX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RKV1R9CiAgICAgIENPTU1PTl9BU1NJU1RfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUS0VZfQogICAgICBMSUNFTlNFX0tFWTogJycKICAgICAgS0FGS0FfU0VSVkVSUzogJycKICAgICAgS0FGS0FfVVNFX1NTTDogJ2ZhbHNlJwogICAgICBBV1NfQUNDRVNTX0tFWV9JRDogJHtTRVJWSUNFX1VTRVJfTUlOSU99CiAgICAgIEFXU19TRUNSRVRfQUNDRVNTX0tFWTogJHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfQogICAgICBBV1NfRU5EUE9JTlQ6IGh0dHBzOi8vJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogICAgICBBV1NfUkVHSU9OOiB1cy1lYXN0LTEKICAgICAgQlVDS0VUX05BTUU6IG1vYnMKICAgICAgRlNfQ0xFQU5fSFJTOiAnMjQnCiAgICAgIFJFRElTX1NUUklORzogcmVkaXM6Ly9yZWRpcy1tYXN0ZXIuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6NjM3OQogICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWQKICBjaGFsaWNlLW9wZW5yZXBsYXk6CiAgICBpbWFnZTogcHVibGljLmVjci5hd3MvcDF0M3U4YTMvY2hhbGljZToke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgIGRvbWFpbm5hbWU6IGFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZGVwZW5kc19vbjoKICAgICAgZGItbWlncmF0aW9uOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICAgIGNsaWNraG91c2UtbWlncmF0aW9uOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICB2b2x1bWVzOgogICAgLSBzaGFyZWQtdm9sdW1lOi9tbnQvZWZzCiAgICBuZXR3b3JrczoKICAgICAgb3BlbnJlcGxheS1uZXQ6CiAgICAgICAgYWxpYXNlczoKICAgICAgICAtIGNoYWxpY2Utb3BlbnJlcGxheQogICAgICAgIC0gY2hhbGljZS1vcGVucmVwbGF5LmFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZW52aXJvbm1lbnQ6CiAgICAgIENPTU1PTl9ET01BSU5fTkFNRTogJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogICAgICBDT01NT05fUFJPVE9DT0w6IGh0dHBzCiAgICAgIENPTU1PTl9WRVJTSU9OOiAke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgICAgQ09NTU9OX1BHX1BBU1NXT1JEOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgICAgIENPTU1PTl9TM19LRVk6ICR7U0VSVklDRV9VU0VSX01JTklPfQogICAgICBDT01NT05fUzNfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfTUlOSU99CiAgICAgIENPTU1PTl9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1NQT1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUUkVGUkVTSH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU1BPVFJFRlJFU0h9CiAgICAgIENPTU1PTl9BU1NJU1RfSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0FTU0lTVEpXVH0KICAgICAgQ09NTU9OX0FTU0lTVF9LRVk6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RLRVl9CiAgICAgIExJQ0VOU0VfS0VZOiAnJwogICAgICBLQUZLQV9TRVJWRVJTOiAnJwogICAgICBLQUZLQV9VU0VfU1NMOiAnZmFsc2UnCiAgICAgIFJFRElTX1NUUklORzogcmVkaXM6Ly9yZWRpcy1tYXN0ZXIuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6NjM3OQogICAgICBjaF91c2VybmFtZTogZGVmYXVsdAogICAgICBjaF9wYXNzd29yZDogJycKICAgICAgY2hfaG9zdDogY2xpY2tob3VzZS1vcGVucmVwbGF5LWNsaWNraG91c2UuZGIuc3ZjLmNsdXN0ZXIubG9jYWwKICAgICAgY2hfcG9ydDogJzkwMDAnCiAgICAgIGNoX3BvcnRfaHR0cDogJzgxMjMnCiAgICAgIHNvdXJjZW1hcHNfcmVhZGVyOiBodHRwOi8vc291cmNlbWFwcmVhZGVyLW9wZW5yZXBsYXkuYXBwLnN2Yy5jbHVzdGVyLmxvY2FsOjkwMDAve30vc291cmNlbWFwcwogICAgICBBU1NJU1RfVVJMOiBodHRwOi8vYXNzaXN0LW9wZW5yZXBsYXkuYXBwLnN2Yy5jbHVzdGVyLmxvY2FsOjkwMDEvYXNzaXN0LyVzCiAgICAgIEpXVF9SRUZSRVNIX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0pXVFJFRlJFU0h9CiAgICAgIEpXVF9TUE9UX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU1BPVFJFRlJFU0h9CiAgICAgIEFTU0lTVF9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUSldUfQogICAgICBKV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBBU1NJU1RfS0VZOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUS0VZfQogICAgICBKV1RfU1BPVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIHZlcnNpb25fbnVtYmVyOiAke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgICAgcGdfaG9zdDogcG9zdGdyZXNxbC5kYi5zdmMuY2x1c3Rlci5sb2NhbAogICAgICBwZ19wb3J0OiAnNTQzMicKICAgICAgcGdfZGJuYW1lOiBwb3N0Z3JlcwogICAgICBwZ191c2VyOiBwb3N0Z3JlcwogICAgICBwZ19wYXNzd29yZDogJHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfQogICAgICBTSVRFX1VSTDogaHR0cHM6Ly8ke1NFUlZJQ0VfRlFETl9OR0lOWE9QRU5SRVBMQVl9CiAgICAgIFMzX0hPU1Q6IGh0dHBzOi8vJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogICAgICBTM19LRVk6ICR7U0VSVklDRV9VU0VSX01JTklPfQogICAgICBTM19TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9NSU5JT30KICAgICAgQVdTX0RFRkFVTFRfUkVHSU9OOiB1cy1lYXN0LTEKICAgICAgc2Vzc2lvbnNfcmVnaW9uOiB1cy1lYXN0LTEKICAgICAgQVNTSVNUX1JFQ09SRFNfQlVDS0VUOiByZWNvcmRzCiAgICAgIHNlc3Npb25zX2J1Y2tldDogbW9icwogICAgICBJT1NfVklERU9fQlVDS0VUOiBtb2JzCiAgICAgIHNvdXJjZW1hcHNfYnVja2V0OiBzb3VyY2VtYXBzCiAgICAgIGpzX2NhY2hlX2J1Y2tldDogc2Vzc2lvbnMtYXNzZXRzCiAgICAgIEVNQUlMX0hPU1Q6ICcnCiAgICAgIEVNQUlMX1BPUlQ6ICc1ODcnCiAgICAgIEVNQUlMX1VTRVI6ICcnCiAgICAgIEVNQUlMX1BBU1NXT1JEOiAnJwogICAgICBFTUFJTF9VU0VfVExTOiAndHJ1ZScKICAgICAgRU1BSUxfVVNFX1NTTDogJ2ZhbHNlJwogICAgICBFTUFJTF9TU0xfS0VZOiAnJwogICAgICBFTUFJTF9TU0xfQ0VSVDogJycKICAgICAgRU1BSUxfRlJPTTogJ09wZW5SZXBsYXkgJwogICAgICBDSF9DT01QUkVTU0lPTjogJ2ZhbHNlJwogICAgICBDTFVTVEVSX1VSTDogc3ZjLmNsdXN0ZXIubG9jYWwKICAgICAgSldUX0VYUElSQVRJT046ICc4NjQwMCcKICAgICAgTE9HTEVWRUw6IElORk8KICAgICAgUFlUSE9OVU5CVUZGRVJFRDogJzAnCiAgICAgIFNBTUwyX01EX1VSTDogJycKICAgICAgcm9vdF9wYXRoOiAvYXBpCiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogIGRiLW9wZW5yZXBsYXk6CiAgICBpbWFnZTogcHVibGljLmVjci5hd3MvcDF0M3U4YTMvZGI6JHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICBkb21haW5uYW1lOiBhcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGRlcGVuZHNfb246CiAgICAgIGRiLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgICBjbGlja2hvdXNlLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgdm9sdW1lczoKICAgIC0gc2hhcmVkLXZvbHVtZTovbW50L2VmcwogICAgbmV0d29ya3M6CiAgICAgIG9wZW5yZXBsYXktbmV0OgogICAgICAgIGFsaWFzZXM6CiAgICAgICAgLSBkYi1vcGVucmVwbGF5CiAgICAgICAgLSBkYi1vcGVucmVwbGF5LmFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZW52aXJvbm1lbnQ6CiAgICAgIENPTU1PTl9ET01BSU5fTkFNRTogJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogICAgICBDT01NT05fUFJPVE9DT0w6IGh0dHBzCiAgICAgIENPTU1PTl9WRVJTSU9OOiAke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgICAgQ09NTU9OX1BHX1BBU1NXT1JEOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgICAgIENPTU1PTl9TM19LRVk6ICR7U0VSVklDRV9VU0VSX01JTklPfQogICAgICBDT01NT05fUzNfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfTUlOSU99CiAgICAgIENPTU1PTl9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1NQT1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUUkVGUkVTSH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU1BPVFJFRlJFU0h9CiAgICAgIENPTU1PTl9BU1NJU1RfSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0FTU0lTVEpXVH0KICAgICAgQ09NTU9OX0FTU0lTVF9LRVk6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RLRVl9CiAgICAgIExJQ0VOU0VfS0VZOiAnJwogICAgICBLQUZLQV9TRVJWRVJTOiAnJwogICAgICBLQUZLQV9VU0VfU1NMOiAnZmFsc2UnCiAgICAgIENIX1VTRVJOQU1FOiBkZWZhdWx0CiAgICAgIENIX1BBU1NXT1JEOiAnJwogICAgICBDTElDS0hPVVNFX1NUUklORzogY2xpY2tob3VzZS1vcGVucmVwbGF5LWNsaWNraG91c2UuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6OTAwMC9kZWZhdWx0CiAgICAgIGNoX2RiOiBkZWZhdWx0CiAgICAgIHBnX3Bhc3N3b3JkOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgICAgIFBPU1RHUkVTX1NUUklORzogcG9zdGdyZXM6Ly9wb3N0Z3Jlczoke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9QHBvc3RncmVzcWwuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6NTQzMi9wb3N0Z3Jlcz9zc2xtb2RlPWRpc2FibGUKICAgICAgUkVESVNfU1RSSU5HOiByZWRpczovL3JlZGlzLW1hc3Rlci5kYi5zdmMuY2x1c3Rlci5sb2NhbDo2Mzc5CiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogIGVuZGVyLW9wZW5yZXBsYXk6CiAgICBpbWFnZTogcHVibGljLmVjci5hd3MvcDF0M3U4YTMvZW5kZXI6JHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICBkb21haW5uYW1lOiBhcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGRlcGVuZHNfb246CiAgICAgIGRiLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgdm9sdW1lczoKICAgIC0gc2hhcmVkLXZvbHVtZTovbW50L2VmcwogICAgbmV0d29ya3M6CiAgICAgIG9wZW5yZXBsYXktbmV0OgogICAgICAgIGFsaWFzZXM6CiAgICAgICAgLSBlbmRlci1vcGVucmVwbGF5CiAgICAgICAgLSBlbmRlci1vcGVucmVwbGF5LmFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZW52aXJvbm1lbnQ6CiAgICAgIENPTU1PTl9ET01BSU5fTkFNRTogJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogICAgICBDT01NT05fUFJPVE9DT0w6IGh0dHBzCiAgICAgIENPTU1PTl9WRVJTSU9OOiAke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgICAgQ09NTU9OX1BHX1BBU1NXT1JEOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgICAgIENPTU1PTl9TM19LRVk6ICR7U0VSVklDRV9VU0VSX01JTklPfQogICAgICBDT01NT05fUzNfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfTUlOSU99CiAgICAgIENPTU1PTl9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1NQT1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUUkVGUkVTSH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU1BPVFJFRlJFU0h9CiAgICAgIENPTU1PTl9BU1NJU1RfSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0FTU0lTVEpXVH0KICAgICAgQ09NTU9OX0FTU0lTVF9LRVk6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RLRVl9CiAgICAgIExJQ0VOU0VfS0VZOiAnJwogICAgICBLQUZLQV9TRVJWRVJTOiAnJwogICAgICBLQUZLQV9VU0VfU1NMOiAnZmFsc2UnCiAgICAgIHBnX3Bhc3N3b3JkOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgICAgIFBPU1RHUkVTX1NUUklORzogcG9zdGdyZXM6Ly9wb3N0Z3Jlczoke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9QHBvc3RncmVzcWwuZGIuc3ZjLmNsdXN0ZXIubG9jYWw6NTQzMi9wb3N0Z3Jlcz9zc2xtb2RlPWRpc2FibGUKICAgICAgUkVESVNfU1RSSU5HOiByZWRpczovL3JlZGlzLW1hc3Rlci5kYi5zdmMuY2x1c3Rlci5sb2NhbDo2Mzc5CiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogIGZyb250ZW5kLW9wZW5yZXBsYXk6CiAgICBpbWFnZTogcHVibGljLmVjci5hd3MvcDF0M3U4YTMvZnJvbnRlbmQ6JHtPUEVOUkVQTEFZX1ZFUlNJT046LXYxLjI1LjB9CiAgICBkb21haW5uYW1lOiBhcHAuc3ZjLmNsdXN0ZXIubG9jYWwKICAgIGRlcGVuZHNfb246CiAgICAgIGRiLW1pZ3JhdGlvbjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgdm9sdW1lczoKICAgIC0gc2hhcmVkLXZvbHVtZTovbW50L2VmcwogICAgbmV0d29ya3M6CiAgICAgIG9wZW5yZXBsYXktbmV0OgogICAgICAgIGFsaWFzZXM6CiAgICAgICAgLSBmcm9udGVuZC1vcGVucmVwbGF5CiAgICAgICAgLSBmcm9udGVuZC1vcGVucmVwbGF5LmFwcC5zdmMuY2x1c3Rlci5sb2NhbAogICAgZW52aXJvbm1lbnQ6CiAgICAgIENPTU1PTl9ET01BSU5fTkFNRTogJHtTRVJWSUNFX0ZRRE5fTkdJTlhPUEVOUkVQTEFZfQogICAgICBDT01NT05fUFJPVE9DT0w6IGh0dHBzCiAgICAgIENPTU1PTl9WRVJTSU9OOiAke09QRU5SRVBMQVlfVkVSU0lPTjotdjEuMjUuMH0KICAgICAgQ09NTU9OX1BHX1BBU1NXT1JEOiAke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9CiAgICAgIENPTU1PTl9TM19LRVk6ICR7U0VSVklDRV9VU0VSX01JTklPfQogICAgICBDT01NT05fUzNfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfTUlOSU99CiAgICAgIENPTU1PTl9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1NQT1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU0VDUkVUfQogICAgICBDT01NT05fSldUX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUUkVGUkVTSH0KICAgICAgQ09NTU9OX0pXVF9TUE9UX1JFRlJFU0hfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfSldUU1BPVFJFRlJFU0h9CiAgICAgIENPTU1PTl9BU1NJU1RfSldUX1NFQ1JFVDogJHtTRVJWSUNFX1BBU1NXT1JEX0FTU0lTVEpXVH0KICAgICAgQ09NTU9OX0FTU0lTVF9LRVk6ICR7U0VSVklDRV9QQVNTV09SRF9BU1NJU1RLRVl9CiAgICAgIExJQ0VOU0VfS0VZOiAnJwogICAgICBLQUZLQV9TRVJWRVJTOiAnJwogICAgICBLQUZLQV9VU0VfU1NMOiAnZmFsc2UnCiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogIGhldXJpc3RpY3Mtb3BlbnJlcGxheToKICAgIGltYWdlOiBwdWJsaWMuZWNyLmF3cy9wMXQzdThhMy9oZXVyaXN0aWNzOiR7T1BFTlJFUExBWV9WRVJTSU9OOi12MS4yNS4wfQogICAgZG9tYWlubmFtZTogYXBwLnN2Yy5jbHVzdGVyLmxvY2FsCiAgICBkZXBlbmRzX29uOgogICAgICBkYi1taWdyYXRpb246CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2NvbXBsZXRlZF9zdWNjZXNzZnVsbHkKICAgIHZvbHVtZXM6CiAgICAtIHNoYXJlZC12b2x1bWU6L21udC9lZnMKICAgIG5ldHdvcmtzOgogICAgICBvcGVucmVwbGF5LW5ldDoKICAgICAgICBhbGlhc2VzOgogICAgICAgIC0gaGV1cmlzdGljcy1vcGVucmVwbGF5CiAgICAgICAgLSBoZXVyaXN0aWNzLW9wZW5yZXBsYXkuYXBwLnN2Yy5jbHVzdGVyLmxvY2FsCiAgICBlbnZpcm9ubWVudDoKICAgICAgQ09NTU9OX0RPTUFJTl9OQU1FOiAke1NFUlZJQ0VfRlFETl9OR0lOWE9QRU5SRVBMQVl9CiAgICAgIENPTU1PTl9QUk9UT0NPTDogaHR0cHMKICAgICAgQ09NTU9OX1ZFUlNJT046ICR7T1BFTlJFUExBWV9WRVJTSU9OOi12MS4yNS4wfQogICAgICBDT01NT05fUEdfUEFTU1dPUkQ6ICR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU30KICAgICAgQ09NTU9OX1MzX0tFWTogJHtTRVJWSUNFX1VTRVJfTUlOSU99CiAgICAgIENPTU1PTl9TM19TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9NSU5JT30KICAgICAgQ09NTU9OX0pXVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIENPTU1PTl9KV1RfU1BPVF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTRUNSRVR9CiAgICAgIENPTU1PTl9KV1RfUkVGUkVTSF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RSRUZSRVNIfQogICAgICBDT01NT05fSldUX1NQT1RfUkVGUkVTSF9TRUNSRVQ6ICR7U0VSVklDRV9QQVNTV09SRF9KV1RTUE9UUkVGUkVTSH0KICAgICAgQ09NTU9OX0FTU0lTVF9KV1RfU0VDUkVUOiAke1NFUlZJQ0VfUEFTU1dPUkRfQVNTSVNUSldUfQogICAgICBDT01NT05fQVNTSVNUX0tFWTogJHtTRVJWSUNFX1BBU1NXT1JEX0FTU0lTVEtFWX0KICAgICAgTElDRU5TRV9LRVk6ICcnCiAgICAgIEtBRktBX1NFUlZFUlM6ICcnCiAgICAgIEtBRktBX1VTRV9TU0w6ICdmYWxzZScKICAgICAgUkVESVNfU1RSSU5HOiByZWRpczovL3JlZGlzLW1hc3Rlci5kYi5zdmMuY2x1c3Rlci5sb2NhbDo2Mzc5CiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogIG5naW54LW9wZW5yZXBsYXk6CiAgICBpbWFnZTogbmdpbng6bGF0ZXN0CiAgICBkZXBlbmRzX29uOgogICAgLSBmcm9udGVuZC1vcGVucmVwbGF5CiAgICAtIGNoYWxpY2Utb3BlbnJlcGxheQogICAgLSBhcGktb3BlbnJlcGxheQogICAgZW52aXJvbm1lbnQ6CiAgICAtIFNFUlZJQ0VfRlFETl9OR0lOWE9QRU5SRVBMQVkKICAgIHZvbHVtZXM6CiAgICAtIHR5cGU6IGJpbmQKICAgICAgc291cmNlOiAuL25naW54L29wZW5yZXBsYXkuY29uZgogICAgICB0YXJnZXQ6IC9ldGMvbmdpbngvY29uZi5kL2RlZmF1bHQuY29uZgogICAgICByZWFkX29ubHk6IHRydWUKICAgICAgY29udGVudDogIm1hcCAkYXJnX3BlZXJJZCAkc2Vzc2lvbmlkIHtcbiAgZGVmYXVsdCBcIlwiO1xuICBcIn4uKi0oXFxkKykoPzotLip8JClcIlwKICAgICAgICBcICQxO1xufVxubWFwICRodHRwX3hfZm9yd2FyZGVkX2ZvciAkcmVhbF9pcCB7XG4gIH5eKFxcZCtcXC5cXGQrXFwuXFxkK1xcXAogICAgICAgIC5cXGQrKSAkMTtcbiAgZGVmYXVsdCAkcmVtb3RlX2FkZHI7XG59XG5tYXAgJGh0dHBfdXBncmFkZSAkY29ubmVjdGlvbl91cGdyYWRlXAogICAgICAgIFwge1xuICBkZWZhdWx0IHVwZ3JhZGU7XG4gICcnIGNsb3NlO1xufVxubWFwICRodHRwX3hfZm9yd2FyZGVkX3Byb3RvICRvcmlnaW5fcHJvdG9cCiAgICAgICAgXCB7XG4gIGRlZmF1bHQgJGh0dHBfeF9mb3J3YXJkZWRfcHJvdG87XG4gICcnICRzY2hlbWU7XG59XG5zZXJ2ZXIge1xuICBsaXN0ZW5cCiAgICAgICAgXCA4MDtcbiAgY2xpZW50X2JvZHlfYnVmZmVyX3NpemUgNTEyaztcbiAgY2xpZW50X21heF9ib2R5X3NpemUgMTBtO1xuICBwcm94eV9idWZmZXJfc2l6ZVwKICAgICAgICBcIDY0aztcbiAgcHJveHlfYnVmZmVycyAzMiA2NGs7XG4gIHByb3h5X2J1c3lfYnVmZmVyc19zaXplIDEyOGs7XG4gIHByb3h5X21heF90ZW1wX2ZpbGVfc2l6ZVwKICAgICAgICBcIDIwNDhtO1xuICBwcm94eV9idWZmZXJpbmcgb247XG4gIHByb3h5X2Nvbm5lY3RfdGltZW91dCAxMjBzO1xuICBwcm94eV9yZWFkX3RpbWVvdXRcCiAgICAgICAgXCAzMDBzO1xuICBwcm94eV9zZW5kX3RpbWVvdXQgMzAwcztcbiAgcmVhbF9pcF9oZWFkZXIgWC1Gb3J3YXJkZWQtRm9yO1xuIFwKICAgICAgICBcIHNldF9yZWFsX2lwX2Zyb20gMC4wLjAuMC8wO1xuICByZWFsX2lwX3JlY3Vyc2l2ZSBvbjtcbiAgYWRkX2hlYWRlciBYLVhTUy1Qcm90ZWN0aW9uXAogICAgICAgIFwgXCIxOyBtb2RlPWJsb2NrXCIgYWx3YXlzO1xuICBhZGRfaGVhZGVyIFgtQ29udGVudC1UeXBlLU9wdGlvbnMgXCJub3NuaWZmXCJcCiAgICAgICAgXCBhbHdheXM7XG4gIGFkZF9oZWFkZXIgUmVmZXJyZXItUG9saWN5IFwic2FtZS1vcmlnaW5cIiBhbHdheXM7XG4gIHNlcnZlcl90b2tlbnNcCiAgICAgICAgXCBvZmY7XG4gIGxvY2F0aW9uIH4gXi8obW9ic3xzZXNzaW9ucy1hc3NldHN8ZnJvbnRlbmR8c3RhdGljfHNvdXJjZW1hcHN8aW9zLWltYWdlc3x1eHRlc3RpbmctcmVjb3Jkc3xyZWNvcmRzfHNwb3RzKS9cCiAgICAgICAgXCB7XG4gICAgcHJveHlfc2V0X2hlYWRlciBYLVJlYWwtSVAgJHJlbW90ZV9hZGRyO1xuICAgIHByb3h5X3NldF9oZWFkZXIgWC1Gb3J3YXJkZWQtRm9yXAogICAgICAgIFwgJHByb3h5X2FkZF94X2ZvcndhcmRlZF9mb3I7XG4gICAgcHJveHlfc2V0X2hlYWRlciBYLUZvcndhcmRlZC1Qcm90byAkc2NoZW1lO1xuXAogICAgICAgIFwgICAgcHJveHlfc2V0X2hlYWRlciBIb3N0ICRodHRwX2hvc3Q7XG4gICAgcHJveHlfY29ubmVjdF90aW1lb3V0IDMwMDtcbiBcCiAgICAgICAgXCAgIHByb3h5X2h0dHBfdmVyc2lvbiAxLjE7XG4gICAgcHJveHlfc2V0X2hlYWRlciBDb25uZWN0aW9uIFwiXCI7XG4gICAgY2h1bmtlZF90cmFuc2Zlcl9lbmNvZGluZ1wKICAgICAgICBcIG9mZjtcbiAgICBwcm94eV9wYXNzIGh0dHA6Ly9taW5pby5kYi5zdmMuY2x1c3Rlci5sb2NhbDo5MDAwO1xuICB9XG4gIGxvY2F0aW9uXAogICAgICAgIFwgL21pbmlvLyB7XG4gICAgcHJveHlfaHR0cF92ZXJzaW9uIDEuMTtcbiAgICBwcm94eV9zZXRfaGVhZGVyIFVwZ3JhZGUgJGh0dHBfdXBncmFkZTtcblwKICAgICAgICBcICAgIHByb3h5X3NldF9oZWFkZXIgQ29ubmVjdGlvbiBcIlVwZ3JhZGVcIjtcbiAgICBwcm94eV9zZXRfaGVhZGVyIEhvc3QgJGhvc3Q7XG5cCiAgICAgICAgXCAgICBwcm94eV9wYXNzIGh0dHA6Ly9taW5pby5kYi5zdmMuY2x1c3Rlci5sb2NhbDo5MDAwO1xuICB9XG4gIGxvY2F0aW9uIC9pbmdlc3QvXAogICAgICAgIFwge1xuICAgIHJld3JpdGUgXi9pbmdlc3QvKC4qKSAvJDEgYnJlYWs7XG4gICAgcHJveHlfaHR0cF92ZXJzaW9uIDEuMTtcbiBcCiAgICAgICAgXCAgIHByb3h5X3NldF9oZWFkZXIgVXBncmFkZSAkaHR0cF91cGdyYWRlO1xuICAgIHByb3h5X3NldF9oZWFkZXIgQ29ubmVjdGlvblwKICAgICAgICBcIFwiVXBncmFkZVwiO1xuICAgIHByb3h5X3NldF9oZWFkZXIgWC1Gb3J3YXJkZWQtRm9yICRyZWFsX2lwO1xuICAgIHByb3h5X3NldF9oZWFkZXJcCiAgICAgICAgXCBYLUZvcndhcmRlZC1Ib3N0ICRob3N0O1xuICAgIHByb3h5X3NldF9oZWFkZXIgWC1SZWFsLUlQICRyZWFsX2lwO1xuICAgIHByb3h5X3NldF9oZWFkZXJcCiAgICAgICAgXCBIb3N0ICRob3N0O1xuICAgIHByb3h5X3Bhc3MgaHR0cDovL2h0dHAtb3BlbnJlcGxheS5hcHAuc3ZjLmNsdXN0ZXIubG9jYWw6ODA4MDtcblwKICAgICAgICBcICAgIHByb3h5X3JlYWRfdGltZW91dCAzMDBzO1xuICAgIHByb3h5X2Nvbm5lY3RfdGltZW91dCAxMjBzO1xuICAgIHByb3h5X3NlbmRfdGltZW91dFwKICAgICAgICBcIDMwMHM7XG4gICAgYWRkX2hlYWRlciAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJyAnKicgYWx3YXlzO1xuICAgIGFkZF9oZWFkZXJcCiAgICAgICAgXCAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcycgJ1BPU1QnIGFsd2F5cztcbiAgICBhZGRfaGVhZGVyICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJ1wKICAgICAgICBcICdDb250ZW50LVR5cGUsQXV0aG9yaXphdGlvbixDb250ZW50LUVuY29kaW5nJyBhbHdheXM7XG4gICAgYWRkX2hlYWRlciAnQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMnXAogICAgICAgIFwgJ0NvbnRlbnQtTGVuZ3RoJyBhbHdheXM7XG4gIH1cbiAgbG9jYXRpb24gL2ludGVncmF0aW9ucy8ge1xuICAgIHJld3JpdGVcCiAgICAgICAgXCBeL2ludGVncmF0aW9ucy8oLiopIC8kMSBicmVhaztcbiAgICBwcm94eV9odHRwX3ZlcnNpb24gMS4xO1xuICAgIHByb3h5X3NldF9oZWFkZXJcCiAgICAgICAgXCBVcGdyYWRlICRodHRwX3VwZ3JhZGU7XG4gICAgcHJveHlfc2V0X2hlYWRlciBDb25uZWN0aW9uIFwiVXBncmFkZVwiO1xuIFwKICAgICAgICBcICAgcHJveHlfc2V0X2hlYWRlciBYLUZvcndhcmRlZC1Gb3IgJHJlYWxfaXA7XG4gICAgcHJveHlfc2V0X2hlYWRlciBYLUZvcndhcmRlZC1Ib3N0XAogICAgICAgIFwgJGhvc3Q7XG4gICAgcHJveHlfc2V0X2hlYWRlciBYLVJlYWwtSVAgJHJlYWxfaXA7XG4gICAgcHJveHlfc2V0X2hlYWRlciBIb3N0XAogICAgICAgIFwgJGhvc3Q7XG4gICAgcHJveHlfcGFzcyBodHRwOi8vaW50ZWdyYXRpb25zLW9wZW5yZXBsYXkuYXBwLnN2Yy5jbHVzdGVyLmxvY2FsOjgwODA7XG5cCiAgICAgICAgXCAgICBwcm94eV9yZWFkX3RpbWVvdXQgMzAwcztcbiAgICBwcm94eV9jb25uZWN0X3RpbWVvdXQgMTIwcztcbiAgICBwcm94eV9zZW5kX3RpbWVvdXRcCiAgICAgICAgXCAzMDBzO1xuICAgIGFkZF9oZWFkZXIgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicgJyonIGFsd2F5cztcbiAgICBhZGRfaGVhZGVyXAogICAgICAgIFwgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnICdQT1NULFBBVENILE9QVElPTlMsREVMRVRFJyBhbHdheXM7XG4gICBcCiAgICAgICAgXCBhZGRfaGVhZGVyICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJyAnQ29udGVudC1UeXBlLEF1dGhvcml6YXRpb24sQ29udGVudC1FbmNvZGluZyxYLU9wZW5yZXBsYXktQmF0Y2gnXAogICAgICAgIFwgYWx3YXlzO1xuICAgIGFkZF9oZWFkZXIgJ0FjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzJyAnQ29udGVudC1MZW5ndGgnXAogICAgICAgIFwgYWx3YXlzO1xuICB9XG4gIGxvY2F0aW9uIC92Mi9hcGkvIHtcbiAgICByZXdyaXRlIF4vdjIvYXBpLyguKikgLyQxIGJyZWFrO1xuXAogICAgICAgIFwgICAgcHJveHlfaHR0cF92ZXJzaW9uIDEuMTtcbiAgICBwcm94eV9zZXRfaGVhZGVyIFVwZ3JhZGUgJGh0dHBfdXBncmFkZTtcblwKICAgICAgICBcICAgIHByb3h5X3NldF9oZWFkZXIgQ29ubmVjdGlvbiBcIlVwZ3JhZGVcIjtcbiAgICBwcm94eV9zZXRfaGVhZGVyIEhvc3QgJGhvc3Q7XG5cCiAgICAgICAgXCAgICBwcm94eV9zZXRfaGVhZGVyIFgtRm9yd2FyZGVkLVByb3RvICRvcmlnaW5fcHJvdG87XG4gICAgcHJveHlfc2V0X2hlYWRlclwKICAgICAgICBcIFgtRm9yd2FyZGVkLUZvciAkcmVhbF9pcDtcbiAgICBwcm94eV9zZXRfaGVhZGVyIFgtUmVhbC1JUCAkcmVhbF9pcDtcbiAgXAogICAgICAgIFwgIHByb3h5X3Bhc3MgaHR0cDovL2FwaS1vcGVucmVwbGF5LmFwcC5zdmMuY2x1c3Rlci5sb2NhbDo4MDgwO1xuICAgIHByb3h5X3JlYWRfdGltZW91dFwKICAgICAgICBcIDMwMHM7XG4gICAgcHJveHlfY29ubmVjdF90aW1lb3V0IDEyMHM7XG4gICAgcHJveHlfc2VuZF90aW1lb3V0IDMwMHM7XG4gXAogICAgICAgIFwgICBhZGRfaGVhZGVyICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nICckaHR0cF9vcmlnaW4nIGFsd2F5cztcbiAgICBhZGRfaGVhZGVyXAogICAgICAgIFwgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnICdQT1NULCBHRVQsIFBBVENILCBERUxFVEUsIE9QVElPTlMsIFBVVCdcCiAgICAgICAgXCBhbHdheXM7XG4gICAgYWRkX2hlYWRlciAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycgJ0NvbnRlbnQtVHlwZSwgQXV0aG9yaXphdGlvbixcCiAgICAgICAgXCBDb250ZW50LUVuY29kaW5nLCBYLU9wZW5yZXBsYXktQmF0Y2gnIGFsd2F5cztcbiAgICBhZGRfaGVhZGVyICdBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycydcCiAgICAgICAgXCAnQ29udGVudC1MZW5ndGgnIGFsd2F5cztcbiAgICBhZGRfaGVhZGVyICdBY2Nlc3MtQ29udHJvbC1NYXgtQWdlJyAnMzYwMCdcCiAgICAgICAgXCBhbHdheXM7XG4gICAgYWRkX2hlYWRlciAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnICd0cnVlJyBhbHdheXM7XG5cCiAgICAgICAgXCAgICBpZiAoJHJlcXVlc3RfbWV0aG9kID0gJ09QVElPTlMnKSB7XG4gICAgICBhZGRfaGVhZGVyICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nXAogICAgICAgIFwgJyRodHRwX29yaWdpbicgYWx3YXlzO1xuICAgICAgYWRkX2hlYWRlciAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcydcCiAgICAgICAgXCAnUE9TVCwgR0VULCBQQVRDSCwgREVMRVRFLCBPUFRJT05TLCBQVVQnIGFsd2F5cztcbiAgICAgIGFkZF9oZWFkZXIgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnXAogICAgICAgIFwgJ0NvbnRlbnQtVHlwZSwgQXV0aG9yaXphdGlvbiwgQ29udGVudC1FbmNvZGluZywgWC1PcGVucmVwbGF5LUJhdGNoJyBhbHdheXM7XG5cCiAgICAgICAgXCAgICAgIGFkZF9oZWFkZXIgJ0FjY2Vzcy1Db250cm9sLU1heC1BZ2UnICczNjAwJyBhbHdheXM7XG4gICAgICBhZGRfaGVhZGVyXAogICAgICAgIFwgJ0NvbnRlbnQtTGVuZ3RoJyAnMCc7XG4gICAgICBhZGRfaGVhZGVyICdDb250ZW50LVR5cGUnICd0ZXh0L3BsYWluJztcbiBcCiAgICAgICAgXCAgICAgcmV0dXJuIDIwNDtcbiAgICB9XG4gIH1cbiAgbG9jYXRpb24gL2FwaS8ge1xuICAgIHJld3JpdGUgXi9hcGkvKC4qKVwKICAgICAgICBcIC8kMSBicmVhaztcbiAgICBwcm94eV9odHRwX3ZlcnNpb24gMS4xO1xuICAgIHByb3h5X3NldF9oZWFkZXIgVXBncmFkZSAkaHR0cF91cGdyYWRlO1xuXAogICAgICAgIFwgICAgcHJveHlfc2V0X2hlYWRlciBDb25uZWN0aW9uIFwiVXBncmFkZVwiO1xuICAgIHByb3h5X3NldF9oZWFkZXIgSG9zdCAkaG9zdDtcblwKICAgICAgICBcICAgIHByb3h5X3NldF9oZWFkZXIgWC1Gb3J3YXJkZWQtUHJvdG8gJG9yaWdpbl9wcm90bztcbiAgICBwcm94eV9zZXRfaGVhZGVyXAogICAgICAgIFwgWC1Gb3J3YXJkZWQtRm9yICRyZWFsX2lwO1xuICAgIHByb3h5X3Bhc3MgaHR0cDovL2NoYWxpY2Utb3BlbnJlcGxheS5hcHAuc3ZjLmNsdXN0ZXIubG9jYWw6ODAwMDtcblwKICAgICAgICBcICAgIGFkZF9oZWFkZXIgQ2FjaGUtQ29udHJvbCBcIm5vLXN0b3JlLG5vLWNhY2hlXCIgYWx3YXlzO1xuICAgIGFkZF9oZWFkZXJcCiAgICAgICAgXCBQcmFnbWEgXCJuby1jYWNoZVwiIGFsd2F5cztcbiAgfVxuICBsb2NhdGlvbiAvc3BvdC8ge1xuICAgIHJld3JpdGUgXi9zcG90LyguKilcCiAgICAgICAgXCAvJDEgYnJlYWs7XG4gICAgcHJveHlfaHR0cF92ZXJzaW9uIDEuMTtcbiAgICBwcm94eV9zZXRfaGVhZGVyIFVwZ3JhZGUgJGh0dHBfdXBncmFkZTtcblwKICAgICAgICBcICAgIHByb3h5X3NldF9oZWFkZXIgQ29ubmVjdGlvbiBcIlVwZ3JhZGVcIjtcbiAgICBwcm94eV9zZXRfaGVhZGVyIEhvc3QgJGhvc3Q7XG5cCiAgICAgICAgXCAgICBwcm94eV9zZXRfaGVhZGVyIFgtRm9yd2FyZGVkLVByb3RvICRvcmlnaW5fcHJvdG87XG4gICAgcHJveHlfc2V0X2hlYWRlclwKICAgICAgICBcIFgtRm9yd2FyZGVkLUZvciAkcmVhbF9pcDtcbiAgICBwcm94eV9zZXRfaGVhZGVyIFgtUmVhbC1JUCAkcmVhbF9pcDtcbiAgXAogICAgICAgIFwgIHByb3h5X3Bhc3MgaHR0cDovL3Nwb3Qtb3BlbnJlcGxheS5hcHAuc3ZjLmNsdXN0ZXIubG9jYWw6ODA4MDtcbiAgICBwcm94eV9yZWFkX3RpbWVvdXRcCiAgICAgICAgXCAzMDBzO1xuICAgIHByb3h5X2Nvbm5lY3RfdGltZW91dCAxMjBzO1xuICAgIHByb3h5X3NlbmRfdGltZW91dCAzMDBzO1xuIFwKICAgICAgICBcICAgYWRkX2hlYWRlciAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJyAnKicgYWx3YXlzO1xuICAgIGFkZF9oZWFkZXIgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnXAogICAgICAgIFwgJ1BPU1QsIFBBVENILCBERUxFVEUsIE9QVElPTlMnIGFsd2F5cztcbiAgICBhZGRfaGVhZGVyICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJ1wKICAgICAgICBcICdDb250ZW50LVR5cGUsIEF1dGhvcml6YXRpb24sIENvbnRlbnQtRW5jb2RpbmcsIFgtT3BlbnJlcGxheS1CYXRjaCcgYWx3YXlzO1xuXAogICAgICAgIFwgICAgYWRkX2hlYWRlciAnQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMnICdDb250ZW50LUxlbmd0aCcgYWx3YXlzO1xuXAogICAgICAgIFwgICAgaWYgKCRyZXF1ZXN0X21ldGhvZCA9ICdPUFRJT05TJykge1xuICAgICAgYWRkX2hlYWRlciAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJ1wKICAgICAgICBcICcqJyBhbHdheXM7XG4gICAgICBhZGRfaGVhZGVyICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJyAnUE9TVCwgUEFUQ0gsXAogICAgICAgIFwgREVMRVRFLCBPUFRJT05TJyBhbHdheXM7XG4gICAgICBhZGRfaGVhZGVyICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJ1wKICAgICAgICBcICdDb250ZW50LVR5cGUsIEF1dGhvcml6YXRpb24sIENvbnRlbnQtRW5jb2RpbmcsIFgtT3BlbnJlcGxheS1CYXRjaCcgYWx3YXlzO1xuXAogICAgICAgIFwgICAgICBhZGRfaGVhZGVyICdBY2Nlc3MtQ29udHJvbC1NYXgtQWdlJyAnMzYwMCc7XG4gICAgICBhZGRfaGVhZGVyICdDb250ZW50LVR5cGUnXAogICAgICAgIFwgJ3RleHQvcGxhaW4gY2hhcnNldD1VVEYtOCc7XG4gICAgICBhZGRfaGVhZGVyICdDb250ZW50LUxlbmd0aCcgMDtcbiAgICBcCiAgICAgICAgXCAgcmV0dXJuIDIwNDtcbiAgICB9XG4gIH1cbiAgbG9jYXRpb24gL2Fzc2lzdC8ge1xuICAgIHJld3JpdGUgXi9hc3Npc3QvKC4qKVwKICAgICAgICBcIC8kMSBicmVhaztcbiAgICBwcm94eV9odHRwX3ZlcnNpb24gMS4xO1xuICAgIHByb3h5X3NldF9oZWFkZXIgVXBncmFkZSAkaHR0cF91cGdyYWRlO1xuXAogICAgICAgIFwgICAgcHJveHlfc2V0X2hlYWRlciBDb25uZWN0aW9uICRjb25uZWN0aW9uX3VwZ3JhZGU7XG4gICAgcHJveHlfc2V0X2hlYWRlclwKICAgICAgICBcIEhvc3QgJGhvc3Q7XG4gICAgcHJveHlfc2V0X2hlYWRlciBYLVJlYWwtSVAgJHJlYWxfaXA7XG4gICAgcHJveHlfc2V0X2hlYWRlclwKICAgICAgICBcIFgtRm9yd2FyZGVkLUZvciAkcHJveHlfYWRkX3hfZm9yd2FyZGVkX2ZvcjtcbiAgICBwcm94eV9zZXRfaGVhZGVyIFgtRm9yd2FyZGVkLVByb3RvXAogICAgICAgIFwgJG9yaWdpbl9wcm90bztcbiAgICBwcm94eV9yZWFkX3RpbWVvdXQgMzYwMHM7XG4gICAgcHJveHlfc2VuZF90aW1lb3V0IDM2MDBzO1xuXAogICAgICAgIFwgICAgcHJveHlfY29ubmVjdF90aW1lb3V0IDc1cztcbiAgICBwcm94eV9idWZmZXJpbmcgb2ZmO1xuICAgIHByb3h5X3Bhc3NcCiAgICAgICAgXCBodHRwOi8vYXNzaXN0LW9wZW5yZXBsYXkuYXBwLnN2Yy5jbHVzdGVyLmxvY2FsOjkwMDE7XG4gIH1cbiAgbG9jYXRpb24gL3dzLWFzc2lzdC9cCiAgICAgICAgXCB7XG4gICAgcmV3cml0ZSBeL3dzLWFzc2lzdC8oLiopIC8kMSBicmVhaztcbiAgICBwcm94eV9odHRwX3ZlcnNpb24gMS4xO1xuXAogICAgICAgIFwgICAgcHJveHlfc2V0X2hlYWRlciBVcGdyYWRlICRodHRwX3VwZ3JhZGU7XG4gICAgcHJveHlfc2V0X2hlYWRlciBDb25uZWN0aW9uXAogICAgICAgIFwgJGNvbm5lY3Rpb25fdXBncmFkZTtcbiAgICBwcm94eV9zZXRfaGVhZGVyIEhvc3QgJGhvc3Q7XG4gICAgcHJveHlfc2V0X2hlYWRlclwKICAgICAgICBcIFgtUmVhbC1JUCAkcmVhbF9pcDtcbiAgICBwcm94eV9zZXRfaGVhZGVyIFgtRm9yd2FyZGVkLUZvciAkcHJveHlfYWRkX3hfZm9yd2FyZGVkX2ZvcjtcblwKICAgICAgICBcICAgIHByb3h5X3NldF9oZWFkZXIgWC1Gb3J3YXJkZWQtUHJvdG8gJG9yaWdpbl9wcm90bztcbiAgICBwcm94eV9yZWFkX3RpbWVvdXRcCiAgICAgICAgXCAzNjAwcztcbiAgICBwcm94eV9zZW5kX3RpbWVvdXQgMzYwMHM7XG4gICAgcHJveHlfY29ubmVjdF90aW1lb3V0IDEyMHM7XG5cCiAgICAgICAgXCAgICBwcm94eV9idWZmZXJpbmcgb2ZmO1xuICAgIGFkZF9oZWFkZXIgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicgJyRodHRwX29yaWdpbidcCiAgICAgICAgXCBhbHdheXM7XG4gICAgYWRkX2hlYWRlciAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcycgJ0dFVCwgT1BUSU9OUycgYWx3YXlzO1xuXAogICAgICAgIFwgICAgYWRkX2hlYWRlciAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycgJ3Nlc3Npb25pZCwgQ29udGVudC1UeXBlLCBBdXRob3JpemF0aW9uJ1wKICAgICAgICBcIGFsd2F5cztcbiAgICBhZGRfaGVhZGVyICdBY2Nlc3MtQ29udHJvbC1NYXgtQWdlJyAnMTcyODAwMCcgYWx3YXlzO1xuICAgXAogICAgICAgIFwgYWRkX2hlYWRlciAnWC1EZWJ1Zy1TZXNzaW9uLUlEJyAkc2Vzc2lvbmlkIGFsd2F5cztcbiAgICBwcm94eV9wYXNzIGh0dHA6Ly9hc3Npc3Qtb3BlbnJlcGxheS5hcHAuc3ZjLmNsdXN0ZXIubG9jYWw6OTAwMTtcblwKICAgICAgICBcICB9XG4gIGxvY2F0aW9uIC9zY3JpcHQvIHtcbiAgICByZXdyaXRlIF4vc2NyaXB0LyguKikvb3BlbnJlcGxheSguKikuanMkXAogICAgICAgIFwgLyQxL29wZW5yZXBsYXkkMi5qcyBicmVhaztcbiAgICBwcm94eV9odHRwX3ZlcnNpb24gMS4xO1xuICAgIHByb3h5X3NzbF9wcm90b2NvbHNcCiAgICAgICAgXCBUTFN2MS4yIFRMU3YxLjM7XG4gICAgcHJveHlfc3NsX3NlcnZlcl9uYW1lIG9uO1xuICAgIHByb3h5X3NldF9oZWFkZXIgSG9zdFwKICAgICAgICBcIHN0YXRpYy5vcGVucmVwbGF5LmNvbTtcbiAgICBwcm94eV9wYXNzIGh0dHBzOi8vc3RhdGljLm9wZW5yZXBsYXkuY29tO1xuXAogICAgICAgIFwgICAgcHJveHlfcmVhZF90aW1lb3V0IDMwMHM7XG4gICAgcHJveHlfY29ubmVjdF90aW1lb3V0IDEyMHM7XG4gICAgcHJveHlfc2VuZF90aW1lb3V0XAogICAgICAgIFwgMzAwcztcbiAgICBwcm94eV9idWZmZXJpbmcgb247XG4gICAgY2xpZW50X21heF9ib2R5X3NpemUgOG07XG4gIH1cbiAgbG9jYXRpb25cCiAgICAgICAgXCAvIHtcbiAgICBpbmRleCAvaW5kZXguaHRtbDtcbiAgICByZXdyaXRlIF4oKD8hLihqc3xjc3N8cG5nfHN2Z3xqcGd8d29mZnx3b2ZmMikpLikqJFwKICAgICAgICBcIC9pbmRleC5odG1sIGJyZWFrO1xuICAgIHByb3h5X3NldF9oZWFkZXIgSG9zdCAkaHR0cF9ob3N0O1xuICAgIHByb3h5X3NldF9oZWFkZXJcCiAgICAgICAgXCBYLUZvcndhcmRlZC1Gb3IgJHJlYWxfaXA7XG4gICAgcHJveHlfc2V0X2hlYWRlciBYLUZvcndhcmRlZC1Qcm90byAkb3JpZ2luX3Byb3RvO1xuXAogICAgICAgIFwgICAgcHJveHlfcGFzcyBodHRwOi8vZnJvbnRlbmQtb3BlbnJlcGxheS5hcHAuc3ZjLmNsdXN0ZXIubG9jYWw6ODA4MDtcbiBcCiAgICAgICAgXCAgIHByb3h5X2ludGVyY2VwdF9lcnJvcnMgb247XG4gICAgZXJyb3JfcGFnZSA0MDQgPTIwMCAvaW5kZXguaHRtbDtcbiAgfVxuXAogICAgICAgIH1cbiIKICAgIG5ldHdvcmtzOgogICAgLSBvcGVucmVwbGF5LW5ldAogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgIC0gQ01ECiAgICAgIC0gbmdpbngKICAgICAgLSAtdAogICAgICBpbnRlcnZhbDogMzBzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAzCiAgICAgIHN0YXJ0X3BlcmlvZDogMzBzCiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAp2b2x1bWVzOgogIHBnZGF0YTogbnVsbAogIGNsaWNraG91c2U6IG51bGwKICByZWRpc2RhdGE6IG51bGwKICBtaW5pb2RhdGE6IG51bGwKICBzaGFyZWQtdm9sdW1lOiBudWxsCm5ldHdvcmtzOgogIG9wZW5yZXBsYXktbmV0OiBudWxsCg==", + "tags": [ + "openreplay", + "session-replay", + "analytics", + "monitoring", + "debugging", + "self-hosted", + "privacy" + ], + "category": "analytics", + "logo": "svgs/openreplay.svg", + "minversion": "0.0.0", + "port": "80" } }